@owp/core 2.5.23 → 2.5.24

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.
Files changed (141) hide show
  1. package/dist/_virtual/index15.js +2 -2
  2. package/dist/_virtual/index5.js +2 -2
  3. package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js +15 -13
  4. package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js.map +1 -1
  5. package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +21 -19
  6. package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
  7. package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js +1 -1
  8. package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js.map +1 -1
  9. package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js +1 -1
  10. package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js.map +1 -1
  11. package/dist/components/OwpLoading/OwpLoading.js +1 -1
  12. package/dist/components/OwpLoading/OwpLoading.js.map +1 -1
  13. package/dist/components/OwpMrtTable/OwpMrtTable.js +1 -1
  14. package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
  15. package/dist/components/OwpOptionSelector/OwpOptionSelector.js +14 -12
  16. package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
  17. package/dist/components/OwpPageTitle/OwpPageTitle.js +1 -1
  18. package/dist/components/OwpPageTitle/OwpPageTitle.js.map +1 -1
  19. package/dist/components/OwpPicker/OwpDatePicker.js +81 -82
  20. package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
  21. package/dist/components/OwpPicker/OwpTimePicker.js +82 -83
  22. package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
  23. package/dist/components/OwpPicker/OwpWeekDatePicker.js +24 -25
  24. package/dist/components/OwpPicker/OwpWeekDatePicker.js.map +1 -1
  25. package/dist/components/OwpSearchFilter/OwpSearchFilter.js +1 -1
  26. package/dist/components/OwpSearchFilter/OwpSearchFilter.js.map +1 -1
  27. package/dist/components/OwpSection/OwpSection.js +1 -1
  28. package/dist/components/OwpSection/OwpSection.js.map +1 -1
  29. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +155 -157
  30. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  31. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +95 -81
  32. package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -1
  33. package/dist/components/OwpSuspense/OwpSuspense.js +43 -43
  34. package/dist/components/OwpSuspense/OwpSuspense.js.map +1 -1
  35. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +2 -2
  36. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  37. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +55 -56
  38. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
  39. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +10 -10
  40. package/dist/contexts/OwpUiProvider.js +5 -5
  41. package/dist/contexts/OwpUiProvider.js.map +1 -1
  42. package/dist/hooks/{useAccessTokenGuard.js → internal/useAccessTokenGuard.js} +2 -2
  43. package/dist/hooks/internal/useAccessTokenGuard.js.map +1 -0
  44. package/dist/hooks/{useCurrentLanguage.js → internal/useCurrentLanguage.js} +2 -2
  45. package/dist/hooks/internal/useCurrentLanguage.js.map +1 -0
  46. package/dist/hooks/internal/useHeaderWrapState.js.map +1 -0
  47. package/dist/hooks/internal/useNavbar.js +24 -0
  48. package/dist/hooks/internal/useNavbar.js.map +1 -0
  49. package/dist/hooks/{useNavigationActiveRouteRemount.js → internal/useNavigationActiveRouteRemount.js} +1 -1
  50. package/dist/hooks/internal/useNavigationActiveRouteRemount.js.map +1 -0
  51. package/dist/hooks/{useShortcuts.js → internal/useShortcuts.js} +3 -3
  52. package/dist/hooks/internal/useShortcuts.js.map +1 -0
  53. package/dist/hooks/internal/useThemeMediaQuery.js.map +1 -0
  54. package/dist/hooks/internal/useTimeout.js.map +1 -0
  55. package/dist/hooks/useInitApp.js.map +1 -1
  56. package/dist/hooks.js +53 -81
  57. package/dist/hooks.js.map +1 -1
  58. package/dist/layout/Layout.js +1 -1
  59. package/dist/layout/Layout.js.map +1 -1
  60. package/dist/layout/components/layouts/NavbarToggleFabLayout.js +2 -2
  61. package/dist/layout/components/layouts/NavbarToggleFabLayout.js.map +1 -1
  62. package/dist/layout/components/layouts/NavbarWrapperLayout.js +2 -2
  63. package/dist/layout/components/layouts/NavbarWrapperLayout.js.map +1 -1
  64. package/dist/layout/components/navbar/NavbarToggleButton.js +2 -2
  65. package/dist/layout/components/navbar/NavbarToggleButton.js.map +1 -1
  66. package/dist/layout/components/navbar/style/NavbarStyle.js +1 -1
  67. package/dist/layout/components/navbar/style/NavbarStyle.js.map +1 -1
  68. package/dist/layout/components/navbar/style/NavbarStyleContent.js +1 -1
  69. package/dist/layout/components/navbar/style/NavbarStyleContent.js.map +1 -1
  70. package/dist/layout/components/navigation/Navigation.js +2 -2
  71. package/dist/layout/components/navigation/Navigation.js.map +1 -1
  72. package/dist/layout/components/navigation/vertical/types/NavVerticalCollapse.js +1 -1
  73. package/dist/layout/components/navigation/vertical/types/NavVerticalCollapse.js.map +1 -1
  74. package/dist/layout/components/navigation/vertical/types/NavVerticalGroup.js +1 -1
  75. package/dist/layout/components/navigation/vertical/types/NavVerticalGroup.js.map +1 -1
  76. package/dist/layout/components/navigation/vertical/types/NavVerticalItem.js +1 -1
  77. package/dist/layout/components/navigation/vertical/types/NavVerticalItem.js.map +1 -1
  78. package/dist/layout/components/toggles/LanguageSwitcherToggle.js +1 -1
  79. package/dist/layout/components/toggles/LanguageSwitcherToggle.js.map +1 -1
  80. package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
  81. package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
  82. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
  83. package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
  84. package/dist/owp-app.css +1 -1
  85. package/dist/types/components/OwpCommonCode/OwpCommonCodeQuerySelector.d.ts +5 -3
  86. package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +5 -3
  87. package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +4 -1
  88. package/dist/types/components/OwpSelectorBase/types/index.d.ts +1 -1
  89. package/dist/types/components/OwpSelectorBase/types/types.d.ts +3 -0
  90. package/dist/types/hooks/index.d.ts +0 -10
  91. package/dist/types/hooks/{useNavbar.d.ts → internal/useNavbar.d.ts} +1 -1
  92. package/dist/types/utils/treeGridUtil.d.ts +0 -14
  93. package/dist/utils/{exceljsBrowser.js → internal/exceljsBrowser.js} +1 -1
  94. package/dist/utils/internal/exceljsBrowser.js.map +1 -0
  95. package/dist/utils/internal/jszipBrowser.js.map +1 -0
  96. package/dist/utils/internal/treeGridBodyRowsEvent.js.map +1 -0
  97. package/dist/utils/treeGridExportExcelUtil.js +1 -1
  98. package/dist/utils/treeGridExportExcelUtil.js.map +1 -1
  99. package/dist/utils/treeGridUtil.js +1 -6
  100. package/dist/utils/treeGridUtil.js.map +1 -1
  101. package/dist/utils/zipUtil.js +1 -1
  102. package/dist/utils/zipUtil.js.map +1 -1
  103. package/dist/utils.js +70 -75
  104. package/package.json +1 -1
  105. package/dist/hooks/useAccessTokenGuard.js.map +0 -1
  106. package/dist/hooks/useCurrentLanguage.js.map +0 -1
  107. package/dist/hooks/useDebounce.js +0 -24
  108. package/dist/hooks/useDebounce.js.map +0 -1
  109. package/dist/hooks/useDeepCompareEffect.js +0 -38
  110. package/dist/hooks/useDeepCompareEffect.js.map +0 -1
  111. package/dist/hooks/useHeaderWrapState.js.map +0 -1
  112. package/dist/hooks/useNavbar.js +0 -24
  113. package/dist/hooks/useNavbar.js.map +0 -1
  114. package/dist/hooks/useNavigationActiveRouteRemount.js.map +0 -1
  115. package/dist/hooks/usePrevious.js +0 -14
  116. package/dist/hooks/usePrevious.js.map +0 -1
  117. package/dist/hooks/useShortcuts.js.map +0 -1
  118. package/dist/hooks/useThemeMediaQuery.js.map +0 -1
  119. package/dist/hooks/useTimeout.js.map +0 -1
  120. package/dist/types/hooks/useDebounce.d.ts +0 -7
  121. package/dist/types/hooks/useDeepCompareEffect.d.ts +0 -22
  122. package/dist/types/hooks/usePrevious.d.ts +0 -5
  123. package/dist/types/utils/dayjsBrowser.d.ts +0 -1
  124. package/dist/utils/exceljsBrowser.js.map +0 -1
  125. package/dist/utils/jszipBrowser.js.map +0 -1
  126. package/dist/utils/treeGridBodyRowsEvent.js.map +0 -1
  127. /package/dist/hooks/{useHeaderWrapState.js → internal/useHeaderWrapState.js} +0 -0
  128. /package/dist/hooks/{useThemeMediaQuery.js → internal/useThemeMediaQuery.js} +0 -0
  129. /package/dist/hooks/{useTimeout.js → internal/useTimeout.js} +0 -0
  130. /package/dist/types/hooks/{useAccessTokenGuard.d.ts → internal/useAccessTokenGuard.d.ts} +0 -0
  131. /package/dist/types/hooks/{useCurrentLanguage.d.ts → internal/useCurrentLanguage.d.ts} +0 -0
  132. /package/dist/types/hooks/{useHeaderWrapState.d.ts → internal/useHeaderWrapState.d.ts} +0 -0
  133. /package/dist/types/hooks/{useNavigationActiveRouteRemount.d.ts → internal/useNavigationActiveRouteRemount.d.ts} +0 -0
  134. /package/dist/types/hooks/{useShortcuts.d.ts → internal/useShortcuts.d.ts} +0 -0
  135. /package/dist/types/hooks/{useThemeMediaQuery.d.ts → internal/useThemeMediaQuery.d.ts} +0 -0
  136. /package/dist/types/hooks/{useTimeout.d.ts → internal/useTimeout.d.ts} +0 -0
  137. /package/dist/types/utils/{exceljsBrowser.d.ts → internal/exceljsBrowser.d.ts} +0 -0
  138. /package/dist/types/utils/{jszipBrowser.d.ts → internal/jszipBrowser.d.ts} +0 -0
  139. /package/dist/types/utils/{treeGridBodyRowsEvent.d.ts → internal/treeGridBodyRowsEvent.d.ts} +0 -0
  140. /package/dist/utils/{jszipBrowser.js → internal/jszipBrowser.js} +0 -0
  141. /package/dist/utils/{treeGridBodyRowsEvent.js → internal/treeGridBodyRowsEvent.js} +0 -0
@@ -1,42 +1,42 @@
1
1
  var R = Object.defineProperty;
2
- var s = (i, e) => R(i, "name", { value: e, configurable: !0 });
3
- import { jsx as l } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
2
+ var c = (i, e) => R(i, "name", { value: e, configurable: !0 });
3
+ import { jsx as r } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
4
4
  import { OwpPageSkeleton as h } from "../OwpPageSkeleton/OwpPageSkeleton.js";
5
5
  import { useOwpAppContext as O } from "../../contexts/OwpAppProvider.js";
6
6
  import { clsx as C } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
7
- import { useRef as N, useState as y, useEffect as p, Suspense as E } from "react";
8
- import { useLocation as L } from "react-router-dom";
9
- import { OwpLoading as D } from "../OwpLoading/OwpLoading.js";
7
+ import { useRef as N, useState as v, useEffect as x, Suspense as y } from "react";
8
+ import { useLocation as E } from "react-router-dom";
9
+ import { OwpLoading as L } from "../OwpLoading/OwpLoading.js";
10
10
  function q(i) {
11
- const { children: e, loadingProps: n } = i, { pathname: r } = L(), { slots: t, slotProps: c } = O(), u = t == null ? void 0 : t.routeLoading, { getSkeletonSpec: a, releaseOnClick: k = !1, ...x } = (c == null ? void 0 : c.routeLoading) ?? {}, o = a == null ? void 0 : a(r), f = N(!1), [b, m] = y(null), w = k === !0;
12
- p(() => {
13
- f.current = !0;
11
+ const { children: e, loadingProps: n } = i, { pathname: l } = E(), { slots: t, slotProps: a } = O(), u = t == null ? void 0 : t.routeLoading, { getSkeletonSpec: s, releaseOnClick: p = !1, ...k } = (a == null ? void 0 : a.routeLoading) ?? {}, f = s == null ? void 0 : s(l), o = N(!1), [w, m] = v(null), b = p === !0;
12
+ x(() => {
13
+ o.current = !0;
14
14
  }, []);
15
- const d = f.current && !!o;
16
- return /* @__PURE__ */ l(
17
- E,
15
+ const d = o.current && !!f;
16
+ return /* @__PURE__ */ r(
17
+ y,
18
18
  {
19
- fallback: /* @__PURE__ */ l(
20
- F,
19
+ fallback: /* @__PURE__ */ r(
20
+ D,
21
21
  {
22
- pathname: r,
22
+ pathname: l,
23
23
  loadingProps: n,
24
- routeLoadingSlotProps: x,
24
+ routeLoadingSlotProps: k,
25
25
  RouteLoadingSlot: u,
26
- skeletonSpec: o,
26
+ skeletonSpec: f,
27
27
  shouldUseSkeleton: d,
28
- shouldHoldOnResolve: !u && d && w,
29
- onFallbackRendered: /* @__PURE__ */ s(() => {
30
- m(r);
28
+ shouldHoldOnResolve: !u && d && b,
29
+ onFallbackRendered: /* @__PURE__ */ c(() => {
30
+ m(l);
31
31
  }, "onFallbackRendered")
32
32
  }
33
33
  ),
34
- children: /* @__PURE__ */ l(
35
- H,
34
+ children: /* @__PURE__ */ r(
35
+ F,
36
36
  {
37
- skeletonSpec: o,
38
- isVisible: b === r,
39
- onRelease: /* @__PURE__ */ s(() => {
37
+ skeletonSpec: f,
38
+ isVisible: w === l,
39
+ onRelease: /* @__PURE__ */ c(() => {
40
40
  m(null);
41
41
  }, "onRelease"),
42
42
  children: e
@@ -45,59 +45,59 @@ function q(i) {
45
45
  }
46
46
  );
47
47
  }
48
- s(q, "OwpSuspense");
49
- function F({
48
+ c(q, "OwpSuspense");
49
+ function D({
50
50
  pathname: i,
51
51
  loadingProps: e,
52
52
  routeLoadingSlotProps: n,
53
- RouteLoadingSlot: r,
53
+ RouteLoadingSlot: l,
54
54
  skeletonSpec: t,
55
- shouldUseSkeleton: c,
55
+ shouldUseSkeleton: a,
56
56
  shouldHoldOnResolve: u,
57
- onFallbackRendered: a
57
+ onFallbackRendered: s
58
58
  }) {
59
- return p(() => {
60
- u && a();
61
- }, [a, u]), r ? /* @__PURE__ */ l(
62
- r,
59
+ return x(() => {
60
+ u && s();
61
+ }, [s, u]), l ? /* @__PURE__ */ r(
62
+ l,
63
63
  {
64
64
  ...n,
65
65
  ...e,
66
66
  pathname: i,
67
67
  isFirstRouteLoading: !0
68
68
  }
69
- ) : c && t ? /* @__PURE__ */ l(h, { spec: t }) : /* @__PURE__ */ l(
70
- D,
69
+ ) : a && t ? /* @__PURE__ */ r(h, { spec: t }) : /* @__PURE__ */ r("div", { className: "flex min-h-dvh w-full flex-1 flex-col", children: /* @__PURE__ */ r(
70
+ L,
71
71
  {
72
72
  ...n,
73
73
  ...e,
74
74
  className: C(n == null ? void 0 : n.className, e == null ? void 0 : e.className)
75
75
  }
76
- );
76
+ ) });
77
77
  }
78
- s(F, "RouteLoadingFallback");
79
- function H({
78
+ c(D, "RouteLoadingFallback");
79
+ function F({
80
80
  skeletonSpec: i,
81
81
  isVisible: e,
82
82
  onRelease: n,
83
- children: r
83
+ children: l
84
84
  }) {
85
- return !e || !i ? r : /* @__PURE__ */ l(
85
+ return !e || !i ? l : /* @__PURE__ */ r(
86
86
  "div",
87
87
  {
88
88
  "aria-label": "Release route loading skeleton",
89
89
  className: "flex min-h-0 w-full flex-1 cursor-pointer flex-col overflow-hidden",
90
90
  onClick: n,
91
- onKeyDown: /* @__PURE__ */ s((t) => {
91
+ onKeyDown: /* @__PURE__ */ c((t) => {
92
92
  t.key !== "Enter" && t.key !== " " || (t.preventDefault(), n());
93
93
  }, "onKeyDown"),
94
94
  role: "button",
95
95
  tabIndex: 0,
96
- children: /* @__PURE__ */ l(h, { spec: i })
96
+ children: /* @__PURE__ */ r(h, { spec: i })
97
97
  }
98
98
  );
99
99
  }
100
- s(H, "RouteLoadingHold");
100
+ c(F, "RouteLoadingHold");
101
101
  export {
102
102
  q as OwpSuspense
103
103
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OwpSuspense.js","sources":["../../../src/components/OwpSuspense/OwpSuspense.tsx"],"sourcesContent":["import { OwpPageSkeleton } from '@/components/OwpPageSkeleton';\nimport { OwpLoading } from '@/components/OwpLoading';\nimport type { OwpLoadingProps } from '@/components/OwpLoading/OwpLoading';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport clsx from 'clsx';\nimport type {\n OwpPageSkeletonSpec,\n OwpRouteLoadingConfig,\n OwpRouteLoadingSlotProps,\n} from '@/contexts/OwpAppProvider';\nimport {\n ComponentType,\n ReactNode,\n Suspense,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLocation } from 'react-router-dom';\n\ntype OwpSuspenseProps = {\n loadingProps?: OwpLoadingProps;\n children: ReactNode;\n};\n\n/**\n * The OwpSuspense component is a wrapper around the React Suspense component.\n * It is used to display a loading spinner while the wrapped components are being loaded.\n * The component is memoized to prevent unnecessary re-renders.\n * React Suspense defaults\n * For to Avoid Repetition\n */\nfunction OwpSuspense(props: OwpSuspenseProps) {\n const { children, loadingProps } = props;\n const { pathname } = useLocation();\n const { slots, slotProps } = useOwpAppContext();\n const RouteLoadingSlot = slots?.routeLoading;\n const { getSkeletonSpec, releaseOnClick = false, ...routeLoadingProps } =\n slotProps?.routeLoading ?? {};\n const skeletonSpec = getSkeletonSpec?.(pathname);\n const hasCompletedInitialMountRef = useRef(false);\n const [holdPathname, setHoldPathname] = useState<string | null>(null);\n const isReleaseOnClickEnabled = releaseOnClick === true;\n\n useEffect(() => {\n hasCompletedInitialMountRef.current = true;\n }, []);\n\n const shouldUseSkeleton = hasCompletedInitialMountRef.current && !!skeletonSpec;\n\n return (\n <Suspense\n fallback={\n <RouteLoadingFallback\n pathname={pathname}\n loadingProps={loadingProps}\n routeLoadingSlotProps={routeLoadingProps}\n RouteLoadingSlot={RouteLoadingSlot}\n skeletonSpec={skeletonSpec}\n shouldUseSkeleton={shouldUseSkeleton}\n shouldHoldOnResolve={!RouteLoadingSlot && shouldUseSkeleton && isReleaseOnClickEnabled}\n onFallbackRendered={() => {\n setHoldPathname(pathname);\n }}\n />\n }\n >\n <RouteLoadingHold\n skeletonSpec={skeletonSpec}\n isVisible={holdPathname === pathname}\n onRelease={() => {\n setHoldPathname(null);\n }}\n >\n {children}\n </RouteLoadingHold>\n </Suspense>\n );\n}\n\nexport { OwpSuspense };\n\ntype RouteLoadingFallbackProps = {\n pathname: string;\n loadingProps?: OwpLoadingProps;\n routeLoadingSlotProps?: Omit<\n Partial<OwpRouteLoadingSlotProps>,\n 'pathname' | 'isFirstRouteLoading'\n > &\n OwpRouteLoadingConfig;\n RouteLoadingSlot?: ComponentType<OwpRouteLoadingSlotProps>;\n skeletonSpec?: OwpPageSkeletonSpec;\n shouldUseSkeleton: boolean;\n shouldHoldOnResolve: boolean;\n onFallbackRendered: () => void;\n};\n\nfunction RouteLoadingFallback({\n pathname,\n loadingProps,\n routeLoadingSlotProps,\n RouteLoadingSlot,\n skeletonSpec,\n shouldUseSkeleton,\n shouldHoldOnResolve,\n onFallbackRendered,\n}: RouteLoadingFallbackProps) {\n useEffect(() => {\n if (shouldHoldOnResolve) {\n onFallbackRendered();\n }\n }, [onFallbackRendered, shouldHoldOnResolve]);\n\n if (RouteLoadingSlot) {\n return (\n <RouteLoadingSlot\n {...routeLoadingSlotProps}\n {...loadingProps}\n pathname={pathname}\n isFirstRouteLoading={true}\n />\n );\n }\n\n if (shouldUseSkeleton && skeletonSpec) {\n return <OwpPageSkeleton spec={skeletonSpec} />;\n }\n\n return (\n <OwpLoading\n {...routeLoadingSlotProps}\n {...loadingProps}\n className={clsx(routeLoadingSlotProps?.className, loadingProps?.className)}\n />\n );\n}\n\ntype RouteLoadingHoldProps = {\n skeletonSpec?: OwpPageSkeletonSpec;\n isVisible: boolean;\n onRelease: () => void;\n children: ReactNode;\n};\n\nfunction RouteLoadingHold({\n skeletonSpec,\n isVisible,\n onRelease,\n children,\n}: RouteLoadingHoldProps) {\n if (!isVisible || !skeletonSpec) {\n return children;\n }\n\n return (\n <div\n aria-label=\"Release route loading skeleton\"\n className=\"flex min-h-0 w-full flex-1 cursor-pointer flex-col overflow-hidden\"\n onClick={onRelease}\n onKeyDown={(event) => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n onRelease();\n }}\n role=\"button\"\n tabIndex={0}\n >\n <OwpPageSkeleton spec={skeletonSpec} />\n </div>\n );\n}\n"],"names":["OwpSuspense","props","children","loadingProps","pathname","useLocation","slots","slotProps","useOwpAppContext","RouteLoadingSlot","getSkeletonSpec","releaseOnClick","routeLoadingProps","skeletonSpec","hasCompletedInitialMountRef","useRef","holdPathname","setHoldPathname","useState","isReleaseOnClickEnabled","useEffect","shouldUseSkeleton","jsx","Suspense","RouteLoadingFallback","__name","RouteLoadingHold","routeLoadingSlotProps","shouldHoldOnResolve","onFallbackRendered","OwpPageSkeleton","OwpLoading","clsx","isVisible","onRelease","event"],"mappings":"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"}
1
+ {"version":3,"file":"OwpSuspense.js","sources":["../../../src/components/OwpSuspense/OwpSuspense.tsx"],"sourcesContent":["import { OwpPageSkeleton } from '@/components/OwpPageSkeleton';\nimport { OwpLoading } from '@/components/OwpLoading';\nimport type { OwpLoadingProps } from '@/components/OwpLoading/OwpLoading';\nimport { useOwpAppContext } from '@/contexts/OwpAppProvider';\nimport clsx from 'clsx';\nimport type {\n OwpPageSkeletonSpec,\n OwpRouteLoadingConfig,\n OwpRouteLoadingSlotProps,\n} from '@/contexts/OwpAppProvider';\nimport {\n ComponentType,\n ReactNode,\n Suspense,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLocation } from 'react-router-dom';\n\ntype OwpSuspenseProps = {\n loadingProps?: OwpLoadingProps;\n children: ReactNode;\n};\n\n/**\n * The OwpSuspense component is a wrapper around the React Suspense component.\n * It is used to display a loading spinner while the wrapped components are being loaded.\n * The component is memoized to prevent unnecessary re-renders.\n * React Suspense defaults\n * For to Avoid Repetition\n */\nfunction OwpSuspense(props: OwpSuspenseProps) {\n const { children, loadingProps } = props;\n const { pathname } = useLocation();\n const { slots, slotProps } = useOwpAppContext();\n const RouteLoadingSlot = slots?.routeLoading;\n const { getSkeletonSpec, releaseOnClick = false, ...routeLoadingProps } =\n slotProps?.routeLoading ?? {};\n const skeletonSpec = getSkeletonSpec?.(pathname);\n const hasCompletedInitialMountRef = useRef(false);\n const [holdPathname, setHoldPathname] = useState<string | null>(null);\n const isReleaseOnClickEnabled = releaseOnClick === true;\n\n useEffect(() => {\n hasCompletedInitialMountRef.current = true;\n }, []);\n\n const shouldUseSkeleton = hasCompletedInitialMountRef.current && !!skeletonSpec;\n\n return (\n <Suspense\n fallback={\n <RouteLoadingFallback\n pathname={pathname}\n loadingProps={loadingProps}\n routeLoadingSlotProps={routeLoadingProps}\n RouteLoadingSlot={RouteLoadingSlot}\n skeletonSpec={skeletonSpec}\n shouldUseSkeleton={shouldUseSkeleton}\n shouldHoldOnResolve={!RouteLoadingSlot && shouldUseSkeleton && isReleaseOnClickEnabled}\n onFallbackRendered={() => {\n setHoldPathname(pathname);\n }}\n />\n }\n >\n <RouteLoadingHold\n skeletonSpec={skeletonSpec}\n isVisible={holdPathname === pathname}\n onRelease={() => {\n setHoldPathname(null);\n }}\n >\n {children}\n </RouteLoadingHold>\n </Suspense>\n );\n}\n\nexport { OwpSuspense };\n\ntype RouteLoadingFallbackProps = {\n pathname: string;\n loadingProps?: OwpLoadingProps;\n routeLoadingSlotProps?: Omit<\n Partial<OwpRouteLoadingSlotProps>,\n 'pathname' | 'isFirstRouteLoading'\n > &\n OwpRouteLoadingConfig;\n RouteLoadingSlot?: ComponentType<OwpRouteLoadingSlotProps>;\n skeletonSpec?: OwpPageSkeletonSpec;\n shouldUseSkeleton: boolean;\n shouldHoldOnResolve: boolean;\n onFallbackRendered: () => void;\n};\n\nfunction RouteLoadingFallback({\n pathname,\n loadingProps,\n routeLoadingSlotProps,\n RouteLoadingSlot,\n skeletonSpec,\n shouldUseSkeleton,\n shouldHoldOnResolve,\n onFallbackRendered,\n}: RouteLoadingFallbackProps) {\n useEffect(() => {\n if (shouldHoldOnResolve) {\n onFallbackRendered();\n }\n }, [onFallbackRendered, shouldHoldOnResolve]);\n\n if (RouteLoadingSlot) {\n return (\n <RouteLoadingSlot\n {...routeLoadingSlotProps}\n {...loadingProps}\n pathname={pathname}\n isFirstRouteLoading={true}\n />\n );\n }\n\n if (shouldUseSkeleton && skeletonSpec) {\n return <OwpPageSkeleton spec={skeletonSpec} />;\n }\n\n return (\n <div className=\"flex min-h-dvh w-full flex-1 flex-col\">\n <OwpLoading\n {...routeLoadingSlotProps}\n {...loadingProps}\n className={clsx(routeLoadingSlotProps?.className, loadingProps?.className)}\n />\n </div>\n );\n}\n\ntype RouteLoadingHoldProps = {\n skeletonSpec?: OwpPageSkeletonSpec;\n isVisible: boolean;\n onRelease: () => void;\n children: ReactNode;\n};\n\nfunction RouteLoadingHold({\n skeletonSpec,\n isVisible,\n onRelease,\n children,\n}: RouteLoadingHoldProps) {\n if (!isVisible || !skeletonSpec) {\n return children;\n }\n\n return (\n <div\n aria-label=\"Release route loading skeleton\"\n className=\"flex min-h-0 w-full flex-1 cursor-pointer flex-col overflow-hidden\"\n onClick={onRelease}\n onKeyDown={(event) => {\n if (event.key !== 'Enter' && event.key !== ' ') {\n return;\n }\n\n event.preventDefault();\n onRelease();\n }}\n role=\"button\"\n tabIndex={0}\n >\n <OwpPageSkeleton spec={skeletonSpec} />\n </div>\n );\n}\n"],"names":["OwpSuspense","props","children","loadingProps","pathname","useLocation","slots","slotProps","useOwpAppContext","RouteLoadingSlot","getSkeletonSpec","releaseOnClick","routeLoadingProps","skeletonSpec","hasCompletedInitialMountRef","useRef","holdPathname","setHoldPathname","useState","isReleaseOnClickEnabled","useEffect","shouldUseSkeleton","jsx","Suspense","RouteLoadingFallback","__name","RouteLoadingHold","routeLoadingSlotProps","shouldHoldOnResolve","onFallbackRendered","OwpPageSkeleton","OwpLoading","clsx","isVisible","onRelease","event"],"mappings":";;;;;;;;;AAgCA,SAASA,EAAYC,GAAyB;AAC5C,QAAM,EAAE,UAAAC,GAAU,cAAAC,EAAA,IAAiBF,GAC7B,EAAE,UAAAG,EAAA,IAAaC,EAAA,GACf,EAAE,OAAAC,GAAO,WAAAC,EAAA,IAAcC,EAAA,GACvBC,IAAmBH,KAAA,gBAAAA,EAAO,cAC1B,EAAE,iBAAAI,GAAiB,gBAAAC,IAAiB,IAAO,GAAGC,OAClDL,KAAA,gBAAAA,EAAW,iBAAgB,CAAA,GACvBM,IAAeH,KAAA,gBAAAA,EAAkBN,IACjCU,IAA8BC,EAAO,EAAK,GAC1C,CAACC,GAAcC,CAAe,IAAIC,EAAwB,IAAI,GAC9DC,IAA0BR,MAAmB;AAEnD,EAAAS,EAAU,MAAM;AACd,IAAAN,EAA4B,UAAU;AAAA,EACxC,GAAG,CAAA,CAAE;AAEL,QAAMO,IAAoBP,EAA4B,WAAW,CAAC,CAACD;AAEnE,SACE,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,UACE,gBAAAD;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,UAAApB;AAAA,UACA,cAAAD;AAAA,UACA,uBAAuBS;AAAA,UACvB,kBAAAH;AAAA,UACA,cAAAI;AAAA,UACA,mBAAAQ;AAAA,UACA,qBAAqB,CAACZ,KAAoBY,KAAqBF;AAAA,UAC/D,oBAAoB,gBAAAM,EAAA,MAAM;AACxB,YAAAR,EAAgBb,CAAQ;AAAA,UAC1B,GAFoB;AAAA,QAEpB;AAAA,MAAA;AAAA,MAIJ,UAAA,gBAAAkB;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,cAAAb;AAAA,UACA,WAAWG,MAAiBZ;AAAA,UAC5B,WAAW,gBAAAqB,EAAA,MAAM;AACf,YAAAR,EAAgB,IAAI;AAAA,UACtB,GAFW;AAAA,UAIV,UAAAf;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;AA9CSuB,EAAAzB,GAAA;AAiET,SAASwB,EAAqB;AAAA,EAC5B,UAAApB;AAAA,EACA,cAAAD;AAAA,EACA,uBAAAwB;AAAA,EACA,kBAAAlB;AAAA,EACA,cAAAI;AAAA,EACA,mBAAAQ;AAAA,EACA,qBAAAO;AAAA,EACA,oBAAAC;AACF,GAA8B;AAO5B,SANAT,EAAU,MAAM;AACd,IAAIQ,KACFC,EAAA;AAAA,EAEJ,GAAG,CAACA,GAAoBD,CAAmB,CAAC,GAExCnB,IAEA,gBAAAa;AAAA,IAACb;AAAA,IAAA;AAAA,MACE,GAAGkB;AAAA,MACH,GAAGxB;AAAA,MACJ,UAAAC;AAAA,MACA,qBAAqB;AAAA,IAAA;AAAA,EAAA,IAKvBiB,KAAqBR,IAChB,gBAAAS,EAACQ,GAAA,EAAgB,MAAMjB,EAAA,CAAc,IAI5C,gBAAAS,EAAC,OAAA,EAAI,WAAU,yCACb,UAAA,gBAAAA;AAAA,IAACS;AAAA,IAAA;AAAA,MACE,GAAGJ;AAAA,MACH,GAAGxB;AAAA,MACJ,WAAW6B,EAAKL,KAAA,gBAAAA,EAAuB,WAAWxB,KAAA,gBAAAA,EAAc,SAAS;AAAA,IAAA;AAAA,EAAA,GAE7E;AAEJ;AAxCSsB,EAAAD,GAAA;AAiDT,SAASE,EAAiB;AAAA,EACxB,cAAAb;AAAA,EACA,WAAAoB;AAAA,EACA,WAAAC;AAAA,EACA,UAAAhC;AACF,GAA0B;AACxB,SAAI,CAAC+B,KAAa,CAACpB,IACVX,IAIP,gBAAAoB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAW;AAAA,MACX,WAAU;AAAA,MACV,SAASY;AAAA,MACT,WAAW,gBAAAT,EAAA,CAACU,MAAU;AACpB,QAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,QAI3CA,EAAM,eAAA,GACND,EAAA;AAAA,MACF,GAPW;AAAA,MAQX,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,UAAA,gBAAAZ,EAACQ,GAAA,EAAgB,MAAMjB,EAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAG3C;AA7BSY,EAAAC,GAAA;"}
@@ -6,9 +6,9 @@ import { DEFAULT_TABLE_RADIUS as mr } from "../../constants/table.js";
6
6
  import { resolveTreeGridColorNumber as M, TREEGRID_INPUT_CELL_COLOR as He, TREEGRID_CELL_HIGHLIGHT_COLOR as Me } from "../../constants/treeGrid.js";
7
7
  import { useGetCurrentSettings as pr } from "../../hooks/useOwpSettings.js";
8
8
  import { useOwpTranslation as Rr } from "../../hooks/useOwpTranslation.js";
9
- import { useGetCurrentLanguage as Tr } from "../../hooks/useCurrentLanguage.js";
9
+ import { useGetCurrentLanguage as Tr } from "../../hooks/internal/useCurrentLanguage.js";
10
10
  import { useConfirm as gr } from "../../hooks/useConfirm.js";
11
- import { TREE_GRID_BODY_ROWS_CHANGED_EVENT as xe } from "../../utils/treeGridBodyRowsEvent.js";
11
+ import { TREE_GRID_BODY_ROWS_CHANGED_EVENT as xe } from "../../utils/internal/treeGridBodyRowsEvent.js";
12
12
  import { getTreeGridCellComparableValue as We, clearTreeGridCellHighlightById as Cr, isTreeGridRowAddedById as w, removeTreeGridAddedRowHighlightColumn as Gr, highlightTreeGridCellById as yr, appendTreeGridAddedRowHighlightColumn as Er, getTreeGridAddedRowBaselineValue as hr } from "../../utils/treeGridUtil.js";
13
13
  import { getTreeGridPerfTimestamp as ee, countTreeGridPerf as Ne, logTreeGridPerf as we, measureTreeGridPerf as Fe } from "./internal/utils/perf.js";
14
14
  import { useRef as n, useState as re, useMemo as Br, useEffect as x, useLayoutEffect as vr } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { resolveOwpGridTheme } from '@/constants/gridTheme';\nimport { DEFAULT_TABLE_RADIUS } from '@/constants/table';\nimport {\n resolveTreeGridColorNumber,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport { useConfirm } from '@/hooks/useConfirm';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport {\n appendTreeGridAddedRowHighlightColumn,\n clearTreeGridCellHighlightById,\n getTreeGridAddedRowBaselineValue,\n getTreeGridCellComparableValue,\n highlightTreeGridCellById,\n isTreeGridRowAddedById,\n removeTreeGridAddedRowHighlightColumn,\n} from '@/utils/treeGridUtil';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./internal/utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './internal/utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport { useOwpTreeGridDatePickerEditor } from './internal/hooks/useOwpTreeGridDatePickerEditor';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridExplicitEnterMode,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\nimport {\n createTreeGridThemeContainerStyle,\n TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n TREE_GRID_THEME_WRAPPER_CLASS,\n treeGridThemeStyles,\n type TreeGridThemeContainerStyle,\n} from './internal/treeGridTheme';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridCellBaselineMap = WeakMap<TRow, Map<string, string>>;\n\nconst isVisibleTreeGridRow = (row: TRow | null | undefined) => {\n const visible = (row as { Visible?: unknown } | null)?.Visible;\n\n return !!row && visible !== 0 && visible !== false && visible !== '0';\n};\n\nconst isAddedTreeGridRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return !!row && added !== 0 && added !== false && added !== '0' && added !== undefined;\n};\n\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot' || !isVisibleTreeGridRow(row)) {\n return false;\n }\n\n return row.Kind === 'Data' || isAddedTreeGridRow(row);\n};\n\nconst getTreeGridRows = (grid: TGrid) => {\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n const rows: TRow[] = [];\n let row = grid.GetFirst();\n\n while (row) {\n rows.push(row);\n row = grid.GetNext(row);\n }\n\n return rows;\n }\n\n return Object.values(grid.Rows ?? {});\n};\n\nconst captureTreeGridChangeBaselines = (\n grid: TGrid | null | undefined,\n baselineMap: TreeGridCellBaselineMap,\n) => {\n if (!grid) {\n return;\n }\n\n const cols = Object.keys(grid.Cols ?? {}).filter(Boolean);\n\n getTreeGridRows(grid).forEach((row) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n baselineMap.set(\n row,\n new Map(cols.map((col) => [col, getTreeGridCellComparableValue(grid, row, col)])),\n );\n });\n};\n\nconst isTreeGridChangedFlag = (value: unknown) =>\n value !== undefined &&\n value !== null &&\n value !== '' &&\n value !== 0 &&\n value !== false &&\n value !== '0';\n\nconst hasOtherTreeGridChangedCells = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n return Object.keys(grid.Cols ?? {}).some((column) => {\n return column !== col && isTreeGridChangedFlag(rowRecord[`${column}Changed`]);\n });\n};\n\nconst clearTreeGridCellChangedState = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n rowRecord[`${col}Changed`] = 0;\n\n if (!isTreeGridRowAddedById(row) && !hasOtherTreeGridChangedCells(grid, row, col)) {\n rowRecord.Changed = 0;\n }\n};\n\nconst resolveTreeGridCellBaselineValue = (\n baselineMap: TreeGridCellBaselineMap,\n row: TRow,\n col: string,\n) => {\n const baselineValues = baselineMap.get(row);\n\n if (baselineValues?.has(col)) {\n return baselineValues.get(col);\n }\n\n if (isTreeGridRowAddedById(row)) {\n return getTreeGridAddedRowBaselineValue(row, col) ?? '';\n }\n\n return undefined;\n};\n\nconst syncTreeGridChangedCellHighlightById = ({\n gridId,\n grid,\n row,\n col,\n backgroundColor,\n baselineMap,\n}: {\n gridId: string;\n grid: TGrid;\n row: TRow;\n col: string;\n backgroundColor: string;\n baselineMap: TreeGridCellBaselineMap;\n}) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n const baselineValue = resolveTreeGridCellBaselineValue(baselineMap, row, col);\n const currentValue = getTreeGridCellComparableValue(grid, row, col);\n\n if (baselineValue !== undefined && currentValue === baselineValue) {\n clearTreeGridCellHighlightById(gridId, { row, col });\n clearTreeGridCellChangedState(grid, row, col);\n\n if (isTreeGridRowAddedById(row)) {\n removeTreeGridAddedRowHighlightColumn(row, col);\n }\n\n return;\n }\n\n highlightTreeGridCellById(gridId, {\n row,\n col,\n backgroundColor,\n });\n\n if (isTreeGridRowAddedById(row)) {\n appendTreeGridAddedRowHighlightColumn(row, col);\n }\n};\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\nexport interface OwpTreeGridDatePickerEditorColumnOption {\n baseYear?: string;\n baseYearMonth?: string;\n}\n\nexport interface OwpTreeGridDatePickerEditorConfig {\n enabled?: boolean;\n columns?: readonly string[];\n allowInput?: boolean;\n columnOptions?: Record<string, OwpTreeGridDatePickerEditorColumnOption>;\n showTimeInput?: boolean;\n showTimeSelect?: boolean;\n timeIntervals?: number;\n}\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n toolbarRowBackgroundColor?: CSSProperties['backgroundColor'];\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n canUseTableRadius?: boolean;\n tableBorderRadius?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n datePickerEditor?: OwpTreeGridDatePickerEditorConfig;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n syncDeletedRowCanEdit?: boolean;\n confirmDeletedRowRemoval?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param toolbarRowBackgroundColor 하단 Toolbar row 배경색\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n * @param canUseTableRadius TreeGrid 내부 테이블 radius 사용 여부\n * @param tableBorderRadius TreeGrid 내부 테이블 radius 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n toolbarRowBackgroundColor,\n className,\n style,\n height = '100%',\n width = '100%',\n canUseTableRadius = false,\n tableBorderRadius = DEFAULT_TABLE_RADIUS,\n layoutUrl,\n layoutData,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n datePickerEditor,\n highlightEditableCells = true,\n highlightChangedCells = true,\n syncDeletedRowCanEdit = true,\n confirmDeletedRowRemoval = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const { confirmDelete } = useConfirm();\n const currentSettings = useGetCurrentSettings();\n const currentGridThemeConfig = currentSettings?.theme?.main?.grid;\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const layoutHasExplicitEnterModeRef = useRef(hasTreeGridExplicitEnterMode(layoutData));\n const handleBeforeRowUndelete = confirmDeletedRowRemoval\n ? async () => {\n const confirmed = await confirmDelete({\n title: t('Message.삭제된 항목을 완전히 삭제하시겠습니까?'),\n description: t('Message.취소하면 삭제 상태가 해제됩니다.'),\n okText: t('Button.완전 삭제'),\n });\n\n return confirmed ? 'remove' : 'undelete';\n }\n : undefined;\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const syncDeletedRowCanEditRef = useRef(syncDeletedRowCanEdit);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentGridThemeConfig),\n [currentGridThemeConfig],\n );\n const editableCellBackgroundColorValueRef = useRef(\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR),\n );\n const changedCellBackgroundColorRef = useRef(\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR,\n );\n const changedCellBaselineRef = useRef<TreeGridCellBaselineMap>(new WeakMap());\n const selectedCellBackgroundColorRef = useRef(treeGridTheme.state.selectedCellBackgroundColor);\n const hoverCellBackgroundColorRef = useRef(treeGridTheme.state.hoverCellBackgroundColor);\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n const handleDatePickerEditorValueChange = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: unknown,\n ) => {\n if (highlightChangedCellsRef.current && row.Fixed !== 'Foot') {\n syncTreeGridChangedCellHighlightById({\n gridId: id,\n grid,\n row,\n col,\n backgroundColor: changedCellBackgroundColorRef.current,\n baselineMap: changedCellBaselineRef.current,\n });\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row, col, value);\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n layoutHasExplicitEnterModeRef.current = hasTreeGridExplicitEnterMode(layoutData);\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n syncDeletedRowCanEditRef.current = syncDeletedRowCanEdit;\n editableCellBackgroundColorValueRef.current =\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR);\n changedCellBackgroundColorRef.current =\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR;\n selectedCellBackgroundColorRef.current = treeGridTheme.state.selectedCellBackgroundColor;\n hoverCellBackgroundColorRef.current = treeGridTheme.state.hoverCellBackgroundColor;\n const {\n datePickerEditorElement,\n handleDatePickerEditorButtonClick,\n handleDatePickerEditorCellClick,\n handleDatePickerEditorKeyDown,\n handleDatePickerEditorStartEdit,\n } =\n useOwpTreeGridDatePickerEditor({\n config: datePickerEditor,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange: handleDatePickerEditorValueChange,\n });\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n onInternalButtonClick: handleDatePickerEditorButtonClick,\n onInternalCellClick: handleDatePickerEditorCellClick,\n onInternalKeyDown: handleDatePickerEditorKeyDown,\n onInternalStartEdit: handleDatePickerEditorStartEdit,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n layoutHasExplicitEnterModeRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n syncDeletedRowCanEditRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\n changedCellBaselineRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n layoutData,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n changedCellBaselineRef.current = new WeakMap();\n captureTreeGridChangeBaselines(treeGrid, changedCellBaselineRef.current);\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: TreeGridThemeContainerStyle = createTreeGridThemeContainerStyle({\n width,\n height,\n treeGridTheme,\n gridThemeConfig: currentGridThemeConfig,\n containerStyle,\n tableBorderRadius: canUseTableRadius ? tableBorderRadius : undefined,\n });\n\n if (toolbarRowBackgroundColor !== undefined) {\n resolvedContainerStyle['--owp-tree-grid-toolbar-row-background-color'] =\n String(toolbarRowBackgroundColor);\n }\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div\n ref={treeGridContainerRef}\n className={[\n TREE_GRID_THEME_WRAPPER_CLASS,\n canUseTableRadius && TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n containerClassName,\n ]\n .filter(Boolean)\n .join(' ')}\n style={resolvedContainerStyle}\n >\n <GlobalStyles styles={treeGridThemeStyles} />\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n {datePickerEditorElement}\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["isVisibleTreeGridRow","__name","row","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","getTreeGridRows","grid","rows","captureTreeGridChangeBaselines","baselineMap","cols","col","getTreeGridCellComparableValue","isTreeGridChangedFlag","value","hasOtherTreeGridChangedCells","rowRecord","column","clearTreeGridCellChangedState","isTreeGridRowAddedById","resolveTreeGridCellBaselineValue","baselineValues","getTreeGridAddedRowBaselineValue","syncTreeGridChangedCellHighlightById","gridId","backgroundColor","baselineValue","currentValue","clearTreeGridCellHighlightById","removeTreeGridAddedRowHighlightColumn","highlightTreeGridCellById","appendTreeGridAddedRowHighlightColumn","OwpTreeGrid","id","containerStyle","containerClassName","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","DEFAULT_TABLE_RADIUS","layoutUrl","layoutData","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","datePickerEditor","highlightEditableCells","highlightChangedCells","syncDeletedRowCanEdit","confirmDeletedRowRemoval","loading","showLoading","t","useOwpTranslation","confirmDelete","useConfirm","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","layoutHasExplicitEnterModeRef","hasTreeGridExplicitEnterMode","handleBeforeRowUndelete","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","syncDeletedRowCanEditRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","treeGridTheme","useMemo","resolveOwpGridTheme","editableCellBackgroundColorValueRef","resolveTreeGridColorNumber","TREEGRID_INPUT_CELL_COLOR","changedCellBackgroundColorRef","TREEGRID_CELL_HIGHLIGHT_COLOR","changedCellBaselineRef","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","hasTreeGridDisplayDataRows","handleDatePickerEditorValueChange","valueChangedHandler","datePickerEditorElement","handleDatePickerEditorButtonClick","handleDatePickerEditorCellClick","handleDatePickerEditorKeyDown","handleDatePickerEditorStartEdit","useOwpTreeGridDatePickerEditor","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","resolvedContainerStyle","createTreeGridThemeContainerStyle","jsxs","TREE_GRID_THEME_WRAPPER_CLASS","TREE_GRID_THEME_TABLE_RADIUS_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
1
+ {"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { resolveOwpGridTheme } from '@/constants/gridTheme';\nimport { DEFAULT_TABLE_RADIUS } from '@/constants/table';\nimport {\n resolveTreeGridColorNumber,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/internal/useCurrentLanguage';\nimport { useConfirm } from '@/hooks/useConfirm';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/internal/treeGridBodyRowsEvent';\nimport {\n appendTreeGridAddedRowHighlightColumn,\n clearTreeGridCellHighlightById,\n getTreeGridAddedRowBaselineValue,\n getTreeGridCellComparableValue,\n highlightTreeGridCellById,\n isTreeGridRowAddedById,\n removeTreeGridAddedRowHighlightColumn,\n} from '@/utils/treeGridUtil';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./internal/utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './internal/utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport { useOwpTreeGridDatePickerEditor } from './internal/hooks/useOwpTreeGridDatePickerEditor';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridExplicitEnterMode,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\nimport {\n createTreeGridThemeContainerStyle,\n TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n TREE_GRID_THEME_WRAPPER_CLASS,\n treeGridThemeStyles,\n type TreeGridThemeContainerStyle,\n} from './internal/treeGridTheme';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridCellBaselineMap = WeakMap<TRow, Map<string, string>>;\n\nconst isVisibleTreeGridRow = (row: TRow | null | undefined) => {\n const visible = (row as { Visible?: unknown } | null)?.Visible;\n\n return !!row && visible !== 0 && visible !== false && visible !== '0';\n};\n\nconst isAddedTreeGridRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return !!row && added !== 0 && added !== false && added !== '0' && added !== undefined;\n};\n\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot' || !isVisibleTreeGridRow(row)) {\n return false;\n }\n\n return row.Kind === 'Data' || isAddedTreeGridRow(row);\n};\n\nconst getTreeGridRows = (grid: TGrid) => {\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n const rows: TRow[] = [];\n let row = grid.GetFirst();\n\n while (row) {\n rows.push(row);\n row = grid.GetNext(row);\n }\n\n return rows;\n }\n\n return Object.values(grid.Rows ?? {});\n};\n\nconst captureTreeGridChangeBaselines = (\n grid: TGrid | null | undefined,\n baselineMap: TreeGridCellBaselineMap,\n) => {\n if (!grid) {\n return;\n }\n\n const cols = Object.keys(grid.Cols ?? {}).filter(Boolean);\n\n getTreeGridRows(grid).forEach((row) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n baselineMap.set(\n row,\n new Map(cols.map((col) => [col, getTreeGridCellComparableValue(grid, row, col)])),\n );\n });\n};\n\nconst isTreeGridChangedFlag = (value: unknown) =>\n value !== undefined &&\n value !== null &&\n value !== '' &&\n value !== 0 &&\n value !== false &&\n value !== '0';\n\nconst hasOtherTreeGridChangedCells = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n return Object.keys(grid.Cols ?? {}).some((column) => {\n return column !== col && isTreeGridChangedFlag(rowRecord[`${column}Changed`]);\n });\n};\n\nconst clearTreeGridCellChangedState = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n\n rowRecord[`${col}Changed`] = 0;\n\n if (!isTreeGridRowAddedById(row) && !hasOtherTreeGridChangedCells(grid, row, col)) {\n rowRecord.Changed = 0;\n }\n};\n\nconst resolveTreeGridCellBaselineValue = (\n baselineMap: TreeGridCellBaselineMap,\n row: TRow,\n col: string,\n) => {\n const baselineValues = baselineMap.get(row);\n\n if (baselineValues?.has(col)) {\n return baselineValues.get(col);\n }\n\n if (isTreeGridRowAddedById(row)) {\n return getTreeGridAddedRowBaselineValue(row, col) ?? '';\n }\n\n return undefined;\n};\n\nconst syncTreeGridChangedCellHighlightById = ({\n gridId,\n grid,\n row,\n col,\n backgroundColor,\n baselineMap,\n}: {\n gridId: string;\n grid: TGrid;\n row: TRow;\n col: string;\n backgroundColor: string;\n baselineMap: TreeGridCellBaselineMap;\n}) => {\n if (!isDisplayTreeGridRow(row)) {\n return;\n }\n\n const baselineValue = resolveTreeGridCellBaselineValue(baselineMap, row, col);\n const currentValue = getTreeGridCellComparableValue(grid, row, col);\n\n if (baselineValue !== undefined && currentValue === baselineValue) {\n clearTreeGridCellHighlightById(gridId, { row, col });\n clearTreeGridCellChangedState(grid, row, col);\n\n if (isTreeGridRowAddedById(row)) {\n removeTreeGridAddedRowHighlightColumn(row, col);\n }\n\n return;\n }\n\n highlightTreeGridCellById(gridId, {\n row,\n col,\n backgroundColor,\n });\n\n if (isTreeGridRowAddedById(row)) {\n appendTreeGridAddedRowHighlightColumn(row, col);\n }\n};\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\nexport interface OwpTreeGridDatePickerEditorColumnOption {\n baseYear?: string;\n baseYearMonth?: string;\n}\n\nexport interface OwpTreeGridDatePickerEditorConfig {\n enabled?: boolean;\n columns?: readonly string[];\n allowInput?: boolean;\n columnOptions?: Record<string, OwpTreeGridDatePickerEditorColumnOption>;\n showTimeInput?: boolean;\n showTimeSelect?: boolean;\n timeIntervals?: number;\n}\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n toolbarRowBackgroundColor?: CSSProperties['backgroundColor'];\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n canUseTableRadius?: boolean;\n tableBorderRadius?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n datePickerEditor?: OwpTreeGridDatePickerEditorConfig;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n syncDeletedRowCanEdit?: boolean;\n confirmDeletedRowRemoval?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param toolbarRowBackgroundColor 하단 Toolbar row 배경색\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n * @param canUseTableRadius TreeGrid 내부 테이블 radius 사용 여부\n * @param tableBorderRadius TreeGrid 내부 테이블 radius 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n toolbarRowBackgroundColor,\n className,\n style,\n height = '100%',\n width = '100%',\n canUseTableRadius = false,\n tableBorderRadius = DEFAULT_TABLE_RADIUS,\n layoutUrl,\n layoutData,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n datePickerEditor,\n highlightEditableCells = true,\n highlightChangedCells = true,\n syncDeletedRowCanEdit = true,\n confirmDeletedRowRemoval = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const { confirmDelete } = useConfirm();\n const currentSettings = useGetCurrentSettings();\n const currentGridThemeConfig = currentSettings?.theme?.main?.grid;\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const layoutHasExplicitEnterModeRef = useRef(hasTreeGridExplicitEnterMode(layoutData));\n const handleBeforeRowUndelete = confirmDeletedRowRemoval\n ? async () => {\n const confirmed = await confirmDelete({\n title: t('Message.삭제된 항목을 완전히 삭제하시겠습니까?'),\n description: t('Message.취소하면 삭제 상태가 해제됩니다.'),\n okText: t('Button.완전 삭제'),\n });\n\n return confirmed ? 'remove' : 'undelete';\n }\n : undefined;\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const syncDeletedRowCanEditRef = useRef(syncDeletedRowCanEdit);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentGridThemeConfig),\n [currentGridThemeConfig],\n );\n const editableCellBackgroundColorValueRef = useRef(\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR),\n );\n const changedCellBackgroundColorRef = useRef(\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR,\n );\n const changedCellBaselineRef = useRef<TreeGridCellBaselineMap>(new WeakMap());\n const selectedCellBackgroundColorRef = useRef(treeGridTheme.state.selectedCellBackgroundColor);\n const hoverCellBackgroundColorRef = useRef(treeGridTheme.state.hoverCellBackgroundColor);\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n const handleDatePickerEditorValueChange = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: unknown,\n ) => {\n if (highlightChangedCellsRef.current && row.Fixed !== 'Foot') {\n syncTreeGridChangedCellHighlightById({\n gridId: id,\n grid,\n row,\n col,\n backgroundColor: changedCellBackgroundColorRef.current,\n baselineMap: changedCellBaselineRef.current,\n });\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row, col, value);\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n layoutHasExplicitEnterModeRef.current = hasTreeGridExplicitEnterMode(layoutData);\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n syncDeletedRowCanEditRef.current = syncDeletedRowCanEdit;\n editableCellBackgroundColorValueRef.current =\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR);\n changedCellBackgroundColorRef.current =\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR;\n selectedCellBackgroundColorRef.current = treeGridTheme.state.selectedCellBackgroundColor;\n hoverCellBackgroundColorRef.current = treeGridTheme.state.hoverCellBackgroundColor;\n const {\n datePickerEditorElement,\n handleDatePickerEditorButtonClick,\n handleDatePickerEditorCellClick,\n handleDatePickerEditorKeyDown,\n handleDatePickerEditorStartEdit,\n } =\n useOwpTreeGridDatePickerEditor({\n config: datePickerEditor,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange: handleDatePickerEditorValueChange,\n });\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n onInternalButtonClick: handleDatePickerEditorButtonClick,\n onInternalCellClick: handleDatePickerEditorCellClick,\n onInternalKeyDown: handleDatePickerEditorKeyDown,\n onInternalStartEdit: handleDatePickerEditorStartEdit,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n layoutHasExplicitEnterModeRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n syncDeletedRowCanEditRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\n changedCellBaselineRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n layoutData,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n changedCellBaselineRef.current = new WeakMap();\n captureTreeGridChangeBaselines(treeGrid, changedCellBaselineRef.current);\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: TreeGridThemeContainerStyle = createTreeGridThemeContainerStyle({\n width,\n height,\n treeGridTheme,\n gridThemeConfig: currentGridThemeConfig,\n containerStyle,\n tableBorderRadius: canUseTableRadius ? tableBorderRadius : undefined,\n });\n\n if (toolbarRowBackgroundColor !== undefined) {\n resolvedContainerStyle['--owp-tree-grid-toolbar-row-background-color'] =\n String(toolbarRowBackgroundColor);\n }\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div\n ref={treeGridContainerRef}\n className={[\n TREE_GRID_THEME_WRAPPER_CLASS,\n canUseTableRadius && TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n containerClassName,\n ]\n .filter(Boolean)\n .join(' ')}\n style={resolvedContainerStyle}\n >\n <GlobalStyles styles={treeGridThemeStyles} />\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n {datePickerEditorElement}\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["isVisibleTreeGridRow","__name","row","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","getTreeGridRows","grid","rows","captureTreeGridChangeBaselines","baselineMap","cols","col","getTreeGridCellComparableValue","isTreeGridChangedFlag","value","hasOtherTreeGridChangedCells","rowRecord","column","clearTreeGridCellChangedState","isTreeGridRowAddedById","resolveTreeGridCellBaselineValue","baselineValues","getTreeGridAddedRowBaselineValue","syncTreeGridChangedCellHighlightById","gridId","backgroundColor","baselineValue","currentValue","clearTreeGridCellHighlightById","removeTreeGridAddedRowHighlightColumn","highlightTreeGridCellById","appendTreeGridAddedRowHighlightColumn","OwpTreeGrid","id","containerStyle","containerClassName","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","DEFAULT_TABLE_RADIUS","layoutUrl","layoutData","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","datePickerEditor","highlightEditableCells","highlightChangedCells","syncDeletedRowCanEdit","confirmDeletedRowRemoval","loading","showLoading","t","useOwpTranslation","confirmDelete","useConfirm","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","layoutHasExplicitEnterModeRef","hasTreeGridExplicitEnterMode","handleBeforeRowUndelete","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","syncDeletedRowCanEditRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","treeGridTheme","useMemo","resolveOwpGridTheme","editableCellBackgroundColorValueRef","resolveTreeGridColorNumber","TREEGRID_INPUT_CELL_COLOR","changedCellBackgroundColorRef","TREEGRID_CELL_HIGHLIGHT_COLOR","changedCellBaselineRef","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","hasTreeGridDisplayDataRows","handleDatePickerEditorValueChange","valueChangedHandler","datePickerEditorElement","handleDatePickerEditorButtonClick","handleDatePickerEditorCellClick","handleDatePickerEditorKeyDown","handleDatePickerEditorStartEdit","useOwpTreeGridDatePickerEditor","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","resolvedContainerStyle","createTreeGridThemeContainerStyle","jsxs","TREE_GRID_THEME_WRAPPER_CLASS","TREE_GRID_THEME_TABLE_RADIUS_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}