/* eslint-disable object-curly-newline */ import type * as Insurance from 'Components/Calculation/Form/Insurance/InsuranceTable/types'; import * as insuranceTableConfig from 'config/tables/insurance-table'; import { makeAutoObservable } from 'mobx'; import type RootStore from 'stores/root'; import Validation from '../validation'; export interface InsuranceTableData { values?: Insurance.RowValues[]; options?: Record; statuses?: Record; } export default class InsuranceTable { root: RootStore; validation: Validation; values: Insurance.RowValues[] = insuranceTableConfig.defaultValues; options: Record = insuranceTableConfig.defaultOptions; statuses: Record = insuranceTableConfig.defaultStatuses; constructor(rootStore: RootStore) { this.root = rootStore; this.validation = new Validation({ err_key: 'ERR_INSURANCE_TABLE', err_title: 'Таблица страхования', }); makeAutoObservable(this); } hydrate = ({ values: initialValues, options: initialOptions, statuses: initialStatuses, }: InsuranceTableData) => { if (initialValues) this.values = initialValues; if (initialOptions) this.options = initialOptions; if (initialStatuses) this.statuses = initialStatuses; }; getRowValue(key: Insurance.Keys, valueName: Insurance.Values) { const rowIndex = this.values.findIndex((x) => x.key === key); return this.values[rowIndex][valueName]; } setRowValues = (key: Insurance.Keys, rowValues: Partial) => { const rowIndex = this.values.findIndex((x) => x.key === key); if (rowIndex >= 0) { this.values[rowIndex] = { ...this.values[rowIndex], ...rowValues }; } }; getRowOptions(key: Insurance.Keys) { return this.options[key]; } setRowOptions = (key: Insurance.Keys, rowOptions: Partial) => { this.options[key] = { ...this.options[key], ...rowOptions }; }; getRowStatuses(key: Insurance.Keys) { return this.statuses[key]; } setRowStatuses = (key: Insurance.Keys, rowStatuses: Partial) => { this.statuses[key] = { ...this.statuses[key], ...rowStatuses }; }; reset = () => { this.values = insuranceTableConfig.defaultValues; this.options = insuranceTableConfig.defaultOptions; this.statuses = insuranceTableConfig.defaultStatuses; this.validation.clearErrors(); }; }