2023-03-14 15:10:30 +03:00

97 lines
2.6 KiB
TypeScript

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<number>;
private statuses: IObservableArray<Status>;
private overridedStatus: IObservableValue<Status | undefined>;
constructor(rootStore: RootStore) {
this.validation = new Validation({
err_key: 'ERR_PAYMENTS_TABLE',
err_title: 'Таблица платежей',
});
this.values = observable<number>([]);
this.statuses = observable<Status>([]);
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<ValidationParams, 'key'>) => {
this.validation.removeError(params);
};
public reset = () => {
this.values.clear();
this.statuses.clear();
this.validation.clearErrors();
};
}