@legalplace/wizardx-core 2.6.3 → 2.7.0
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 +43 -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/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 +44 -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/constants/phoneValidation.d.ts +0 -1
- package/dist/constants/phoneValidation.js +0 -1
- 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 +9 -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/EventsTracking.d.ts +0 -1
- package/dist/libs/EventsTracking.js +0 -18
- 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 +3 -46
- package/dist/redux/sagas/setUserEmail.js +1 -28
- 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 +11 -12
- 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/dist/helpers/sendinblueHelper.d.ts +0 -4
- package/dist/helpers/sendinblueHelper.js +0 -46
- package/dist/libs/Extracts.d.ts +0 -20
- package/dist/libs/Extracts.js +0 -110
- 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 -6
- 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/helpers/sendinblueHelper.ts +0 -65
- 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 -276
- package/src/libs/Extracts.ts +0 -159
- 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 -116
- package/src/redux/sagas/setDefaults.test.ts +0 -100
- package/src/redux/sagas/setDefaults.ts +0 -167
- package/src/redux/sagas/setUserEmail.ts +0 -221
- 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
package/src/App.tsx
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Route, Switch, Redirect, generatePath } from "react-router-dom";
|
|
3
|
-
import { Provider } from "react-redux";
|
|
4
|
-
import { ConnectedRouter } from "connected-react-router";
|
|
5
|
-
import type { ModelV3 } from "@legalplace/models-v3-types";
|
|
6
|
-
import { getStore, createAppStore } from "./redux/store";
|
|
7
|
-
import { getHistory } from "./redux/routerHistory";
|
|
8
|
-
import type { StateType } from "./types/State.type";
|
|
9
|
-
import Globals, { setGlobals, IGlobalParams } from "./Globals";
|
|
10
|
-
import { getConfig, updateConfig } from "./config";
|
|
11
|
-
import { fetchModelPrerequisitesAction } from "./redux/actions/sagas/model";
|
|
12
|
-
import type { IWizardParams } from "./types/config.type";
|
|
13
|
-
import { preloadTheme } from "./helpers/preloadTheme";
|
|
14
|
-
import ViewComponent from "./components/View";
|
|
15
|
-
import PluginRoute from "./components/PluginRoute";
|
|
16
|
-
import SmartScriptComponent from "./components/SmartScript";
|
|
17
|
-
import { clearPlugins } from "./PluginLoader";
|
|
18
|
-
|
|
19
|
-
// App components props interface
|
|
20
|
-
export interface AppProps {
|
|
21
|
-
historyType: "browser" | "memory";
|
|
22
|
-
model?: ModelV3;
|
|
23
|
-
meta?: StateType.App.Meta;
|
|
24
|
-
instance?: StateType.App.Instance;
|
|
25
|
-
user?: StateType.User;
|
|
26
|
-
wizardParams?: IWizardParams;
|
|
27
|
-
preloadTheme?: boolean;
|
|
28
|
-
loadPlugin: (plugin: string) => Promise<any>;
|
|
29
|
-
loadTheme: (theme: string) => Promise<any>;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
class WizardXCore extends React.Component<AppProps, { loaded: boolean }> {
|
|
33
|
-
constructor(props: AppProps) {
|
|
34
|
-
super(props);
|
|
35
|
-
|
|
36
|
-
// Clearing Plugins
|
|
37
|
-
clearPlugins();
|
|
38
|
-
|
|
39
|
-
// Creating the history
|
|
40
|
-
const historyType =
|
|
41
|
-
typeof props.historyType === "string" ? props.historyType : "browser";
|
|
42
|
-
|
|
43
|
-
const params: IGlobalParams = {
|
|
44
|
-
...Globals,
|
|
45
|
-
loadTheme: props.loadTheme,
|
|
46
|
-
loadPlugin: props.loadPlugin,
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
// Checking model
|
|
50
|
-
if (props.model) {
|
|
51
|
-
params.model = props.model;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Checking meta
|
|
55
|
-
if (props.meta) {
|
|
56
|
-
params.meta = props.meta;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Checking instance
|
|
60
|
-
if (props.instance) {
|
|
61
|
-
params.instance = props.instance;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Checking user
|
|
65
|
-
if (props.user) {
|
|
66
|
-
params.user = props.user;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Setting Global params
|
|
70
|
-
setGlobals(params);
|
|
71
|
-
|
|
72
|
-
// Setting Wizard params
|
|
73
|
-
if (props.wizardParams) updateConfig(props.wizardParams);
|
|
74
|
-
|
|
75
|
-
// Preloading theme
|
|
76
|
-
if (props.preloadTheme && props.wizardParams?.theme.name)
|
|
77
|
-
preloadTheme(props.wizardParams.theme.name);
|
|
78
|
-
|
|
79
|
-
// Creating the store
|
|
80
|
-
createAppStore(historyType);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
componentDidMount(): void {
|
|
84
|
-
if (getConfig().permalink) {
|
|
85
|
-
const { permalink, prefix, uniqid } = getConfig();
|
|
86
|
-
if (uniqid?.trim().length) {
|
|
87
|
-
getHistory().push(
|
|
88
|
-
generatePath(getConfig().router.wizardInstancePath, {
|
|
89
|
-
prefix: prefix?.trim().length ? prefix : undefined,
|
|
90
|
-
permalink,
|
|
91
|
-
uniqid,
|
|
92
|
-
})
|
|
93
|
-
);
|
|
94
|
-
} else {
|
|
95
|
-
getHistory().push(
|
|
96
|
-
generatePath(getConfig().router.wizardPath, {
|
|
97
|
-
prefix: prefix?.trim().length ? prefix : undefined,
|
|
98
|
-
permalink,
|
|
99
|
-
})
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Fetching model
|
|
105
|
-
const { dispatch, getState } = getStore();
|
|
106
|
-
const state = getState();
|
|
107
|
-
dispatch(
|
|
108
|
-
fetchModelPrerequisitesAction(
|
|
109
|
-
getConfig().permalink || state.app.meta.permalink,
|
|
110
|
-
getConfig().prefix || state.app.meta.prefix || ""
|
|
111
|
-
)
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
render(): JSX.Element {
|
|
116
|
-
return (
|
|
117
|
-
<Provider store={getStore()}>
|
|
118
|
-
<ConnectedRouter history={getHistory()}>
|
|
119
|
-
<Switch>
|
|
120
|
-
{/* Plugins additional routes */}
|
|
121
|
-
<Route path="/p/:path" component={PluginRoute} />
|
|
122
|
-
<Route
|
|
123
|
-
path={getConfig().router.wizardInstancePath}
|
|
124
|
-
component={ViewComponent}
|
|
125
|
-
/>
|
|
126
|
-
<Route
|
|
127
|
-
path={getConfig().router.wizardPath}
|
|
128
|
-
component={ViewComponent}
|
|
129
|
-
/>
|
|
130
|
-
|
|
131
|
-
{/* SmartScript Frame */}
|
|
132
|
-
<Route
|
|
133
|
-
path={
|
|
134
|
-
getConfig().router.smartscriptPath ||
|
|
135
|
-
"/contrats/:permalink/smartscript/:uniqid?"
|
|
136
|
-
}
|
|
137
|
-
component={SmartScriptComponent}
|
|
138
|
-
/>
|
|
139
|
-
|
|
140
|
-
<Redirect
|
|
141
|
-
to={{
|
|
142
|
-
pathname: getConfig().router.notFoundPath,
|
|
143
|
-
}}
|
|
144
|
-
/>
|
|
145
|
-
</Switch>
|
|
146
|
-
</ConnectedRouter>
|
|
147
|
-
</Provider>
|
|
148
|
-
);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export default WizardXCore;
|
package/src/Globals.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
declare global {
|
|
2
|
-
interface Window {
|
|
3
|
-
dataLayer: any;
|
|
4
|
-
// eslint-disable-next-line camelcase
|
|
5
|
-
google_trackConversion: (...args: any[]) => any;
|
|
6
|
-
uetq: any;
|
|
7
|
-
fbq: (...args: any[]) => any;
|
|
8
|
-
mixpanel: any;
|
|
9
|
-
sendinblue: any;
|
|
10
|
-
ga: any;
|
|
11
|
-
hj: any;
|
|
12
|
-
wizardxLoadAfterLcp: ({ src: string } | Function)[];
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface IGlobalParams {
|
|
17
|
-
[key: string]: any;
|
|
18
|
-
metadata?: Record<string, any>;
|
|
19
|
-
appEnv: string;
|
|
20
|
-
loadPlugin: (plugin: string) => Promise<any>;
|
|
21
|
-
loadTheme: (theme: string) => Promise<any>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const globalParams: IGlobalParams = {
|
|
25
|
-
model: null,
|
|
26
|
-
instance: null,
|
|
27
|
-
meta: null,
|
|
28
|
-
user: null,
|
|
29
|
-
appEnv: "production",
|
|
30
|
-
version: null,
|
|
31
|
-
loadPlugin: async () => {},
|
|
32
|
-
loadTheme: async () => {},
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export const setGlobals = (params: typeof globalParams) => {
|
|
36
|
-
Object.keys(globalParams).forEach((currentParam) => {
|
|
37
|
-
if (params[currentParam]) globalParams[currentParam] = params[currentParam];
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// Setting env
|
|
41
|
-
globalParams.appEnv =
|
|
42
|
-
process.env.REACT_APP_ENV?.toString() ||
|
|
43
|
-
process.env.NODE_ENV?.toString() ||
|
|
44
|
-
"production";
|
|
45
|
-
|
|
46
|
-
// Setting version
|
|
47
|
-
globalParams.version = process.env.REACT_APP_VERSION || "0.0.0";
|
|
48
|
-
|
|
49
|
-
if (
|
|
50
|
-
globalParams.appEnv !== "production" &&
|
|
51
|
-
process.env.JEST_WORKER_ID === undefined
|
|
52
|
-
) {
|
|
53
|
-
// eslint-disable-next-line no-console
|
|
54
|
-
console.log(
|
|
55
|
-
`%c[WZIARDX]: Current Environment: %c${globalParams.appEnv} (${globalParams.version})`,
|
|
56
|
-
"font-weight:bold",
|
|
57
|
-
"font-weight: bold; color: red"
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Wrapping global params object into a proxy
|
|
64
|
-
* to avoid adding properties to it outside
|
|
65
|
-
* this file
|
|
66
|
-
*/
|
|
67
|
-
const Globals: Readonly<typeof globalParams> = globalParams;
|
|
68
|
-
|
|
69
|
-
export default Globals;
|
package/src/Loader.tsx
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
// @ts-ignore
|
|
3
|
-
import ReactDOMServer from 'react-async-ssr';
|
|
4
|
-
import '@testing-library/jest-dom/extend-expect';
|
|
5
|
-
import { render, cleanup, waitFor } from '@testing-library/react';
|
|
6
|
-
import loadable from '@loadable/component';
|
|
7
|
-
import { ReplaceComponent } from './PluginLoader';
|
|
8
|
-
|
|
9
|
-
jest.mock('react', () => {
|
|
10
|
-
const rct = jest.requireActual('react');
|
|
11
|
-
const Loadable = jest.requireActual('@loadable/component');
|
|
12
|
-
rct.lazy = Loadable.lazy;
|
|
13
|
-
return rct;
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Mocking config
|
|
17
|
-
jest.mock('./config', () => ({
|
|
18
|
-
getConfig: () => ({
|
|
19
|
-
plugins: {
|
|
20
|
-
jestTestPlugin: '1.0.0',
|
|
21
|
-
},
|
|
22
|
-
}),
|
|
23
|
-
}));
|
|
24
|
-
|
|
25
|
-
jest.mock('./Globals', () => ({
|
|
26
|
-
loadPlugin: (plugin: string) => import(`./tests-misc/plugins/${plugin}`),
|
|
27
|
-
}));
|
|
28
|
-
|
|
29
|
-
const { loadPlugins, PluginLoader } = require('./PluginLoader');
|
|
30
|
-
|
|
31
|
-
loadPlugins();
|
|
32
|
-
|
|
33
|
-
describe('<PluginLoader />', () => {
|
|
34
|
-
it('Loads "after" hook', async () => {
|
|
35
|
-
const { container } = render(<PluginLoader anchor={['after']} />);
|
|
36
|
-
await waitFor(() =>
|
|
37
|
-
expect(container).toContainHTML(
|
|
38
|
-
'<div><div class="title">Hello world - AFTER</div></div>'
|
|
39
|
-
)
|
|
40
|
-
);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('Loads "before" hook', async () => {
|
|
44
|
-
const { container } = render(<PluginLoader anchor={['before']} />);
|
|
45
|
-
await waitFor(() =>
|
|
46
|
-
expect(container).toContainHTML(
|
|
47
|
-
'<div><h1>Hello<b>world</b>!!!</h1></div>'
|
|
48
|
-
)
|
|
49
|
-
);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('Tries to load non existing plugin', async () => {
|
|
53
|
-
const { container } = render(
|
|
54
|
-
<PluginLoader anchor={['myNonExistingPlugin']} />
|
|
55
|
-
);
|
|
56
|
-
await waitFor(() => expect(container).toContainHTML('<div></div>'));
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('Loads replacement module', async () => {
|
|
60
|
-
const Component = ReplaceComponent('TitleComponent', () => {
|
|
61
|
-
return <span>Original</span>;
|
|
62
|
-
});
|
|
63
|
-
const { container } = render(<Component>Replaced</Component>);
|
|
64
|
-
await waitFor(() =>
|
|
65
|
-
expect(container).toContainHTML(
|
|
66
|
-
'<div><h1 style="color: red;">Replaced</h1></div>'
|
|
67
|
-
)
|
|
68
|
-
);
|
|
69
|
-
});
|
|
70
|
-
});
|
package/src/PluginLoader.tsx
DELETED
|
@@ -1,407 +0,0 @@
|
|
|
1
|
-
import React, { Props } from "react";
|
|
2
|
-
import { Action } from "redux";
|
|
3
|
-
import PropTypes from "prop-types";
|
|
4
|
-
import { LoadableComponent } from "@loadable/component";
|
|
5
|
-
import { getConfig } from "./config";
|
|
6
|
-
import { getStore } from "./redux/store";
|
|
7
|
-
import { getHistory } from "./redux/routerHistory";
|
|
8
|
-
import { EventsTracking } from "./libs/EventsTracking";
|
|
9
|
-
import Globals from "./Globals";
|
|
10
|
-
|
|
11
|
-
// This object will be used to contain all anchors
|
|
12
|
-
let globalAnchors: Record<string, React.FC[]> = {};
|
|
13
|
-
let reduxAnchors: Record<string, ((...args: any) => void)[]> = {};
|
|
14
|
-
let actionOverrideAnchor: Record<string, actionOverrideFunction[]> = {};
|
|
15
|
-
let replacers: Record<string, React.FC> = {};
|
|
16
|
-
|
|
17
|
-
export type PluginAppStatesRegisterFunction = (
|
|
18
|
-
currentAppStates: string[]
|
|
19
|
-
) => string[];
|
|
20
|
-
export type PluginsPageAppStatesType = Record<string, string>;
|
|
21
|
-
export type actionOverrideFunction = (action: Action) => Action;
|
|
22
|
-
|
|
23
|
-
export interface IPluginsAppStatesComponents {
|
|
24
|
-
[key: string]: LoadableComponent<any>;
|
|
25
|
-
}
|
|
26
|
-
export interface PluginsAppStatesDeclarations {
|
|
27
|
-
register: PluginAppStatesRegisterFunction;
|
|
28
|
-
pageAppState: PluginsPageAppStatesType;
|
|
29
|
-
components: IPluginsAppStatesComponents;
|
|
30
|
-
additionalRoutes?: Record<string, ReactComponent<any>>[];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let PluginsAppStatesRegistrers: PluginAppStatesRegisterFunction[] = [];
|
|
34
|
-
let PluginsPageAppStates: PluginsPageAppStatesType = {};
|
|
35
|
-
let PluginsAppStatesComponents: IPluginsAppStatesComponents = {};
|
|
36
|
-
let PluginAdditionRoutes: Record<string, ReactComponent<any>> = {};
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Declares plugins app state on plugin loading
|
|
40
|
-
* @param declaration Plugin app states declaration
|
|
41
|
-
*/
|
|
42
|
-
const pluginAppStates = (declaration: PluginsAppStatesDeclarations) => {
|
|
43
|
-
// Adding registration function
|
|
44
|
-
PluginsAppStatesRegistrers.push(declaration.register);
|
|
45
|
-
|
|
46
|
-
// Adding page app states
|
|
47
|
-
if (typeof declaration.pageAppState === "object")
|
|
48
|
-
Object.keys(declaration.pageAppState).forEach((appState) => {
|
|
49
|
-
if (typeof declaration.pageAppState[appState] === "string") {
|
|
50
|
-
const page = declaration.pageAppState[appState];
|
|
51
|
-
|
|
52
|
-
// Verifying if appState is already declared
|
|
53
|
-
if (
|
|
54
|
-
Object.prototype.hasOwnProperty.call(PluginsPageAppStates, appState)
|
|
55
|
-
) {
|
|
56
|
-
throw new Error(`Plugins AppState "${appState}" already declared.`);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Veryfing if page is already declared
|
|
60
|
-
const samePageAppStates = Object.keys(PluginsPageAppStates).filter(
|
|
61
|
-
(currentAppState) => PluginsPageAppStates[currentAppState] === page
|
|
62
|
-
);
|
|
63
|
-
if (samePageAppStates.length > 0)
|
|
64
|
-
throw new Error(`Plugins AppState page "${page}" already declared.`);
|
|
65
|
-
|
|
66
|
-
PluginsPageAppStates[appState] = page;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// Saving App States components
|
|
71
|
-
Object.keys(declaration.components).forEach((appState) => {
|
|
72
|
-
if (Object.prototype.hasOwnProperty.call(declaration, appState) === true)
|
|
73
|
-
throw new Error(
|
|
74
|
-
`Plugin's appState ${appState} already declared previously`
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
PluginsAppStatesComponents[appState] = declaration.components[appState];
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Registers plugins app states
|
|
83
|
-
* @param currentAppStates Current app states
|
|
84
|
-
*/
|
|
85
|
-
export const registerPluginsAppStates: PluginAppStatesRegisterFunction = (
|
|
86
|
-
currentAppStates
|
|
87
|
-
) => {
|
|
88
|
-
let appStates = [...currentAppStates];
|
|
89
|
-
PluginsAppStatesRegistrers.forEach((register) => {
|
|
90
|
-
appStates = register(appStates);
|
|
91
|
-
});
|
|
92
|
-
return appStates;
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Loads plugin app states component
|
|
97
|
-
* @param name AppState Name
|
|
98
|
-
*/
|
|
99
|
-
export const loadPluginComponent = (name: string) => {
|
|
100
|
-
if (
|
|
101
|
-
Object.prototype.hasOwnProperty.call(PluginsAppStatesComponents, name) ===
|
|
102
|
-
false
|
|
103
|
-
) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return PluginsAppStatesComponents[name];
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Checks page app states for plugins
|
|
112
|
-
* @param page Page
|
|
113
|
-
*/
|
|
114
|
-
export const pluginPageAppState = (page: string) => {
|
|
115
|
-
const appStates = Object.keys(PluginsPageAppStates).filter(
|
|
116
|
-
(appState) => PluginsPageAppStates[appState] === page
|
|
117
|
-
);
|
|
118
|
-
if (appStates.length === 1) return appStates[0];
|
|
119
|
-
if (appStates.length > 1)
|
|
120
|
-
throw new Error(
|
|
121
|
-
`Found multipled appStates when checking for plugins page name`
|
|
122
|
-
);
|
|
123
|
-
return false;
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Returns a readyonly copy of PluginsPageAppStates
|
|
128
|
-
*/
|
|
129
|
-
export const getPluginsPageAppStates = (): Readonly<
|
|
130
|
-
typeof PluginsPageAppStates
|
|
131
|
-
> => PluginsPageAppStates;
|
|
132
|
-
|
|
133
|
-
const loadPluginFiles = async (pluginsList: Record<string, string>) => {
|
|
134
|
-
const plugins = Object.keys(pluginsList);
|
|
135
|
-
// We load all needed plugin first to continue in synchronous way
|
|
136
|
-
const pluginModules = await Promise.all(
|
|
137
|
-
plugins.map((plugin) => Globals.loadPlugin(plugin))
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
plugins.forEach((plugin, index) => {
|
|
141
|
-
const pluginModule = pluginModules[index];
|
|
142
|
-
const anchors = pluginModule.default;
|
|
143
|
-
const { loader } = pluginModule;
|
|
144
|
-
|
|
145
|
-
// Loading selectors if module has a loader function
|
|
146
|
-
if (loader !== undefined) {
|
|
147
|
-
loader(getStore().dispatch, getHistory(), getConfig(), EventsTracking);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Looking for anchors inside the plugin
|
|
151
|
-
Object.keys(anchors).forEach((anchor) => {
|
|
152
|
-
if (anchor === "replace") {
|
|
153
|
-
Object.keys(anchors[anchor]).forEach((replacer) => {
|
|
154
|
-
// Adding current replacer
|
|
155
|
-
replacers[replacer] = anchors[anchor][replacer];
|
|
156
|
-
});
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* App States
|
|
162
|
-
*/
|
|
163
|
-
if (anchor === "appstates") {
|
|
164
|
-
pluginAppStates(anchors.appstates);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Redux Anchors
|
|
169
|
-
*/
|
|
170
|
-
if (anchor === "redux") {
|
|
171
|
-
Object.keys(anchors[anchor]).forEach((action) => {
|
|
172
|
-
if (reduxAnchors[action] === undefined) reduxAnchors[action] = [];
|
|
173
|
-
// Adding current action
|
|
174
|
-
reduxAnchors[action].push(anchors[anchor][action]);
|
|
175
|
-
});
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Action Override
|
|
181
|
-
*/
|
|
182
|
-
if (anchor === "actionOverride") {
|
|
183
|
-
Object.keys(anchors[anchor]).forEach((action) => {
|
|
184
|
-
if (actionOverrideAnchor[action] === undefined)
|
|
185
|
-
actionOverrideAnchor[action] = [];
|
|
186
|
-
// Adding current action
|
|
187
|
-
actionOverrideAnchor[action].push(anchors[anchor][action]);
|
|
188
|
-
});
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Additional route
|
|
194
|
-
*/
|
|
195
|
-
if (anchor === "additionalRoutes") {
|
|
196
|
-
Object.keys(anchors[anchor]).forEach((route) => {
|
|
197
|
-
PluginAdditionRoutes[anchors[anchor][route].path] =
|
|
198
|
-
anchors[anchor][route].component;
|
|
199
|
-
});
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// In case no plugin has yet plugged to the anchor
|
|
204
|
-
// we create the anchor
|
|
205
|
-
if (!Object.prototype.hasOwnProperty.call(globalAnchors, anchor))
|
|
206
|
-
globalAnchors[anchor] = [];
|
|
207
|
-
|
|
208
|
-
// Adding current anchor
|
|
209
|
-
globalAnchors[anchor].push(anchors[anchor]);
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Getting the plugins list from the config file
|
|
216
|
-
*/
|
|
217
|
-
let pluginsLoadingDone = false;
|
|
218
|
-
export const loadPlugins = async (plugins?: Record<string, string>) => {
|
|
219
|
-
let pluginsList;
|
|
220
|
-
if (!plugins) pluginsList = getConfig().plugins;
|
|
221
|
-
else pluginsList = plugins;
|
|
222
|
-
|
|
223
|
-
if (pluginsList === undefined) {
|
|
224
|
-
pluginsList = getConfig().plugins;
|
|
225
|
-
}
|
|
226
|
-
// We need to make sure all plugins are loaded before going on
|
|
227
|
-
await loadPluginFiles(pluginsList);
|
|
228
|
-
|
|
229
|
-
pluginsLoadingDone = true;
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Returns whether plugins are loaded or not
|
|
234
|
-
*/
|
|
235
|
-
export const pluginsLoaded = () => pluginsLoadingDone;
|
|
236
|
-
|
|
237
|
-
// Plugin Loader props
|
|
238
|
-
export interface PluginLoaderProps {
|
|
239
|
-
anchor: string[];
|
|
240
|
-
props?: Props<null>;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
export type ReactComponent<T> = React.ComponentClass<T> | React.FC<T>;
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* PluginLoader component
|
|
247
|
-
*/
|
|
248
|
-
export type TPluginLoader<T = {}> = React.FC<T & PluginLoaderProps>;
|
|
249
|
-
export const PluginLoader: TPluginLoader = (props) => {
|
|
250
|
-
const { anchor } = props;
|
|
251
|
-
const anchorsList = !Array.isArray(anchor) ? [anchor] : anchor;
|
|
252
|
-
let Plugins: React.ReactNodeArray = [];
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Looking for anchor
|
|
256
|
-
*/
|
|
257
|
-
for (let i = 0; i < anchorsList.length; i += 1) {
|
|
258
|
-
const currentAnchor = anchorsList[i];
|
|
259
|
-
if (
|
|
260
|
-
Object.prototype.hasOwnProperty.call(globalAnchors, currentAnchor) &&
|
|
261
|
-
globalAnchors[currentAnchor].length > 0
|
|
262
|
-
) {
|
|
263
|
-
const currentPlugins = globalAnchors[currentAnchor];
|
|
264
|
-
|
|
265
|
-
Plugins = [
|
|
266
|
-
...Plugins,
|
|
267
|
-
...currentPlugins.map((Plugin: React.FC) => (
|
|
268
|
-
<React.Suspense
|
|
269
|
-
key={`lpwp-${currentAnchor}-${Math.random()}`}
|
|
270
|
-
fallback={null}
|
|
271
|
-
>
|
|
272
|
-
<Plugin {...props.props} />
|
|
273
|
-
</React.Suspense>
|
|
274
|
-
)),
|
|
275
|
-
];
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Looking for the anchor
|
|
281
|
-
*/
|
|
282
|
-
if (Plugins.length > 0) {
|
|
283
|
-
/**
|
|
284
|
-
* Maping plugins hooked to the anchor inside a Fragment
|
|
285
|
-
*/
|
|
286
|
-
return <>{Plugins}</>;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// Returning null incase the anchor doesn't have any hooks
|
|
290
|
-
// or it doesn't exist
|
|
291
|
-
return null;
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
PluginLoader.propTypes = {
|
|
295
|
-
anchor: PropTypes.arrayOf<string>(PropTypes.string.isRequired).isRequired,
|
|
296
|
-
// eslint-disable-next-line react/forbid-prop-types
|
|
297
|
-
props: PropTypes.object,
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
PluginLoader.defaultProps = {
|
|
301
|
-
props: {},
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
*
|
|
306
|
-
* @param replacerName Replacer name
|
|
307
|
-
* @param OriginalComponent Original component name
|
|
308
|
-
*/
|
|
309
|
-
let cache: Record<string, React.MemoExoticComponent<any>> = {};
|
|
310
|
-
export function ReplaceComponent<T = {}>(
|
|
311
|
-
replacerName: string | string[],
|
|
312
|
-
OriginalComponent: ReactComponent<T>,
|
|
313
|
-
componentName?: string
|
|
314
|
-
) {
|
|
315
|
-
const displayName =
|
|
316
|
-
componentName ||
|
|
317
|
-
OriginalComponent.displayName ||
|
|
318
|
-
OriginalComponent.name ||
|
|
319
|
-
"Component";
|
|
320
|
-
const anchorsList = !Array.isArray(replacerName)
|
|
321
|
-
? [replacerName]
|
|
322
|
-
: replacerName;
|
|
323
|
-
let Replacer: string | null = null;
|
|
324
|
-
|
|
325
|
-
const cacheKey =
|
|
326
|
-
anchorsList.reduce((a, b) => a + b) + OriginalComponent.toString();
|
|
327
|
-
if (Object.prototype.hasOwnProperty.call(cache, cacheKey)) {
|
|
328
|
-
return cache[cacheKey];
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* Looking for anchor
|
|
333
|
-
*/
|
|
334
|
-
for (let i = 0; i < anchorsList.length; i += 1) {
|
|
335
|
-
const currentAnchor = anchorsList[i];
|
|
336
|
-
if (Object.prototype.hasOwnProperty.call(replacers, currentAnchor)) {
|
|
337
|
-
Replacer = currentAnchor;
|
|
338
|
-
break;
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
let FinalComponent: React.ComponentType<T>;
|
|
343
|
-
if (Replacer !== null) {
|
|
344
|
-
const ReplacerComponent: React.FC = replacers[Replacer];
|
|
345
|
-
const FinalReplacedComponent: React.FC<T> = (props) => (
|
|
346
|
-
<React.Suspense fallback={null}>
|
|
347
|
-
<ReplacerComponent {...props} OriginalComponent={OriginalComponent}>
|
|
348
|
-
{props.children}
|
|
349
|
-
</ReplacerComponent>
|
|
350
|
-
</React.Suspense>
|
|
351
|
-
);
|
|
352
|
-
FinalComponent = FinalReplacedComponent;
|
|
353
|
-
FinalComponent.displayName = `replacedComponent(${displayName})`;
|
|
354
|
-
} else {
|
|
355
|
-
FinalComponent = OriginalComponent;
|
|
356
|
-
FinalComponent.displayName = `originalComponent(${displayName})`;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
cache[cacheKey] = React.memo(FinalComponent);
|
|
360
|
-
return cache[cacheKey];
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
export function RunActionAnchor(anchor: string, ...args: any[]) {
|
|
364
|
-
if (
|
|
365
|
-
Object.prototype.hasOwnProperty.call(reduxAnchors, anchor) &&
|
|
366
|
-
reduxAnchors[anchor].length > 0
|
|
367
|
-
) {
|
|
368
|
-
reduxAnchors[anchor].forEach((currentFn) => {
|
|
369
|
-
currentFn.call(null, ...args);
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
export function RunOverrideActionAnchor(action: Action) {
|
|
375
|
-
let overridedAction = action;
|
|
376
|
-
if (
|
|
377
|
-
Object.prototype.hasOwnProperty.call(actionOverrideAnchor, action.type) &&
|
|
378
|
-
actionOverrideAnchor[action.type].length > 0
|
|
379
|
-
) {
|
|
380
|
-
actionOverrideAnchor[action.type].forEach((currentFn) => {
|
|
381
|
-
overridedAction = currentFn.call(null, overridedAction);
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
return overridedAction;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Get PluginAdditional route object
|
|
390
|
-
*/
|
|
391
|
-
export const getPluginsAdditionalRoutes = () => PluginAdditionRoutes;
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Clears plugins
|
|
395
|
-
*/
|
|
396
|
-
export const clearPlugins = () => {
|
|
397
|
-
globalAnchors = {};
|
|
398
|
-
reduxAnchors = {};
|
|
399
|
-
actionOverrideAnchor = {};
|
|
400
|
-
replacers = {};
|
|
401
|
-
PluginsAppStatesRegistrers = [];
|
|
402
|
-
PluginsPageAppStates = {};
|
|
403
|
-
PluginsAppStatesComponents = {};
|
|
404
|
-
PluginAdditionRoutes = {};
|
|
405
|
-
cache = {};
|
|
406
|
-
pluginsLoadingDone = false;
|
|
407
|
-
};
|