@legalplace/wizardx-core 2.6.4 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/dist/App.js +13 -4
- package/dist/PluginLoader.d.ts +3 -1
- package/dist/PluginLoader.js +12 -0
- package/dist/ThemeLoader.d.ts +2 -2
- package/dist/components/SmartScript.d.ts +2 -2
- package/dist/components/SmartScript.js +2 -0
- package/dist/componentsConnectors/connectBox.d.ts +3 -1
- package/dist/componentsConnectors/connectDocument.d.ts +3 -1
- package/dist/componentsConnectors/connectHeader.d.ts +3 -1
- package/dist/componentsConnectors/connectMetaTitle.d.ts +3 -1
- package/dist/componentsConnectors/connectOption.d.ts +6 -2
- package/dist/componentsConnectors/connectOption.js +1 -1
- package/dist/componentsConnectors/connectPagination.d.ts +3 -1
- package/dist/componentsConnectors/connectPreview.d.ts +3 -1
- package/dist/componentsConnectors/connectProgress.d.ts +3 -1
- package/dist/componentsConnectors/connectRootOption.d.ts +3 -1
- package/dist/componentsConnectors/connectSection.d.ts +3 -1
- package/dist/componentsConnectors/connectSection.js +7 -10
- package/dist/componentsConnectors/connectSummary.d.ts +3 -1
- package/dist/componentsConnectors/connectSummaryItem.d.ts +3 -1
- package/dist/componentsConnectors/connectVariable.d.ts +6 -2
- package/dist/componentsConnectors/connectVariable.js +1 -1
- package/dist/componentsConnectors/connectWizardWrapper.d.ts +3 -1
- package/dist/componentsConnectors/connector/componentConnector.d.ts +5 -1
- package/dist/componentsConnectors/connector/componentConnector.js +43 -4
- package/dist/componentsConnectors/connector/index.d.ts +1 -0
- package/dist/componentsConnectors/connector/index.js +1 -0
- package/dist/componentsConnectors/index.d.ts +17 -0
- package/dist/componentsConnectors/index.js +17 -0
- package/dist/componentsConnectors/library.d.ts +43 -15
- package/dist/helpers/apiEndpoint.d.ts +1 -0
- package/dist/helpers/apiEndpoint.js +4 -0
- package/dist/helpers/index.d.ts +4 -0
- package/dist/helpers/index.js +4 -0
- package/dist/helpers/propsEqualityCheck.d.ts +1 -0
- package/dist/helpers/propsEqualityCheck.js +10 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/useActions.d.ts +2 -0
- package/dist/hooks/useActions.js +4 -0
- package/dist/hooks/useDispatch.d.ts +1 -0
- package/dist/hooks/useDispatch.js +4 -0
- package/dist/hooks/useSelectors.d.ts +2 -0
- package/dist/hooks/useSelectors.js +4 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +13 -0
- package/dist/libs/PathReader.d.ts +10 -6
- package/dist/libs/PathReader.js +47 -28
- package/dist/libs/index.d.ts +5 -0
- package/dist/libs/index.js +5 -0
- package/dist/redux/actions/index.d.ts +9 -0
- package/dist/redux/actions/index.js +9 -0
- package/dist/redux/actions/library.d.ts +59 -63
- package/dist/redux/actions/sagas/index.d.ts +3 -0
- package/dist/redux/actions/sagas/index.js +3 -0
- package/dist/redux/actions/sagas/model.d.ts +1 -5
- package/dist/redux/constants/app.d.ts +2 -0
- package/dist/redux/constants/app.js +2 -0
- package/dist/redux/constants/index.d.ts +8 -0
- package/dist/redux/constants/index.js +8 -0
- package/dist/redux/constants/sagas/index.d.ts +3 -0
- package/dist/redux/constants/sagas/index.js +3 -0
- package/dist/redux/index.d.ts +5 -0
- package/dist/redux/index.js +5 -0
- package/dist/redux/middlewares/conditionsWatcherMiddleware.js +11 -5
- package/dist/redux/middlewares/conditionsWatcherMiddleware.test.js +120 -113
- package/dist/redux/middlewares/paginationWatcherMiddleware.js +2 -2
- package/dist/redux/middlewares/smartscriptMiddleware.js +8 -0
- package/dist/redux/reducers/pluginsStore.d.ts +3 -0
- package/dist/redux/reducers/pluginsStore.js +12 -0
- package/dist/redux/routerHistory.js +2 -2
- package/dist/redux/sagas/fetchModel.js +22 -6
- package/dist/redux/sagas/initInputs.js +6 -7
- package/dist/redux/sagas/saveData.js +2 -0
- package/dist/redux/selectors/app.js +13 -18
- package/dist/redux/selectors/cache.d.ts +17 -0
- package/dist/redux/selectors/cache.js +35 -0
- package/dist/redux/selectors/conditions.js +7 -7
- package/dist/redux/selectors/index.d.ts +8 -0
- package/dist/redux/selectors/index.js +8 -0
- package/dist/redux/selectors/inputs.js +3 -3
- package/dist/redux/selectors/library.d.ts +2 -2
- package/dist/redux/selectors/references.js +26 -26
- package/dist/redux/selectors/selectors.d.ts +2 -2
- package/dist/redux/selectors/selectors.js +19 -8
- package/dist/redux/selectors/selectors.test.js +6 -6
- package/dist/redux/selectors/user.js +5 -5
- package/dist/redux/store.d.ts +1 -1
- package/dist/redux/store.js +12 -4
- package/dist/service/api.manager.d.ts +1 -6
- package/dist/service/index.d.ts +3 -0
- package/dist/service/index.js +3 -0
- package/dist/types/PluginConfig.type.d.ts +57 -0
- package/dist/types/PluginConfig.type.js +1 -0
- package/dist/types/State.type.d.ts +6 -0
- package/dist/types/config.type.d.ts +3 -1
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.js +11 -0
- package/package.json +13 -13
- package/.depcheckrc +0 -1
- package/.eslintignore +0 -2
- package/.eslintrc +0 -5
- package/__mocks__/fileMock.js +0 -1
- package/babel.config.json +0 -3
- package/jest.config.ts +0 -193
- package/setupJest.ts +0 -8
- package/src/App.test.tsx +0 -41
- package/src/App.tsx +0 -152
- package/src/Globals.ts +0 -69
- package/src/Loader.tsx +0 -8
- package/src/PluginLoader.test.tsx +0 -70
- package/src/PluginLoader.tsx +0 -407
- package/src/Shimmer.tsx +0 -108
- package/src/ThemeLoader.test.tsx +0 -82
- package/src/ThemeLoader.tsx +0 -95
- package/src/components/PluginRoute.tsx +0 -48
- package/src/components/SmartScript.tsx +0 -166
- package/src/components/UserLocked/UserLockedComponent.tsx +0 -33
- package/src/components/View.test.tsx +0 -110
- package/src/components/View.tsx +0 -114
- package/src/componentsConnectors/connectBox.test.tsx +0 -226
- package/src/componentsConnectors/connectBox.tsx +0 -70
- package/src/componentsConnectors/connectDocument.test.tsx +0 -108
- package/src/componentsConnectors/connectDocument.tsx +0 -64
- package/src/componentsConnectors/connectHeader.tsx +0 -21
- package/src/componentsConnectors/connectMetaTitle.test.tsx +0 -40
- package/src/componentsConnectors/connectMetaTitle.tsx +0 -8
- package/src/componentsConnectors/connectOption.tsx +0 -222
- package/src/componentsConnectors/connectPagination.tsx +0 -102
- package/src/componentsConnectors/connectPreview.tsx +0 -5
- package/src/componentsConnectors/connectProgress.tsx +0 -59
- package/src/componentsConnectors/connectRootOption.tsx +0 -95
- package/src/componentsConnectors/connectSection.tsx +0 -79
- package/src/componentsConnectors/connectSummary.tsx +0 -21
- package/src/componentsConnectors/connectSummaryItem.tsx +0 -102
- package/src/componentsConnectors/connectTermsheet.tsx +0 -359
- package/src/componentsConnectors/connectVariable.tsx +0 -191
- package/src/componentsConnectors/connectWizardWrapper.tsx +0 -30
- package/src/componentsConnectors/connector/componentConnector.tsx +0 -219
- package/src/componentsConnectors/library.ts +0 -35
- package/src/config.test.ts +0 -63
- package/src/config.ts +0 -11
- package/src/constants/emailValidation.ts +0 -2
- package/src/constants/phoneValidation.ts +0 -4
- package/src/definitions/path.join.d.ts +0 -4
- package/src/helpers/outputsParsing.ts +0 -412
- package/src/helpers/preloadTheme.ts +0 -17
- package/src/helpers/scriptsLoader.ts +0 -20
- package/src/hooks/usePrevious.ts +0 -9
- package/src/libs/ConditionsInitiator.ts +0 -164
- package/src/libs/ConditionsRunner/DataPopulator.ts +0 -266
- package/src/libs/ConditionsRunner.ts +0 -454
- package/src/libs/DocumentsOutputs.ts +0 -171
- package/src/libs/Eval/EvalBase.ts +0 -116
- package/src/libs/Eval/EvalFunctions.ts +0 -724
- package/src/libs/Eval/NumbersToLetters.ts +0 -185
- package/src/libs/EvalVariable.ts +0 -265
- package/src/libs/EventsTracking.ts +0 -250
- package/src/libs/InputsInitiator.ts +0 -136
- package/src/libs/NumAuto.test.ts +0 -55
- package/src/libs/NumAuto.ts +0 -56
- package/src/libs/OvcConverter.ts +0 -285
- package/src/libs/PathReader.ts +0 -272
- package/src/libs/SectionValidity.test.ts +0 -146
- package/src/libs/SectionValidity.ts +0 -110
- package/src/libs/SmartScriptStore.ts +0 -492
- package/src/misc/test_model.ts +0 -14603
- package/src/misc/test_models/connectDocumen.testmodel.json +0 -178
- package/src/misc/test_models/setDefaults.testmodel.json +0 -279
- package/src/misc/test_models/testmodel.json +0 -1
- package/src/polyfills/index.ts +0 -5
- package/src/polyfills/objectValues.ts +0 -4
- package/src/polyfills/prepend.ts +0 -31
- package/src/polyfills/stringRepeat.ts +0 -44
- package/src/redux/actions/app.test.ts +0 -123
- package/src/redux/actions/app.ts +0 -249
- package/src/redux/actions/conditions.test.ts +0 -84
- package/src/redux/actions/conditions.ts +0 -135
- package/src/redux/actions/inputs.test.ts +0 -85
- package/src/redux/actions/inputs.ts +0 -111
- package/src/redux/actions/library.ts +0 -23
- package/src/redux/actions/mandatories.ts +0 -98
- package/src/redux/actions/references.test.ts +0 -48
- package/src/redux/actions/references.ts +0 -37
- package/src/redux/actions/sagas/data.test.ts +0 -11
- package/src/redux/actions/sagas/data.ts +0 -18
- package/src/redux/actions/sagas/model.test.ts +0 -14
- package/src/redux/actions/sagas/model.ts +0 -48
- package/src/redux/actions/sagas/user.ts +0 -25
- package/src/redux/actions/smartscript.ts +0 -55
- package/src/redux/actions/user.test.ts +0 -18
- package/src/redux/actions/user.ts +0 -41
- package/src/redux/constants/app.ts +0 -36
- package/src/redux/constants/conditions.ts +0 -25
- package/src/redux/constants/inputs.ts +0 -15
- package/src/redux/constants/mandatories.ts +0 -11
- package/src/redux/constants/references.ts +0 -7
- package/src/redux/constants/sagas/data.ts +0 -1
- package/src/redux/constants/sagas/model.ts +0 -2
- package/src/redux/constants/sagas/user.ts +0 -2
- package/src/redux/constants/smartscript.ts +0 -9
- package/src/redux/constants/user.ts +0 -6
- package/src/redux/listeners/subscriber.test.ts +0 -45
- package/src/redux/listeners/subscriber.ts +0 -29
- package/src/redux/middlewares/conditionsWatcherMiddleware.test.ts +0 -370
- package/src/redux/middlewares/conditionsWatcherMiddleware.ts +0 -321
- package/src/redux/middlewares/evaluationsWatcherMiddleware.test.ts +0 -323
- package/src/redux/middlewares/evaluationsWatcherMiddleware.ts +0 -250
- package/src/redux/middlewares/mandatoriesWatcherMiddleware.ts +0 -473
- package/src/redux/middlewares/multiplesActionsMiddleware.test.ts +0 -230
- package/src/redux/middlewares/multiplesActionsMiddleware.ts +0 -121
- package/src/redux/middlewares/paginationWatcherMiddleware.ts +0 -251
- package/src/redux/middlewares/pluginsHookMiddleware.ts +0 -24
- package/src/redux/middlewares/prefillerWatcherMiddleware.test.ts +0 -118
- package/src/redux/middlewares/prefillerWatcherMiddleware.ts +0 -462
- package/src/redux/middlewares/smartscriptMiddleware.ts +0 -228
- package/src/redux/middlewares/thirdpartyScriptsMiddleware.ts +0 -41
- package/src/redux/reducers/app/customizations/initCustomizationAutoDefault.ts +0 -16
- package/src/redux/reducers/app/customizations/initCustomizationMeta.ts +0 -16
- package/src/redux/reducers/app/instance/initInstance.ts +0 -29
- package/src/redux/reducers/app/instance/setDataStatus.ts +0 -16
- package/src/redux/reducers/app/instance/updateInstance.ts +0 -30
- package/src/redux/reducers/app/instance/updateInstancePaid.ts +0 -20
- package/src/redux/reducers/app/instance.test.ts +0 -106
- package/src/redux/reducers/app/meta/fetchModelFailed.ts +0 -11
- package/src/redux/reducers/app/meta/fetchModelNonBlocking.ts +0 -11
- package/src/redux/reducers/app/meta/fetchModelSucceeded.ts +0 -11
- package/src/redux/reducers/app/meta/fetchModelUnhealthy.ts +0 -18
- package/src/redux/reducers/app/meta/fetchModelUserLocked.ts +0 -11
- package/src/redux/reducers/app/meta/initMeta.ts +0 -22
- package/src/redux/reducers/app/meta/setModelUuid.ts +0 -17
- package/src/redux/reducers/app/meta.test.ts +0 -90
- package/src/redux/reducers/app/pagination/goNextPage.ts +0 -69
- package/src/redux/reducers/app/pagination/goPage.ts +0 -81
- package/src/redux/reducers/app/pagination/goPreviousPage.ts +0 -60
- package/src/redux/reducers/app/pagination/initPagination.ts +0 -46
- package/src/redux/reducers/app/pagination/updateAvailableAppStates.ts +0 -77
- package/src/redux/reducers/app/pagination.test.ts +0 -363
- package/src/redux/reducers/app/wizard/updateAvailableSections.ts +0 -40
- package/src/redux/reducers/app/wizard.test.ts +0 -84
- package/src/redux/reducers/app.test.ts +0 -336
- package/src/redux/reducers/app.ts +0 -150
- package/src/redux/reducers/conditions/addMultipleOccurency.test.ts +0 -131
- package/src/redux/reducers/conditions/addMultipleOccurency.ts +0 -155
- package/src/redux/reducers/conditions/deleteMultipleOccurency.test.ts +0 -95
- package/src/redux/reducers/conditions/deleteMultipleOccurency.ts +0 -141
- package/src/redux/reducers/conditions/initConditions.ts +0 -18
- package/src/redux/reducers/conditions/updateDocumentConditions.test.ts +0 -47
- package/src/redux/reducers/conditions/updateDocumentConditions.ts +0 -21
- package/src/redux/reducers/conditions/updateOptionConditions.ts +0 -24
- package/src/redux/reducers/conditions/updateOptionValidatorCondition.test.ts +0 -50
- package/src/redux/reducers/conditions/updateOptionValidatorCondition.ts +0 -28
- package/src/redux/reducers/conditions/updatePrefillerConditions.ts +0 -29
- package/src/redux/reducers/conditions/updateSectionConditions.ts +0 -28
- package/src/redux/reducers/conditions/updateVariableConditions.ts +0 -25
- package/src/redux/reducers/conditions/updateVariableValidatorCondition.test.ts +0 -50
- package/src/redux/reducers/conditions/updateVariableValidatorCondition.ts +0 -28
- package/src/redux/reducers/conditions.test.ts +0 -241
- package/src/redux/reducers/conditions.ts +0 -68
- package/src/redux/reducers/inputs/addMultipleOccurency.test.ts +0 -117
- package/src/redux/reducers/inputs/addMultipleOccurency.ts +0 -50
- package/src/redux/reducers/inputs/deleteMultipleOccurency.test.ts +0 -70
- package/src/redux/reducers/inputs/deleteMultipleOccurency.ts +0 -50
- package/src/redux/reducers/inputs/initOption.ts +0 -16
- package/src/redux/reducers/inputs/initVariable.ts +0 -16
- package/src/redux/reducers/inputs/updateOptionInput.ts +0 -24
- package/src/redux/reducers/inputs/updateVariableInput.ts +0 -24
- package/src/redux/reducers/inputs.test.ts +0 -221
- package/src/redux/reducers/inputs.ts +0 -51
- package/src/redux/reducers/mandatories/addMultipleOccurency.ts +0 -52
- package/src/redux/reducers/mandatories/deleteMultipleOccurency.ts +0 -55
- package/src/redux/reducers/mandatories/initMandatoryOption.ts +0 -17
- package/src/redux/reducers/mandatories/initMandatoryVariable.ts +0 -17
- package/src/redux/reducers/mandatories/setMandatoryIgnore.ts +0 -17
- package/src/redux/reducers/mandatories/setMandatoryOption.ts +0 -25
- package/src/redux/reducers/mandatories/setMandatorySection.ts +0 -20
- package/src/redux/reducers/mandatories/setMandatoryVariable.ts +0 -24
- package/src/redux/reducers/mandatories.ts +0 -56
- package/src/redux/reducers/references/initReferences.ts +0 -37
- package/src/redux/reducers/references/updateOptionMeta.ts +0 -73
- package/src/redux/reducers/references/updateVariableMeta.ts +0 -72
- package/src/redux/reducers/references.ts +0 -59
- package/src/redux/reducers/smartscript/enableSmartScript.ts +0 -13
- package/src/redux/reducers/smartscript/initSmartScriptTriggers.ts +0 -14
- package/src/redux/reducers/smartscript/updateSmartscriptOptionHidden.ts +0 -30
- package/src/redux/reducers/smartscript/updateSmartscriptVariableHidden.ts +0 -30
- package/src/redux/reducers/smartscript.ts +0 -47
- package/src/redux/reducers/user/initUser.ts +0 -15
- package/src/redux/reducers/user/setUserStatus.ts +0 -13
- package/src/redux/reducers/user/setUserValidToken.ts +0 -13
- package/src/redux/reducers/user.test.ts +0 -51
- package/src/redux/reducers/user.ts +0 -40
- package/src/redux/routerHistore.test.ts +0 -19
- package/src/redux/routerHistory.ts +0 -26
- package/src/redux/sagas/fetchModel.test.ts +0 -76
- package/src/redux/sagas/fetchModel.ts +0 -683
- package/src/redux/sagas/homogeneousRadioInputsSaga.ts +0 -42
- package/src/redux/sagas/initInputs.ts +0 -110
- package/src/redux/sagas/runner.test.ts +0 -12
- package/src/redux/sagas/runner.ts +0 -26
- package/src/redux/sagas/saveData.test.ts +0 -125
- package/src/redux/sagas/saveData.ts +0 -55
- package/src/redux/sagas/setDefaults.test.ts +0 -100
- package/src/redux/sagas/setDefaults.ts +0 -167
- package/src/redux/sagas/setUserEmail.ts +0 -175
- package/src/redux/selectors/app.test.ts +0 -162
- package/src/redux/selectors/app.ts +0 -331
- package/src/redux/selectors/conditions.test.ts +0 -92
- package/src/redux/selectors/conditions.ts +0 -293
- package/src/redux/selectors/inputs.test.ts +0 -72
- package/src/redux/selectors/inputs.ts +0 -76
- package/src/redux/selectors/library.ts +0 -17
- package/src/redux/selectors/mandatories.ts +0 -83
- package/src/redux/selectors/references.test.ts +0 -660
- package/src/redux/selectors/references.ts +0 -413
- package/src/redux/selectors/selectors.test.ts +0 -21
- package/src/redux/selectors/selectors.ts +0 -87
- package/src/redux/selectors/smartscript.ts +0 -30
- package/src/redux/selectors/user.test.ts +0 -39
- package/src/redux/selectors/user.ts +0 -45
- package/src/redux/store.test.ts +0 -22
- package/src/redux/store.ts +0 -100
- package/src/service/api.manager.ts +0 -261
- package/src/service/auth.service.ts +0 -5
- package/src/service/pardot.service.ts +0 -10
- package/src/tests-misc/plugins/jestTestPlugin/after.tsx +0 -5
- package/src/tests-misc/plugins/jestTestPlugin/before.tsx +0 -11
- package/src/tests-misc/plugins/jestTestPlugin/index.ts +0 -11
- package/src/tests-misc/plugins/jestTestPlugin/title.tsx +0 -8
- package/src/tests-misc/themes/jestTestTheme/components/EmailComponent.tsx +0 -5
- package/src/tests-misc/themes/jestTestTheme/components/TermsheetComponent.tsx +0 -5
- package/src/tests-misc/themes/jestTestTheme/components/WizardComponent.tsx +0 -5
- package/src/tests-misc/themes/jestTestTheme/faltyIndex.ts +0 -3
- package/src/tests-misc/themes/jestTestTheme/faltyIndexLoader.ts +0 -1
- package/src/tests-misc/themes/jestTestTheme/index.ts +0 -13
- package/src/types/Actions.type.ts +0 -612
- package/src/types/Components.type.ts +0 -181
- package/src/types/State.type.ts +0 -323
- package/src/types/Termsheet.type.ts +0 -28
- package/src/types/api.type.ts +0 -37
- package/src/types/config.type.ts +0 -55
- package/src/types/env.type.ts +0 -5
- package/src/types/getActions.type.ts +0 -3
- package/src/types/getConnectors.type.ts +0 -5
- package/src/types/getSelectors.type.ts +0 -3
- package/src/wizard-params.ts +0 -56
- package/tsconfig.json +0 -43
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
import { StateType } from "../../types/State.type";
|
|
2
|
-
import { createSelector } from "./selectors";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Warning:
|
|
6
|
-
* All hashKeys for selectors here return static id (they never change)
|
|
7
|
-
* this is because references never change, so it is useless to purge
|
|
8
|
-
* memoization for them
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
export const selectReferences = createSelector(
|
|
12
|
-
(state: StateType) => state.references
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Returns output's reference
|
|
17
|
-
* @param id Option's id
|
|
18
|
-
*/
|
|
19
|
-
// eslint-disable-next-line max-len
|
|
20
|
-
export const selectOutputReference = createSelector(
|
|
21
|
-
(state: StateType, id: number) => {
|
|
22
|
-
if (typeof state.references === "undefined") return undefined;
|
|
23
|
-
return state.references.outputs[id];
|
|
24
|
-
},
|
|
25
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
26
|
-
);
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Returns output's reference
|
|
30
|
-
* @param id Option's id
|
|
31
|
-
*/
|
|
32
|
-
// eslint-disable-next-line max-len
|
|
33
|
-
export const selectBoxReference = createSelector(
|
|
34
|
-
(state: StateType, id: number) => {
|
|
35
|
-
if (state.references.boxes[id] === undefined)
|
|
36
|
-
throw new Error(`Box ${id} does not exist`);
|
|
37
|
-
return state.references.boxes[id];
|
|
38
|
-
},
|
|
39
|
-
() => Math.random()
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
/*
|
|
43
|
-
* |---------------------------------|
|
|
44
|
-
* | Options Selectors |
|
|
45
|
-
* |---------------------------------|
|
|
46
|
-
*/
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Returns whether the option is multiple or not
|
|
50
|
-
* @param id Option's id
|
|
51
|
-
*/
|
|
52
|
-
export const isOptionMultiple = createSelector(
|
|
53
|
-
(state: StateType, id: number) => {
|
|
54
|
-
if (typeof state.references === "undefined") return undefined;
|
|
55
|
-
return state.references.options[id].meta.multiple?.enabled === true;
|
|
56
|
-
},
|
|
57
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Returns option's reference
|
|
62
|
-
* @param id Option's id
|
|
63
|
-
*/
|
|
64
|
-
// eslint-disable-next-line max-len
|
|
65
|
-
export const selectOptionReference = createSelector(
|
|
66
|
-
(state: StateType, id: number) => {
|
|
67
|
-
if (state.references.options[id] === undefined)
|
|
68
|
-
throw new Error(`Option ${id} does not exist`);
|
|
69
|
-
|
|
70
|
-
return state.references.options[id];
|
|
71
|
-
},
|
|
72
|
-
() => Math.random()
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Returns Option's relations
|
|
77
|
-
* @param id Option's id
|
|
78
|
-
*/
|
|
79
|
-
// eslint-disable-next-line max-len
|
|
80
|
-
export const selectOptionRelations = createSelector(
|
|
81
|
-
(state: StateType, id: number) => {
|
|
82
|
-
if (state.references.relations.options[id] === undefined)
|
|
83
|
-
throw new Error(`Option ${id} relations do not exist`);
|
|
84
|
-
return state.references.relations.options[id];
|
|
85
|
-
},
|
|
86
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Returns Section's relations
|
|
91
|
-
* @param id Section's id
|
|
92
|
-
*/
|
|
93
|
-
// eslint-disable-next-line max-len
|
|
94
|
-
export const selectSectionRelations = createSelector(
|
|
95
|
-
(state: StateType, id: number) => {
|
|
96
|
-
if (state.references.relations.sections[id] === undefined)
|
|
97
|
-
throw new Error(`Section ${id} relations do not exist`);
|
|
98
|
-
return state.references.relations.sections[id];
|
|
99
|
-
},
|
|
100
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Returns Option's parents
|
|
105
|
-
* @param id Option's id
|
|
106
|
-
*/
|
|
107
|
-
export const selectOptionParents = createSelector(
|
|
108
|
-
(state: StateType, id: number) => {
|
|
109
|
-
if (state.references.relations.options[id].parents === undefined)
|
|
110
|
-
throw new Error(`Option ${id} parent relations are undefined`);
|
|
111
|
-
|
|
112
|
-
return state.references.relations.options[id].parents;
|
|
113
|
-
},
|
|
114
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Returns Option's siblings for radio options
|
|
119
|
-
* @param id Option's id
|
|
120
|
-
*/
|
|
121
|
-
export const selectRadioSiblings = createSelector(
|
|
122
|
-
(state: StateType, id: number) => {
|
|
123
|
-
if (state.references.relations.options[id] === undefined)
|
|
124
|
-
throw new Error(`Option ${id} relations do not exist`);
|
|
125
|
-
const { radioSiblings } = state.references.relations.options[id];
|
|
126
|
-
return radioSiblings;
|
|
127
|
-
},
|
|
128
|
-
(state, id) => (!state.references ? Math.random() : id)
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
/*
|
|
132
|
-
* |---------------------------------|
|
|
133
|
-
* | Variables Selectors |
|
|
134
|
-
* |---------------------------------|
|
|
135
|
-
*/
|
|
136
|
-
// eslint-disable-next-line max-len
|
|
137
|
-
export const selectVariableReference = createSelector(
|
|
138
|
-
(state: StateType, id: number, noThrow = false) => {
|
|
139
|
-
if (state.references.variables[id] === undefined && noThrow === false)
|
|
140
|
-
throw new Error(`Variable ${id} does not exist`);
|
|
141
|
-
return state.references.variables[id];
|
|
142
|
-
},
|
|
143
|
-
() => Math.random()
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
export const selectVariableRelations = createSelector(
|
|
147
|
-
(state: StateType, id: number) => {
|
|
148
|
-
if (state.references.relations.variables[id] === undefined)
|
|
149
|
-
throw new Error(`Variable ${id} relations do not exist`);
|
|
150
|
-
return state.references.relations.variables[id];
|
|
151
|
-
},
|
|
152
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
export const selectVariableParents = createSelector(
|
|
156
|
-
(state: StateType, id: number) => {
|
|
157
|
-
if (state.references.relations.variables[id] === undefined)
|
|
158
|
-
throw new Error(`Variable ${id} parents relations is undefined`);
|
|
159
|
-
return state.references.relations.variables[id].parents;
|
|
160
|
-
},
|
|
161
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
/*
|
|
165
|
-
* |---------------------------------|
|
|
166
|
-
* | Documents Selectors |
|
|
167
|
-
* |---------------------------------|
|
|
168
|
-
*/
|
|
169
|
-
export const selectAllDocumentsReferences = createSelector(
|
|
170
|
-
(state: StateType) => {
|
|
171
|
-
if (state.references.documents === undefined)
|
|
172
|
-
throw new Error(`Documents references do not exist`);
|
|
173
|
-
return state.references.documents;
|
|
174
|
-
},
|
|
175
|
-
(state: StateType) => (!state.references ? Math.random() : 1)
|
|
176
|
-
);
|
|
177
|
-
|
|
178
|
-
export const selectDocumentReference = createSelector(
|
|
179
|
-
(state: StateType, document: string) => {
|
|
180
|
-
if (state.references.documents === undefined)
|
|
181
|
-
throw new Error(`Documents references do not exist`);
|
|
182
|
-
return state.references.documents[document];
|
|
183
|
-
},
|
|
184
|
-
(state: StateType) => (!state.references ? Math.random() : 1)
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
/*
|
|
188
|
-
* |---------------------------------|
|
|
189
|
-
* | Sections Selectors |
|
|
190
|
-
* |---------------------------------|
|
|
191
|
-
*/
|
|
192
|
-
export const selectAllSectionsReferences = createSelector(
|
|
193
|
-
(state: StateType, document = "main") => {
|
|
194
|
-
if (typeof state.references === "undefined") return undefined;
|
|
195
|
-
return state.references.sections[document];
|
|
196
|
-
},
|
|
197
|
-
(state: StateType, document = "main") =>
|
|
198
|
-
!state.references ? Math.random() : document
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Return section's reference
|
|
203
|
-
* @param id Section's id
|
|
204
|
-
*/
|
|
205
|
-
// eslint-disable-next-line max-len
|
|
206
|
-
export const selectSectionReference = createSelector(
|
|
207
|
-
(state: StateType, id: number, document = "main") => {
|
|
208
|
-
if (state.references.sections[document] === undefined)
|
|
209
|
-
throw new Error(`Document ${document} does not exist`);
|
|
210
|
-
if (state.references.sections[document][id] === undefined) {
|
|
211
|
-
throw new Error(`Section ${id} does not exist in document ${document}`);
|
|
212
|
-
}
|
|
213
|
-
return state.references.sections[document][id];
|
|
214
|
-
},
|
|
215
|
-
(state: StateType, id: number, document = "main") =>
|
|
216
|
-
!state.references ? Math.random() : `${id}-${document}`
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Sections defaults Selectors
|
|
221
|
-
*/
|
|
222
|
-
export const selectSectionDefaults = createSelector(
|
|
223
|
-
(state: StateType, id: number) => {
|
|
224
|
-
if (typeof state.references === "undefined") return undefined;
|
|
225
|
-
return state.references.defaults[id];
|
|
226
|
-
},
|
|
227
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
/*
|
|
231
|
-
* |---------------------------------|
|
|
232
|
-
* | Conditions Selectors |
|
|
233
|
-
* |---------------------------------|
|
|
234
|
-
*/
|
|
235
|
-
export const selectOptionConditionsObject = createSelector(
|
|
236
|
-
(state: StateType, id: number) => {
|
|
237
|
-
if (typeof state.references === "undefined") return undefined;
|
|
238
|
-
return state.references.conditions.options[id];
|
|
239
|
-
},
|
|
240
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
export const selectVariableConditionsObject = createSelector(
|
|
244
|
-
(state: StateType, id: number) => {
|
|
245
|
-
if (typeof state.references === "undefined") return undefined;
|
|
246
|
-
return state.references.conditions.variables[id];
|
|
247
|
-
},
|
|
248
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
249
|
-
);
|
|
250
|
-
|
|
251
|
-
export const selectDocumentConditionsObject = createSelector(
|
|
252
|
-
(state: StateType, name: string) => {
|
|
253
|
-
if (typeof state.references === "undefined") return undefined;
|
|
254
|
-
return state.references.conditions.documents[name];
|
|
255
|
-
},
|
|
256
|
-
(state: StateType, name: string) => (!state.references ? Math.random() : name)
|
|
257
|
-
);
|
|
258
|
-
|
|
259
|
-
export const selectSectionConditionsObject = createSelector(
|
|
260
|
-
(state: StateType, id: number, document = "main") =>
|
|
261
|
-
state.references.conditions.sections[document][id],
|
|
262
|
-
(state: StateType, id: number, document = "main") =>
|
|
263
|
-
!state.references ? Math.random() : `${id}-${document}`
|
|
264
|
-
);
|
|
265
|
-
|
|
266
|
-
export const selectPrefillerConditionsObject = createSelector(
|
|
267
|
-
(state: StateType, id: number) => {
|
|
268
|
-
if (typeof state.references === "undefined") return undefined;
|
|
269
|
-
return state.references.conditions.prefillers[id];
|
|
270
|
-
},
|
|
271
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
272
|
-
);
|
|
273
|
-
|
|
274
|
-
export const selectOptionValidatorConditionsObject = createSelector(
|
|
275
|
-
(state: StateType, id: number) => {
|
|
276
|
-
if (typeof state.references === "undefined") return undefined;
|
|
277
|
-
return state.references.conditions.validators.options[id];
|
|
278
|
-
},
|
|
279
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
280
|
-
);
|
|
281
|
-
|
|
282
|
-
export const selectVariableValidatorConditionsObject = createSelector(
|
|
283
|
-
(state: StateType, id: number) => {
|
|
284
|
-
if (typeof state.references === "undefined") return undefined;
|
|
285
|
-
return state.references.conditions.validators.variables[id];
|
|
286
|
-
},
|
|
287
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
288
|
-
);
|
|
289
|
-
|
|
290
|
-
/*
|
|
291
|
-
* |---------------------------------|
|
|
292
|
-
* | Helpers Selectors |
|
|
293
|
-
* |---------------------------------|
|
|
294
|
-
*/
|
|
295
|
-
export const areVariablesSiblings = createSelector(
|
|
296
|
-
(state: StateType, ...args: number[]) => {
|
|
297
|
-
if (typeof state.references === "undefined") return undefined;
|
|
298
|
-
|
|
299
|
-
// Getting variables first parent
|
|
300
|
-
const rootParents = args
|
|
301
|
-
.map((variableId) => {
|
|
302
|
-
const parents = selectVariableParents(variableId);
|
|
303
|
-
if (parents === undefined) return null;
|
|
304
|
-
return parents[parents.length - 1];
|
|
305
|
-
})
|
|
306
|
-
.filter((a) => a !== null);
|
|
307
|
-
|
|
308
|
-
const comparator = rootParents.length > 0 ? rootParents[0] : -1;
|
|
309
|
-
|
|
310
|
-
return rootParents.every((c) => c === comparator);
|
|
311
|
-
},
|
|
312
|
-
(state: StateType, ...args: number[]) =>
|
|
313
|
-
args.reduce((p, c) => p + c.toString(), "")
|
|
314
|
-
);
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
* Tags selector
|
|
318
|
-
*/
|
|
319
|
-
export const selectVariablesByTag = createSelector(
|
|
320
|
-
(state: StateType, tag: string) => {
|
|
321
|
-
const ids: number[] = [];
|
|
322
|
-
Object.keys(state.references.variables).forEach((id) => {
|
|
323
|
-
const variable = state.references.variables[id];
|
|
324
|
-
if (Array.isArray(variable.tags) && variable.tags.includes(tag))
|
|
325
|
-
ids.push(parseInt(id, 10));
|
|
326
|
-
});
|
|
327
|
-
return ids;
|
|
328
|
-
}
|
|
329
|
-
);
|
|
330
|
-
|
|
331
|
-
export const selectOptionsByTag = createSelector(
|
|
332
|
-
(state: StateType, tag: string) => {
|
|
333
|
-
const ids: number[] = [];
|
|
334
|
-
Object.keys(state.references.options).forEach((id) => {
|
|
335
|
-
const option = state.references.options[id];
|
|
336
|
-
if (Array.isArray(option.meta.tags) && option.meta.tags.includes(tag))
|
|
337
|
-
ids.push(parseInt(id, 10));
|
|
338
|
-
});
|
|
339
|
-
return ids;
|
|
340
|
-
}
|
|
341
|
-
);
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* Returns Option's parent section
|
|
345
|
-
* @param id Option's id
|
|
346
|
-
*/
|
|
347
|
-
export const selectOptionParentSection = createSelector(
|
|
348
|
-
(state: StateType, id: number) => {
|
|
349
|
-
const { parents } = state.references.relations.options[id];
|
|
350
|
-
if (parents === undefined)
|
|
351
|
-
throw new Error(`Option ${id} parent relations are undefined`);
|
|
352
|
-
|
|
353
|
-
// Getting root option id
|
|
354
|
-
const rootId = parents.length > 0 ? parents[parents.length - 1] : id;
|
|
355
|
-
|
|
356
|
-
// Looking for section
|
|
357
|
-
const sections = Object.values(state.references.sections.main);
|
|
358
|
-
|
|
359
|
-
for (let i = 0; i < sections.length; i += 1) {
|
|
360
|
-
if (sections[i].options.includes(rootId)) return sections[i].id;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
throw new Error(
|
|
364
|
-
`Cannot find parent section for option ${id} (Root option id: ${rootId})`
|
|
365
|
-
);
|
|
366
|
-
},
|
|
367
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
368
|
-
);
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
* Returns Variable's parent section
|
|
372
|
-
* @param id Variable's id
|
|
373
|
-
*/
|
|
374
|
-
export const selectVariableParentSection = createSelector(
|
|
375
|
-
(state: StateType, id: number) => {
|
|
376
|
-
const { parents } = state.references.relations.variables[id];
|
|
377
|
-
if (parents === undefined)
|
|
378
|
-
throw new Error(`Variable ${id} parent relations are undefined`);
|
|
379
|
-
|
|
380
|
-
// Getting root option id
|
|
381
|
-
const rootId = parents[parents.length - 1];
|
|
382
|
-
|
|
383
|
-
// Looking for section
|
|
384
|
-
const sections = Object.values(state.references.sections.main);
|
|
385
|
-
|
|
386
|
-
for (let i = 0; i < sections.length; i += 1) {
|
|
387
|
-
if (sections[i].options.includes(rootId)) return sections[i].id;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
throw new Error(
|
|
391
|
-
`Cannot find parent section for variable ${id} (Root option id: ${rootId})`
|
|
392
|
-
);
|
|
393
|
-
},
|
|
394
|
-
(state: StateType, id: number) => (!state.references ? Math.random() : id)
|
|
395
|
-
);
|
|
396
|
-
|
|
397
|
-
export const selectUserEmailSectionVariableIds = createSelector(
|
|
398
|
-
(state: StateType, sectionId: number) => {
|
|
399
|
-
const { variables } = state.references;
|
|
400
|
-
|
|
401
|
-
// Extract all user_email variables
|
|
402
|
-
const userEmailVariables = Object.keys(variables).filter(
|
|
403
|
-
(variableId) => variables[variableId].type === "user_email"
|
|
404
|
-
);
|
|
405
|
-
|
|
406
|
-
return userEmailVariables.filter(
|
|
407
|
-
(variableId) =>
|
|
408
|
-
selectVariableParentSection(parseInt(variableId, 10)) === sectionId
|
|
409
|
-
);
|
|
410
|
-
},
|
|
411
|
-
(state: StateType, sectionId: number) =>
|
|
412
|
-
!state.references ? Math.random() : sectionId
|
|
413
|
-
);
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import configureMockStore from 'redux-mock-store';
|
|
2
|
-
import { createSelector, selectorsMiddleware } from './selectors';
|
|
3
|
-
|
|
4
|
-
describe('Selectors Test', () => {
|
|
5
|
-
it('Middleware', () => {
|
|
6
|
-
const mockStore = configureMockStore([selectorsMiddleware]);
|
|
7
|
-
const store = mockStore({});
|
|
8
|
-
|
|
9
|
-
const myFakeFunction = jest.fn();
|
|
10
|
-
|
|
11
|
-
const selector = createSelector(myFakeFunction);
|
|
12
|
-
|
|
13
|
-
store.dispatch({ type: 'FAKE_ACTION' });
|
|
14
|
-
selector();
|
|
15
|
-
selector();
|
|
16
|
-
selector();
|
|
17
|
-
selector();
|
|
18
|
-
|
|
19
|
-
expect(myFakeFunction).toHaveBeenCalledTimes(1);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Action, MiddlewareAPI, Dispatch } from "redux";
|
|
2
|
-
import { StateType } from "../../types/State.type";
|
|
3
|
-
|
|
4
|
-
let SelectorsStateTrack = -1;
|
|
5
|
-
let globalMPI: MiddlewareAPI;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Create a Memoized version of the selector function based on
|
|
9
|
-
* the state version and the arguments passed to it
|
|
10
|
-
*
|
|
11
|
-
* @category Selectors
|
|
12
|
-
*
|
|
13
|
-
* @param selector {function} A selector function
|
|
14
|
-
* @param [equalityFn] {function} returns the cache key
|
|
15
|
-
*
|
|
16
|
-
* @return A memoized selector function
|
|
17
|
-
*/
|
|
18
|
-
export type SelectorFunction = (state: StateType, ...args: any[]) => any;
|
|
19
|
-
export type SelectorArguments<F extends SelectorFunction> = F extends (
|
|
20
|
-
state: StateType,
|
|
21
|
-
...a: infer A
|
|
22
|
-
) => any
|
|
23
|
-
? A
|
|
24
|
-
: never;
|
|
25
|
-
export type SelectorReturn<F extends SelectorFunction> = F extends (
|
|
26
|
-
state: StateType,
|
|
27
|
-
...a: any[]
|
|
28
|
-
) => infer R
|
|
29
|
-
? R
|
|
30
|
-
: never;
|
|
31
|
-
export type SelectorEqualityFn<T extends SelectorFunction> = (
|
|
32
|
-
state: StateType,
|
|
33
|
-
...a: SelectorArguments<T>
|
|
34
|
-
) => string | number;
|
|
35
|
-
|
|
36
|
-
export function createSelector<
|
|
37
|
-
T extends SelectorFunction,
|
|
38
|
-
R = SelectorReturn<T>
|
|
39
|
-
>(
|
|
40
|
-
selector: T,
|
|
41
|
-
equalityFn?: SelectorEqualityFn<T>
|
|
42
|
-
): (...args: SelectorArguments<T>) => Readonly<R> {
|
|
43
|
-
const cache: Record<string, any> = {};
|
|
44
|
-
return (...args) => {
|
|
45
|
-
let state;
|
|
46
|
-
|
|
47
|
-
if (SelectorsStateTrack === -1)
|
|
48
|
-
throw new Error(`State hasn't beed initiated yet`);
|
|
49
|
-
|
|
50
|
-
// Getting state from MPI, wrapping it inside a try/catch since it throws
|
|
51
|
-
// an error if selectors are used inside reducers
|
|
52
|
-
try {
|
|
53
|
-
state = globalMPI.getState();
|
|
54
|
-
} catch (e) {
|
|
55
|
-
throw new Error(
|
|
56
|
-
"You may not use selectors while the reducer is executing. (Try sagas or middlewares)"
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Calculating current cache key
|
|
61
|
-
const currentKey: string | number =
|
|
62
|
-
typeof equalityFn === "function"
|
|
63
|
-
? equalityFn(state, ...args)
|
|
64
|
-
: [SelectorsStateTrack, ...args].reduce((v, c) => v + c);
|
|
65
|
-
|
|
66
|
-
if (!Object.prototype.hasOwnProperty.call(cache, currentKey)) {
|
|
67
|
-
cache[currentKey] = selector(state, ...args);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return cache[currentKey];
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Selector Redux Middleware
|
|
76
|
-
* @param mpi Redux's Middleware API
|
|
77
|
-
*/
|
|
78
|
-
export const selectorsMiddleware =
|
|
79
|
-
(mpi: MiddlewareAPI) => (next: Dispatch) => (action: Action) => {
|
|
80
|
-
const result = next(action);
|
|
81
|
-
|
|
82
|
-
// Adding Middleware API
|
|
83
|
-
globalMPI = mpi;
|
|
84
|
-
SelectorsStateTrack += 1;
|
|
85
|
-
|
|
86
|
-
return result;
|
|
87
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { createSelector } from "./selectors";
|
|
2
|
-
import { StateType } from "../../types/State.type";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Returns if option's index is hidden by Smartscript or not
|
|
6
|
-
*/
|
|
7
|
-
export const selectIsSmartscriptOptionIndexHidden = createSelector(
|
|
8
|
-
(state: StateType, id: number, index: number) =>
|
|
9
|
-
Array.isArray(state.smartscript.hidden.options[id]) &&
|
|
10
|
-
state.smartscript.hidden.options[id].includes(index),
|
|
11
|
-
(state, id, index) =>
|
|
12
|
-
Array.isArray(state.smartscript.hidden.options[id]) &&
|
|
13
|
-
state.smartscript.hidden.options[id].includes(index)
|
|
14
|
-
? "1"
|
|
15
|
-
: "0"
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Returns if variable's index is hidden by Smartscript or not
|
|
20
|
-
*/
|
|
21
|
-
export const selectIsSmartscriptVariableIndexHidden = createSelector(
|
|
22
|
-
(state: StateType, id: number, index: number) =>
|
|
23
|
-
Array.isArray(state.smartscript.hidden.variables[id]) &&
|
|
24
|
-
state.smartscript.hidden.variables[id].includes(index),
|
|
25
|
-
(state, id, index) =>
|
|
26
|
-
Array.isArray(state.smartscript.hidden.variables[id]) &&
|
|
27
|
-
state.smartscript.hidden.variables[id].includes(index)
|
|
28
|
-
? "1"
|
|
29
|
-
: "0"
|
|
30
|
-
);
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { createAppStore, getStore } from '../store';
|
|
2
|
-
import { selectCurrentUserLevel, isLevelAccessibleForUser } from './user';
|
|
3
|
-
import { initUserAction } from '../actions/user';
|
|
4
|
-
|
|
5
|
-
// Initiating state
|
|
6
|
-
createAppStore('memory');
|
|
7
|
-
const store = getStore();
|
|
8
|
-
|
|
9
|
-
describe('User selectors test suit', () => {
|
|
10
|
-
it('selectCurrentUserLevel', () => {
|
|
11
|
-
store.dispatch(
|
|
12
|
-
initUserAction({
|
|
13
|
-
displayName: 'John Doe',
|
|
14
|
-
level: 'MANAGER',
|
|
15
|
-
email: 'john@doe.com',
|
|
16
|
-
})
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
const selector = selectCurrentUserLevel();
|
|
20
|
-
|
|
21
|
-
expect(selector).toEqual('MANAGER');
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('selectCurrentUserLevel', () => {
|
|
25
|
-
store.dispatch(
|
|
26
|
-
initUserAction({
|
|
27
|
-
displayName: 'John Doe',
|
|
28
|
-
level: 'MANAGER',
|
|
29
|
-
email: 'john@doe.com',
|
|
30
|
-
})
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
expect(isLevelAccessibleForUser('GUEST')).toBeTruthy();
|
|
34
|
-
expect(isLevelAccessibleForUser('USER')).toBeTruthy();
|
|
35
|
-
expect(isLevelAccessibleForUser('MANAGER')).toBeTruthy();
|
|
36
|
-
expect(isLevelAccessibleForUser('ADMIN')).toBeFalsy();
|
|
37
|
-
expect(isLevelAccessibleForUser('SUPER')).toBeFalsy();
|
|
38
|
-
});
|
|
39
|
-
});
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { StateType } from "../../types/State.type";
|
|
2
|
-
import { createSelector } from "./selectors";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Returns current user level
|
|
6
|
-
*/
|
|
7
|
-
export const selectCurrentUserLevel = createSelector(
|
|
8
|
-
(state: StateType) => (state.user ? state.user.level : undefined),
|
|
9
|
-
(state: StateType) => (state.user ? state.user.level : Math.random())
|
|
10
|
-
);
|
|
11
|
-
|
|
12
|
-
export const selectUserStatus = createSelector(
|
|
13
|
-
(state: StateType) => (state.user ? state.user.status : "unauthenticated"),
|
|
14
|
-
(state: StateType) => (state.user ? state.user.status : Math.random())
|
|
15
|
-
);
|
|
16
|
-
|
|
17
|
-
export const selectUserValidToken = createSelector(
|
|
18
|
-
(state: StateType) => state.user?.validToken || false,
|
|
19
|
-
(state: StateType) =>
|
|
20
|
-
state.user ? (state.user.validToken || false).toString() : Math.random()
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
export const selectUserEmail = createSelector(
|
|
24
|
-
(state: StateType) =>
|
|
25
|
-
state.user && state.user.email && state.user.email.length > 0
|
|
26
|
-
? state.user.email
|
|
27
|
-
: "",
|
|
28
|
-
(state: StateType) =>
|
|
29
|
-
state.user && state.user.email && state.user.email.length > 0
|
|
30
|
-
? state.user.email
|
|
31
|
-
: Math.random()
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
export const isLevelAccessibleForUser = createSelector(
|
|
35
|
-
(
|
|
36
|
-
state: StateType,
|
|
37
|
-
level: "ADMIN" | "MANAGER" | "USER" | "GUEST" | "SUPER"
|
|
38
|
-
) => {
|
|
39
|
-
const currentUserLevel = state.user ? state.user.level : "GUEST";
|
|
40
|
-
const levelEnum = ["GUEST", "USER", "MANAGER", "ADMIN", "SUPER"];
|
|
41
|
-
return levelEnum.indexOf(level) <= levelEnum.indexOf(currentUserLevel);
|
|
42
|
-
},
|
|
43
|
-
(state: StateType, level: "ADMIN" | "MANAGER" | "USER" | "GUEST" | "SUPER") =>
|
|
44
|
-
state.user ? `${state.user.level}-${level}` : Math.random()
|
|
45
|
-
);
|
package/src/redux/store.test.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { createAppStore, getStore } from './store';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Testing store creation
|
|
5
|
-
*/
|
|
6
|
-
describe('Store Creation', () => {
|
|
7
|
-
it('Throws error when trying to get store before creation', () => {
|
|
8
|
-
expect(() => getStore()).toThrowError('Store not yet created');
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('It creates store', () => {
|
|
12
|
-
createAppStore();
|
|
13
|
-
const store = getStore();
|
|
14
|
-
return expect(store).toHaveProperty('getState');
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('It properly connects redux', () => {
|
|
18
|
-
createAppStore();
|
|
19
|
-
const state = getStore().getState();
|
|
20
|
-
return expect(state).toHaveProperty('router');
|
|
21
|
-
});
|
|
22
|
-
});
|