Calculation/InsuranceTable: add statuses
This commit is contained in:
parent
1295b94b25
commit
824e10dcba
@ -1,6 +1,6 @@
|
||||
import { observer } from 'mobx-react-lite';
|
||||
import type { ComponentType } from 'react';
|
||||
import { useRowOptions } from 'stores/tables/insurance/hooks';
|
||||
import { useRowOptions, useRowStatuses } from 'stores/tables/insurance/hooks';
|
||||
import { useInsuranceValue } from './hooks';
|
||||
import type { Keys } from './types';
|
||||
|
||||
@ -8,15 +8,25 @@ export function buildOptionComponent<T>(key: string, Component: ComponentType<T>
|
||||
return observer((props: T) => {
|
||||
const [value, setValue] = useInsuranceValue(key, valueName);
|
||||
const options = useRowOptions(valueName);
|
||||
const statuses = useRowStatuses(key);
|
||||
|
||||
return <Component value={value} options={options} setValue={setValue} {...props} />;
|
||||
return (
|
||||
<Component
|
||||
value={value}
|
||||
options={options}
|
||||
setValue={setValue}
|
||||
status={statuses[valueName]}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
export function buildValueComponent<T>(key: string, Component: ComponentType<T>, valueName: Keys) {
|
||||
return observer((props: T) => {
|
||||
const [value, setValue] = useInsuranceValue(key, valueName);
|
||||
const statuses = useRowStatuses(key);
|
||||
|
||||
return <Component value={value} setValue={setValue} {...props} />;
|
||||
return <Component value={value} setValue={setValue} status={statuses[valueName]} {...props} />;
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import type { BaseOption } from 'Elements/types';
|
||||
import type { BaseOption, Status } from 'Elements/types';
|
||||
|
||||
export type Row = {
|
||||
key: string;
|
||||
@ -14,3 +14,7 @@ export type Keys = keyof Row;
|
||||
export type Options = {
|
||||
[Key in keyof Row]?: BaseOption<Row[Key]>[];
|
||||
};
|
||||
|
||||
export type RowStatuses = Omit<Record<Keys, Status>, 'key'> & {
|
||||
key: string;
|
||||
};
|
||||
|
||||
@ -66,3 +66,46 @@ export const defaultRows: Insurance.Row[] = [
|
||||
insTerm: null,
|
||||
},
|
||||
];
|
||||
|
||||
export const defaultStatuses: Insurance.RowStatuses[] = [
|
||||
{
|
||||
key: 'osago',
|
||||
insTerm: 'Disabled',
|
||||
insCost: 'Default',
|
||||
insuranceCompany: 'Default',
|
||||
insured: 'Default',
|
||||
policyType: 'Default',
|
||||
},
|
||||
{
|
||||
key: 'kasko',
|
||||
insTerm: 'Disabled',
|
||||
insCost: 'Default',
|
||||
insuranceCompany: 'Default',
|
||||
insured: 'Default',
|
||||
policyType: 'Default',
|
||||
},
|
||||
{
|
||||
key: 'dgo',
|
||||
insuranceCompany: 'Disabled',
|
||||
insured: 'Disabled',
|
||||
insTerm: 'Disabled',
|
||||
insCost: 'Default',
|
||||
policyType: 'Default',
|
||||
},
|
||||
{
|
||||
key: 'ns',
|
||||
insuranceCompany: 'Disabled',
|
||||
insured: 'Disabled',
|
||||
insTerm: 'Disabled',
|
||||
insCost: 'Default',
|
||||
policyType: 'Default',
|
||||
},
|
||||
{
|
||||
key: 'finGAP',
|
||||
insCost: 'Disabled',
|
||||
insuranceCompany: 'Default',
|
||||
insured: 'Default',
|
||||
insTerm: 'Default',
|
||||
policyType: 'Default',
|
||||
},
|
||||
];
|
||||
|
||||
@ -38,6 +38,7 @@ export const getServerSideProps: GetServerSideProps<PageProps> = async (ctx) =>
|
||||
insurance: {
|
||||
values: insuranceTableConfig.defaultRows,
|
||||
options: insuranceTableConfig.defaultOptions,
|
||||
statuses: insuranceTableConfig.defaultStatuses,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -23,6 +23,7 @@ export function initializeStore(initialData) {
|
||||
_store.$tables.insurance.hydrate({
|
||||
values: tables.insurance.values,
|
||||
options: tables.insurance.options,
|
||||
statuses: tables.insurance.statuses,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,3 +21,11 @@ export function useRowOptions(valueName) {
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
export function useRowStatuses(key) {
|
||||
const { $tables } = useStore();
|
||||
|
||||
const statuses = $tables.insurance.getRowStatuses(key);
|
||||
|
||||
return statuses;
|
||||
}
|
||||
|
||||
@ -7,21 +7,28 @@ import type RootStore from 'stores/root';
|
||||
export interface InsuranceTableData {
|
||||
values: Insurance.Row[];
|
||||
options: Insurance.Options;
|
||||
statuses: Insurance.RowStatuses[];
|
||||
}
|
||||
|
||||
export default class InsuranceTable {
|
||||
root: RootStore;
|
||||
values: Insurance.Row[] = [];
|
||||
options: Insurance.Options = {};
|
||||
statuses: Insurance.RowStatuses[] = [];
|
||||
|
||||
constructor(rootStore: RootStore) {
|
||||
this.root = rootStore;
|
||||
makeAutoObservable(this);
|
||||
}
|
||||
|
||||
hydrate = ({ values: initialValues, options: initialOptions }: InsuranceTableData) => {
|
||||
hydrate = ({
|
||||
values: initialValues,
|
||||
options: initialOptions,
|
||||
statuses: initialStatuses,
|
||||
}: InsuranceTableData) => {
|
||||
this.values = initialValues;
|
||||
this.options = initialOptions;
|
||||
this.statuses = initialStatuses;
|
||||
};
|
||||
|
||||
getRowValue(key: string, valueName: Insurance.Keys) {
|
||||
@ -41,4 +48,18 @@ export default class InsuranceTable {
|
||||
getRowOptions(valueName: Insurance.Keys) {
|
||||
return this.options[valueName];
|
||||
}
|
||||
|
||||
getRowStatuses(key: string) {
|
||||
const rowIndex = this.values.findIndex((x) => x.key === key);
|
||||
|
||||
return this.statuses[rowIndex];
|
||||
}
|
||||
|
||||
setRowStatuses = (key: string, rowStatuses: Insurance.RowStatuses) => {
|
||||
const rowIndex = this.values.findIndex((x) => x.key === key);
|
||||
|
||||
if (rowIndex >= 0) {
|
||||
mergeWith(this.statuses[rowIndex], rowStatuses);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user