@admin-layout/client 11.0.2-alpha.0 → 11.2.1-alpha.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/lib/__tests__/ApplicationErrorHandlerCommon.test.d.ts.map +1 -0
- package/lib/__tests__/ConfigurationModelWrapper.test.d.ts +2 -0
- package/lib/__tests__/ConfigurationModelWrapper.test.d.ts.map +1 -0
- package/lib/__tests__/SettingsConfigurationModel.test.d.ts +2 -0
- package/lib/__tests__/SettingsConfigurationModel.test.d.ts.map +1 -0
- package/lib/__tests__/__fixtures__/defaultSettingsExample.d.ts +3 -0
- package/lib/__tests__/__fixtures__/defaultSettingsExample.d.ts.map +1 -0
- package/lib/{antd-themes/colors.d.ts → colors/colorsList.d.ts} +1 -1
- package/lib/colors/colorsList.d.ts.map +1 -0
- package/lib/{antd-themes/colors.js → colors/colorsList.js} +1 -1
- package/lib/colors/colorsList.js.map +1 -0
- package/lib/colors/index.d.ts +1 -0
- package/lib/colors/index.d.ts.map +1 -1
- package/lib/colors/presets/black.js +0 -3
- package/lib/colors/presets/black.js.map +1 -1
- package/lib/colors/presets/brinkPink.js +11 -0
- package/lib/colors/presets/brinkPink.js.map +1 -0
- package/lib/colors/presets/cyan.js +11 -0
- package/lib/colors/presets/cyan.js.map +1 -0
- package/lib/colors/presets/lime.js +11 -0
- package/lib/colors/presets/lime.js.map +1 -0
- package/lib/colors/presets/pink.js +11 -0
- package/lib/colors/presets/pink.js.map +1 -0
- package/lib/colors/presets/purple.js +11 -0
- package/lib/colors/presets/purple.js.map +1 -0
- package/lib/colors/presets/skyBlue.js +11 -0
- package/lib/colors/presets/skyBlue.js.map +1 -0
- package/lib/colors/presets/turquoise.js +11 -0
- package/lib/colors/presets/turquoise.js.map +1 -0
- package/lib/colors/presets/white.js +0 -3
- package/lib/colors/presets/white.js.map +1 -1
- package/lib/components/ApplicationErrorFillWrapper.d.ts.map +1 -1
- package/lib/components/ApplicationErrorHandlerCommon.d.ts.map +1 -1
- package/lib/components/ApplicationErrorHandlerCommon.js.map +1 -1
- package/lib/components/ErrorBoundaryCommon.js.map +1 -1
- package/lib/components/LayoutCookieProvider.d.ts +7 -0
- package/lib/components/LayoutCookieProvider.d.ts.map +1 -0
- package/lib/components/LayoutCookieProvider.js +25 -0
- package/lib/components/LayoutCookieProvider.js.map +1 -0
- package/lib/components/UpdateSettings/UpdateSettings.server.d.ts +68 -6
- package/lib/components/UpdateSettings/UpdateSettings.server.d.ts.map +1 -1
- package/lib/components/UpdateSettings/UpdateSettings.server.js +218 -28
- package/lib/components/UpdateSettings/UpdateSettings.server.js.map +1 -1
- package/lib/components/UpdateSettings/UpdateSettings.server.test.d.ts +2 -0
- package/lib/components/UpdateSettings/UpdateSettings.server.test.d.ts.map +1 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.d.ts.map +1 -1
- package/lib/config/defaultSettings.d.ts +184 -2
- package/lib/config/defaultSettings.d.ts.map +1 -1
- package/lib/config/defaultSettings.js +67 -32
- package/lib/config/defaultSettings.js.map +1 -1
- package/lib/config/env-config.d.ts +3 -5
- package/lib/config/env-config.d.ts.map +1 -1
- package/lib/config/env-config.js +13 -13
- package/lib/config/env-config.js.map +1 -1
- package/lib/constants/constants.js.map +1 -1
- package/lib/constants/error.js.map +1 -1
- package/lib/constants/languages.js.map +1 -1
- package/lib/constants/layout.js.map +1 -1
- package/lib/graphql/link/error-link.d.ts.map +1 -1
- package/lib/graphql/link/error-link.js +1 -1
- package/lib/graphql/link/error-link.js.map +1 -1
- package/lib/hooks/Client-only.d.ts +28 -0
- package/lib/hooks/Client-only.d.ts.map +1 -0
- package/lib/hooks/Client-only.js +18 -0
- package/lib/hooks/Client-only.js.map +1 -0
- package/lib/hooks/hooks.d.ts +4 -0
- package/lib/hooks/hooks.d.ts.map +1 -0
- package/lib/hooks/index.d.ts +2 -1
- package/lib/hooks/index.d.ts.map +1 -1
- package/lib/hooks/use-hydrated.d.ts +19 -0
- package/lib/hooks/use-hydrated.d.ts.map +1 -0
- package/lib/hooks/use-hydrated.js +24 -0
- package/lib/hooks/use-hydrated.js.map +1 -0
- package/lib/hooks/useLayoutSettings.d.ts +6 -0
- package/lib/hooks/useLayoutSettings.d.ts.map +1 -0
- package/lib/hooks/useLayoutSettings.js +106 -0
- package/lib/hooks/useLayoutSettings.js.map +1 -0
- package/lib/hooks/useLayoutSettings.test.d.ts +2 -0
- package/lib/hooks/useLayoutSettings.test.d.ts.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.native.js +1 -1
- package/lib/interfaces/default-settings.d.ts +1 -0
- package/lib/interfaces/default-settings.d.ts.map +1 -1
- package/lib/interfaces/index.d.ts +2 -0
- package/lib/interfaces/index.d.ts.map +1 -1
- package/lib/interfaces/pure-settings.d.ts +17 -1
- package/lib/interfaces/pure-settings.d.ts.map +1 -1
- package/lib/interfaces/searchbar-settings.d.ts +61 -0
- package/lib/interfaces/searchbar-settings.d.ts.map +1 -0
- package/lib/interfaces/settings.d.ts +167 -0
- package/lib/interfaces/settings.d.ts.map +1 -0
- package/lib/interfaces/settings.js +5 -0
- package/lib/interfaces/settings.js.map +1 -0
- package/lib/interfaces/typings.d.ts +1 -1
- package/lib/interfaces/typings.d.ts.map +1 -1
- package/lib/redux/actions/error-actions.d.ts.map +1 -1
- package/lib/redux/actions/error-actions.js.map +1 -1
- package/lib/redux/reducers/error.js.map +1 -1
- package/lib/redux/reducers/settings.d.ts +2 -36
- package/lib/redux/reducers/settings.d.ts.map +1 -1
- package/lib/redux/reducers/settings.js +4 -11
- package/lib/redux/reducers/settings.js.map +1 -1
- package/lib/redux/selectors/index.js.map +1 -1
- package/lib/redux/store.js +1 -1
- package/lib/redux/store.js.map +1 -1
- package/lib/themes/systemFont/index.js.map +1 -1
- package/lib/themes/templates/createLayoutTheme.js.map +1 -1
- package/lib/themes/templates/darkLayoutTheme.js.map +1 -1
- package/lib/themes/templates/lightLayoutTheme.js.map +1 -1
- package/lib/utils/assignDefaults.d.ts +10 -0
- package/lib/utils/assignDefaults.d.ts.map +1 -0
- package/lib/utils/assignDefaults.test.d.ts +1 -0
- package/lib/utils/assignDefaults.test.d.ts.map +1 -0
- package/lib/utils/generateMenuLink.d.ts.map +1 -1
- package/lib/utils/generateMenuLink.js +13 -1
- package/lib/utils/generateMenuLink.js.map +1 -1
- package/lib/utils/generateMenuLink.test.d.ts +2 -0
- package/lib/utils/generateMenuLink.test.d.ts.map +1 -0
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/matchMenuKeys.d.ts.map +1 -1
- package/lib/utils/matchMenuKeys.js.map +1 -1
- package/lib/utils/menuUtils.d.ts +2 -2
- package/lib/utils/menuUtils.d.ts.map +1 -1
- package/lib/utils/menuUtils.js +1 -1
- package/lib/utils/menuUtils.js.map +1 -1
- package/lib/utils/parentRoute.d.ts.map +1 -1
- package/lib/utils/parseEnvUiLayoutSettings.d.ts +6 -0
- package/lib/utils/parseEnvUiLayoutSettings.d.ts.map +1 -0
- package/lib/utils/parseEnvUiLayoutSettings.js +27 -0
- package/lib/utils/parseEnvUiLayoutSettings.js.map +1 -0
- package/lib/utils/parseEnvUiLayoutSettings.test.d.ts +2 -0
- package/lib/utils/parseEnvUiLayoutSettings.test.d.ts.map +1 -0
- package/lib/utils/seperatedMenus.js.map +1 -1
- package/lib/utils/settingsDiff.test.d.ts +2 -0
- package/lib/utils/settingsDiff.test.d.ts.map +1 -0
- package/lib/utils/settingsDifference.d.ts +6 -0
- package/lib/utils/settingsDifference.d.ts.map +1 -0
- package/lib/utils/settingsDifference.js +148 -0
- package/lib/utils/settingsDifference.js.map +1 -0
- package/lib/utils/settingsDifference.test.d.ts +2 -0
- package/lib/utils/settingsDifference.test.d.ts.map +1 -0
- package/package.json +9 -4
- package/lib/antd-themes/ThemeProvider.d.ts +0 -434
- package/lib/antd-themes/ThemeProvider.d.ts.map +0 -1
- package/lib/antd-themes/ThemeProvider.js +0 -34
- package/lib/antd-themes/ThemeProvider.js.map +0 -1
- package/lib/antd-themes/airbnb-dark-theme.d.ts +0 -230
- package/lib/antd-themes/airbnb-dark-theme.d.ts.map +0 -1
- package/lib/antd-themes/airbnb-dark-theme.js +0 -168
- package/lib/antd-themes/airbnb-dark-theme.js.map +0 -1
- package/lib/antd-themes/airbnb-light-theme.d.ts +0 -230
- package/lib/antd-themes/airbnb-light-theme.d.ts.map +0 -1
- package/lib/antd-themes/airbnb-light-theme.js +0 -168
- package/lib/antd-themes/airbnb-light-theme.js.map +0 -1
- package/lib/antd-themes/colors.d.ts.map +0 -1
- package/lib/antd-themes/colors.js.map +0 -1
- package/lib/antd-themes/default-dark-theme.d.ts +0 -199
- package/lib/antd-themes/default-dark-theme.d.ts.map +0 -1
- package/lib/antd-themes/default-dark-theme.js +0 -136
- package/lib/antd-themes/default-dark-theme.js.map +0 -1
- package/lib/antd-themes/default-light-theme.d.ts +0 -199
- package/lib/antd-themes/default-light-theme.d.ts.map +0 -1
- package/lib/antd-themes/default-light-theme.js +0 -136
- package/lib/antd-themes/default-light-theme.js.map +0 -1
- package/lib/antd-themes/github-dark-theme.d.ts +0 -230
- package/lib/antd-themes/github-dark-theme.d.ts.map +0 -1
- package/lib/antd-themes/github-dark-theme.js +0 -168
- package/lib/antd-themes/github-dark-theme.js.map +0 -1
- package/lib/antd-themes/github-light-theme.d.ts +0 -230
- package/lib/antd-themes/github-light-theme.d.ts.map +0 -1
- package/lib/antd-themes/github-light-theme.js +0 -168
- package/lib/antd-themes/github-light-theme.js.map +0 -1
- package/lib/antd-themes/index.d.ts +0 -14
- package/lib/antd-themes/index.d.ts.map +0 -1
- package/lib/antd-themes/slack-dark-theme.d.ts +0 -229
- package/lib/antd-themes/slack-dark-theme.d.ts.map +0 -1
- package/lib/antd-themes/slack-dark-theme.js +0 -167
- package/lib/antd-themes/slack-dark-theme.js.map +0 -1
- package/lib/antd-themes/slack-light-theme.d.ts +0 -229
- package/lib/antd-themes/slack-light-theme.d.ts.map +0 -1
- package/lib/antd-themes/slack-light-theme.js +0 -167
- package/lib/antd-themes/slack-light-theme.js.map +0 -1
- package/lib/antd-themes/spotify-dark-theme.d.ts +0 -230
- package/lib/antd-themes/spotify-dark-theme.d.ts.map +0 -1
- package/lib/antd-themes/spotify-dark-theme.js +0 -168
- package/lib/antd-themes/spotify-dark-theme.js.map +0 -1
- package/lib/antd-themes/spotify-light-theme.d.ts +0 -230
- package/lib/antd-themes/spotify-light-theme.d.ts.map +0 -1
- package/lib/antd-themes/spotify-light-theme.js +0 -168
- package/lib/antd-themes/spotify-light-theme.js.map +0 -1
- package/lib/antd-themes/themeRegistry.d.ts +0 -2229
- package/lib/antd-themes/themeRegistry.d.ts.map +0 -1
- package/lib/antd-themes/themeRegistry.js +0 -12
- package/lib/antd-themes/themeRegistry.js.map +0 -1
- package/lib/components/__tests__/ApplicationErrorHandlerCommon.test.d.ts.map +0 -1
- package/lib/hooks/useSettings.d.ts +0 -5
- package/lib/hooks/useSettings.d.ts.map +0 -1
- package/lib/hooks/useSettings.js +0 -80
- package/lib/hooks/useSettings.js.map +0 -1
- package/lib/utils/getAntdLocale.d.ts +0 -3
- package/lib/utils/getAntdLocale.d.ts.map +0 -1
- package/lib/utils/getAntdLocale.js +0 -18
- package/lib/utils/getAntdLocale.js.map +0 -1
- /package/lib/{components/__tests__ → __tests__}/ApplicationErrorHandlerCommon.test.d.ts +0 -0
package/lib/redux/store.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {combineReducers,configureStore}from'@reduxjs/toolkit';import {applicationErrors}from'./reducers/error.js';import'
|
|
1
|
+
import {combineReducers,configureStore}from'@reduxjs/toolkit';import {applicationErrors}from'./reducers/error.js';import'lodash-es';// Combine the reducers into an object
|
|
2
2
|
const rootReducer = combineReducers({
|
|
3
3
|
applicationErrors: applicationErrors, // Adding applicationErrors reducer
|
|
4
4
|
});
|
package/lib/redux/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../../src/redux/store.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAcY,
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../src/redux/store.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAcY,MAAA,KAAA,GAAS,cAAc;AAGnC,IAAA,OAAM,EAAM,WAAW;AAEvB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/themes/systemFont/index.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/themes/systemFont/index.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA,MAAA,UAAa,GAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLayoutTheme.js","sources":["../../../src/themes/templates/createLayoutTheme.ts"],"sourcesContent":[null],"names":[],"mappings":"qDACO,SAAE,4BAAmC,EAAC,SAAA,GAAA,gBAAA,EAAA;AAG7C,IAAA,MAAA,QAAA,GAAA,
|
|
1
|
+
{"version":3,"file":"createLayoutTheme.js","sources":["../../../src/themes/templates/createLayoutTheme.ts"],"sourcesContent":[null],"names":[],"mappings":"qDACO,SAAE,4BAAmC,EAAC,SAAA,GAAA,gBAAA,EAAA;AAG7C,IAAA,MAAA,QAAA,GAAA,IAAgB,CAAA,KAAA,CAAA,IAAA,CAAA,SAAkB,CAAA;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"darkLayoutTheme.js","sources":["../../../src/themes/templates/darkLayoutTheme.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;IAuBE,0BAAA,EAAA,KAAA,CAAA,OAAA;AAEF,IAAA,0BAAa,EAAA,KAAA,CAAA,OAAwB;AAUrC,IAAA,0BAAa,EAAA,
|
|
1
|
+
{"version":3,"file":"darkLayoutTheme.js","sources":["../../../src/themes/templates/darkLayoutTheme.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;IAuBE,0BAAA,EAAA,KAAA,CAAA,OAAA;AAEF,IAAA,0BAAa,EAAA,KAAA,CAAA,OAAwB;AAUrC,IAAA,0BAAa,EAAA,KAAe,CAAE;AAK9B;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightLayoutTheme.js","sources":["../../../src/themes/templates/lightLayoutTheme.ts"],"sourcesContent":[null],"names":[],"mappings":"0VAuFA,MAAA,
|
|
1
|
+
{"version":3,"file":"lightLayoutTheme.js","sources":["../../../src/themes/templates/lightLayoutTheme.ts"],"sourcesContent":[null],"names":[],"mappings":"0VAuFA,MAAA,MAAO,GAAM;AAQb,IAAA,UAAA,EAAO,KAAM,CAAA,OAAA;AAQb,IAAA,UAAA,EAAO,KAAM,CAAA,IAAK;AAclB,IAAA,IAAA,EAAA,KAAO,CAAA,OAAM;AAKb,IAAA,SAAA,EAAO,KAAA,CAAM,OAAA;AAqEb,IAAA,WAAO,EAAA,KAAM,CAAA,OAAA;AAkBb,IAAA,KAAA,EAAA,KAAO,CAAA,OAAM;AAiBb,IAAA,SAAA,EAAO,KAAA,CAAM,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface DefaultsObject {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Recursively assigns default values only for non-existent keys in target object,
|
|
6
|
+
* based on source object structure. Does not modify any existing values in target.
|
|
7
|
+
* @param target - The target object to assign defaults to
|
|
8
|
+
* @param source - The source object containing the structure and default values
|
|
9
|
+
*/
|
|
10
|
+
//# sourceMappingURL=assignDefaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignDefaults.d.ts","sourceRoot":"","sources":["../../src/utils/assignDefaults.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=assignDefaults.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignDefaults.test.d.ts","sourceRoot":"","sources":["../../src/utils/assignDefaults.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateMenuLink.d.ts","sourceRoot":"","sources":["../../src/utils/generateMenuLink.ts"],"names":[],"mappings":"AAwEA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"generateMenuLink.d.ts","sourceRoot":"","sources":["../../src/utils/generateMenuLink.ts"],"names":[],"mappings":"AAwEA,eAAO,MAAM,gBAAgB,GAAI,SAAI,EAAE,WAAM,WA2B5C,CAAC"}
|
|
@@ -67,12 +67,24 @@ function generatePath(originalPath, params) {
|
|
|
67
67
|
return prefix + segments.join('/');
|
|
68
68
|
}
|
|
69
69
|
const generateMenuPath = (path, params) => {
|
|
70
|
+
// Check if all required parameters exist before attempting to generate the path
|
|
71
|
+
const requiredParams = [];
|
|
72
|
+
path.split('/').forEach((segment) => {
|
|
73
|
+
if (segment.startsWith(':') && !segment.endsWith('?')) {
|
|
74
|
+
const paramName = segment.substring(1);
|
|
75
|
+
requiredParams.push(paramName);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// If any required parameter is missing, return null immediately
|
|
79
|
+
const missingParams = requiredParams.filter((param) => params[param] === undefined);
|
|
80
|
+
if (missingParams.length > 0) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
70
83
|
try {
|
|
71
84
|
const generatedPath = generatePath(path, params);
|
|
72
85
|
return generatedPath;
|
|
73
86
|
}
|
|
74
87
|
catch (err) {
|
|
75
|
-
console.error('Error generating path:', err);
|
|
76
88
|
console.log('Path:', path);
|
|
77
89
|
console.log('Params:', params);
|
|
78
90
|
console.warn(`menu path ${path} is errored due to missing params. If it is not required, please use hidemenu option`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateMenuLink.js","sources":["../../src/utils/generateMenuLink.ts"],"sourcesContent":[null],"names":[],"mappings":"AAwEA,
|
|
1
|
+
{"version":3,"file":"generateMenuLink.js","sources":["../../src/utils/generateMenuLink.ts"],"sourcesContent":[null],"names":[],"mappings":"AAwEA,SAAA,eAAa,EAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateMenuLink.test.d.ts","sourceRoot":"","sources":["../../src/utils/generateMenuLink.test.ts"],"names":[],"mappings":""}
|
package/lib/utils/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ export * from './componentSize';
|
|
|
3
3
|
export * from './parentRoute';
|
|
4
4
|
export * from './menuUtils';
|
|
5
5
|
export * from './matchMenuKeys';
|
|
6
|
-
export * from './getAntdLocale';
|
|
7
6
|
export * from './generateMenuLink';
|
|
7
|
+
export * from './settingsDifference';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/utils/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchMenuKeys.d.ts","sourceRoot":"","sources":["../../src/utils/matchMenuKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;GAOG;AAEH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"matchMenuKeys.d.ts","sourceRoot":"","sources":["../../src/utils/matchMenuKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;GAOG;AAEH,eAAO,MAAM,gBAAgB,GAAI,WAAW,YAAY,EAAE,EAAE,aAAa,MAAM,KAAG,MAAM,EA2CvF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchMenuKeys.js","sources":["../../src/utils/matchMenuKeys.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AAEA;;;;;;;AAOG,MAAA,gBAAA,GAAA,CAAA,SAAA,EAAA,WAAA,KAAA;AAEH,
|
|
1
|
+
{"version":3,"file":"matchMenuKeys.js","sources":["../../src/utils/matchMenuKeys.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AAEA;;;;;;;AAOG,MAAA,gBAAA,GAAA,CAAA,SAAA,EAAA,WAAA,KAAA;AAEH,IAAA,MAAA,SAAO,GAAM,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/lib/utils/menuUtils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type IMenuData } from '@common-stack/client-react/lib/interfaces/menu';
|
|
2
2
|
/**
|
|
3
3
|
* Custom menuDataRender function which will be called on component render
|
|
4
4
|
* to filter out menus from props.menuData on the basis of authorities.
|
|
@@ -9,7 +9,7 @@ import { IMenuDataItem } from '@common-stack/client-react/lib/interfaces/menu';
|
|
|
9
9
|
* @param menuList
|
|
10
10
|
* @param authorities
|
|
11
11
|
*/
|
|
12
|
-
export declare const menuDataRender: (menuList:
|
|
12
|
+
export declare const menuDataRender: (menuList: IMenuData[], authorities: any) => IMenuData[];
|
|
13
13
|
export declare function transformData(data: any): any;
|
|
14
14
|
export declare function setLocale(obj: any, parentName?: string): void;
|
|
15
15
|
export declare const addProLayoutParentKeys: (menuData?: any[], parentKeys?: string[]) => any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menuUtils.d.ts","sourceRoot":"","sources":["../../src/utils/menuUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"menuUtils.d.ts","sourceRoot":"","sources":["../../src/utils/menuUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAChF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,EAAE,EAAE,gBAAW,KAAG,SAAS,EAqB5E,CAAC;AAMF,wBAAgB,aAAa,CAAC,IAAI,KAAA,OAcjC;AACD,wBAAgB,SAAS,CAAC,GAAG,KAAA,EAAE,UAAU,SAAK,QAO7C;AAED,eAAO,MAAM,sBAAsB,GAAI,WAAW,GAAG,EAAE,EAAE,aAAY,MAAM,EAAO,UASjF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,WAAM,QAa5C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,KAAA,QAY9C"}
|
package/lib/utils/menuUtils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {get,sortBy
|
|
1
|
+
import {get,cloneDeep,sortBy}from'lodash-es';import {PermissionType}from'common';import {logger}from'@cdm-logger/client';/**
|
|
2
2
|
* Custom menuDataRender function which will be called on component render
|
|
3
3
|
* to filter out menus from props.menuData on the basis of authorities.
|
|
4
4
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menuUtils.js","sources":["../../src/utils/menuUtils.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAaG;AACH;AA2BA;AAeA,MAAA,uCAA+B;AAS/B,
|
|
1
|
+
{"version":3,"file":"menuUtils.js","sources":["../../src/utils/menuUtils.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAaG;AACH;AA2BA;AAeA,MAAA,uCAA+B;AAS/B,IAAA,MAAA,CAAA,KAAO,CAAA,kCAAgC,CAAA;AAWvC,IAAA,MAAA,cAAa,GAAA,mBAA0B,CAAA,QAAA,CAAA;AAevC,IAAA,QAAA;;;AAGG,QAAA,MAAA,EAAA,SAAA,EAAA,GAAA,IAAA;AACH,QAAA,IAAA,KAAA,CAAA,OAAgB,CAAA,SAAA,CAAA,IAAA,SAAA,EAA2B,MAAI,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parentRoute.d.ts","sourceRoot":"","sources":["../../src/utils/parentRoute.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"parentRoute.d.ts","sourceRoot":"","sources":["../../src/utils/parentRoute.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,GAAa,cAAS,EAAE,iBAAY,QAwBhE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse LAYOUT_SETTINGS from config (which may be a JSON string from env variable)
|
|
3
|
+
* This is the single place where we handle the parsing logic
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseEnvLayoutSettings(): Record<string, any>;
|
|
6
|
+
//# sourceMappingURL=parseEnvUiLayoutSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEnvUiLayoutSettings.d.ts","sourceRoot":"","sources":["../../src/utils/parseEnvUiLayoutSettings.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAwB5D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {config}from'../config/env-config.js';import'../config/defaultSettings.js';/**
|
|
2
|
+
* Parse LAYOUT_SETTINGS from config (which may be a JSON string from env variable)
|
|
3
|
+
* This is the single place where we handle the parsing logic
|
|
4
|
+
*/
|
|
5
|
+
function parseEnvLayoutSettings() {
|
|
6
|
+
try {
|
|
7
|
+
if (!config.LAYOUT_SETTINGS) {
|
|
8
|
+
return {};
|
|
9
|
+
}
|
|
10
|
+
// If it's already an object (parsed by envalid json validator), return it
|
|
11
|
+
if (typeof config.LAYOUT_SETTINGS === 'object' && !Array.isArray(config.LAYOUT_SETTINGS)) {
|
|
12
|
+
return config.LAYOUT_SETTINGS;
|
|
13
|
+
}
|
|
14
|
+
// If it's a string, parse it (this happens when envalid uses str validator)
|
|
15
|
+
if (typeof config.LAYOUT_SETTINGS === 'string') {
|
|
16
|
+
const parsed = JSON.parse(config.LAYOUT_SETTINGS);
|
|
17
|
+
return parsed || {};
|
|
18
|
+
}
|
|
19
|
+
console.warn('⚠️ config.LAYOUT_SETTINGS is unexpected type:', typeof config.LAYOUT_SETTINGS);
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error('❌ Error parsing LAYOUT_SETTINGS:', error);
|
|
24
|
+
console.error('❌ Value was:', config.LAYOUT_SETTINGS);
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
}export{parseEnvLayoutSettings};//# sourceMappingURL=parseEnvUiLayoutSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEnvUiLayoutSettings.js","sources":["../../src/utils/parseEnvUiLayoutSettings.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseEnvUiLayoutSettings.test.d.ts","sourceRoot":"","sources":["../../src/utils/parseEnvUiLayoutSettings.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seperatedMenus.js","sources":["../../src/utils/seperatedMenus.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AAGY,uBAAkB,GAAG,CAAA,KAAA,KAAA;AAC7B,IAAA,IAAA,CAAA,KAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"seperatedMenus.js","sources":["../../src/utils/seperatedMenus.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AAGY,uBAAkB,GAAG,CAAA,KAAA,KAAA;AAC7B,IAAA,IAAA,CAAA,KAAU,CAAC,OAAE,CAAA,KAAA,CAAY,EAAE;AAC3B,QAAA,OAAW,CAAC,GAAE,CAAA,kBAAe,EAAA,KAAA,CAAA;AAC7B,IAAA;AACA;IACF,MAAA,UAAA,GAAA,KAAA,EAAA,MAAA,CAAA,CAAA,IAAA,KAAA,IAAA,CAAA,QAAA,KAAA,OAAA,CAAA,IAAA,EAAA;AAGF,IAAA,MAAA,WAAa,GAAA,KAAA,EAAA,MAAA,CAAiB,CAAA,IAAG,KAAO,IAAA,CAAA,QAAY,KAAE,QAAK;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settingsDiff.test.d.ts","sourceRoot":"","sources":["../../src/utils/settingsDiff.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares settings objects and saves only the differences
|
|
3
|
+
* @returns An object containing only the differences, or an empty object on error
|
|
4
|
+
*/
|
|
5
|
+
export declare const compareAndSaveSettingsDifferences: (currentSettings: any, defaultSettings: any) => any;
|
|
6
|
+
//# sourceMappingURL=settingsDifference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settingsDifference.d.ts","sourceRoot":"","sources":["../../src/utils/settingsDifference.ts"],"names":[],"mappings":"AAkLA;;;GAGG;AACH,eAAO,MAAM,iCAAiC,GAAI,iBAAiB,GAAG,EAAE,iBAAiB,GAAG,QA8D3F,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import {cloneDeep,isObject,isEqual,transform}from'lodash-es';/**
|
|
2
|
+
* Gets the deep differences between two objects
|
|
3
|
+
* Returns only the values that differ from obj2
|
|
4
|
+
*/
|
|
5
|
+
const getDifference = (obj1, obj2) => {
|
|
6
|
+
// Create copies to avoid modifying the original objects
|
|
7
|
+
const source = cloneDeep(obj1);
|
|
8
|
+
const target = cloneDeep(obj2);
|
|
9
|
+
// If obj1 is undefined or null, return undefined to avoid adding to result
|
|
10
|
+
if (source === undefined || source === null) {
|
|
11
|
+
// Only include null/undefined if they differ from obj2
|
|
12
|
+
return source !== target ? source : undefined;
|
|
13
|
+
}
|
|
14
|
+
// If we're comparing different types, or if obj2 is null/undefined, return obj1
|
|
15
|
+
if (typeof source !== typeof target || target === undefined || target === null) {
|
|
16
|
+
return source;
|
|
17
|
+
}
|
|
18
|
+
// Handle non-object comparisons (primitives, functions, etc.)
|
|
19
|
+
// IMPORTANT: Check for string BEFORE isObject check, because strings are technically objects
|
|
20
|
+
if (typeof source === 'string' || typeof target === 'string') {
|
|
21
|
+
if (typeof source === 'string' && typeof target === 'string') {
|
|
22
|
+
// Case-insensitive string comparison
|
|
23
|
+
return source.toLowerCase() !== target.toLowerCase() ? source : undefined;
|
|
24
|
+
}
|
|
25
|
+
// If types differ, return the source value
|
|
26
|
+
return source;
|
|
27
|
+
}
|
|
28
|
+
if (!isObject(source) || !isObject(target)) {
|
|
29
|
+
return !isEqual(source, target) ? source : undefined;
|
|
30
|
+
}
|
|
31
|
+
// For arrays, do a simple equality check and return the full array if different
|
|
32
|
+
if (Array.isArray(source) && Array.isArray(target)) {
|
|
33
|
+
return !isEqual(source, target) ? source : undefined;
|
|
34
|
+
}
|
|
35
|
+
// Prevent string from being treated as an object with numeric keys
|
|
36
|
+
if (Array.isArray(source) !== Array.isArray(target)) {
|
|
37
|
+
return source;
|
|
38
|
+
}
|
|
39
|
+
// For objects, do deep comparison
|
|
40
|
+
const result = transform(source, (result, value, key) => {
|
|
41
|
+
// Skip keys that are in source but have the exact same value in target
|
|
42
|
+
if (key in target && isEqual(value, target[key])) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// If the key doesn't exist in target, add it to the result
|
|
46
|
+
if (!(key in target)) {
|
|
47
|
+
result[key] = value;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// For nested objects, recursively get differences
|
|
51
|
+
if (isObject(value) && isObject(target[key])) {
|
|
52
|
+
const nestedDiff = getDifference(value, target[key]);
|
|
53
|
+
if (nestedDiff !== undefined && (Array.isArray(nestedDiff) || Object.keys(nestedDiff).length > 0)) {
|
|
54
|
+
result[key] = nestedDiff;
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// For non-objects (primitives, etc.), only add if different
|
|
59
|
+
if (!isEqual(value, target[key])) {
|
|
60
|
+
result[key] = value;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// Return undefined if the resulting object is empty
|
|
64
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Compares settings objects and saves only the differences
|
|
68
|
+
* @returns An object containing only the differences, or an empty object on error
|
|
69
|
+
*/
|
|
70
|
+
const compareAndSaveSettingsDifferences = (currentSettings, defaultSettings) => {
|
|
71
|
+
try {
|
|
72
|
+
if (!currentSettings || !defaultSettings) {
|
|
73
|
+
console.warn('Missing settings objects for comparison');
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
// Make deep clones to avoid modifying the original objects
|
|
77
|
+
const current = cloneDeep(currentSettings);
|
|
78
|
+
const defaults = cloneDeep(defaultSettings);
|
|
79
|
+
// Extract overrides (bracket keys) from current settings
|
|
80
|
+
const overrides = {};
|
|
81
|
+
Object.keys(current).forEach((key) => {
|
|
82
|
+
if (key.startsWith('[') && key.endsWith(']')) {
|
|
83
|
+
overrides[key] = current[key];
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// Get differences for non-override settings (base settings)
|
|
87
|
+
const currentBase = { ...current };
|
|
88
|
+
const defaultBase = { ...defaults };
|
|
89
|
+
// Remove all bracket keys from both objects
|
|
90
|
+
Object.keys(currentBase).forEach((key) => {
|
|
91
|
+
if (key.startsWith('[') && key.endsWith(']')) {
|
|
92
|
+
delete currentBase[key];
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
Object.keys(defaultBase).forEach((key) => {
|
|
96
|
+
if (key.startsWith('[') && key.endsWith(']')) {
|
|
97
|
+
delete defaultBase[key];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
const baseSettingsDiff = getDifference(currentBase, defaultBase);
|
|
101
|
+
// Combine base settings differences with overrides
|
|
102
|
+
// const diffSettings: any = {};
|
|
103
|
+
// // Add base settings differences if any exist
|
|
104
|
+
// if (baseSettingsDiff && Object.keys(baseSettingsDiff).length > 0) {
|
|
105
|
+
// Object.assign(diffSettings, baseSettingsDiff);
|
|
106
|
+
// }
|
|
107
|
+
// console.log('diffSettings :', diffSettings);
|
|
108
|
+
// // Add all overrides (they are always different from defaults)
|
|
109
|
+
// Object.assign(diffSettings, overrides);
|
|
110
|
+
// // If there are no differences at all, return early
|
|
111
|
+
// if (Object.keys(diffSettings).length === 0) {
|
|
112
|
+
// return {};
|
|
113
|
+
// }
|
|
114
|
+
// Remove empty objects from the diff
|
|
115
|
+
const cleanDiffSettings = removeEmptyObjects(baseSettingsDiff);
|
|
116
|
+
return cleanDiffSettings;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error('Error comparing settings differences:', error);
|
|
120
|
+
return {};
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Recursively removes empty objects from an object
|
|
125
|
+
* This helps clean up the diff payload
|
|
126
|
+
*/
|
|
127
|
+
function removeEmptyObjects(obj) {
|
|
128
|
+
if (!isObject(obj) || Array.isArray(obj)) {
|
|
129
|
+
return obj;
|
|
130
|
+
}
|
|
131
|
+
const result = {};
|
|
132
|
+
let hasKeys = false;
|
|
133
|
+
Object.keys(obj).forEach((key) => {
|
|
134
|
+
const value = obj[key];
|
|
135
|
+
if (isObject(value) && !Array.isArray(value)) {
|
|
136
|
+
const cleanValue = removeEmptyObjects(value);
|
|
137
|
+
if (Object.keys(cleanValue).length > 0) {
|
|
138
|
+
result[key] = cleanValue;
|
|
139
|
+
hasKeys = true;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else if (value !== undefined) {
|
|
143
|
+
result[key] = value;
|
|
144
|
+
hasKeys = true;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
return hasKeys ? result : {};
|
|
148
|
+
}export{compareAndSaveSettingsDifferences};//# sourceMappingURL=settingsDifference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settingsDifference.js","sources":["../../src/utils/settingsDifference.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAqLG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settingsDifference.test.d.ts","sourceRoot":"","sources":["../../src/utils/settingsDifference.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@admin-layout/client",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.2.1-alpha.1",
|
|
4
4
|
"description": "Sample client for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -19,14 +19,19 @@
|
|
|
19
19
|
"test": "cross-env ENV_FILE=../../config/test/test.env jest",
|
|
20
20
|
"test:debug": "npm test -- --runInBand",
|
|
21
21
|
"test:watch": "npm test -- --watch",
|
|
22
|
+
"vitest": "cross-env ENV_FILE=../../config/test/test.env vitest",
|
|
22
23
|
"watch": "yarn build:lib:watch"
|
|
23
24
|
},
|
|
24
25
|
"dependencies": {
|
|
25
|
-
"@common-stack/client-core": "7.0.2-alpha.1",
|
|
26
|
-
"common": "11.0.2-alpha.0",
|
|
27
26
|
"serialize-error": "^8.0.0"
|
|
28
27
|
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"common": "11.2.1-alpha.1",
|
|
30
|
+
"rc-menu": "^9.16.1"
|
|
31
|
+
},
|
|
29
32
|
"peerDependencies": {
|
|
33
|
+
"@adminide-stack/core": ">=12.0.4-alpha.247",
|
|
34
|
+
"@common-stack/client-core": ">=7.1.1-alpha.63",
|
|
30
35
|
"envalid": "*",
|
|
31
36
|
"history": "*",
|
|
32
37
|
"lodash-es": "^4.17.21",
|
|
@@ -39,5 +44,5 @@
|
|
|
39
44
|
"typescript": {
|
|
40
45
|
"definition": "lib/index.d.ts"
|
|
41
46
|
},
|
|
42
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "07c2534a0ba6f7955e1a718f54aa5e26b78cbacc"
|
|
43
48
|
}
|