From 9c0b1104f2e957d9dda8a14c76c0a004c96af773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D1=81=D0=BB=D0=B0=D0=B2=20?= =?UTF-8?q?=D0=A7=D0=B8=D0=BA=D0=B0=D0=BB=D0=BA=D0=B8=D0=BD?= Date: Mon, 21 Sep 2020 18:16:34 +0300 Subject: [PATCH] modified filters for Components --- src/client/Elements/Select.jsx | 2 +- .../stores/CalculationStore/Data/values.js | 20 +++++++++++++++++-- src/core/config/initialFilters.ts | 8 ++++++++ src/core/types/Calculation/filters.ts | 3 +++ src/core/types/stores.ts | 9 ++++++++- 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 src/core/config/initialFilters.ts create mode 100644 src/core/types/Calculation/filters.ts diff --git a/src/client/Elements/Select.jsx b/src/client/Elements/Select.jsx index b1e9ea4..17eb48f 100644 --- a/src/client/Elements/Select.jsx +++ b/src/client/Elements/Select.jsx @@ -20,7 +20,7 @@ const Select = ({ value={value} onChange={val => setCurrentValue(val)} > - {options.map((option, i) => { + {(filter ? filter(options) : options).map((option, i) => { if (option) return ( diff --git a/src/client/stores/CalculationStore/Data/values.js b/src/client/stores/CalculationStore/Data/values.js index 932954c..fcce4b9 100644 --- a/src/client/stores/CalculationStore/Data/values.js +++ b/src/client/stores/CalculationStore/Data/values.js @@ -1,3 +1,4 @@ +import initialFilters from 'core/config/initialFilters'; import initialOptions from 'core/config/initialOptions'; import initialStatuses from 'core/config/initialStatuses'; import initialValues from 'core/config/initialValues'; @@ -7,7 +8,7 @@ const valuesData = { statuses: initialStatuses, validations: {}, options: initialOptions, - filters: {}, + filters: initialFilters, }; const valuesActions = { @@ -32,10 +33,25 @@ const valuesActions = { this.validations[elementName] = validation; }, + getOptions(elementName) { + return this.options[elementName]; + }, + setOptions(elementName, options) { + this.options[elementName] = options; + }, applyOptions(options) { this.options = { ...this.options, ...options }; }, + + getFilter(elementName) { + return this.filters[elementName]; + }, + setFilter(elementName, filters) { + this.filters[elementName] = filters; + }, + applyFilters(filters) { + this.filters = { ...this.filters, ...filters }; + }, }; export { valuesData, valuesActions }; - diff --git a/src/core/config/initialFilters.ts b/src/core/config/initialFilters.ts new file mode 100644 index 0000000..33def52 --- /dev/null +++ b/src/core/config/initialFilters.ts @@ -0,0 +1,8 @@ +import { TElementFilter } from 'core/types/Calculation/filters'; +import { TElements } from 'core/types/elements'; + +const initialFilters: TElements = { + selectQuote: options => [], +}; + +export default initialFilters; diff --git a/src/core/types/Calculation/filters.ts b/src/core/types/Calculation/filters.ts new file mode 100644 index 0000000..2c378d3 --- /dev/null +++ b/src/core/types/Calculation/filters.ts @@ -0,0 +1,3 @@ +import { TElementOption } from 'core/types/Calculation/options'; + +export type TElementFilter = (options: TElementOption[]) => TElementOption[]; diff --git a/src/core/types/stores.ts b/src/core/types/stores.ts index b4b984f..2511272 100644 --- a/src/core/types/stores.ts +++ b/src/core/types/stores.ts @@ -8,11 +8,18 @@ import { TValues, ValuesNames } from './values'; import { TElements, ElementsNames } from './elements'; import { TStatuses, Status } from './statuses'; import { TElementOption } from 'core/types/Calculation/options'; +import { TElementFilter } from 'core/types/Calculation/filters'; export interface ICalculationStore { options: TElements; + getOptions: (elementName: ElementsNames) => any; + setOptions: (elementName: ElementsNames, options: TElementOption[]) => void; applyOptions: (options: TElements) => void; - filters: TElements; + + filters: TElements; + getFilter: (elementName: ElementsNames) => any; + setFilter: (elementName: ElementsNames, filter: TElementFilter) => any; + applyFilters: (filters: TElementFilter[]) => void; values: TValues; getValue: (sourceValueName: ValuesNames) => any;