@owp/core 2.5.13 → 2.5.15
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/index10.js +2 -2
- package/dist/_virtual/index12.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/index3.js +2 -2
- package/dist/_virtual/index4.js +2 -2
- package/dist/_virtual/index5.js +2 -2
- package/dist/components/OwpDialog/OwpAlertDialog.js +46 -0
- package/dist/components/OwpDialog/OwpAlertDialog.js.map +1 -0
- package/dist/components/OwpDialog/OwpDialog.js +41 -38
- package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +163 -153
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +234 -173
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGridResetChangesButton/OwpTreeGridResetChangesButton.js +7 -6
- package/dist/components/OwpTreeGridResetChangesButton/OwpTreeGridResetChangesButton.js.map +1 -1
- package/dist/features/themePreview/components/ThemePreviewColorField.js +79 -75
- package/dist/features/themePreview/components/ThemePreviewColorField.js.map +1 -1
- package/dist/hooks/useConfirm.js +55 -65
- package/dist/hooks/useConfirm.js.map +1 -1
- package/dist/index.js +69 -67
- package/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +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/constants.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/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/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/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
- package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
- package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +25 -0
- package/dist/types/components/OwpDialog/OwpDialog.d.ts +2 -0
- package/dist/types/components/OwpDialog/index.d.ts +1 -0
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +3 -1
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +8 -3
- package/dist/types/hooks/useConfirm.d.ts +7 -14
- package/dist/types/utils/treeGridUtil.d.ts +23 -0
- package/dist/utils/treeGridExportExcelUtil.js +118 -118
- package/dist/utils/treeGridExportExcelUtil.js.map +1 -1
- package/dist/utils/treeGridUtil.js +123 -103
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/dist/utils.js +81 -75
- package/package.json +1 -1
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
var
|
|
2
|
-
var a = (r, l) =>
|
|
3
|
-
import { jsxs as
|
|
4
|
-
import { resolveOwpGridTheme as
|
|
5
|
-
import { resolveTreeGridColorNumber as O, TREEGRID_INPUT_CELL_COLOR as
|
|
6
|
-
import { useGetCurrentSettings as
|
|
7
|
-
import { useOwpTranslation as
|
|
8
|
-
import { useGetCurrentLanguage as
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
|
|
1
|
+
var sr = Object.defineProperty;
|
|
2
|
+
var a = (r, l) => sr(r, "name", { value: l, configurable: !0 });
|
|
3
|
+
import { jsxs as ur, jsx as w } 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 lr } from "../../constants/gridTheme.js";
|
|
5
|
+
import { resolveTreeGridColorNumber as O, TREEGRID_INPUT_CELL_COLOR as Me, TREEGRID_CELL_HIGHLIGHT_COLOR as Pe } from "../../constants/treeGrid.js";
|
|
6
|
+
import { useGetCurrentSettings as ar } from "../../hooks/useOwpSettings.js";
|
|
7
|
+
import { useOwpTranslation as cr } from "../../hooks/useOwpTranslation.js";
|
|
8
|
+
import { useGetCurrentLanguage as dr } from "../../hooks/useCurrentLanguage.js";
|
|
9
|
+
import { useConfirm as fr } from "../../hooks/useConfirm.js";
|
|
10
|
+
import { TREE_GRID_BODY_ROWS_CHANGED_EVENT as Ne } from "../../utils/treeGridBodyRowsEvent.js";
|
|
11
|
+
import { getTreeGridPerfTimestamp as F, countTreeGridPerf as xe, logTreeGridPerf as Ve, measureTreeGridPerf as je } from "./internal/utils/perf.js";
|
|
12
|
+
import { useRef as e, useState as z, useMemo as mr, useEffect as h, useLayoutEffect as pr } from "react";
|
|
13
|
+
import Rr from "@mui/material/GlobalStyles";
|
|
14
|
+
import { useOwpTreeGridOverlayFrame as Tr } from "./internal/hooks/useOwpTreeGridOverlayFrame.js";
|
|
15
|
+
import { bindTreeGridEvents as yr, getTreeGridBodyDataCount as Y, buildTreeGridInitializationOptions as gr, hasTreeGridDisplayDataRows as qe, replaceTreeGridBodyData as vr, TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS as Gr } from "./internal/treeGridRuntime.js";
|
|
16
|
+
import { applyTreeGridLayoutToGrid as Cr } from "./internal/treeGridLayout.js";
|
|
17
|
+
import { OwpTreeGridLoadingOverlay as Er } from "./internal/OwpTreeGridLoadingOverlay.js";
|
|
18
|
+
import { OwpTreeGridNoDataOverlay as Br } from "./internal/OwpTreeGridNoDataOverlay.js";
|
|
19
|
+
import { resolveTreeGridColumnEditRuleLookup as Ue, createTreeGridColumnEditRulesState as Dr, syncTreeGridColumnEditRules as br } from "./internal/treeGridColumnEditRules.js";
|
|
20
|
+
import { createTreeGridThemeContainerStyle as Ir, TREE_GRID_THEME_WRAPPER_CLASS as Lr, TREE_GRID_THEME_TABLE_RADIUS_CLASS as _r, treeGridThemeStyles as wr } from "./internal/treeGridTheme.js";
|
|
21
|
+
import { isEmpty as A } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
|
|
22
|
+
import { delay as Or } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/delay.js";
|
|
23
|
+
import { isEqual as We } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
|
|
24
|
+
import { omit as hr } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.js";
|
|
25
|
+
const tt = /* @__PURE__ */ a(({
|
|
25
26
|
id: r = "treeGridWrapper",
|
|
26
27
|
containerStyle: l,
|
|
27
|
-
containerClassName:
|
|
28
|
-
toolbarRowBackgroundColor:
|
|
29
|
-
className:
|
|
30
|
-
style:
|
|
31
|
-
height:
|
|
32
|
-
width:
|
|
28
|
+
containerClassName: Fe,
|
|
29
|
+
toolbarRowBackgroundColor: J,
|
|
30
|
+
className: ze,
|
|
31
|
+
style: Ye,
|
|
32
|
+
height: K = "100%",
|
|
33
|
+
width: Q = "100%",
|
|
33
34
|
canUseTableRadius: X = !1,
|
|
34
|
-
tableBorderRadius:
|
|
35
|
-
layoutUrl:
|
|
36
|
-
layoutData:
|
|
37
|
-
dataUrl:
|
|
38
|
-
layoutOverrides:
|
|
35
|
+
tableBorderRadius: Je = ".8rem",
|
|
36
|
+
layoutUrl: Ke,
|
|
37
|
+
layoutData: Qe,
|
|
38
|
+
dataUrl: Xe,
|
|
39
|
+
layoutOverrides: S,
|
|
39
40
|
data: o,
|
|
40
41
|
useDataUrl: Z,
|
|
41
42
|
onSelect: $,
|
|
@@ -48,49 +49,57 @@ const Qr = /* @__PURE__ */ a(({
|
|
|
48
49
|
onSave: se,
|
|
49
50
|
onReady: ue,
|
|
50
51
|
onAfterValueChanged: le,
|
|
51
|
-
columnEditRules:
|
|
52
|
+
columnEditRules: p,
|
|
52
53
|
highlightEditableCells: ae = !0,
|
|
53
54
|
highlightChangedCells: ce = !0,
|
|
54
|
-
|
|
55
|
+
syncDeletedRowCanEdit: de = !0,
|
|
56
|
+
confirmDeletedRowRemoval: Ze = !0,
|
|
57
|
+
loading: $e,
|
|
55
58
|
showLoading: n = !0
|
|
56
59
|
}) => {
|
|
57
|
-
var
|
|
58
|
-
const { t:
|
|
59
|
-
|
|
60
|
+
var we, Oe;
|
|
61
|
+
const { t: c } = cr(), { confirmDelete: er } = fr(), H = ar(), k = (Oe = (we = H == null ? void 0 : H.theme) == null ? void 0 : we.main) == null ? void 0 : Oe.grid, i = e(null), fe = e(null), me = e(null), M = e(null), P = e(S), pe = e(o), N = e(
|
|
62
|
+
p
|
|
60
63
|
), x = e(
|
|
61
|
-
|
|
62
|
-
hourMinuteInvalidText:
|
|
64
|
+
Ue(p, {
|
|
65
|
+
hourMinuteInvalidText: c("Message.시간은 HH:mm 형식으로 입력해주세요.")
|
|
63
66
|
})
|
|
64
|
-
),
|
|
67
|
+
), Re = Ze ? async () => await er({
|
|
68
|
+
title: c("Message.삭제된 항목을 완전히 삭제하시겠습니까?"),
|
|
69
|
+
description: c("Message.취소하면 삭제 상태가 해제됩니다."),
|
|
70
|
+
okText: c("Button.완전 삭제")
|
|
71
|
+
}) ? "remove" : "undelete" : void 0, Te = e({
|
|
65
72
|
onSelect: $,
|
|
66
73
|
onRowClick: ee,
|
|
67
74
|
onRowAdd: re,
|
|
68
75
|
onRowDelete: te,
|
|
76
|
+
onBeforeRowUndelete: Re,
|
|
69
77
|
onRowUndelete: oe,
|
|
70
78
|
onRowChange: ne,
|
|
71
79
|
onClickButton: ie,
|
|
72
80
|
onSave: se,
|
|
73
81
|
onReady: ue,
|
|
74
82
|
onAfterValueChanged: le
|
|
75
|
-
}),
|
|
83
|
+
}), R = e(void 0), V = e(!1), E = e(void 0), B = e(void 0), D = e(
|
|
76
84
|
void 0
|
|
77
|
-
),
|
|
78
|
-
() =>
|
|
85
|
+
), ye = e(Dr()), rr = e(!1), T = e(0), d = e(null), y = e(void 0), g = e(void 0), ge = e(ae), ve = e(ce), Ge = e(de), [j, tr] = z(!1), [or, v] = z(!1), [nr, Ce] = z(!1), b = dr(), s = mr(
|
|
86
|
+
() => lr(k),
|
|
79
87
|
[k]
|
|
80
|
-
),
|
|
81
|
-
O(s.editable.backgroundColor) ?? O(
|
|
82
|
-
),
|
|
83
|
-
s.changed.backgroundColor ??
|
|
84
|
-
),
|
|
85
|
-
|
|
88
|
+
), Ee = e(
|
|
89
|
+
O(s.editable.backgroundColor) ?? O(Me)
|
|
90
|
+
), Be = e(
|
|
91
|
+
s.changed.backgroundColor ?? Pe
|
|
92
|
+
), De = e(s.state.selectedCellBackgroundColor), be = e(s.state.hoverCellBackgroundColor), Ie = e(b.id), ir = n && o !== void 0 && j && B.current !== o, q = n && $e === !0 || n && (or || ir), U = !q && o !== void 0 && A(o) && !nr, Le = /* @__PURE__ */ a((t) => {
|
|
93
|
+
Ce(qe(t));
|
|
86
94
|
}, "syncHasDisplayDataRows");
|
|
87
|
-
|
|
88
|
-
hourMinuteInvalidText:
|
|
89
|
-
}),
|
|
95
|
+
P.current = S, pe.current = o, N.current = p, x.current = Ue(p, {
|
|
96
|
+
hourMinuteInvalidText: c("Message.시간은 HH:mm 형식으로 입력해주세요.")
|
|
97
|
+
}), ge.current = ae, ve.current = ce, Ge.current = de, Ee.current = O(s.editable.backgroundColor) ?? O(Me), Be.current = s.changed.backgroundColor ?? Pe, De.current = s.state.selectedCellBackgroundColor, be.current = s.state.hoverCellBackgroundColor, Te.current = {
|
|
90
98
|
onSelect: $,
|
|
91
99
|
onRowClick: ee,
|
|
92
100
|
onRowAdd: re,
|
|
93
101
|
onRowDelete: te,
|
|
102
|
+
onBeforeRowUndelete: Re,
|
|
94
103
|
onRowUndelete: oe,
|
|
95
104
|
onRowChange: ne,
|
|
96
105
|
onClickButton: ie,
|
|
@@ -98,162 +107,163 @@ const Qr = /* @__PURE__ */ a(({
|
|
|
98
107
|
onReady: ue,
|
|
99
108
|
onAfterValueChanged: le
|
|
100
109
|
};
|
|
101
|
-
const
|
|
102
|
-
visible: q ||
|
|
103
|
-
containerRef:
|
|
110
|
+
const _e = Tr({
|
|
111
|
+
visible: q || U,
|
|
112
|
+
containerRef: fe,
|
|
104
113
|
treeGridInstanceRef: i,
|
|
105
114
|
debugId: r
|
|
106
|
-
}),
|
|
107
|
-
T.current !== void 0 && (window.clearTimeout(T.current), T.current = void 0);
|
|
108
|
-
}, "clearBindingLoadingHideTimeout"), F = /* @__PURE__ */ a(() => {
|
|
115
|
+
}), I = /* @__PURE__ */ a(() => {
|
|
109
116
|
y.current !== void 0 && (window.clearTimeout(y.current), y.current = void 0);
|
|
117
|
+
}, "clearBindingLoadingHideTimeout"), W = /* @__PURE__ */ a(() => {
|
|
118
|
+
g.current !== void 0 && (window.clearTimeout(g.current), g.current = void 0);
|
|
110
119
|
}, "clearBodyReloadStartTimeout");
|
|
111
|
-
|
|
120
|
+
h(() => {
|
|
112
121
|
const t = /* @__PURE__ */ a((u) => {
|
|
113
|
-
var
|
|
114
|
-
((
|
|
122
|
+
var f;
|
|
123
|
+
((f = u.detail) == null ? void 0 : f.gridId) === r && Ce(qe(i.current));
|
|
115
124
|
}, "handleBodyRowsChanged");
|
|
116
|
-
return window.addEventListener(
|
|
117
|
-
window.removeEventListener(
|
|
125
|
+
return window.addEventListener(Ne, t), () => {
|
|
126
|
+
window.removeEventListener(Ne, t);
|
|
118
127
|
};
|
|
119
|
-
}, [r]),
|
|
120
|
-
n || (
|
|
121
|
-
}, [n]),
|
|
128
|
+
}, [r]), h(() => {
|
|
129
|
+
n || (W(), I(), d.current = null, v(!1));
|
|
130
|
+
}, [n]), h(() => {
|
|
122
131
|
var t;
|
|
123
|
-
if (
|
|
124
|
-
return
|
|
132
|
+
if (b.id !== Ie.current && !A(i.current) && ((t = i.current) == null || t.Dispose(), i.current = null, Ie.current = b.id), !!A(i.current))
|
|
133
|
+
return yr({
|
|
125
134
|
id: r,
|
|
126
|
-
latestEventHandlersRef:
|
|
127
|
-
highlightEditableCellsRef:
|
|
128
|
-
highlightChangedCellsRef:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
135
|
+
latestEventHandlersRef: Te,
|
|
136
|
+
highlightEditableCellsRef: ge,
|
|
137
|
+
highlightChangedCellsRef: ve,
|
|
138
|
+
syncDeletedRowCanEditRef: Ge,
|
|
139
|
+
editableCellBackgroundColorValueRef: Ee,
|
|
140
|
+
changedCellBackgroundColorRef: Be,
|
|
141
|
+
selectedCellBackgroundColorRef: De,
|
|
142
|
+
hoverCellBackgroundColorRef: be,
|
|
133
143
|
treeGridInstanceRef: i,
|
|
134
|
-
treeGridInitStartedAtRef:
|
|
135
|
-
latestLayoutOverridesRef:
|
|
136
|
-
appliedLayoutOverridesRef:
|
|
137
|
-
appliedBodyDataPropRef:
|
|
144
|
+
treeGridInitStartedAtRef: me,
|
|
145
|
+
latestLayoutOverridesRef: P,
|
|
146
|
+
appliedLayoutOverridesRef: E,
|
|
147
|
+
appliedBodyDataPropRef: B,
|
|
138
148
|
latestColumnEditRulesRef: N,
|
|
139
149
|
latestColumnEditRuleLookupRef: x,
|
|
140
|
-
appliedColumnEditRulesRef:
|
|
141
|
-
columnEditRulesStateRef:
|
|
142
|
-
hasAppliedInitialLayoutRef:
|
|
143
|
-
syncHasDisplayDataRows:
|
|
144
|
-
setIsTreeGridReady:
|
|
145
|
-
}),
|
|
150
|
+
appliedColumnEditRulesRef: D,
|
|
151
|
+
columnEditRulesStateRef: ye,
|
|
152
|
+
hasAppliedInitialLayoutRef: rr,
|
|
153
|
+
syncHasDisplayDataRows: Le,
|
|
154
|
+
setIsTreeGridReady: tr
|
|
155
|
+
}), me.current = F(), xe(r, "init"), Ve(r, "TreeGrid init start", {
|
|
146
156
|
useDataUrl: !!Z,
|
|
147
|
-
bodyRowCount:
|
|
157
|
+
bodyRowCount: Y(o)
|
|
148
158
|
}), window.TreeGrid(
|
|
149
|
-
|
|
159
|
+
gr({
|
|
150
160
|
id: r,
|
|
151
|
-
layoutUrl:
|
|
152
|
-
layoutData:
|
|
153
|
-
dataUrl:
|
|
161
|
+
layoutUrl: Ke,
|
|
162
|
+
layoutData: Qe,
|
|
163
|
+
dataUrl: Xe,
|
|
154
164
|
bodyData: o,
|
|
155
165
|
useDataUrl: Z,
|
|
156
|
-
width:
|
|
157
|
-
height:
|
|
158
|
-
languageId:
|
|
166
|
+
width: Q,
|
|
167
|
+
height: K,
|
|
168
|
+
languageId: b.id
|
|
159
169
|
}),
|
|
160
170
|
r,
|
|
161
171
|
r
|
|
162
172
|
), () => {
|
|
163
|
-
|
|
173
|
+
Or(() => {
|
|
164
174
|
var u;
|
|
165
175
|
(u = i.current) == null || u.Dispose();
|
|
166
176
|
}, 200);
|
|
167
177
|
};
|
|
168
|
-
}, []),
|
|
169
|
-
const t = i.current, u =
|
|
170
|
-
if (
|
|
178
|
+
}, []), pr(() => {
|
|
179
|
+
const t = i.current, u = P.current, G = pe.current, f = N.current;
|
|
180
|
+
if (A(t) || !j)
|
|
171
181
|
return;
|
|
172
|
-
const
|
|
173
|
-
if (!(!
|
|
174
|
-
if (
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
disableBodyReload: !!
|
|
182
|
+
const he = E.current !== u && !We(E.current, u), _ = B.current !== G && (!V.current || R.current !== G), Ae = D.current !== f && !We(D.current, f);
|
|
183
|
+
if (!(!he && !_ && !Ae)) {
|
|
184
|
+
if (he) {
|
|
185
|
+
const m = F();
|
|
186
|
+
Cr(t, u, _), E.current = u, je(r, "apply layout", m, {
|
|
187
|
+
disableBodyReload: !!_
|
|
178
188
|
});
|
|
179
189
|
}
|
|
180
|
-
if (
|
|
181
|
-
const
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
bodyRowCount:
|
|
185
|
-
}),
|
|
186
|
-
if (
|
|
190
|
+
if (_) {
|
|
191
|
+
const m = T.current + 1, Se = /* @__PURE__ */ a(() => {
|
|
192
|
+
const C = R.current;
|
|
193
|
+
g.current = void 0, M.current = F(), xe(r, "reload"), Ve(r, "ReloadBody start", {
|
|
194
|
+
bodyRowCount: Y(C)
|
|
195
|
+
}), vr(t, C, () => {
|
|
196
|
+
if (T.current !== m)
|
|
187
197
|
return;
|
|
188
|
-
|
|
189
|
-
bodyRowCount:
|
|
190
|
-
}),
|
|
191
|
-
const
|
|
192
|
-
if (!n ||
|
|
193
|
-
|
|
198
|
+
B.current = C, Le(t), je(r, "ReloadBody end", M.current, {
|
|
199
|
+
bodyRowCount: Y(C)
|
|
200
|
+
}), M.current = null, R.current === C && (R.current = void 0, V.current = !1);
|
|
201
|
+
const He = d.current;
|
|
202
|
+
if (!n || He === null) {
|
|
203
|
+
d.current = null, v(!1);
|
|
194
204
|
return;
|
|
195
205
|
}
|
|
196
|
-
const
|
|
206
|
+
const ke = Math.max(
|
|
197
207
|
0,
|
|
198
|
-
|
|
208
|
+
Gr - (Date.now() - He)
|
|
199
209
|
);
|
|
200
|
-
if (
|
|
201
|
-
|
|
210
|
+
if (I(), ke === 0) {
|
|
211
|
+
d.current = null, v(!1);
|
|
202
212
|
return;
|
|
203
213
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
},
|
|
214
|
+
y.current = window.setTimeout(() => {
|
|
215
|
+
T.current === m && (y.current = void 0, d.current = null, v(!1));
|
|
216
|
+
}, ke);
|
|
207
217
|
});
|
|
208
218
|
}, "runBodyReload");
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}, 0)) :
|
|
219
|
+
T.current = m, R.current = G, V.current = !0, n && G !== void 0 ? (W(), I(), d.current = Date.now(), v(!0), g.current = window.setTimeout(() => {
|
|
220
|
+
T.current === m && Se();
|
|
221
|
+
}, 0)) : Se();
|
|
212
222
|
}
|
|
213
|
-
|
|
223
|
+
Ae && (br(
|
|
214
224
|
t,
|
|
215
225
|
x.current,
|
|
216
|
-
|
|
217
|
-
),
|
|
226
|
+
ye.current
|
|
227
|
+
), D.current = f);
|
|
218
228
|
}
|
|
219
|
-
}, [j,
|
|
220
|
-
|
|
229
|
+
}, [j, S, o, p, n, r]), h(() => () => {
|
|
230
|
+
W(), I();
|
|
221
231
|
}, []);
|
|
222
|
-
const
|
|
223
|
-
width:
|
|
224
|
-
height:
|
|
232
|
+
const L = Ir({
|
|
233
|
+
width: Q,
|
|
234
|
+
height: K,
|
|
225
235
|
treeGridTheme: s,
|
|
226
236
|
gridThemeConfig: k,
|
|
227
237
|
containerStyle: l,
|
|
228
|
-
tableBorderRadius: X ?
|
|
238
|
+
tableBorderRadius: X ? Je : void 0
|
|
229
239
|
});
|
|
230
|
-
return
|
|
240
|
+
return J !== void 0 && (L["--owp-tree-grid-toolbar-row-background-color"] = String(J)), (n || U) && (L.position = l != null && l.position && l.position !== "static" ? l.position : "relative", L.isolation = "isolate"), /* @__PURE__ */ ur(
|
|
231
241
|
"div",
|
|
232
242
|
{
|
|
233
|
-
ref:
|
|
243
|
+
ref: fe,
|
|
234
244
|
className: [
|
|
235
|
-
|
|
236
|
-
X &&
|
|
237
|
-
|
|
245
|
+
Lr,
|
|
246
|
+
X && _r,
|
|
247
|
+
Fe
|
|
238
248
|
].filter(Boolean).join(" "),
|
|
239
|
-
style:
|
|
249
|
+
style: L,
|
|
240
250
|
children: [
|
|
241
|
-
/* @__PURE__ */
|
|
242
|
-
/* @__PURE__ */
|
|
243
|
-
/* @__PURE__ */
|
|
244
|
-
|
|
251
|
+
/* @__PURE__ */ w(Rr, { styles: wr }),
|
|
252
|
+
/* @__PURE__ */ w("div", { id: r, className: ze, style: hr(Ye, ["height", "width"]) }),
|
|
253
|
+
/* @__PURE__ */ w(
|
|
254
|
+
Br,
|
|
245
255
|
{
|
|
246
|
-
visible:
|
|
247
|
-
message:
|
|
248
|
-
overlayFrame:
|
|
256
|
+
visible: U,
|
|
257
|
+
message: c("Message.조회된 결과가 없습니다."),
|
|
258
|
+
overlayFrame: _e
|
|
249
259
|
}
|
|
250
260
|
),
|
|
251
|
-
/* @__PURE__ */
|
|
261
|
+
/* @__PURE__ */ w(Er, { visible: q, overlayFrame: _e })
|
|
252
262
|
]
|
|
253
263
|
}
|
|
254
264
|
);
|
|
255
265
|
}, "OwpTreeGrid");
|
|
256
266
|
export {
|
|
257
|
-
|
|
267
|
+
tt as OwpTreeGrid
|
|
258
268
|
};
|
|
259
269
|
//# sourceMappingURL=OwpTreeGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
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_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>;\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 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 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 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 = '.8rem',\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 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 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 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 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 </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","layoutUrl","layoutData","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","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 {\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 { 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_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>;\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 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 columnEditRules?: readonly OwpTreeGridColumnEditRule[];\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 = '.8rem',\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 columnEditRules,\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 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 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 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 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 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 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 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 };\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 syncDeletedRowCanEditRef,\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 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 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 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 </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","layoutUrl","layoutData","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","columnEditRules","highlightEditableCells","highlightChangedCells","syncDeletedRowCanEdit","confirmDeletedRowRemoval","loading","showLoading","t","useOwpTranslation","confirmDelete","useConfirm","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","resolveTreeGridColumnEditRuleLookup","handleBeforeRowUndelete","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","appliedColumnEditRulesRef","columnEditRulesStateRef","createTreeGridColumnEditRulesState","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","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","TREE_GRID_THEME_TABLE_RADIUS_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
|