import Validation from '../../validation'; import type { ValidationParams } from '../../validation/types'; import type { Row } from './types'; import type RootStore from '@/stores/root'; import type { IObservableArray, IObservableValue } from 'mobx'; import { makeAutoObservable, observable, reaction } from 'mobx'; import type { Status } from 'ui/elements/types'; export default class PaymentsTable { private root: RootStore; public validation: Validation; public values: IObservableArray; private statuses: IObservableArray; private overridedStatus: IObservableValue; constructor(rootStore: RootStore) { this.validation = new Validation({ err_key: 'ERR_PAYMENTS_TABLE', err_title: 'Таблица платежей', }); this.values = observable([]); this.statuses = observable([]); this.overridedStatus = observable.box(undefined); makeAutoObservable(this); this.root = rootStore; /** * Синхронизируем длину массива значений и статусов */ reaction( () => this.values.length, (length) => { this.statuses.length = length; } ); } public getValue(index: number) { return this.values[index]; } public setValue = (index: number, value: number) => { this.values[index] = value; }; public setValues = (values: number[]) => { this.values.replace(values); }; public getStatus(index: number) { return this.overridedStatus.get() ?? this.statuses[index]; } public setStatus = (index: number, status: Status) => { this.statuses[index] = status; }; public overrideStatuses = (status: Status) => { this.overridedStatus.set(status); }; public clearOverridedStatuses = () => { this.overridedStatus.set(undefined); }; public setStatuses = (statuses: Status[]) => { this.statuses.replace(statuses); }; public setRow = (index: number, row: Row) => { this.setValue(index, row.value); this.setStatus(index, row.status); }; public setRows = (rows: Row[]) => { const values = rows.map((row) => row.value); const statuses = rows.map((row) => row.status); this.setValues(values); this.setStatuses(statuses); }; public setError = (params: ValidationParams) => this.validation.setError(params); public removeError = (params: Pick) => { this.validation.removeError(params); }; public reset = () => { this.values.clear(); this.statuses.clear(); this.validation.clearErrors(); }; }