@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 const useLayoutSettings: () => {
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":"AAkBA,eAAO,MAAM,iBAAiB;;0BAgDP,GAAG;;CAyEzB,CAAC;AAEF,wBAAgB,mBAAmB,IAAI,QAAQ,GAAG,SAAS,CAY1D"}
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 {useCallback}from'react';import {useDispatch,useSelector,shallowEqual}from'react-redux';import {merge}from'lodash-es';import {useParams}from'@remix-run/react';import {CHANGE_SETTINGS_ACTION}from'../constants/constants.js';import {compareAndSaveSettingsDifferences}from'../utils/settingsDifference.js';const updateColorWeak = (colorWeak) => {
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
- const { colorWeak, contentWidth } = config;
38
+ const setSettings = useCallback(async (config, changedSettings) => {
39
+ console.log('3️⃣ setSetting called', { config, changedSettings });
49
40
  try {
50
- // Handle UI updates for special settings
51
- if (settings.contentWidth !== contentWidth) {
52
- if (typeof window !== 'undefined') {
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
- const payloadConfig = config?.routerPattern
64
- ? { [config.routerPattern]: cleanDiffSettings }
65
- : cleanDiffSettings;
66
- console.log('payloadConfig :', payloadConfig);
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({ config: payloadConfig, deviceType: getClientDeviceType() }),
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
- // If response is HTML instead of JSON, log it and throw error
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: mergedSettings,
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{getClientDeviceType,useLayoutSettings};//# sourceMappingURL=useLayoutSettings.js.map
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{getClientDeviceType,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
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.70",
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": "a086ab5ea5213416f3c5e929bd68a74f2e89979e"
47
+ "gitHead": "74e741b33a694e67abed0694a1d76964550ef2c4"
48
48
  }