@admin-layout/client 12.0.16-alpha.70 → 12.0.16-alpha.72
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.
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export declare
|
|
1
|
+
export declare function useLayoutSettings(): {
|
|
2
2
|
settings: any;
|
|
3
|
-
setSettings: (config: any) => Promise<any>;
|
|
3
|
+
setSettings: (config: any, changedSettings?: Record<string, any>) => Promise<any>;
|
|
4
4
|
getSettings: () => Promise<any>;
|
|
5
5
|
};
|
|
6
|
-
export declare function getClientDeviceType(): 'mobile' | 'desktop';
|
|
7
6
|
//# sourceMappingURL=useLayoutSettings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayoutSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/useLayoutSettings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useLayoutSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/useLayoutSettings.ts"],"names":[],"mappings":"AAOA,wBAAgB,iBAAiB;;0BAgDV,GAAG,oBAAoB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;EA8DhE"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
// @sri to avoid breaking during SSR, split into to checks
|
|
3
|
-
if (typeof window !== 'undefined') {
|
|
4
|
-
const root = document.getElementById('root');
|
|
5
|
-
if (root) {
|
|
6
|
-
root.className = colorWeak ? 'colorWeak' : '';
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
const useLayoutSettings = () => {
|
|
1
|
+
import {useParams}from'@remix-run/react';import {useCallback}from'react';import {useDispatch,useSelector,shallowEqual}from'react-redux';import {CHANGE_SETTINGS_ACTION}from'../constants/constants.js';function useLayoutSettings() {
|
|
11
2
|
const dispatch = useDispatch();
|
|
12
3
|
useSelector((state) => state.settings, shallowEqual);
|
|
13
4
|
// Filter out machine internal state - settings are now flat (no uilayout wrapper)
|
|
@@ -44,66 +35,67 @@ const useLayoutSettings = () => {
|
|
|
44
35
|
return {};
|
|
45
36
|
}
|
|
46
37
|
}, []);
|
|
47
|
-
const setSettings = useCallback(async (config) => {
|
|
48
|
-
|
|
38
|
+
const setSettings = useCallback(async (config, changedSettings) => {
|
|
39
|
+
console.log('3️⃣ setSetting called', { config, changedSettings });
|
|
49
40
|
try {
|
|
50
|
-
//
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
window.dispatchEvent(new Event('resize'));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
updateColorWeak(!!colorWeak);
|
|
57
|
-
const cleanDiffSettings = compareAndSaveSettingsDifferences(config, settings);
|
|
58
|
-
if (Object.keys(cleanDiffSettings).length === 0)
|
|
41
|
+
// 1. Calculate payload first
|
|
42
|
+
if (Object.keys(changedSettings).length === 0) {
|
|
43
|
+
console.log('⏭️ No changes to persist');
|
|
59
44
|
return;
|
|
60
|
-
if (config?.routerPattern && cleanDiffSettings.routerPattern) {
|
|
61
|
-
delete cleanDiffSettings.routerPattern;
|
|
62
45
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
46
|
+
// 2. Apply UI side effects ONLY if relevant settings changed
|
|
47
|
+
const { colorWeak, contentWidth } = config;
|
|
48
|
+
// Only trigger resize if contentWidth actually changed
|
|
49
|
+
if (contentWidth !== undefined &&
|
|
50
|
+
settings.contentWidth !== contentWidth &&
|
|
51
|
+
typeof window !== 'undefined') {
|
|
52
|
+
console.log('📐 Content width changed, triggering resize');
|
|
53
|
+
window.dispatchEvent(new Event('resize'));
|
|
54
|
+
}
|
|
55
|
+
// Only update colorWeak if it changed
|
|
56
|
+
if (colorWeak !== undefined && settings.colorWeak !== colorWeak) {
|
|
57
|
+
console.log('🎨 Color weak mode changed');
|
|
58
|
+
updateColorWeak(!!colorWeak);
|
|
59
|
+
}
|
|
60
|
+
// 3. Make API call
|
|
67
61
|
const response = await fetch('/resources/settings', {
|
|
68
62
|
method: 'POST',
|
|
69
63
|
headers: {
|
|
70
64
|
'Content-Type': 'application/json',
|
|
71
65
|
orgName: orgNameFromParams || orgNameFromUrl || '',
|
|
72
66
|
},
|
|
73
|
-
body: JSON.stringify({
|
|
67
|
+
body: JSON.stringify({
|
|
68
|
+
config: changedSettings,
|
|
69
|
+
deviceType: getClientDeviceType(),
|
|
70
|
+
}),
|
|
74
71
|
});
|
|
75
|
-
// Check content type before parsing
|
|
76
|
-
const contentType = response.headers.get('content-type');
|
|
77
|
-
// console.log('Response content-type:', contentType);
|
|
78
72
|
if (!response.ok) {
|
|
79
73
|
const errorText = await response.text();
|
|
80
74
|
console.error('Server error response:', errorText.substring(0, 500));
|
|
81
75
|
throw new Error('Failed to update settings');
|
|
82
76
|
}
|
|
83
|
-
//
|
|
84
|
-
if (!contentType || !contentType.includes('application/json')) {
|
|
85
|
-
const text = await response.text();
|
|
86
|
-
console.error('❌ Server returned non-JSON response (HTML error page):');
|
|
87
|
-
console.error('Content-Type:', contentType);
|
|
88
|
-
console.error('Response preview:', text.substring(0, 500));
|
|
89
|
-
throw new Error('Server crashed - returned HTML instead of JSON. Check server terminal for errors.');
|
|
90
|
-
}
|
|
91
|
-
const result = await response.json();
|
|
92
|
-
const pageDefaultSettings = result;
|
|
93
|
-
// Merge the full config with default settings before updating the store
|
|
94
|
-
const mergedSettings = merge({}, pageDefaultSettings, config);
|
|
77
|
+
// 4. update redux
|
|
95
78
|
dispatch({
|
|
96
79
|
type: CHANGE_SETTINGS_ACTION,
|
|
97
|
-
payload:
|
|
80
|
+
payload: config,
|
|
98
81
|
});
|
|
99
82
|
}
|
|
100
83
|
catch (error) {
|
|
101
|
-
console.error(error);
|
|
84
|
+
console.error('❌ setSettings error:', error);
|
|
102
85
|
return null;
|
|
103
86
|
}
|
|
104
87
|
}, [dispatch, settings]);
|
|
105
88
|
return { settings, setSettings, getSettings };
|
|
106
|
-
}
|
|
89
|
+
}
|
|
90
|
+
function updateColorWeak(colorWeak) {
|
|
91
|
+
// @sri to avoid breaking during SSR, split into to checks
|
|
92
|
+
if (typeof window !== 'undefined') {
|
|
93
|
+
const root = document.getElementById('root');
|
|
94
|
+
if (root) {
|
|
95
|
+
root.className = colorWeak ? 'colorWeak' : '';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
107
99
|
function getClientDeviceType() {
|
|
108
100
|
if (typeof window === 'undefined') {
|
|
109
101
|
return 'desktop'; // SSR fallback
|
|
@@ -113,4 +105,4 @@ function getClientDeviceType() {
|
|
|
113
105
|
// Also check viewport width as fallback
|
|
114
106
|
const isSmallViewport = window.matchMedia('(max-width: 768px)').matches;
|
|
115
107
|
return isMobile || isSmallViewport ? 'mobile' : 'desktop';
|
|
116
|
-
}export{
|
|
108
|
+
}export{useLayoutSettings};//# sourceMappingURL=useLayoutSettings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayoutSettings.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useLayoutSettings.js","sources":["../../src/hooks/useLayoutSettings.ts"],"sourcesContent":[null],"names":[],"mappings":"uMAqHC,SAAA,iBAAA,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{SearchBarBehavior}from'./interfaces/settings.js';export{APPLICATION_ERROR_SLOT_FILL,CHANGE_LANGUAGE,CHANGE_SETTINGS_ACTION}from'./constants/constants.js';export{BACKEND_ERROR,CLEAR_APPLICATION_ERRORS,DISMISS_APPLICATION_ERROR,LOG_APPLICATION_ERROR,RESTORE_APPLICATION_ERRORS}from'./constants/error.js';export{HEADER_SEARCHBAR_FILL,HEADER_SEARCH_BUTTON_FILL,RIGHT_CONTENT_FILL,SCROLL_END_FILL}from'./constants/layout.js';export{languages}from'./constants/languages.js';export{dismissApplicationError,restoreApplicationError,setApplicationError}from'./redux/actions/error-actions.js';export{applicationErrors,initialErrorsState}from'./redux/reducers/error.js';export{settingsReducer}from'./redux/reducers/settings.js';export{store}from'./redux/store.js';export{useAppDispatch,useAppSelector}from'./redux/hooks.js';export{getMenuSeparation}from'./utils/seperatedMenus.js';export{useComponentSize,useIsomorphicLayoutEffect}from'./utils/componentSize.js';export{matchParentRoute}from'./utils/parentRoute.js';export{addProLayoutParentKeys,filterRoutesWithLocale,menuDataRender,removeUnnecessaryProperties,setLocale,transformData}from'./utils/menuUtils.js';export{getMatchMenuKeys}from'./utils/matchMenuKeys.js';export{generateMenuPath}from'./utils/generateMenuLink.js';export{compareAndSaveSettingsDifferences}from'./utils/settingsDifference.js';export{ApplicationErrorHandlerCommon}from'./components/ApplicationErrorHandlerCommon.js';export{ErrorBoundaryCommon}from'./components/ErrorBoundaryCommon.js';export{ApplicationErrorFillWrapper}from'./components/ApplicationErrorFillWrapper.js';export{LayoutCookieProvider}from'./components/LayoutCookieProvider.js';export{ErrorLink,errorReduxLink}from'./graphql/link/error-link.js';export{systemFont}from'./themes/systemFont/index.js';export{borderRadius,colors,lightLayoutTheme,lightNavigationBarTheme,lightTabBarTheme,shadows,sizes,spacings,textVariants}from'./themes/templates/lightLayoutTheme.js';export{createLayoutTheme}from'./themes/templates/createLayoutTheme.js';export{darkColors,darkLayoutTheme,darkNavigationBarTheme,darkTabBarTheme}from'./themes/templates/darkLayoutTheme.js';export{config}from'./config/env-config.js';export{AMENITIES,DEFAULT_HEADER,DEFAULT_LAYOUT,SEARCH_TYPES,SHARED_VIEW_CONFIG}from'./config/defaultSettings.js';export{
|
|
1
|
+
export{SearchBarBehavior}from'./interfaces/settings.js';export{APPLICATION_ERROR_SLOT_FILL,CHANGE_LANGUAGE,CHANGE_SETTINGS_ACTION}from'./constants/constants.js';export{BACKEND_ERROR,CLEAR_APPLICATION_ERRORS,DISMISS_APPLICATION_ERROR,LOG_APPLICATION_ERROR,RESTORE_APPLICATION_ERRORS}from'./constants/error.js';export{HEADER_SEARCHBAR_FILL,HEADER_SEARCH_BUTTON_FILL,RIGHT_CONTENT_FILL,SCROLL_END_FILL}from'./constants/layout.js';export{languages}from'./constants/languages.js';export{dismissApplicationError,restoreApplicationError,setApplicationError}from'./redux/actions/error-actions.js';export{applicationErrors,initialErrorsState}from'./redux/reducers/error.js';export{settingsReducer}from'./redux/reducers/settings.js';export{store}from'./redux/store.js';export{useAppDispatch,useAppSelector}from'./redux/hooks.js';export{getMenuSeparation}from'./utils/seperatedMenus.js';export{useComponentSize,useIsomorphicLayoutEffect}from'./utils/componentSize.js';export{matchParentRoute}from'./utils/parentRoute.js';export{addProLayoutParentKeys,filterRoutesWithLocale,menuDataRender,removeUnnecessaryProperties,setLocale,transformData}from'./utils/menuUtils.js';export{getMatchMenuKeys}from'./utils/matchMenuKeys.js';export{generateMenuPath}from'./utils/generateMenuLink.js';export{compareAndSaveSettingsDifferences}from'./utils/settingsDifference.js';export{ApplicationErrorHandlerCommon}from'./components/ApplicationErrorHandlerCommon.js';export{ErrorBoundaryCommon}from'./components/ErrorBoundaryCommon.js';export{ApplicationErrorFillWrapper}from'./components/ApplicationErrorFillWrapper.js';export{LayoutCookieProvider}from'./components/LayoutCookieProvider.js';export{ErrorLink,errorReduxLink}from'./graphql/link/error-link.js';export{systemFont}from'./themes/systemFont/index.js';export{borderRadius,colors,lightLayoutTheme,lightNavigationBarTheme,lightTabBarTheme,shadows,sizes,spacings,textVariants}from'./themes/templates/lightLayoutTheme.js';export{createLayoutTheme}from'./themes/templates/createLayoutTheme.js';export{darkColors,darkLayoutTheme,darkNavigationBarTheme,darkTabBarTheme}from'./themes/templates/darkLayoutTheme.js';export{config}from'./config/env-config.js';export{AMENITIES,DEFAULT_HEADER,DEFAULT_LAYOUT,SEARCH_TYPES,SHARED_VIEW_CONFIG}from'./config/defaultSettings.js';export{useLayoutSettings}from'./hooks/useLayoutSettings.js';export{usePermissionAutoFetch,useSetting,useSettingsLoader}from'@adminide-stack/platform-client';export{ClientOnly}from'./hooks/Client-only.js';export{blue}from'./colors/presets/blue.js';export{brinkPink}from'./colors/presets/brinkPink.js';export{cyan}from'./colors/presets/cyan.js';export{green}from'./colors/presets/green.js';export{lime}from'./colors/presets/lime.js';export{orange}from'./colors/presets/orange.js';export{pink}from'./colors/presets/pink.js';export{purple}from'./colors/presets/purple.js';export{red}from'./colors/presets/red.js';export{skyBlue}from'./colors/presets/skyBlue.js';export{turquoise}from'./colors/presets/turquoise.js';export{yellow}from'./colors/presets/yellow.js';export{white}from'./colors/presets/white.js';export{black}from'./colors/presets/black.js';export{colorList,getThemeColors}from'./colors/colorsList.js';//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@admin-layout/client",
|
|
3
|
-
"version": "12.0.16-alpha.
|
|
3
|
+
"version": "12.0.16-alpha.72",
|
|
4
4
|
"description": "Sample client for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"typescript": {
|
|
45
45
|
"definition": "lib/index.d.ts"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "74e741b33a694e67abed0694a1d76964550ef2c4"
|
|
48
48
|
}
|