@owp/core 2.5.2 → 2.5.4
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/_virtual/index11.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index14.js +2 -2
- package/dist/_virtual/index15.js +2 -2
- package/dist/_virtual/index16.js +4 -4
- package/dist/_virtual/index17.js +4 -4
- package/dist/_virtual/index18.js +4 -4
- package/dist/_virtual/index19.js +4 -4
- package/dist/components/{OwpFileUploadButton/OwpFileUploadButton.js → OwpFilePickerButton/OwpFilePickerButton.js} +15 -15
- package/dist/components/OwpFilePickerButton/OwpFilePickerButton.js.map +1 -0
- package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js.map +1 -1
- package/dist/components/OwpMoreActionsButton/OwpMoreActionsButton.js +27 -27
- package/dist/components/OwpMoreActionsButton/OwpMoreActionsButton.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +346 -336
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpSnackbarContent/OwpSnackbarContent.js +166 -0
- package/dist/components/OwpSnackbarContent/OwpSnackbarContent.js.map +1 -0
- package/dist/components/OwpTable/OwpDataTable.js +333 -283
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpFieldTable.js +102 -58
- package/dist/components/OwpTable/OwpFieldTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +192 -172
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/internal/treeGridTableStyle.js +77 -0
- package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -0
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +199 -171
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +172 -131
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +462 -0
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -0
- package/dist/components/{OwpTreeGridExcelButton/OwpTreeGridExcelButton.js → OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js} +7 -7
- package/dist/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js.map +1 -0
- package/dist/configs/defaultConfig.js +67 -44
- package/dist/configs/defaultConfig.js.map +1 -1
- package/dist/constants/gridTheme.js +78 -0
- package/dist/constants/gridTheme.js.map +1 -0
- package/dist/constants/tableTheme.js +16 -0
- package/dist/constants/tableTheme.js.map +1 -0
- package/dist/constants/treeGrid.js +44 -26
- package/dist/constants/treeGrid.js.map +1 -1
- package/dist/constants.js +21 -20
- package/dist/contexts/OwpUiProvider.js +59 -38
- package/dist/contexts/OwpUiProvider.js.map +1 -1
- package/dist/hooks/useFormDataUploadMutation.js.map +1 -1
- package/dist/index.js +105 -104
- package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
- package/dist/layout/components/toolbar/ToolbarLayout.js +5 -4
- package/dist/layout/components/toolbar/ToolbarLayout.js.map +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/types/components/{OwpFileUploadButton/OwpFileUploadButton.d.ts → OwpFilePickerButton/OwpFilePickerButton.d.ts} +4 -4
- package/dist/types/components/OwpFilePickerButton/index.d.ts +1 -0
- package/dist/types/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.d.ts +1 -1
- package/dist/types/components/OwpMoreActionsButton/OwpMoreActionsButton.d.ts +4 -4
- package/dist/types/components/OwpSnackbarContent/OwpSnackbarContent.d.ts +2 -0
- package/dist/types/components/OwpTable/OwpTable.d.ts +5 -1
- package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +105 -0
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +5 -1
- package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +20 -0
- package/dist/types/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.d.ts +12 -0
- package/dist/types/components/OwpTreeGridExportExcelButton/index.d.ts +1 -0
- package/dist/types/configs/defaultConfig.d.ts +22 -0
- package/dist/types/constants/gridTheme.d.ts +88 -0
- package/dist/types/constants/tableTheme.d.ts +18 -0
- package/dist/types/constants/treeGrid.d.ts +5 -0
- package/dist/types/hooks/useFormDataUploadMutation.d.ts +4 -3
- package/dist/types/index.d.ts +2 -2
- package/dist/types/types/OwpGridThemeTypes.d.ts +48 -0
- package/dist/types/types/OwpSettingsTypes.d.ts +11 -0
- package/dist/types/types/OwpTableThemeTypes.d.ts +16 -0
- package/dist/types/types/index.d.ts +3 -1
- package/dist/types/utils/treeGridUtil.d.ts +1 -0
- package/dist/utils/createFormDataBody.js +19 -14
- package/dist/utils/createFormDataBody.js.map +1 -1
- package/dist/utils/exceljsBrowser.js +45 -48
- package/dist/utils/exceljsBrowser.js.map +1 -1
- package/dist/utils/treeGridUtil.js +66 -66
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpFileUploadButton/OwpFileUploadButton.js.map +0 -1
- package/dist/components/OwpTreeGridExcelButton/OwpTreeGridExcelButton.js.map +0 -1
- package/dist/types/components/OwpFileUploadButton/index.d.ts +0 -1
- package/dist/types/components/OwpTreeGridExcelButton/OwpTreeGridExcelButton.d.ts +0 -12
- package/dist/types/components/OwpTreeGridExcelButton/index.d.ts +0 -1
|
@@ -1,221 +1,249 @@
|
|
|
1
|
-
var
|
|
2
|
-
var a = (r,
|
|
3
|
-
import { jsxs as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
1
|
+
var Xe = Object.defineProperty;
|
|
2
|
+
var a = (r, l) => Xe(r, "name", { value: l, configurable: !0 });
|
|
3
|
+
import { jsxs as Ze, 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";
|
|
4
|
+
import { resolveOwpGridTheme as $e } from "../../constants/gridTheme.js";
|
|
5
|
+
import { resolveTreeGridColorNumber as _, TREEGRID_INPUT_CELL_COLOR as he, TREEGRID_CELL_HIGHLIGHT_COLOR as He } from "../../constants/treeGrid.js";
|
|
6
|
+
import { useGetCurrentSettings as er } from "../../hooks/useOwpSettings.js";
|
|
7
|
+
import { useOwpTranslation as rr } from "../../hooks/useOwpTranslation.js";
|
|
8
|
+
import { useGetCurrentLanguage as tr } from "../../hooks/useCurrentLanguage.js";
|
|
9
|
+
import { TREE_GRID_BODY_ROWS_CHANGED_EVENT as Ae } from "../../utils/treeGridBodyRowsEvent.js";
|
|
10
|
+
import { getTreeGridPerfTimestamp as z, countTreeGridPerf as ke, logTreeGridPerf as Pe, measureTreeGridPerf as Se } from "./internal/utils/perf.js";
|
|
11
|
+
import { useRef as e, useState as Y, useMemo as or, useEffect as O, useLayoutEffect as nr } from "react";
|
|
12
|
+
import ir from "@mui/material/GlobalStyles";
|
|
13
|
+
import { useOwpTreeGridOverlayFrame as sr } from "./internal/hooks/useOwpTreeGridOverlayFrame.js";
|
|
14
|
+
import { bindTreeGridEvents as ur, getTreeGridBodyDataCount as J, buildTreeGridInitializationOptions as lr, hasTreeGridDisplayDataRows as Ne, replaceTreeGridBodyData as ar, TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS as cr } from "./internal/treeGridRuntime.js";
|
|
15
|
+
import { applyTreeGridLayoutToGrid as dr } from "./internal/treeGridLayout.js";
|
|
16
|
+
import { OwpTreeGridLoadingOverlay as fr } from "./internal/OwpTreeGridLoadingOverlay.js";
|
|
17
|
+
import { OwpTreeGridNoDataOverlay as mr } from "./internal/OwpTreeGridNoDataOverlay.js";
|
|
18
|
+
import { resolveTreeGridColumnEditRuleLookup as Me, createTreeGridColumnEditRulesState as pr, syncTreeGridColumnEditRules as Rr } from "./internal/treeGridColumnEditRules.js";
|
|
19
|
+
import { createTreeGridThemeContainerStyle as Tr, TREE_GRID_THEME_WRAPPER_CLASS as yr, treeGridThemeStyles as Gr } from "./internal/treeGridTheme.js";
|
|
15
20
|
import { isEmpty as w } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
|
|
16
|
-
import { delay as
|
|
17
|
-
import { isEqual as
|
|
18
|
-
import { omit as
|
|
19
|
-
const
|
|
21
|
+
import { delay as gr } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/delay.js";
|
|
22
|
+
import { isEqual as xe } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
|
|
23
|
+
import { omit as vr } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.js";
|
|
24
|
+
const Fr = /* @__PURE__ */ a(({
|
|
20
25
|
id: r = "treeGridWrapper",
|
|
21
|
-
containerStyle:
|
|
22
|
-
containerClassName:
|
|
23
|
-
className:
|
|
24
|
-
style:
|
|
25
|
-
height:
|
|
26
|
-
width:
|
|
27
|
-
layoutUrl:
|
|
28
|
-
dataUrl:
|
|
29
|
-
layoutOverrides:
|
|
30
|
-
data:
|
|
31
|
-
useDataUrl:
|
|
32
|
-
onSelect:
|
|
33
|
-
onRowClick:
|
|
34
|
-
onRowAdd:
|
|
35
|
-
onRowDelete:
|
|
36
|
-
onRowUndelete:
|
|
37
|
-
onRowChange:
|
|
38
|
-
onClickButton:
|
|
39
|
-
onSave:
|
|
40
|
-
onReady:
|
|
41
|
-
onAfterValueChanged:
|
|
42
|
-
columnEditRules:
|
|
43
|
-
highlightEditableCells:
|
|
44
|
-
highlightChangedCells:
|
|
45
|
-
loading:
|
|
46
|
-
showLoading:
|
|
26
|
+
containerStyle: l,
|
|
27
|
+
containerClassName: Ve,
|
|
28
|
+
className: je,
|
|
29
|
+
style: qe,
|
|
30
|
+
height: K = "100%",
|
|
31
|
+
width: Q = "100%",
|
|
32
|
+
layoutUrl: We,
|
|
33
|
+
dataUrl: Fe,
|
|
34
|
+
layoutOverrides: h,
|
|
35
|
+
data: o,
|
|
36
|
+
useDataUrl: U,
|
|
37
|
+
onSelect: X,
|
|
38
|
+
onRowClick: Z,
|
|
39
|
+
onRowAdd: $,
|
|
40
|
+
onRowDelete: ee,
|
|
41
|
+
onRowUndelete: re,
|
|
42
|
+
onRowChange: te,
|
|
43
|
+
onClickButton: oe,
|
|
44
|
+
onSave: ne,
|
|
45
|
+
onReady: ie,
|
|
46
|
+
onAfterValueChanged: se,
|
|
47
|
+
columnEditRules: m,
|
|
48
|
+
highlightEditableCells: ue = !0,
|
|
49
|
+
highlightChangedCells: le = !0,
|
|
50
|
+
loading: ze,
|
|
51
|
+
showLoading: n = !0
|
|
47
52
|
}) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
var De, Be;
|
|
54
|
+
const { t: H } = rr(), A = er(), k = (Be = (De = A == null ? void 0 : A.theme) == null ? void 0 : De.main) == null ? void 0 : Be.grid, i = e(null), ae = e(null), ce = e(null), P = e(null), S = e(h), de = e(o), N = e(
|
|
55
|
+
m
|
|
56
|
+
), M = e(
|
|
57
|
+
Me(m, {
|
|
58
|
+
hourMinuteInvalidText: H("Message.시간은 HH:mm 형식으로 입력해주세요.")
|
|
53
59
|
})
|
|
54
|
-
),
|
|
55
|
-
onSelect:
|
|
56
|
-
onRowClick:
|
|
57
|
-
onRowAdd:
|
|
58
|
-
onRowDelete:
|
|
59
|
-
onRowUndelete:
|
|
60
|
-
onRowChange:
|
|
61
|
-
onClickButton:
|
|
62
|
-
onSave:
|
|
63
|
-
onReady:
|
|
64
|
-
onAfterValueChanged:
|
|
65
|
-
}), p = e(void 0),
|
|
60
|
+
), fe = e({
|
|
61
|
+
onSelect: X,
|
|
62
|
+
onRowClick: Z,
|
|
63
|
+
onRowAdd: $,
|
|
64
|
+
onRowDelete: ee,
|
|
65
|
+
onRowUndelete: re,
|
|
66
|
+
onRowChange: te,
|
|
67
|
+
onClickButton: oe,
|
|
68
|
+
onSave: ne,
|
|
69
|
+
onReady: ie,
|
|
70
|
+
onAfterValueChanged: se
|
|
71
|
+
}), p = e(void 0), x = e(!1), C = e(void 0), E = e(void 0), b = e(
|
|
66
72
|
void 0
|
|
67
|
-
),
|
|
68
|
-
|
|
73
|
+
), me = e(pr()), Ye = e(!1), R = e(0), c = e(null), T = e(void 0), y = e(void 0), pe = e(ue), Re = e(le), [V, Je] = Y(!1), [Ke, G] = Y(!1), [Qe, Te] = Y(!1), D = tr(), s = or(
|
|
74
|
+
() => $e(k),
|
|
75
|
+
[k]
|
|
76
|
+
), ye = e(
|
|
77
|
+
_(s.editable.backgroundColor) ?? _(he)
|
|
78
|
+
), Ge = e(
|
|
79
|
+
s.changed.backgroundColor ?? He
|
|
80
|
+
), ge = e(s.state.selectedCellBackgroundColor), ve = e(s.state.hoverCellBackgroundColor), Ce = e(D.id), Ue = n && o !== void 0 && V && E.current !== o, j = n && ze === !0 || n && (Ke || Ue), q = !j && o !== void 0 && w(o) && !Qe, Ee = /* @__PURE__ */ a((t) => {
|
|
81
|
+
Te(Ne(t));
|
|
69
82
|
}, "syncHasDisplayDataRows");
|
|
70
|
-
|
|
71
|
-
hourMinuteInvalidText:
|
|
72
|
-
}),
|
|
73
|
-
onSelect:
|
|
74
|
-
onRowClick:
|
|
75
|
-
onRowAdd:
|
|
76
|
-
onRowDelete:
|
|
77
|
-
onRowUndelete:
|
|
78
|
-
onRowChange:
|
|
79
|
-
onClickButton:
|
|
80
|
-
onSave:
|
|
81
|
-
onReady:
|
|
82
|
-
onAfterValueChanged:
|
|
83
|
+
S.current = h, de.current = o, N.current = m, M.current = Me(m, {
|
|
84
|
+
hourMinuteInvalidText: H("Message.시간은 HH:mm 형식으로 입력해주세요.")
|
|
85
|
+
}), pe.current = ue, Re.current = le, ye.current = _(s.editable.backgroundColor) ?? _(he), Ge.current = s.changed.backgroundColor ?? He, ge.current = s.state.selectedCellBackgroundColor, ve.current = s.state.hoverCellBackgroundColor, fe.current = {
|
|
86
|
+
onSelect: X,
|
|
87
|
+
onRowClick: Z,
|
|
88
|
+
onRowAdd: $,
|
|
89
|
+
onRowDelete: ee,
|
|
90
|
+
onRowUndelete: re,
|
|
91
|
+
onRowChange: te,
|
|
92
|
+
onClickButton: oe,
|
|
93
|
+
onSave: ne,
|
|
94
|
+
onReady: ie,
|
|
95
|
+
onAfterValueChanged: se
|
|
83
96
|
};
|
|
84
|
-
const
|
|
85
|
-
visible:
|
|
86
|
-
containerRef:
|
|
97
|
+
const be = sr({
|
|
98
|
+
visible: j || q,
|
|
99
|
+
containerRef: ae,
|
|
87
100
|
treeGridInstanceRef: i,
|
|
88
101
|
debugId: r
|
|
89
102
|
}), B = /* @__PURE__ */ a(() => {
|
|
90
|
-
|
|
91
|
-
}, "clearBindingLoadingHideTimeout"),
|
|
103
|
+
T.current !== void 0 && (window.clearTimeout(T.current), T.current = void 0);
|
|
104
|
+
}, "clearBindingLoadingHideTimeout"), W = /* @__PURE__ */ a(() => {
|
|
92
105
|
y.current !== void 0 && (window.clearTimeout(y.current), y.current = void 0);
|
|
93
106
|
}, "clearBodyReloadStartTimeout");
|
|
94
|
-
|
|
95
|
-
const t = /* @__PURE__ */ a((
|
|
107
|
+
O(() => {
|
|
108
|
+
const t = /* @__PURE__ */ a((u) => {
|
|
96
109
|
var d;
|
|
97
|
-
((d =
|
|
110
|
+
((d = u.detail) == null ? void 0 : d.gridId) === r && Te(Ne(i.current));
|
|
98
111
|
}, "handleBodyRowsChanged");
|
|
99
|
-
return window.addEventListener(
|
|
100
|
-
window.removeEventListener(
|
|
112
|
+
return window.addEventListener(Ae, t), () => {
|
|
113
|
+
window.removeEventListener(Ae, t);
|
|
101
114
|
};
|
|
102
|
-
}, [r]),
|
|
103
|
-
|
|
104
|
-
}, [
|
|
115
|
+
}, [r]), O(() => {
|
|
116
|
+
n || (W(), B(), c.current = null, G(!1));
|
|
117
|
+
}, [n]), O(() => {
|
|
105
118
|
var t;
|
|
106
|
-
if (
|
|
107
|
-
return
|
|
119
|
+
if (D.id !== Ce.current && !w(i.current) && ((t = i.current) == null || t.Dispose(), i.current = null, Ce.current = D.id), !!w(i.current))
|
|
120
|
+
return ur({
|
|
108
121
|
id: r,
|
|
109
|
-
latestEventHandlersRef:
|
|
110
|
-
highlightEditableCellsRef:
|
|
111
|
-
highlightChangedCellsRef:
|
|
122
|
+
latestEventHandlersRef: fe,
|
|
123
|
+
highlightEditableCellsRef: pe,
|
|
124
|
+
highlightChangedCellsRef: Re,
|
|
125
|
+
editableCellBackgroundColorValueRef: ye,
|
|
126
|
+
changedCellBackgroundColorRef: Ge,
|
|
127
|
+
selectedCellBackgroundColorRef: ge,
|
|
128
|
+
hoverCellBackgroundColorRef: ve,
|
|
112
129
|
treeGridInstanceRef: i,
|
|
113
|
-
treeGridInitStartedAtRef:
|
|
114
|
-
latestLayoutOverridesRef:
|
|
115
|
-
appliedLayoutOverridesRef:
|
|
116
|
-
appliedBodyDataPropRef:
|
|
117
|
-
latestColumnEditRulesRef:
|
|
118
|
-
latestColumnEditRuleLookupRef:
|
|
130
|
+
treeGridInitStartedAtRef: ce,
|
|
131
|
+
latestLayoutOverridesRef: S,
|
|
132
|
+
appliedLayoutOverridesRef: C,
|
|
133
|
+
appliedBodyDataPropRef: E,
|
|
134
|
+
latestColumnEditRulesRef: N,
|
|
135
|
+
latestColumnEditRuleLookupRef: M,
|
|
119
136
|
appliedColumnEditRulesRef: b,
|
|
120
|
-
columnEditRulesStateRef:
|
|
121
|
-
hasAppliedInitialLayoutRef:
|
|
122
|
-
syncHasDisplayDataRows:
|
|
123
|
-
setIsTreeGridReady:
|
|
124
|
-
}),
|
|
125
|
-
useDataUrl: !!
|
|
126
|
-
bodyRowCount:
|
|
137
|
+
columnEditRulesStateRef: me,
|
|
138
|
+
hasAppliedInitialLayoutRef: Ye,
|
|
139
|
+
syncHasDisplayDataRows: Ee,
|
|
140
|
+
setIsTreeGridReady: Je
|
|
141
|
+
}), ce.current = z(), ke(r, "init"), Pe(r, "TreeGrid init start", {
|
|
142
|
+
useDataUrl: !!U,
|
|
143
|
+
bodyRowCount: J(o)
|
|
127
144
|
}), window.TreeGrid(
|
|
128
|
-
|
|
145
|
+
lr({
|
|
129
146
|
id: r,
|
|
130
|
-
layoutUrl:
|
|
131
|
-
dataUrl:
|
|
132
|
-
bodyData:
|
|
133
|
-
useDataUrl:
|
|
134
|
-
width:
|
|
135
|
-
height:
|
|
136
|
-
languageId:
|
|
147
|
+
layoutUrl: We,
|
|
148
|
+
dataUrl: Fe,
|
|
149
|
+
bodyData: o,
|
|
150
|
+
useDataUrl: U,
|
|
151
|
+
width: Q,
|
|
152
|
+
height: K,
|
|
153
|
+
languageId: D.id
|
|
137
154
|
}),
|
|
138
155
|
r,
|
|
139
156
|
r
|
|
140
157
|
), () => {
|
|
141
|
-
|
|
142
|
-
var
|
|
143
|
-
(
|
|
158
|
+
gr(() => {
|
|
159
|
+
var u;
|
|
160
|
+
(u = i.current) == null || u.Dispose();
|
|
144
161
|
}, 200);
|
|
145
162
|
};
|
|
146
|
-
}, []),
|
|
147
|
-
const t = i.current,
|
|
148
|
-
if (w(t) || !
|
|
163
|
+
}, []), nr(() => {
|
|
164
|
+
const t = i.current, u = S.current, g = de.current, d = N.current;
|
|
165
|
+
if (w(t) || !V)
|
|
149
166
|
return;
|
|
150
|
-
const
|
|
151
|
-
if (!(!
|
|
152
|
-
if (
|
|
153
|
-
const
|
|
154
|
-
|
|
167
|
+
const Ie = C.current !== u && !xe(C.current, u), I = E.current !== g && (!x.current || p.current !== g), Le = b.current !== d && !xe(b.current, d);
|
|
168
|
+
if (!(!Ie && !I && !Le)) {
|
|
169
|
+
if (Ie) {
|
|
170
|
+
const f = z();
|
|
171
|
+
dr(t, u, I), C.current = u, Se(r, "apply layout", f, {
|
|
155
172
|
disableBodyReload: !!I
|
|
156
173
|
});
|
|
157
174
|
}
|
|
158
175
|
if (I) {
|
|
159
|
-
const
|
|
160
|
-
const
|
|
161
|
-
y.current = void 0,
|
|
162
|
-
bodyRowCount:
|
|
163
|
-
}),
|
|
164
|
-
if (
|
|
176
|
+
const f = R.current + 1, _e = /* @__PURE__ */ a(() => {
|
|
177
|
+
const v = p.current;
|
|
178
|
+
y.current = void 0, P.current = z(), ke(r, "reload"), Pe(r, "ReloadBody start", {
|
|
179
|
+
bodyRowCount: J(v)
|
|
180
|
+
}), ar(t, v, () => {
|
|
181
|
+
if (R.current !== f)
|
|
165
182
|
return;
|
|
166
|
-
|
|
167
|
-
bodyRowCount:
|
|
168
|
-
}),
|
|
169
|
-
const
|
|
170
|
-
if (!
|
|
171
|
-
c.current = null,
|
|
183
|
+
E.current = v, Ee(t), Se(r, "ReloadBody end", P.current, {
|
|
184
|
+
bodyRowCount: J(v)
|
|
185
|
+
}), P.current = null, p.current === v && (p.current = void 0, x.current = !1);
|
|
186
|
+
const Oe = c.current;
|
|
187
|
+
if (!n || Oe === null) {
|
|
188
|
+
c.current = null, G(!1);
|
|
172
189
|
return;
|
|
173
190
|
}
|
|
174
|
-
const
|
|
191
|
+
const we = Math.max(
|
|
175
192
|
0,
|
|
176
|
-
|
|
193
|
+
cr - (Date.now() - Oe)
|
|
177
194
|
);
|
|
178
|
-
if (B(),
|
|
179
|
-
c.current = null,
|
|
195
|
+
if (B(), we === 0) {
|
|
196
|
+
c.current = null, G(!1);
|
|
180
197
|
return;
|
|
181
198
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
},
|
|
199
|
+
T.current = window.setTimeout(() => {
|
|
200
|
+
R.current === f && (T.current = void 0, c.current = null, G(!1));
|
|
201
|
+
}, we);
|
|
185
202
|
});
|
|
186
203
|
}, "runBodyReload");
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}, 0)) :
|
|
204
|
+
R.current = f, p.current = g, x.current = !0, n && g !== void 0 ? (W(), B(), c.current = Date.now(), G(!0), y.current = window.setTimeout(() => {
|
|
205
|
+
R.current === f && _e();
|
|
206
|
+
}, 0)) : _e();
|
|
190
207
|
}
|
|
191
|
-
|
|
208
|
+
Le && (Rr(
|
|
192
209
|
t,
|
|
193
|
-
|
|
194
|
-
|
|
210
|
+
M.current,
|
|
211
|
+
me.current
|
|
195
212
|
), b.current = d);
|
|
196
213
|
}
|
|
197
|
-
}, [
|
|
198
|
-
|
|
214
|
+
}, [V, h, o, m, n, r]), O(() => () => {
|
|
215
|
+
W(), B();
|
|
199
216
|
}, []);
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
+
const F = Tr({
|
|
218
|
+
width: Q,
|
|
219
|
+
height: K,
|
|
220
|
+
treeGridTheme: s,
|
|
221
|
+
gridThemeConfig: k,
|
|
222
|
+
containerStyle: l
|
|
223
|
+
});
|
|
224
|
+
return (n || q) && (F.position = l != null && l.position && l.position !== "static" ? l.position : "relative", F.isolation = "isolate"), /* @__PURE__ */ Ze(
|
|
225
|
+
"div",
|
|
226
|
+
{
|
|
227
|
+
ref: ae,
|
|
228
|
+
className: [yr, Ve].filter(Boolean).join(" "),
|
|
229
|
+
style: F,
|
|
230
|
+
children: [
|
|
231
|
+
/* @__PURE__ */ L(ir, { styles: Gr }),
|
|
232
|
+
/* @__PURE__ */ L("div", { id: r, className: je, style: vr(qe, ["height", "width"]) }),
|
|
233
|
+
/* @__PURE__ */ L(
|
|
234
|
+
mr,
|
|
235
|
+
{
|
|
236
|
+
visible: q,
|
|
237
|
+
message: H("Message.조회된 결과가 없습니다."),
|
|
238
|
+
overlayFrame: be
|
|
239
|
+
}
|
|
240
|
+
),
|
|
241
|
+
/* @__PURE__ */ L(fr, { visible: j, overlayFrame: be })
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
);
|
|
217
245
|
}, "OwpTreeGrid");
|
|
218
246
|
export {
|
|
219
|
-
|
|
247
|
+
Fr as OwpTreeGrid
|
|
220
248
|
};
|
|
221
249
|
//# sourceMappingURL=OwpTreeGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\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 useRef,\n useState,\n} from 'react';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\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 createTreeGridColumnEditRulesState,\n resolveTreeGridColumnEditRuleLookup,\n syncTreeGridColumnEditRules,\n} from './internal/treeGridColumnEditRules';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\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>[];\nexport type OwpTreeGridColumnEditPreset = 'hourMinute';\n\nexport interface OwpTreeGridColumnEditRule {\n columns: readonly string[];\n preset: OwpTreeGridColumnEditPreset;\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 layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: 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 columnEditRules?: readonly OwpTreeGridColumnEditRule[];\n highlightEditableCells?: boolean;\n highlightChangedCells?: 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 className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n className,\n style,\n height = '100%',\n width = '100%',\n layoutUrl,\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 columnEditRules,\n highlightEditableCells = true,\n highlightChangedCells = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\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 latestColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n columnEditRules,\n );\n const latestColumnEditRuleLookupRef = useRef(\n resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n }),\n );\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\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 appliedColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n undefined,\n );\n const columnEditRulesStateRef = useRef(createTreeGridColumnEditRulesState());\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 [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\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\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n latestColumnEditRulesRef.current = columnEditRules;\n latestColumnEditRuleLookupRef.current = resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n });\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\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 highlightEditableCellsRef,\n highlightChangedCellsRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n latestColumnEditRulesRef,\n latestColumnEditRuleLookupRef,\n appliedColumnEditRulesRef,\n columnEditRulesStateRef,\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 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 const nextColumnEditRules = latestColumnEditRulesRef.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 const shouldApplyColumnEditRules =\n appliedColumnEditRulesRef.current !== nextColumnEditRules &&\n !isEqual(appliedColumnEditRulesRef.current, nextColumnEditRules);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData && !shouldApplyColumnEditRules) {\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 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 if (shouldApplyColumnEditRules) {\n syncTreeGridColumnEditRules(\n treeGrid,\n latestColumnEditRuleLookupRef.current,\n columnEditRulesStateRef.current,\n );\n appliedColumnEditRulesRef.current = nextColumnEditRules;\n }\n }, [isTreeGridReady, layoutOverrides, data, columnEditRules, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: CSSProperties = {\n height,\n width,\n ...containerStyle,\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 ref={treeGridContainerRef} className={containerClassName} style={resolvedContainerStyle}>\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 </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","className","style","height","width","layoutUrl","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","columnEditRules","highlightEditableCells","highlightChangedCells","loading","showLoading","t","useOwpTranslation","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","resolveTreeGridColumnEditRuleLookup","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","appliedColumnEditRulesRef","columnEditRulesStateRef","createTreeGridColumnEditRulesState","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","_a","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","nextColumnEditRules","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","shouldApplyColumnEditRules","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","syncTreeGridColumnEditRules","resolvedContainerStyle","jsx","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 {\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 {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\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 { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\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 createTreeGridColumnEditRulesState,\n resolveTreeGridColumnEditRuleLookup,\n syncTreeGridColumnEditRules,\n} from './internal/treeGridColumnEditRules';\nimport {\n createTreeGridThemeContainerStyle,\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>;\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>[];\nexport type OwpTreeGridColumnEditPreset = 'hourMinute';\n\nexport interface OwpTreeGridColumnEditRule {\n columns: readonly string[];\n preset: OwpTreeGridColumnEditPreset;\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 layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: 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 columnEditRules?: readonly OwpTreeGridColumnEditRule[];\n highlightEditableCells?: boolean;\n highlightChangedCells?: 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 className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n className,\n style,\n height = '100%',\n width = '100%',\n layoutUrl,\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 columnEditRules,\n highlightEditableCells = true,\n highlightChangedCells = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\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 latestColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n columnEditRules,\n );\n const latestColumnEditRuleLookupRef = useRef(\n resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n }),\n );\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\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 appliedColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n undefined,\n );\n const columnEditRulesStateRef = useRef(createTreeGridColumnEditRulesState());\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 [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 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\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n latestColumnEditRulesRef.current = columnEditRules;\n latestColumnEditRuleLookupRef.current = resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n });\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\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 latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\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 highlightEditableCellsRef,\n highlightChangedCellsRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n latestColumnEditRulesRef,\n latestColumnEditRuleLookupRef,\n appliedColumnEditRulesRef,\n columnEditRulesStateRef,\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 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 const nextColumnEditRules = latestColumnEditRulesRef.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 const shouldApplyColumnEditRules =\n appliedColumnEditRulesRef.current !== nextColumnEditRules &&\n !isEqual(appliedColumnEditRulesRef.current, nextColumnEditRules);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData && !shouldApplyColumnEditRules) {\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 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 if (shouldApplyColumnEditRules) {\n syncTreeGridColumnEditRules(\n treeGrid,\n latestColumnEditRuleLookupRef.current,\n columnEditRulesStateRef.current,\n );\n appliedColumnEditRulesRef.current = nextColumnEditRules;\n }\n }, [isTreeGridReady, layoutOverrides, data, columnEditRules, 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 });\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={[TREE_GRID_THEME_WRAPPER_CLASS, containerClassName].filter(Boolean).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 </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","className","style","height","width","layoutUrl","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","columnEditRules","highlightEditableCells","highlightChangedCells","loading","showLoading","t","useOwpTranslation","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","resolveTreeGridColumnEditRuleLookup","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","appliedColumnEditRulesRef","columnEditRulesStateRef","createTreeGridColumnEditRulesState","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","treeGridTheme","useMemo","resolveOwpGridTheme","editableCellBackgroundColorValueRef","resolveTreeGridColorNumber","TREEGRID_INPUT_CELL_COLOR","changedCellBackgroundColorRef","TREEGRID_CELL_HIGHLIGHT_COLOR","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","nextColumnEditRules","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","shouldApplyColumnEditRules","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","syncTreeGridColumnEditRules","resolvedContainerStyle","createTreeGridThemeContainerStyle","jsxs","TREE_GRID_THEME_WRAPPER_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
|