@owp/core 2.0.3 → 2.1.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/dist/contexts.js CHANGED
@@ -1,36 +1,36 @@
1
1
  var L = Object.defineProperty;
2
- var u = (i, r) => L(i, "name", { value: r, configurable: !0 });
2
+ var u = (i, m) => L(i, "name", { value: m, configurable: !0 });
3
3
  import { O, u as h, a as S, b as w } from "./useShortcuts-BjtlXprQ.js";
4
4
  import { c as ut } from "./useShortcuts-BjtlXprQ.js";
5
5
  import { j as e, a as C } from "./emotion-react-jsx-runtime.browser.esm-BMvSswBW.js";
6
6
  import { H as x } from "./lazyLoadedSlices-DGKpiSM4.js";
7
7
  import { StyledEngineProvider as F } from "@mui/material/styles";
8
- import { QueryClient as A, QueryClientProvider as y } from "@tanstack/react-query";
9
- import { useRef as p, useEffect as T } from "react";
10
- import { O as I } from "./OwpStoreProvider-HmqsAzRG.js";
8
+ import { QueryClient as I, QueryClientProvider as A } from "@tanstack/react-query";
9
+ import { useRef as d, useEffect as y } from "react";
10
+ import { O as T } from "./OwpStoreProvider-HmqsAzRG.js";
11
11
  import { m as f } from "./OwpUtils-DW44HL74.js";
12
12
  import { O as j, a as E, b as z, C as D } from "./Close-C91nHTKM.js";
13
13
  import { u as G, a as H } from "./usePageLockLoading-BGODEt_k.js";
14
14
  import "@mui/material";
15
- import { DialogsProvider as N } from "@toolpad/core/useDialogs";
15
+ import { DialogsProvider as M } from "@toolpad/core/useDialogs";
16
16
  import "./localStorageKeys-Che0CNci.js";
17
- import { g as R } from "./language-DaxFvPOq.js";
17
+ import { g as N } from "./language-DaxFvPOq.js";
18
18
  import "./isString-Codtu20I.js";
19
19
  import "dayjs";
20
- import { SnackbarProvider as Q, closeSnackbar as B } from "notistack";
20
+ import { SnackbarProvider as R, closeSnackbar as Q } from "notistack";
21
21
  import "./storageKeys-C6xHFiTo.js";
22
- import U from "@mui/material/IconButton";
23
- function mt({
22
+ import B from "@mui/material/IconButton";
23
+ function st({
24
24
  children: i,
25
- queryClient: r,
25
+ queryClient: m,
26
26
  queryClientConfig: t,
27
27
  storePreloadedState: o,
28
28
  styledEngineProviderProps: l = { injectFirst: !0 },
29
29
  ...n
30
30
  }) {
31
- const s = p(void 0), a = p(void 0), g = r ?? s.current ?? (s.current = new A(t));
31
+ const r = d(void 0), a = d(void 0), g = m ?? r.current ?? (r.current = new I(t));
32
32
  if (!a.current) {
33
- const m = x(
33
+ const s = x(
34
34
  n.configs.settingsConfig,
35
35
  n.configs.themesConfig
36
36
  );
@@ -38,17 +38,17 @@ function mt({
38
38
  {},
39
39
  {
40
40
  owpSettings: {
41
- initial: m,
42
- defaults: f({}, m),
43
- current: f({}, m)
41
+ initial: s,
42
+ defaults: f({}, s),
43
+ current: f({}, s)
44
44
  }
45
45
  },
46
46
  o
47
47
  );
48
48
  }
49
- return /* @__PURE__ */ e(O, { ...n, children: /* @__PURE__ */ e(I, { preloadedState: a.current, children: /* @__PURE__ */ e(y, { client: g, children: /* @__PURE__ */ e(F, { ...l, children: i }) }) }) });
49
+ return /* @__PURE__ */ e(O, { ...n, children: /* @__PURE__ */ e(T, { preloadedState: a.current, children: /* @__PURE__ */ e(A, { client: g, children: /* @__PURE__ */ e(F, { ...l, children: i }) }) }) });
50
50
  }
51
- u(mt, "OwpCoreProvider");
51
+ u(st, "OwpCoreProvider");
52
52
  const c = {
53
53
  maxSnack: 5,
54
54
  autoHideDuration: 3e3,
@@ -63,14 +63,14 @@ const c = {
63
63
  classes: {
64
64
  containerRoot: "bottom-0 right-0 mb-52 md:mb-68 mr-8 lg:mr-80"
65
65
  },
66
- action: /* @__PURE__ */ u((i) => /* @__PURE__ */ e(U, { onClick: /* @__PURE__ */ u(() => B(i), "onClick"), children: /* @__PURE__ */ e(D, { fontSize: "small", sx: { color: "#FFFFFF" } }) }), "action")
66
+ action: /* @__PURE__ */ u((i) => /* @__PURE__ */ e(B, { onClick: /* @__PURE__ */ u(() => Q(i), "onClick"), children: /* @__PURE__ */ e(D, { fontSize: "small", sx: { color: "#FFFFFF" } }) }), "action")
67
67
  };
68
- function rt({
68
+ function mt({
69
69
  children: i,
70
- dialogsProviderProps: r,
70
+ dialogsProviderProps: m,
71
71
  snackbarProviderProps: t
72
72
  }) {
73
- const { env: o } = h(), l = S(), { i18n: n } = w(), s = G(), a = H(), g = {
73
+ const { env: o } = h(), l = S(), { i18n: n } = w(), r = G(), a = H(), g = {
74
74
  ...c,
75
75
  ...t,
76
76
  style: {
@@ -82,22 +82,22 @@ function rt({
82
82
  ...t == null ? void 0 : t.classes
83
83
  },
84
84
  action: (t == null ? void 0 : t.action) ?? c.action
85
- }, m = Number(o == null ? void 0 : o.autoLogoutTimeout), d = Number.isFinite(m) ? m : void 0;
86
- return T(() => {
87
- o != null && o.isI18nEnabled && n.changeLanguage(R());
88
- }, [l, o, n]), a ? /* @__PURE__ */ e(j, { className: "min-h-screen" }) : /* @__PURE__ */ e(N, { ...r, children: /* @__PURE__ */ C(Q, { ...g, children: [
85
+ }, s = Number(o == null ? void 0 : o.autoLogoutIdleTimeoutMs), p = Number.isFinite(s) ? s : void 0;
86
+ return y(() => {
87
+ o != null && o.isI18nEnabled && n.changeLanguage(N());
88
+ }, [l, o, n]), a ? /* @__PURE__ */ e(j, { className: "min-h-screen" }) : /* @__PURE__ */ e(M, { ...m, children: /* @__PURE__ */ C(R, { ...g, children: [
89
89
  i,
90
- /* @__PURE__ */ e(E, { ...s }),
91
- (o == null ? void 0 : o.isAutoLogoutEnabled) && /* @__PURE__ */ e(z, { timeout: d })
90
+ /* @__PURE__ */ e(E, { ...r }),
91
+ (o == null ? void 0 : o.isAutoLogoutEnabled) && /* @__PURE__ */ e(z, { timeout: p })
92
92
  ] }) });
93
93
  }
94
- u(rt, "OwpUiProvider");
94
+ u(mt, "OwpUiProvider");
95
95
  export {
96
96
  ut as OwpAppContext,
97
97
  O as OwpAppProvider,
98
- mt as OwpCoreProvider,
99
- I as OwpStoreProvider,
100
- rt as OwpUiProvider,
98
+ st as OwpCoreProvider,
99
+ T as OwpStoreProvider,
100
+ mt as OwpUiProvider,
101
101
  h as useOwpAppContext
102
102
  };
103
103
  //# sourceMappingURL=contexts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contexts.js","sources":["../src/contexts/OwpCoreProvider.tsx","../src/contexts/OwpUiProvider.tsx"],"sourcesContent":["import { createInitialOwpSettings } from '@/configs/defaultConfig';\nimport { StyledEngineProvider } from '@mui/material/styles';\nimport { QueryClient, QueryClientConfig, QueryClientProvider } from '@tanstack/react-query';\nimport { merge } from 'es-toolkit/compat';\nimport { ComponentProps, useRef } from 'react';\nimport { OwpAppProvider, OwpAppProviderProps } from './OwpAppProvider';\nimport { OwpStoreProvider, OwpStoreProviderProps } from './OwpStoreProvider';\n\ntype OwpStyledEngineProviderProps = Omit<ComponentProps<typeof StyledEngineProvider>, 'children'>;\n\nexport interface OwpCoreProviderProps extends OwpAppProviderProps {\n queryClient?: QueryClient;\n queryClientConfig?: QueryClientConfig;\n storePreloadedState?: OwpStoreProviderProps['preloadedState'];\n styledEngineProviderProps?: OwpStyledEngineProviderProps;\n}\n\n/**\n * App, Redux, React Query provider composition\n * @param queryClient 외부 QueryClient 인스턴스\n * @param queryClientConfig QueryClient 생성 옵션\n * @param storePreloadedState 초기 Redux 상태\n * @param styledEngineProviderProps StyledEngineProvider 옵션\n */\nexport function OwpCoreProvider({\n children,\n queryClient,\n queryClientConfig,\n storePreloadedState,\n styledEngineProviderProps = { injectFirst: true },\n ...appProviderProps\n}: OwpCoreProviderProps) {\n const queryClientRef = useRef<QueryClient | undefined>(undefined);\n const preloadedStateRef = useRef<OwpStoreProviderProps['preloadedState'] | undefined>(undefined);\n const client = queryClient ?? (queryClientRef.current ??= new QueryClient(queryClientConfig));\n\n if (!preloadedStateRef.current) {\n const initialSettings = createInitialOwpSettings(\n appProviderProps.configs.settingsConfig,\n appProviderProps.configs.themesConfig,\n );\n\n preloadedStateRef.current = merge(\n {},\n {\n owpSettings: {\n initial: initialSettings,\n defaults: merge({}, initialSettings),\n current: merge({}, initialSettings),\n },\n },\n storePreloadedState,\n );\n }\n\n return (\n <OwpAppProvider {...appProviderProps}>\n <OwpStoreProvider preloadedState={preloadedStateRef.current}>\n <QueryClientProvider client={client}>\n <StyledEngineProvider {...styledEngineProviderProps}>{children}</StyledEngineProvider>\n </QueryClientProvider>\n </OwpStoreProvider>\n </OwpAppProvider>\n );\n}\n","import { OwpAutoLogoutDialog } from '@/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog';\nimport { OwpLoading } from '@/components/OwpLoading';\nimport { OwpPageLockLoading } from '@/components/OwpPageLockLoading';\nimport {\n useAccessTokenGuard,\n useGetCurrentLanguage,\n useGetPageLockLoading,\n useOwpTranslation,\n} from '@/hooks';\nimport { getI18nextLanguageCode } from '@/utils/language';\nimport CloseIcon from '@mui/icons-material/Close';\nimport IconButton from '@mui/material/IconButton';\nimport { DialogsProvider } from '@toolpad/core/useDialogs';\nimport { closeSnackbar, SnackbarKey, SnackbarProvider } from 'notistack';\nimport { ComponentProps, ReactNode, useEffect } from 'react';\nimport { useOwpAppContext } from './OwpAppProvider';\n\ntype OwpDialogsProviderProps = Omit<ComponentProps<typeof DialogsProvider>, 'children'>;\ntype OwpSnackbarProviderProps = Omit<ComponentProps<typeof SnackbarProvider>, 'children'>;\n\nexport interface OwpUiProviderProps {\n children?: ReactNode;\n dialogsProviderProps?: OwpDialogsProviderProps;\n snackbarProviderProps?: OwpSnackbarProviderProps;\n}\n\nconst defaultSnackbarProviderProps: OwpSnackbarProviderProps = {\n maxSnack: 5,\n autoHideDuration: 3000,\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center',\n },\n style: {\n fontSize: '1.25rem',\n lineHeight: '1.75rem',\n },\n classes: {\n containerRoot: 'bottom-0 right-0 mb-52 md:mb-68 mr-8 lg:mr-80',\n },\n action: (snackbarKey: SnackbarKey) => (\n <IconButton onClick={() => closeSnackbar(snackbarKey)}>\n <CloseIcon fontSize=\"small\" sx={{ color: '#FFFFFF' }} />\n </IconButton>\n ),\n};\n\n/**\n * Dialog, snackbar provider composition\n * @param dialogsProviderProps DialogsProvider 옵션\n * @param snackbarProviderProps SnackbarProvider 옵션\n */\nexport function OwpUiProvider({\n children,\n dialogsProviderProps,\n snackbarProviderProps,\n}: OwpUiProviderProps) {\n const { env } = useOwpAppContext();\n const currentLanguage = useGetCurrentLanguage();\n const { i18n } = useOwpTranslation();\n const pageLockLoadingProps = useGetPageLockLoading();\n const shouldRedirectToLogin = useAccessTokenGuard();\n const resolvedSnackbarProviderProps: OwpSnackbarProviderProps = {\n ...defaultSnackbarProviderProps,\n ...snackbarProviderProps,\n style: {\n ...defaultSnackbarProviderProps.style,\n ...snackbarProviderProps?.style,\n },\n classes: {\n ...defaultSnackbarProviderProps.classes,\n ...snackbarProviderProps?.classes,\n },\n action: snackbarProviderProps?.action ?? defaultSnackbarProviderProps.action,\n };\n const resolvedAutoLogoutTimeout = Number(env?.autoLogoutTimeout);\n const autoLogoutTimeout = Number.isFinite(resolvedAutoLogoutTimeout)\n ? resolvedAutoLogoutTimeout\n : undefined;\n\n useEffect(() => {\n if (!env?.isI18nEnabled) {\n return;\n }\n\n void i18n.changeLanguage(getI18nextLanguageCode());\n }, [currentLanguage, env, i18n]);\n\n if (shouldRedirectToLogin) {\n return <OwpLoading className=\"min-h-screen\" />;\n }\n\n return (\n <DialogsProvider {...dialogsProviderProps}>\n <SnackbarProvider {...resolvedSnackbarProviderProps}>\n {children}\n <OwpPageLockLoading {...pageLockLoadingProps} />\n {env?.isAutoLogoutEnabled && <OwpAutoLogoutDialog timeout={autoLogoutTimeout} />}\n </SnackbarProvider>\n </DialogsProvider>\n );\n}\n"],"names":["OwpCoreProvider","children","queryClient","queryClientConfig","storePreloadedState","styledEngineProviderProps","appProviderProps","queryClientRef","useRef","preloadedStateRef","client","QueryClient","initialSettings","createInitialOwpSettings","merge","OwpAppProvider","jsx","OwpStoreProvider","QueryClientProvider","StyledEngineProvider","__name","defaultSnackbarProviderProps","snackbarKey","IconButton","closeSnackbar","CloseIcon","OwpUiProvider","dialogsProviderProps","snackbarProviderProps","env","useOwpAppContext","currentLanguage","useGetCurrentLanguage","i18n","useOwpTranslation","pageLockLoadingProps","useGetPageLockLoading","shouldRedirectToLogin","useAccessTokenGuard","resolvedSnackbarProviderProps","resolvedAutoLogoutTimeout","autoLogoutTimeout","useEffect","getI18nextLanguageCode","OwpLoading","DialogsProvider","jsxs","SnackbarProvider","OwpPageLockLoading","OwpAutoLogoutDialog"],"mappings":"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"}
1
+ {"version":3,"file":"contexts.js","sources":["../src/contexts/OwpCoreProvider.tsx","../src/contexts/OwpUiProvider.tsx"],"sourcesContent":["import { createInitialOwpSettings } from '@/configs/defaultConfig';\nimport { StyledEngineProvider } from '@mui/material/styles';\nimport { QueryClient, QueryClientConfig, QueryClientProvider } from '@tanstack/react-query';\nimport { merge } from 'es-toolkit/compat';\nimport { ComponentProps, useRef } from 'react';\nimport { OwpAppProvider, OwpAppProviderProps } from './OwpAppProvider';\nimport { OwpStoreProvider, OwpStoreProviderProps } from './OwpStoreProvider';\n\ntype OwpStyledEngineProviderProps = Omit<ComponentProps<typeof StyledEngineProvider>, 'children'>;\n\nexport interface OwpCoreProviderProps extends OwpAppProviderProps {\n queryClient?: QueryClient;\n queryClientConfig?: QueryClientConfig;\n storePreloadedState?: OwpStoreProviderProps['preloadedState'];\n styledEngineProviderProps?: OwpStyledEngineProviderProps;\n}\n\n/**\n * App, Redux, React Query provider composition\n * @param queryClient 외부 QueryClient 인스턴스\n * @param queryClientConfig QueryClient 생성 옵션\n * @param storePreloadedState 초기 Redux 상태\n * @param styledEngineProviderProps StyledEngineProvider 옵션\n */\nexport function OwpCoreProvider({\n children,\n queryClient,\n queryClientConfig,\n storePreloadedState,\n styledEngineProviderProps = { injectFirst: true },\n ...appProviderProps\n}: OwpCoreProviderProps) {\n const queryClientRef = useRef<QueryClient | undefined>(undefined);\n const preloadedStateRef = useRef<OwpStoreProviderProps['preloadedState'] | undefined>(undefined);\n const client = queryClient ?? (queryClientRef.current ??= new QueryClient(queryClientConfig));\n\n if (!preloadedStateRef.current) {\n const initialSettings = createInitialOwpSettings(\n appProviderProps.configs.settingsConfig,\n appProviderProps.configs.themesConfig,\n );\n\n preloadedStateRef.current = merge(\n {},\n {\n owpSettings: {\n initial: initialSettings,\n defaults: merge({}, initialSettings),\n current: merge({}, initialSettings),\n },\n },\n storePreloadedState,\n );\n }\n\n return (\n <OwpAppProvider {...appProviderProps}>\n <OwpStoreProvider preloadedState={preloadedStateRef.current}>\n <QueryClientProvider client={client}>\n <StyledEngineProvider {...styledEngineProviderProps}>{children}</StyledEngineProvider>\n </QueryClientProvider>\n </OwpStoreProvider>\n </OwpAppProvider>\n );\n}\n","import { OwpAutoLogoutDialog } from '@/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog';\nimport { OwpLoading } from '@/components/OwpLoading';\nimport { OwpPageLockLoading } from '@/components/OwpPageLockLoading';\nimport {\n useAccessTokenGuard,\n useGetCurrentLanguage,\n useGetPageLockLoading,\n useOwpTranslation,\n} from '@/hooks';\nimport { getI18nextLanguageCode } from '@/utils/language';\nimport CloseIcon from '@mui/icons-material/Close';\nimport IconButton from '@mui/material/IconButton';\nimport { DialogsProvider } from '@toolpad/core/useDialogs';\nimport { closeSnackbar, SnackbarKey, SnackbarProvider } from 'notistack';\nimport { ComponentProps, ReactNode, useEffect } from 'react';\nimport { useOwpAppContext } from './OwpAppProvider';\n\ntype OwpDialogsProviderProps = Omit<ComponentProps<typeof DialogsProvider>, 'children'>;\ntype OwpSnackbarProviderProps = Omit<ComponentProps<typeof SnackbarProvider>, 'children'>;\n\nexport interface OwpUiProviderProps {\n children?: ReactNode;\n dialogsProviderProps?: OwpDialogsProviderProps;\n snackbarProviderProps?: OwpSnackbarProviderProps;\n}\n\nconst defaultSnackbarProviderProps: OwpSnackbarProviderProps = {\n maxSnack: 5,\n autoHideDuration: 3000,\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center',\n },\n style: {\n fontSize: '1.25rem',\n lineHeight: '1.75rem',\n },\n classes: {\n containerRoot: 'bottom-0 right-0 mb-52 md:mb-68 mr-8 lg:mr-80',\n },\n action: (snackbarKey: SnackbarKey) => (\n <IconButton onClick={() => closeSnackbar(snackbarKey)}>\n <CloseIcon fontSize=\"small\" sx={{ color: '#FFFFFF' }} />\n </IconButton>\n ),\n};\n\n/**\n * Dialog, snackbar provider composition\n * @param dialogsProviderProps DialogsProvider 옵션\n * @param snackbarProviderProps SnackbarProvider 옵션\n */\nexport function OwpUiProvider({\n children,\n dialogsProviderProps,\n snackbarProviderProps,\n}: OwpUiProviderProps) {\n const { env } = useOwpAppContext();\n const currentLanguage = useGetCurrentLanguage();\n const { i18n } = useOwpTranslation();\n const pageLockLoadingProps = useGetPageLockLoading();\n const shouldRedirectToLogin = useAccessTokenGuard();\n const resolvedSnackbarProviderProps: OwpSnackbarProviderProps = {\n ...defaultSnackbarProviderProps,\n ...snackbarProviderProps,\n style: {\n ...defaultSnackbarProviderProps.style,\n ...snackbarProviderProps?.style,\n },\n classes: {\n ...defaultSnackbarProviderProps.classes,\n ...snackbarProviderProps?.classes,\n },\n action: snackbarProviderProps?.action ?? defaultSnackbarProviderProps.action,\n };\n const resolvedAutoLogoutIdleTimeoutMs = Number(env?.autoLogoutIdleTimeoutMs);\n const autoLogoutIdleTimeoutMs = Number.isFinite(resolvedAutoLogoutIdleTimeoutMs)\n ? resolvedAutoLogoutIdleTimeoutMs\n : undefined;\n\n useEffect(() => {\n if (!env?.isI18nEnabled) {\n return;\n }\n\n void i18n.changeLanguage(getI18nextLanguageCode());\n }, [currentLanguage, env, i18n]);\n\n if (shouldRedirectToLogin) {\n return <OwpLoading className=\"min-h-screen\" />;\n }\n\n return (\n <DialogsProvider {...dialogsProviderProps}>\n <SnackbarProvider {...resolvedSnackbarProviderProps}>\n {children}\n <OwpPageLockLoading {...pageLockLoadingProps} />\n {env?.isAutoLogoutEnabled && <OwpAutoLogoutDialog timeout={autoLogoutIdleTimeoutMs} />}\n </SnackbarProvider>\n </DialogsProvider>\n );\n}\n"],"names":["OwpCoreProvider","children","queryClient","queryClientConfig","storePreloadedState","styledEngineProviderProps","appProviderProps","queryClientRef","useRef","preloadedStateRef","client","QueryClient","initialSettings","createInitialOwpSettings","merge","OwpAppProvider","jsx","OwpStoreProvider","QueryClientProvider","StyledEngineProvider","__name","defaultSnackbarProviderProps","snackbarKey","IconButton","closeSnackbar","CloseIcon","OwpUiProvider","dialogsProviderProps","snackbarProviderProps","env","useOwpAppContext","currentLanguage","useGetCurrentLanguage","i18n","useOwpTranslation","pageLockLoadingProps","useGetPageLockLoading","shouldRedirectToLogin","useAccessTokenGuard","resolvedSnackbarProviderProps","resolvedAutoLogoutIdleTimeoutMs","autoLogoutIdleTimeoutMs","useEffect","getI18nextLanguageCode","OwpLoading","DialogsProvider","jsxs","SnackbarProvider","OwpPageLockLoading","OwpAutoLogoutDialog"],"mappings":"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"}
package/dist/hooks.js CHANGED
@@ -2,9 +2,9 @@ var g = Object.defineProperty;
2
2
  var r = (e, t) => g(e, "name", { value: t, configurable: !0 });
3
3
  import { u as C, d as E, e as l, f as L, g as S, h } from "./useShortcuts-BjtlXprQ.js";
4
4
  import { i as Z, j as ee, k as te, l as se, a as oe, m as re, o as ne, q as ue, r as ae, b as ce, n as ie, p as me, s as fe, t as pe } from "./useShortcuts-BjtlXprQ.js";
5
- import { b as D } from "./usePageLockLoading-BGODEt_k.js";
5
+ import { b as O } from "./usePageLockLoading-BGODEt_k.js";
6
6
  import { a as de, c as ge, u as Ee, d as le } from "./usePageLockLoading-BGODEt_k.js";
7
- import f, { useRef as p, useEffect as c, useCallback as O } from "react";
7
+ import f, { useRef as p, useEffect as c, useCallback as D } from "react";
8
8
  import { d as T } from "./useTreeGridExcelExport-Bfxx0cps.js";
9
9
  import { u as Se, a as he } from "./useTreeGridExcelExport-Bfxx0cps.js";
10
10
  import { d as G } from "./isTypedArray-CCnDZ5HJ.js";
@@ -12,7 +12,7 @@ import { S as I } from "./localStorageKeys-Che0CNci.js";
12
12
  import { t as w } from "./commonCodeUtils-BcfmNY0i.js";
13
13
  import { a as A } from "./language-DaxFvPOq.js";
14
14
  import { useQuery as N } from "@tanstack/react-query";
15
- import { g as Oe, s as Te, u as Ge } from "./isString-Codtu20I.js";
15
+ import { g as De, s as Te, u as Ge } from "./isString-Codtu20I.js";
16
16
  import { s as M } from "./treeGridUtil-CPNva4kL.js";
17
17
  import { FALLBACK_LANGUAGE_LIST as we } from "./constants.js";
18
18
  function j(e, t) {
@@ -20,7 +20,7 @@ function j(e, t) {
20
20
  c(() => {
21
21
  s.current = e;
22
22
  }, [e]);
23
- const o = O(
23
+ const o = D(
24
24
  T((...u) => {
25
25
  s.current(...u);
26
26
  }, t),
@@ -60,11 +60,11 @@ function Q(e, t) {
60
60
  }
61
61
  r(Q, "useDeepCompareEffectNoCheck");
62
62
  const z = /* @__PURE__ */ r(({ logoSrc: e }) => {
63
- const t = p(e), { env: s, navigationConfig: o } = C(), u = E(), i = l(), { setLoading: a } = D();
63
+ const t = p(e), { env: s, navigationConfig: o } = C(), u = E(), i = l(), { setLoading: a } = O();
64
64
  c(() => {
65
65
  u(t.current), a({
66
66
  loading: !1
67
- }), s != null && s.isBackendNavigationDisabled && i(o);
67
+ }), s != null && s.isBackendNavigationEnabled || i(o);
68
68
  }, [s, o, a, u, i]);
69
69
  }, "useInitApp");
70
70
  function _(e, t) {
@@ -73,7 +73,7 @@ function _(e, t) {
73
73
  }
74
74
  r(_, "createCommonCodeRequestUrl");
75
75
  function V() {
76
- const { env: e } = C(), t = L(), s = S(), o = `${(e == null ? void 0 : e.backendUrl) ?? ""}`.trim(), u = `${(t == null ? void 0 : t.token) ?? localStorage.getItem(I) ?? ""}`.trim(), i = !!(o && u), { data: a } = N({
76
+ const { env: e } = C(), t = L(), s = S(), o = `${(e == null ? void 0 : e.apiBaseUrl) ?? ""}`.trim(), u = `${(t == null ? void 0 : t.token) ?? localStorage.getItem(I) ?? ""}`.trim(), i = !!(o && u), { data: a } = N({
77
77
  queryKey: ["owp", "common-code-list", u],
78
78
  enabled: i,
79
79
  staleTime: 1 / 0,
@@ -116,7 +116,7 @@ const Y = /* @__PURE__ */ r((e, t, s) => {
116
116
  }, "useTreeGridCommonCodeEnums");
117
117
  export {
118
118
  we as FALLBACK_LANGUAGE_LIST,
119
- Oe as getEnv,
119
+ De as getEnv,
120
120
  Te as setEnv,
121
121
  de as useAccessTokenGuard,
122
122
  Z as useAppDispatch,
@@ -139,7 +139,7 @@ export {
139
139
  z as useInitApp,
140
140
  V as useInitCommonCodes,
141
141
  ce as useOwpTranslation,
142
- D as usePageLockLoading,
142
+ O as usePageLockLoading,
143
143
  W as usePrevious,
144
144
  S as useSetCommonCodeList,
145
145
  ie as useSetCurrentLanguage,
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../src/hooks/useDebounce.ts","../src/hooks/useDeepCompareEffect.ts","../src/hooks/useInitApp.ts","../src/hooks/useInitCommonCodes.ts","../src/hooks/usePrevious.ts","../src/hooks/useTreeGridCommonCodeEnums.ts"],"sourcesContent":["import { debounce } from 'es-toolkit/compat';\nimport { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Debounce hook.\n * @param {T} callback\n * @param {number} delay\n * @returns {T}\n */\nexport function useDebounce<T extends (...args: never[]) => void>(callback: T, delay: number): T {\n const callbackRef = useRef<T>(callback);\n\n \n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const debouncedFn = useCallback(\n debounce((...args: never[]) => {\n callbackRef.current(...args);\n }, delay),\n [delay],\n );\n\n useEffect(() => {\n \n return () => {\n debouncedFn.cancel();\n };\n }, [debouncedFn]);\n\n return debouncedFn as unknown as T;\n}\n","import { isEqual as deepEqual } from 'es-toolkit/compat';\nimport React from 'react';\n\ntype UseEffectParamsType = Parameters<typeof React.useEffect>;\ntype EffectCallbackType = UseEffectParamsType[0];\ntype DependencyListType = UseEffectParamsType[1];\n\n// yes, I know it's void, but I like what this communicates about\n// the intent of these functions: It's just like useEffect\ntype UseEffectReturn = ReturnType<typeof React.useEffect>;\n\n/**\n * The checkDeps function checks if the dependency list is valid for use with useDeepCompareEffect.\n * It throws an error if the dependency list is empty or contains only primitive values.\n */\nfunction checkDeps(deps: DependencyListType) {\n if (!deps || !deps.length) {\n throw new Error(\n 'useDeepCompareEffect should not be used with no dependencies. Use React.useEffect instead.',\n );\n }\n\n if (deps.every(isPrimitive)) {\n throw new Error(\n 'useDeepCompareEffect should not be used with dependencies that are all primitive values. Use React.useEffect instead.',\n );\n }\n}\n\n/**\n * The isPrimitive function checks if a value is a primitive type.\n * It returns true if the value is null, undefined, a string, a boolean, or a number.\n */\nfunction isPrimitive(val: unknown) {\n return val == null || /^[sbn]/.test(typeof val);\n}\n\n/**\n * The isPrimitive function checks if a value is a primitive type.\n * It returns true if the value is null, undefined, a string, a boolean, or a number.\n */\nexport function useDeepCompareMemoize<T>(value: T) {\n const ref = React.useRef<T>(value);\n const signalRef = React.useRef<number>(0);\n\n if (!deepEqual(value, ref.current)) {\n ref.current = value;\n signalRef.current += 1;\n }\n\n return React.useMemo(() => ref.current, [signalRef.current]);\n}\n\n/**\n * The isPrimitive function checks if a value is a primitive type.\n * It returns true if the value is null, undefined, a string, a boolean, or a number.\n */\nexport function useDeepCompareEffect(\n callback: EffectCallbackType,\n dependencies: DependencyListType,\n): UseEffectReturn {\n if (process.env.NODE_ENV !== 'production') {\n checkDeps(dependencies);\n }\n\n return React.useEffect(callback, useDeepCompareMemoize(dependencies));\n}\n\n/**\n * deep compare effect 훅\n * @param callback effect 콜백\n * @param dependencies 의존성 목록\n */\nexport function useDeepCompareEffectNoCheck(\n callback: EffectCallbackType,\n dependencies: DependencyListType,\n): UseEffectReturn {\n return React.useEffect(callback, useDeepCompareMemoize(dependencies));\n}\n","import { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useEffect, useRef } from 'react';\nimport { usePageLockLoading } from './usePageLockLoading';\nimport { useSetLogoSrc } from './useLogoSrc';\nimport { useSetNavigationList } from './useNavigation';\n\nexport interface UseInitAppOptions {\n logoSrc: string;\n}\n\n/**\n * 앱 기본 상태 초기화 훅\n * @param logoSrc 초기 로고 경로\n */\nexport const useInitApp = ({ logoSrc }: UseInitAppOptions) => {\n const initialLogoSrc = useRef(logoSrc);\n const { env, navigationConfig } = useOwpAppContext();\n const setLogoSrc = useSetLogoSrc();\n const setNavigationList = useSetNavigationList();\n const { setLoading } = usePageLockLoading();\n\n useEffect(() => {\n setLogoSrc(initialLogoSrc.current);\n setLoading({\n loading: false,\n });\n\n if (env?.isBackendNavigationDisabled) {\n setNavigationList(navigationConfig);\n }\n }, [env, navigationConfig, setLoading, setLogoSrc, setNavigationList]);\n};\n","import { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { useSetCommonCodeList } from '@/hooks/useCommonCodeList';\nimport { CommonCodeRes, transformCommonCodeBasedOnGroupId } from '@/utils/commonCodeUtils';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport { useEffect } from 'react';\n\n/**\n * 공통코드 요청 URL 생성\n * @param backendUrl 백엔드 URL\n * @param accessToken 접근 토큰\n */\nfunction createCommonCodeRequestUrl(backendUrl: string, accessToken: string) {\n const baseUrl = new URL(backendUrl.endsWith('/') ? backendUrl : `${backendUrl}/`);\n const requestUrl = new URL('listIpxCommonCodeTotalAC', baseUrl);\n\n requestUrl.searchParams.set('TOKEN', accessToken);\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n}\n\n/**\n * 공통코드 전역 캐시 초기화\n */\nexport function useInitCommonCodes() {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const setCommonCodeList = useSetCommonCodeList();\n\n const backendUrl = `${env?.backendUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const enabled = Boolean(backendUrl && accessToken);\n\n const { data } = useQuery({\n queryKey: ['owp', 'common-code-list', accessToken],\n enabled,\n staleTime: Infinity,\n gcTime: Infinity,\n queryFn: async () => {\n const response = await fetch(createCommonCodeRequestUrl(backendUrl, accessToken));\n const data = (await response.json()) as CommonCodeRes & {\n resultCode?: string;\n resultMessage?: string;\n };\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(data?.resultMessage ?? 'Failed to fetch common codes');\n }\n\n return transformCommonCodeBasedOnGroupId(data?.resultData ?? []);\n },\n });\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n setCommonCodeList(data);\n }, [data, setCommonCodeList]);\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * The usePrevious function is a custom hook that returns the previous value of a variable.\n * It takes in a value as a parameter and returns the previous value.\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n\n \n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n \n return ref.current;\n}\n","import { useGetCommonCodeList } from '@/hooks/useCommonCodeList';\nimport { setTreeGridColumnEnumOptionsById } from '@/utils/treeGridUtil';\nimport { useEffect, useRef } from 'react';\n\n/**\n * TreeGrid 공통코드 Enum 옵션 정보\n * @param field Enum을 반영할 컬럼명\n * @param codeId 공통코드 그룹 ID\n */\nexport interface TreeGridCommonCodeEnumConfig {\n field: string;\n codeId: string;\n}\n\n/**\n * TreeGrid 공통코드 Enum 옵션 일괄 반영\n * @param id TreeGrid 인스턴스 ID\n * @param configs Enum 반영 대상 목록\n * @param isGridReady TreeGrid 준비 여부\n */\nexport const useTreeGridCommonCodeEnums = (\n id: string,\n configs: TreeGridCommonCodeEnumConfig[],\n isGridReady: boolean,\n) => {\n const commonCodeMap = useGetCommonCodeList();\n const configsRef = useRef(configs);\n const configDependencyKey = configs.map(({ field, codeId }) => `${field}:${codeId}`).join('|');\n\n useEffect(() => {\n configsRef.current = configs;\n }, [configs]);\n\n useEffect(() => {\n if (!isGridReady || !commonCodeMap) {\n return;\n }\n\n configsRef.current.forEach(({ field, codeId }) => {\n const options = commonCodeMap[codeId];\n\n if (!options) {\n return;\n }\n\n setTreeGridColumnEnumOptionsById(\n id,\n field,\n options,\n 'IPX_COMMONCODE.CODEID',\n ['IPX_COMMONCODE.CODENM', 'IPX_COMMONCODE.CODEID'],\n );\n });\n }, [commonCodeMap, configDependencyKey, id, isGridReady]);\n};\n"],"names":["useDebounce","callback","delay","callbackRef","useRef","useEffect","debouncedFn","useCallback","debounce","args","__name","checkDeps","deps","isPrimitive","val","useDeepCompareMemoize","value","ref","React","signalRef","deepEqual","useDeepCompareEffect","dependencies","useDeepCompareEffectNoCheck","useInitApp","logoSrc","initialLogoSrc","env","navigationConfig","useOwpAppContext","setLogoSrc","useSetLogoSrc","setNavigationList","useSetNavigationList","setLoading","usePageLockLoading","createCommonCodeRequestUrl","backendUrl","accessToken","baseUrl","requestUrl","getApiLanguageCode","useInitCommonCodes","currentUser","useGetCurrentUser","setCommonCodeList","useSetCommonCodeList","STORAGE_ACCESS_TOKEN_KEY","enabled","data","useQuery","response","transformCommonCodeBasedOnGroupId","usePrevious","useTreeGridCommonCodeEnums","id","configs","isGridReady","commonCodeMap","useGetCommonCodeList","configsRef","configDependencyKey","field","codeId","options","setTreeGridColumnEnumOptionsById"],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sources":["../src/hooks/useDebounce.ts","../src/hooks/useDeepCompareEffect.ts","../src/hooks/useInitApp.ts","../src/hooks/useInitCommonCodes.ts","../src/hooks/usePrevious.ts","../src/hooks/useTreeGridCommonCodeEnums.ts"],"sourcesContent":["import { debounce } from 'es-toolkit/compat';\nimport { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Debounce hook.\n * @param {T} callback\n * @param {number} delay\n * @returns {T}\n */\nexport function useDebounce<T extends (...args: never[]) => void>(callback: T, delay: number): T {\n const callbackRef = useRef<T>(callback);\n\n \n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n const debouncedFn = useCallback(\n debounce((...args: never[]) => {\n callbackRef.current(...args);\n }, delay),\n [delay],\n );\n\n useEffect(() => {\n \n return () => {\n debouncedFn.cancel();\n };\n }, [debouncedFn]);\n\n return debouncedFn as unknown as T;\n}\n","import { isEqual as deepEqual } from 'es-toolkit/compat';\nimport React from 'react';\n\ntype UseEffectParamsType = Parameters<typeof React.useEffect>;\ntype EffectCallbackType = UseEffectParamsType[0];\ntype DependencyListType = UseEffectParamsType[1];\n\n// yes, I know it's void, but I like what this communicates about\n// the intent of these functions: It's just like useEffect\ntype UseEffectReturn = ReturnType<typeof React.useEffect>;\n\n/**\n * The checkDeps function checks if the dependency list is valid for use with useDeepCompareEffect.\n * It throws an error if the dependency list is empty or contains only primitive values.\n */\nfunction checkDeps(deps: DependencyListType) {\n if (!deps || !deps.length) {\n throw new Error(\n 'useDeepCompareEffect should not be used with no dependencies. Use React.useEffect instead.',\n );\n }\n\n if (deps.every(isPrimitive)) {\n throw new Error(\n 'useDeepCompareEffect should not be used with dependencies that are all primitive values. Use React.useEffect instead.',\n );\n }\n}\n\n/**\n * The isPrimitive function checks if a value is a primitive type.\n * It returns true if the value is null, undefined, a string, a boolean, or a number.\n */\nfunction isPrimitive(val: unknown) {\n return val == null || /^[sbn]/.test(typeof val);\n}\n\n/**\n * The isPrimitive function checks if a value is a primitive type.\n * It returns true if the value is null, undefined, a string, a boolean, or a number.\n */\nexport function useDeepCompareMemoize<T>(value: T) {\n const ref = React.useRef<T>(value);\n const signalRef = React.useRef<number>(0);\n\n if (!deepEqual(value, ref.current)) {\n ref.current = value;\n signalRef.current += 1;\n }\n\n return React.useMemo(() => ref.current, [signalRef.current]);\n}\n\n/**\n * The isPrimitive function checks if a value is a primitive type.\n * It returns true if the value is null, undefined, a string, a boolean, or a number.\n */\nexport function useDeepCompareEffect(\n callback: EffectCallbackType,\n dependencies: DependencyListType,\n): UseEffectReturn {\n if (process.env.NODE_ENV !== 'production') {\n checkDeps(dependencies);\n }\n\n return React.useEffect(callback, useDeepCompareMemoize(dependencies));\n}\n\n/**\n * deep compare effect 훅\n * @param callback effect 콜백\n * @param dependencies 의존성 목록\n */\nexport function useDeepCompareEffectNoCheck(\n callback: EffectCallbackType,\n dependencies: DependencyListType,\n): UseEffectReturn {\n return React.useEffect(callback, useDeepCompareMemoize(dependencies));\n}\n","import { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useEffect, useRef } from 'react';\nimport { usePageLockLoading } from './usePageLockLoading';\nimport { useSetLogoSrc } from './useLogoSrc';\nimport { useSetNavigationList } from './useNavigation';\n\nexport interface UseInitAppOptions {\n logoSrc: string;\n}\n\n/**\n * 앱 기본 상태 초기화 훅\n * @param logoSrc 초기 로고 경로\n */\nexport const useInitApp = ({ logoSrc }: UseInitAppOptions) => {\n const initialLogoSrc = useRef(logoSrc);\n const { env, navigationConfig } = useOwpAppContext();\n const setLogoSrc = useSetLogoSrc();\n const setNavigationList = useSetNavigationList();\n const { setLoading } = usePageLockLoading();\n\n useEffect(() => {\n setLogoSrc(initialLogoSrc.current);\n setLoading({\n loading: false,\n });\n\n if (!env?.isBackendNavigationEnabled) {\n setNavigationList(navigationConfig);\n }\n }, [env, navigationConfig, setLoading, setLogoSrc, setNavigationList]);\n};\n","import { STORAGE_ACCESS_TOKEN_KEY } from '@/constants/localStorageKeys';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport { useGetCurrentUser } from '@/hooks/useCurrentUser';\nimport { useSetCommonCodeList } from '@/hooks/useCommonCodeList';\nimport { CommonCodeRes, transformCommonCodeBasedOnGroupId } from '@/utils/commonCodeUtils';\nimport { getApiLanguageCode } from '@/utils/language';\nimport { useQuery } from '@tanstack/react-query';\nimport { useEffect } from 'react';\n\n/**\n * 공통코드 요청 URL 생성\n * @param apiBaseUrl API base URL\n * @param accessToken 접근 토큰\n */\nfunction createCommonCodeRequestUrl(apiBaseUrl: string, accessToken: string) {\n const baseUrl = new URL(apiBaseUrl.endsWith('/') ? apiBaseUrl : `${apiBaseUrl}/`);\n const requestUrl = new URL('listIpxCommonCodeTotalAC', baseUrl);\n\n requestUrl.searchParams.set('TOKEN', accessToken);\n requestUrl.searchParams.set('i18nextLng', getApiLanguageCode());\n\n return requestUrl.toString();\n}\n\n/**\n * 공통코드 전역 캐시 초기화\n */\nexport function useInitCommonCodes() {\n const { env } = useOwpAppContext();\n const currentUser = useGetCurrentUser();\n const setCommonCodeList = useSetCommonCodeList();\n\n const apiBaseUrl = `${env?.apiBaseUrl ?? ''}`.trim();\n const accessToken = `${currentUser?.token ?? localStorage.getItem(STORAGE_ACCESS_TOKEN_KEY) ?? ''}`.trim();\n const enabled = Boolean(apiBaseUrl && accessToken);\n\n const { data } = useQuery({\n queryKey: ['owp', 'common-code-list', accessToken],\n enabled,\n staleTime: Infinity,\n gcTime: Infinity,\n queryFn: async () => {\n const response = await fetch(createCommonCodeRequestUrl(apiBaseUrl, accessToken));\n const data = (await response.json()) as CommonCodeRes & {\n resultCode?: string;\n resultMessage?: string;\n };\n\n if (!response.ok || data?.resultCode === 'STATUS_0') {\n throw new Error(data?.resultMessage ?? 'Failed to fetch common codes');\n }\n\n return transformCommonCodeBasedOnGroupId(data?.resultData ?? []);\n },\n });\n\n useEffect(() => {\n if (!data) {\n return;\n }\n\n setCommonCodeList(data);\n }, [data, setCommonCodeList]);\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * The usePrevious function is a custom hook that returns the previous value of a variable.\n * It takes in a value as a parameter and returns the previous value.\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n\n \n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n \n return ref.current;\n}\n","import { useGetCommonCodeList } from '@/hooks/useCommonCodeList';\nimport { setTreeGridColumnEnumOptionsById } from '@/utils/treeGridUtil';\nimport { useEffect, useRef } from 'react';\n\n/**\n * TreeGrid 공통코드 Enum 옵션 정보\n * @param field Enum을 반영할 컬럼명\n * @param codeId 공통코드 그룹 ID\n */\nexport interface TreeGridCommonCodeEnumConfig {\n field: string;\n codeId: string;\n}\n\n/**\n * TreeGrid 공통코드 Enum 옵션 일괄 반영\n * @param id TreeGrid 인스턴스 ID\n * @param configs Enum 반영 대상 목록\n * @param isGridReady TreeGrid 준비 여부\n */\nexport const useTreeGridCommonCodeEnums = (\n id: string,\n configs: TreeGridCommonCodeEnumConfig[],\n isGridReady: boolean,\n) => {\n const commonCodeMap = useGetCommonCodeList();\n const configsRef = useRef(configs);\n const configDependencyKey = configs.map(({ field, codeId }) => `${field}:${codeId}`).join('|');\n\n useEffect(() => {\n configsRef.current = configs;\n }, [configs]);\n\n useEffect(() => {\n if (!isGridReady || !commonCodeMap) {\n return;\n }\n\n configsRef.current.forEach(({ field, codeId }) => {\n const options = commonCodeMap[codeId];\n\n if (!options) {\n return;\n }\n\n setTreeGridColumnEnumOptionsById(\n id,\n field,\n options,\n 'IPX_COMMONCODE.CODEID',\n ['IPX_COMMONCODE.CODENM', 'IPX_COMMONCODE.CODEID'],\n );\n });\n }, [commonCodeMap, configDependencyKey, id, isGridReady]);\n};\n"],"names":["useDebounce","callback","delay","callbackRef","useRef","useEffect","debouncedFn","useCallback","debounce","args","__name","checkDeps","deps","isPrimitive","val","useDeepCompareMemoize","value","ref","React","signalRef","deepEqual","useDeepCompareEffect","dependencies","useDeepCompareEffectNoCheck","useInitApp","logoSrc","initialLogoSrc","env","navigationConfig","useOwpAppContext","setLogoSrc","useSetLogoSrc","setNavigationList","useSetNavigationList","setLoading","usePageLockLoading","createCommonCodeRequestUrl","apiBaseUrl","accessToken","baseUrl","requestUrl","getApiLanguageCode","useInitCommonCodes","currentUser","useGetCurrentUser","setCommonCodeList","useSetCommonCodeList","STORAGE_ACCESS_TOKEN_KEY","enabled","data","useQuery","response","transformCommonCodeBasedOnGroupId","usePrevious","useTreeGridCommonCodeEnums","id","configs","isGridReady","commonCodeMap","useGetCommonCodeList","configsRef","configDependencyKey","field","codeId","options","setTreeGridColumnEnumOptionsById"],"mappings":"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"}