@owp/core 2.5.23 → 2.5.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index15.js +2 -2
- package/dist/_virtual/index5.js +2 -2
- package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js +15 -13
- package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js.map +1 -1
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +21 -19
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
- package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js +1 -1
- package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js.map +1 -1
- package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js +1 -1
- package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js.map +1 -1
- package/dist/components/OwpLoading/OwpLoading.js +1 -1
- package/dist/components/OwpLoading/OwpLoading.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js +14 -12
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
- package/dist/components/OwpPageTitle/OwpPageTitle.js +1 -1
- package/dist/components/OwpPageTitle/OwpPageTitle.js.map +1 -1
- package/dist/components/OwpPicker/OwpDatePicker.js +81 -82
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpTimePicker.js +82 -83
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpWeekDatePicker.js +24 -25
- package/dist/components/OwpPicker/OwpWeekDatePicker.js.map +1 -1
- package/dist/components/OwpSearchFilter/OwpSearchFilter.js +1 -1
- package/dist/components/OwpSearchFilter/OwpSearchFilter.js.map +1 -1
- package/dist/components/OwpSection/OwpSection.js +1 -1
- package/dist/components/OwpSection/OwpSection.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +155 -157
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +95 -81
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -1
- package/dist/components/OwpSuspense/OwpSuspense.js +43 -43
- package/dist/components/OwpSuspense/OwpSuspense.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +2 -2
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +55 -56
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +10 -10
- package/dist/contexts/OwpUiProvider.js +5 -5
- package/dist/contexts/OwpUiProvider.js.map +1 -1
- package/dist/hooks/{useAccessTokenGuard.js → internal/useAccessTokenGuard.js} +2 -2
- package/dist/hooks/internal/useAccessTokenGuard.js.map +1 -0
- package/dist/hooks/{useCurrentLanguage.js → internal/useCurrentLanguage.js} +2 -2
- package/dist/hooks/internal/useCurrentLanguage.js.map +1 -0
- package/dist/hooks/internal/useHeaderWrapState.js.map +1 -0
- package/dist/hooks/internal/useNavbar.js +24 -0
- package/dist/hooks/internal/useNavbar.js.map +1 -0
- package/dist/hooks/{useNavigationActiveRouteRemount.js → internal/useNavigationActiveRouteRemount.js} +1 -1
- package/dist/hooks/internal/useNavigationActiveRouteRemount.js.map +1 -0
- package/dist/hooks/{useShortcuts.js → internal/useShortcuts.js} +3 -3
- package/dist/hooks/internal/useShortcuts.js.map +1 -0
- package/dist/hooks/internal/useThemeMediaQuery.js.map +1 -0
- package/dist/hooks/internal/useTimeout.js.map +1 -0
- package/dist/hooks/useInitApp.js.map +1 -1
- package/dist/hooks.js +53 -81
- package/dist/hooks.js.map +1 -1
- package/dist/layout/Layout.js +1 -1
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/components/layouts/NavbarToggleFabLayout.js +2 -2
- package/dist/layout/components/layouts/NavbarToggleFabLayout.js.map +1 -1
- package/dist/layout/components/layouts/NavbarWrapperLayout.js +2 -2
- package/dist/layout/components/layouts/NavbarWrapperLayout.js.map +1 -1
- package/dist/layout/components/navbar/NavbarToggleButton.js +2 -2
- package/dist/layout/components/navbar/NavbarToggleButton.js.map +1 -1
- package/dist/layout/components/navbar/style/NavbarStyle.js +1 -1
- package/dist/layout/components/navbar/style/NavbarStyle.js.map +1 -1
- package/dist/layout/components/navbar/style/NavbarStyleContent.js +1 -1
- package/dist/layout/components/navbar/style/NavbarStyleContent.js.map +1 -1
- package/dist/layout/components/navigation/Navigation.js +2 -2
- package/dist/layout/components/navigation/Navigation.js.map +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalCollapse.js +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalCollapse.js.map +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalGroup.js +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalGroup.js.map +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalItem.js +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalItem.js.map +1 -1
- package/dist/layout/components/toggles/LanguageSwitcherToggle.js +1 -1
- package/dist/layout/components/toggles/LanguageSwitcherToggle.js.map +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +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-is@16.13.1/node_modules/react-is/index.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpCommonCode/OwpCommonCodeQuerySelector.d.ts +5 -3
- package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +5 -3
- package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +4 -1
- package/dist/types/components/OwpSelectorBase/types/index.d.ts +1 -1
- package/dist/types/components/OwpSelectorBase/types/types.d.ts +3 -0
- package/dist/types/hooks/index.d.ts +0 -10
- package/dist/types/hooks/{useNavbar.d.ts → internal/useNavbar.d.ts} +1 -1
- package/dist/types/utils/treeGridUtil.d.ts +0 -14
- package/dist/utils/{exceljsBrowser.js → internal/exceljsBrowser.js} +1 -1
- package/dist/utils/internal/exceljsBrowser.js.map +1 -0
- package/dist/utils/internal/jszipBrowser.js.map +1 -0
- package/dist/utils/internal/treeGridBodyRowsEvent.js.map +1 -0
- package/dist/utils/treeGridExportExcelUtil.js +1 -1
- package/dist/utils/treeGridExportExcelUtil.js.map +1 -1
- package/dist/utils/treeGridUtil.js +1 -6
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/dist/utils/zipUtil.js +1 -1
- package/dist/utils/zipUtil.js.map +1 -1
- package/dist/utils.js +70 -75
- package/package.json +1 -1
- package/dist/hooks/useAccessTokenGuard.js.map +0 -1
- package/dist/hooks/useCurrentLanguage.js.map +0 -1
- package/dist/hooks/useDebounce.js +0 -24
- package/dist/hooks/useDebounce.js.map +0 -1
- package/dist/hooks/useDeepCompareEffect.js +0 -38
- package/dist/hooks/useDeepCompareEffect.js.map +0 -1
- package/dist/hooks/useHeaderWrapState.js.map +0 -1
- package/dist/hooks/useNavbar.js +0 -24
- package/dist/hooks/useNavbar.js.map +0 -1
- package/dist/hooks/useNavigationActiveRouteRemount.js.map +0 -1
- package/dist/hooks/usePrevious.js +0 -14
- package/dist/hooks/usePrevious.js.map +0 -1
- package/dist/hooks/useShortcuts.js.map +0 -1
- package/dist/hooks/useThemeMediaQuery.js.map +0 -1
- package/dist/hooks/useTimeout.js.map +0 -1
- package/dist/types/hooks/useDebounce.d.ts +0 -7
- package/dist/types/hooks/useDeepCompareEffect.d.ts +0 -22
- package/dist/types/hooks/usePrevious.d.ts +0 -5
- package/dist/types/utils/dayjsBrowser.d.ts +0 -1
- package/dist/utils/exceljsBrowser.js.map +0 -1
- package/dist/utils/jszipBrowser.js.map +0 -1
- package/dist/utils/treeGridBodyRowsEvent.js.map +0 -1
- /package/dist/hooks/{useHeaderWrapState.js → internal/useHeaderWrapState.js} +0 -0
- /package/dist/hooks/{useThemeMediaQuery.js → internal/useThemeMediaQuery.js} +0 -0
- /package/dist/hooks/{useTimeout.js → internal/useTimeout.js} +0 -0
- /package/dist/types/hooks/{useAccessTokenGuard.d.ts → internal/useAccessTokenGuard.d.ts} +0 -0
- /package/dist/types/hooks/{useCurrentLanguage.d.ts → internal/useCurrentLanguage.d.ts} +0 -0
- /package/dist/types/hooks/{useHeaderWrapState.d.ts → internal/useHeaderWrapState.d.ts} +0 -0
- /package/dist/types/hooks/{useNavigationActiveRouteRemount.d.ts → internal/useNavigationActiveRouteRemount.d.ts} +0 -0
- /package/dist/types/hooks/{useShortcuts.d.ts → internal/useShortcuts.d.ts} +0 -0
- /package/dist/types/hooks/{useThemeMediaQuery.d.ts → internal/useThemeMediaQuery.d.ts} +0 -0
- /package/dist/types/hooks/{useTimeout.d.ts → internal/useTimeout.d.ts} +0 -0
- /package/dist/types/utils/{exceljsBrowser.d.ts → internal/exceljsBrowser.d.ts} +0 -0
- /package/dist/types/utils/{jszipBrowser.d.ts → internal/jszipBrowser.d.ts} +0 -0
- /package/dist/types/utils/{treeGridBodyRowsEvent.d.ts → internal/treeGridBodyRowsEvent.d.ts} +0 -0
- /package/dist/utils/{jszipBrowser.js → internal/jszipBrowser.js} +0 -0
- /package/dist/utils/{treeGridBodyRowsEvent.js → internal/treeGridBodyRowsEvent.js} +0 -0
|
@@ -4,25 +4,24 @@ import { jsx as I, jsxs as $t } from "../../../../node_modules/.pnpm/@emotion_re
|
|
|
4
4
|
import { PICKER_INVALID_INPUT_MESSAGE_KEY as Vt, TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH as mt, TIME_PICKER_EDITOR_SECTION_WIDTH as q, TIME_PICKER_SELECTED_ITEM_SX as zt, VALUE_TIME_SECOND_FORMATTER as S, VALUE_TIME_FORMATTER as z, VALUE_DATE_FORMATTER as k, VALUE_MONTH_FORMATTER as b, VALUE_YEAR_FORMATTER as G } from "../../../OwpPicker/constants/index.js";
|
|
5
5
|
import { getPickerInputMask as jt } from "../../../OwpPicker/utils/index.js";
|
|
6
6
|
import { useOwpTranslation as Ut } from "../../../../hooks/useOwpTranslation.js";
|
|
7
|
-
import
|
|
8
|
-
import Wt from "
|
|
9
|
-
import qt from "@mui/material/
|
|
10
|
-
import Xt from "@mui/material/
|
|
11
|
-
import Jt from "@mui/material/
|
|
12
|
-
import Qt from "@mui/material/
|
|
13
|
-
import Zt from "@mui/
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
7
|
+
import Nt from "../../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/Clear.js";
|
|
8
|
+
import Wt from "@mui/material/ClickAwayListener";
|
|
9
|
+
import qt from "@mui/material/IconButton";
|
|
10
|
+
import Xt from "@mui/material/InputAdornment";
|
|
11
|
+
import Jt from "@mui/material/Paper";
|
|
12
|
+
import Qt from "@mui/material/Popper";
|
|
13
|
+
import { LocalizationProvider as Zt, MultiSectionDigitalClock as gt } from "@mui/x-date-pickers";
|
|
14
|
+
import { AdapterDayjs as te } from "@mui/x-date-pickers/AdapterDayjs";
|
|
15
|
+
import { enUS as ee } from "../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US.js";
|
|
16
|
+
import { ko as re } from "../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ko.js";
|
|
17
|
+
import { owpDayjs as C } from "../../../../dayjs.js";
|
|
18
18
|
import { useState as X, useRef as pt, useMemo as F, useEffect as J, useCallback as y } from "react";
|
|
19
|
-
import { DatePicker as
|
|
20
|
-
import { OwpTextMaskField as
|
|
21
|
-
ht("ko",
|
|
22
|
-
ht("en",
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEditor", ae = "OwpTreeGridTimePickerEditor", le = '<span class="OwpTreeGridTimePickerEditorIcon" aria-hidden="true"></span>', Q = "MM", Z = "DD", Dt = /* @__PURE__ */ new Map([
|
|
19
|
+
import { DatePicker as ne, registerLocale as ht, setDefaultLocale as oe } from "../../../../node_modules/.pnpm/react-datepicker@8.7.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/index.es.js";
|
|
20
|
+
import { OwpTextMaskField as ie } from "../../../OwpTextField/OwpTextMaskField.js";
|
|
21
|
+
ht("ko", re);
|
|
22
|
+
ht("en", ee);
|
|
23
|
+
oe("ko");
|
|
24
|
+
const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEditor", se = "OwpTreeGridTimePickerEditor", ae = '<span class="OwpTreeGridTimePickerEditorIcon" aria-hidden="true"></span>', Q = "MM", Z = "DD", Dt = /* @__PURE__ */ new Map([
|
|
26
25
|
["yyyy", G],
|
|
27
26
|
["YYYY", G],
|
|
28
27
|
["mm", Q],
|
|
@@ -39,8 +38,8 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
39
38
|
["YYYY-MM-DD HH:mm", $],
|
|
40
39
|
["yyyy-mm-dd HH:mm:ss", O],
|
|
41
40
|
["YYYY-MM-DD HH:mm:ss", O]
|
|
42
|
-
]),
|
|
43
|
-
const n =
|
|
41
|
+
]), le = /* @__PURE__ */ a((t) => (t == null ? void 0 : t.enabled) !== !1, "isDatePickerEditorEnabled"), ce = /* @__PURE__ */ a((t) => t == null ? void 0 : t.trim().replace(/\s+/g, " "), "normalizeTreeGridDateFormat"), _t = /* @__PURE__ */ a((t) => {
|
|
42
|
+
const n = ce(t);
|
|
44
43
|
return n ? Dt.get(n) ?? Dt.get(n.toLowerCase()) ?? null : null;
|
|
45
44
|
}, "convertTreeGridDateFormatToDayjs"), g = /* @__PURE__ */ a((t) => {
|
|
46
45
|
switch (t) {
|
|
@@ -71,7 +70,7 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
71
70
|
typeof c == "string" ? c : void 0
|
|
72
71
|
) ?? (n != null && n.showTimeInput || n != null && n.showTimeSelect ? $ : k);
|
|
73
72
|
return g(l);
|
|
74
|
-
}, "resolveDatePickerEditorFormatMeta"),
|
|
73
|
+
}, "resolveDatePickerEditorFormatMeta"), ue = /* @__PURE__ */ a((t, n) => {
|
|
75
74
|
const o = t.replace(/\D/g, "").slice(0, n.digitLength), s = o.slice(0, 4), c = o.slice(4, 6), l = o.slice(6, 8), e = o.slice(8, 10), p = o.slice(10, 12), u = o.slice(12, 14);
|
|
76
75
|
switch (n.kind) {
|
|
77
76
|
case "year":
|
|
@@ -87,10 +86,10 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
87
86
|
default:
|
|
88
87
|
return [s, c, l].filter(Boolean).join("-");
|
|
89
88
|
}
|
|
90
|
-
}, "formatDatePickerEditorInput"),
|
|
89
|
+
}, "formatDatePickerEditorInput"), de = /* @__PURE__ */ a((t, n) => t.length === n.inputLength, "isCompleteDatePickerEditorInput"), me = /* @__PURE__ */ a((t, n, o, s) => {
|
|
91
90
|
var c, l, e, p;
|
|
92
91
|
return o.kind === "month" ? `${((l = (c = s == null ? void 0 : s.columnOptions) == null ? void 0 : c[t]) == null ? void 0 : l.baseYear) ?? C().format(G)}-${n}` : o.kind === "day" ? `${((p = (e = s == null ? void 0 : s.columnOptions) == null ? void 0 : e[t]) == null ? void 0 : p.baseYearMonth) ?? C().format(b)}-${n}` : n;
|
|
93
|
-
}, "resolvePartialDatePickerEditorInputValue"),
|
|
92
|
+
}, "resolvePartialDatePickerEditorInputValue"), pe = /* @__PURE__ */ a((t) => t.kind === "month" ? b : t.kind === "day" ? k : t.valueFormat, "resolvePartialDatePickerEditorInputFormat"), tt = /* @__PURE__ */ a((t, n, o, s) => {
|
|
94
93
|
if (!n)
|
|
95
94
|
return null;
|
|
96
95
|
if (o.kind === "year") {
|
|
@@ -101,9 +100,9 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
101
100
|
const p = `${n}-01`, u = C(p, k, !0);
|
|
102
101
|
return u.isValid() && u.format(k) === p ? u : null;
|
|
103
102
|
}
|
|
104
|
-
const c =
|
|
103
|
+
const c = me(t, n, o, s), l = pe(o), e = C(c, l, !0);
|
|
105
104
|
return e.isValid() && e.format(l) === c ? e : null;
|
|
106
|
-
}, "parseDatePickerEditorValue"),
|
|
105
|
+
}, "parseDatePickerEditorValue"), Ee = /* @__PURE__ */ a((t) => {
|
|
107
106
|
switch (t.kind) {
|
|
108
107
|
case "year":
|
|
109
108
|
return "yyyy";
|
|
@@ -118,38 +117,38 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
118
117
|
default:
|
|
119
118
|
return "yyyy-MM-dd";
|
|
120
119
|
}
|
|
121
|
-
}, "getReactDatePickerDisplayFormat"), L = /* @__PURE__ */ a((t, n, o, s) =>
|
|
120
|
+
}, "getReactDatePickerDisplayFormat"), L = /* @__PURE__ */ a((t, n, o, s) => de(n, o) && !!tt(t, n, o, s), "isValidDatePickerEditorInput"), yt = /* @__PURE__ */ a((t) => t.valueFormat === S || t.valueFormat === O, "hasDatePickerEditorSeconds"), De = /* @__PURE__ */ a((t, n) => {
|
|
122
121
|
const o = n ? t.ActionTabLeft : t.ActionTabRight;
|
|
123
122
|
o == null || o.call(t, 1, 0);
|
|
124
|
-
}, "moveTreeGridDatePickerEditorFocusByTab"),
|
|
123
|
+
}, "moveTreeGridDatePickerEditorFocusByTab"), ke = /* @__PURE__ */ a((t, n, o) => {
|
|
125
124
|
t.Focus(n, o, void 0, void 0, 1);
|
|
126
|
-
}, "focusTreeGridDatePickerEditorCell"),
|
|
125
|
+
}, "focusTreeGridDatePickerEditorCell"), ye = /* @__PURE__ */ a((t, n) => {
|
|
127
126
|
const o = (t == null ? void 0 : t.split(/\s+/).filter(Boolean)) ?? [];
|
|
128
127
|
return o.includes(n) ? t : [...o, n].join(" ");
|
|
129
|
-
}, "appendTreeGridClass"),
|
|
128
|
+
}, "appendTreeGridClass"), Te = /* @__PURE__ */ a((t, n, o, s) => {
|
|
130
129
|
var u, _, x, f;
|
|
131
130
|
const c = (u = t.GetStringEdit) == null ? void 0 : u.call(t, n, o), l = (_ = t.GetString) == null ? void 0 : _.call(t, n, o), e = (x = t.GetValue) == null ? void 0 : x.call(t, n, o), p = (f = s.textContent) == null ? void 0 : f.trim();
|
|
132
131
|
return String(c || l || p || e || "");
|
|
133
|
-
}, "resolveDatePickerEditorInitialValue"),
|
|
132
|
+
}, "resolveDatePickerEditorInitialValue"), he = /* @__PURE__ */ a((t, n, o, s) => {
|
|
134
133
|
if (!n)
|
|
135
134
|
return "";
|
|
136
135
|
if (L(t, n, o, s))
|
|
137
136
|
return n;
|
|
138
|
-
const c =
|
|
137
|
+
const c = ue(n, o);
|
|
139
138
|
return L(t, c, o, s) ? c : n;
|
|
140
|
-
}, "normalizeDatePickerEditorInitialValue"),
|
|
139
|
+
}, "normalizeDatePickerEditorInitialValue"), Ie = /* @__PURE__ */ a((t, n) => {
|
|
141
140
|
const o = n;
|
|
142
141
|
return o.ctrlKey || o.altKey || o.metaKey ? !1 : /^\d$/.test(t) || /^\d$/.test(o.key) || t === "F2" || t === "Backspace" || t === "Delete" || o.key === "F2" || o.key === "Backspace" || o.key === "Delete";
|
|
143
142
|
}, "isDatePickerEditorStartKey"), Tt = /* @__PURE__ */ a((t) => {
|
|
144
143
|
const n = t.target;
|
|
145
144
|
return n instanceof Element && !!n.closest(`.${It}`);
|
|
146
|
-
}, "isDatePickerEditorEventTarget"), V = /* @__PURE__ */ a((t) => t === 1 || t === "1", "isTreeGridCanEditEnabled"),
|
|
145
|
+
}, "isDatePickerEditorEventTarget"), V = /* @__PURE__ */ a((t) => t === 1 || t === "1", "isTreeGridCanEditEnabled"), _e = /* @__PURE__ */ a((t) => t === 0 || t === "0" || t === !1, "isTreeGridCanEditDisabled"), fe = /* @__PURE__ */ a((t) => !t || t.Fixed === "Foot" ? !1 : t.Kind === "Data" || V(t.Added), "isDisplayTreeGridRow"), B = /* @__PURE__ */ a((t, n, o, s) => {
|
|
147
146
|
var u;
|
|
148
147
|
if (s.size > 0 && !s.has(o))
|
|
149
148
|
return !1;
|
|
150
149
|
const c = (u = t.Cols) == null ? void 0 : u[o], l = n[`${o}CanEdit`], e = l != null, p = V(e ? l : c == null ? void 0 : c.CanEdit);
|
|
151
|
-
return (c == null ? void 0 : c.Type) === "Date" &&
|
|
152
|
-
}, "isEditableDatePickerCell"),
|
|
150
|
+
return (c == null ? void 0 : c.Type) === "Date" && fe(n) && !_e(n.CanEdit) && p && n.Deleted !== 1;
|
|
151
|
+
}, "isEditableDatePickerCell"), Pe = /* @__PURE__ */ a((t, n) => {
|
|
153
152
|
var s;
|
|
154
153
|
if (!t)
|
|
155
154
|
return;
|
|
@@ -165,16 +164,16 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
165
164
|
const e = l.EditFormat ?? l.Format, p = _t(
|
|
166
165
|
typeof e == "string" ? e : void 0
|
|
167
166
|
) ?? k;
|
|
168
|
-
g(p).kind === "time" ? (l.Button = "Html", l.ButtonText =
|
|
167
|
+
g(p).kind === "time" ? (l.Button = "Html", l.ButtonText = ae, l.OnClickSide = "Focus", l.Class = ye(l.Class, se)) : (l.Button = "Date", l.OnClickSideDate = "Focus");
|
|
169
168
|
}), (s = t.Rerender) == null || s.call(t, 1, 1);
|
|
170
|
-
}, "configureTreeGridDatePickerColumns"),
|
|
169
|
+
}, "configureTreeGridDatePickerColumns"), je = /* @__PURE__ */ a(({
|
|
171
170
|
config: t,
|
|
172
171
|
treeGridInstanceRef: n,
|
|
173
172
|
isTreeGridReady: o,
|
|
174
173
|
onValueChange: s
|
|
175
174
|
}) => {
|
|
176
175
|
var dt;
|
|
177
|
-
const { t: c, i18n: l } = Ut(), [e, p] = X(null), [u, _] = X(""), [x, f] = X(!1), et = pt(null), M = pt(!1), T =
|
|
176
|
+
const { t: c, i18n: l } = Ut(), [e, p] = X(null), [u, _] = X(""), [x, f] = X(!1), et = pt(null), M = pt(!1), T = le(t), j = ((dt = t == null ? void 0 : t.columns) == null ? void 0 : dt.join(Et)) ?? "", K = F(
|
|
178
177
|
() => j ? j.split(Et) : [],
|
|
179
178
|
[j]
|
|
180
179
|
), P = F(() => new Set(K), [K]), rt = l.resolvedLanguage ?? l.language ?? "kr", ft = rt === "kr" ? "ko" : "en", Pt = rt === "kr" ? "ko" : "en", U = (t == null ? void 0 : t.allowInput) !== !1, m = F(
|
|
@@ -182,13 +181,13 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
182
181
|
[t, e]
|
|
183
182
|
);
|
|
184
183
|
J(() => {
|
|
185
|
-
!T || !o ||
|
|
184
|
+
!T || !o || Pe(n.current, K);
|
|
186
185
|
}, [K, T, o, n]);
|
|
187
186
|
const h = y(() => {
|
|
188
187
|
p(null);
|
|
189
188
|
}, []), R = y(
|
|
190
189
|
(r, i, d) => {
|
|
191
|
-
|
|
190
|
+
ke(r, i, d);
|
|
192
191
|
const E = r.GetCell(i, d);
|
|
193
192
|
if (!E)
|
|
194
193
|
return;
|
|
@@ -197,10 +196,10 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
197
196
|
row: i,
|
|
198
197
|
col: d,
|
|
199
198
|
anchorRect: E.getBoundingClientRect(),
|
|
200
|
-
value:
|
|
199
|
+
value: Te(r, i, d, E)
|
|
201
200
|
}, w = kt(D, t), A = {
|
|
202
201
|
...D,
|
|
203
|
-
value:
|
|
202
|
+
value: he(
|
|
204
203
|
d,
|
|
205
204
|
D.value,
|
|
206
205
|
w,
|
|
@@ -233,7 +232,7 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
233
232
|
if (Tt(d))
|
|
234
233
|
return 1;
|
|
235
234
|
const E = r.FRow || r.ARow, D = r.FCol || r.ACol;
|
|
236
|
-
if (!(!T || !E || !D || !B(r, E, D, P) || !
|
|
235
|
+
if (!(!T || !E || !D || !B(r, E, D, P) || !Ie(i, d)))
|
|
237
236
|
return (w = r.CloseDialog) == null || w.call(r), d.preventDefault(), d.stopPropagation(), R(r, E, D);
|
|
238
237
|
},
|
|
239
238
|
[P, T, R]
|
|
@@ -300,7 +299,7 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
300
299
|
return !1;
|
|
301
300
|
const { grid: d } = e, E = r === "Tab";
|
|
302
301
|
return h(), E && window.requestAnimationFrame(() => {
|
|
303
|
-
|
|
302
|
+
De(d, i);
|
|
304
303
|
}), !0;
|
|
305
304
|
},
|
|
306
305
|
[h, v, e]
|
|
@@ -343,15 +342,15 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
343
342
|
};
|
|
344
343
|
}, [U, ct, at, lt]), {
|
|
345
344
|
datePickerEditorElement: e ? /* @__PURE__ */ I(
|
|
346
|
-
|
|
345
|
+
Qt,
|
|
347
346
|
{
|
|
348
347
|
open: !0,
|
|
349
348
|
anchorEl: Lt,
|
|
350
349
|
container: bt,
|
|
351
350
|
placement: "bottom-start",
|
|
352
351
|
sx: { zIndex: 1400 },
|
|
353
|
-
children: /* @__PURE__ */ I(
|
|
354
|
-
|
|
352
|
+
children: /* @__PURE__ */ I(Wt, { onClickAway: xt, children: /* @__PURE__ */ $t(
|
|
353
|
+
Jt,
|
|
355
354
|
{
|
|
356
355
|
className: It,
|
|
357
356
|
elevation: 8,
|
|
@@ -378,7 +377,7 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
378
377
|
},
|
|
379
378
|
children: [
|
|
380
379
|
U && /* @__PURE__ */ I(
|
|
381
|
-
|
|
380
|
+
ie,
|
|
382
381
|
{
|
|
383
382
|
autoFocus: !0,
|
|
384
383
|
inputRef: et,
|
|
@@ -398,14 +397,14 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
398
397
|
"aria-label": m.valueFormat
|
|
399
398
|
},
|
|
400
399
|
endAdornment: /* @__PURE__ */ I(
|
|
401
|
-
|
|
400
|
+
Xt,
|
|
402
401
|
{
|
|
403
402
|
position: "end",
|
|
404
403
|
sx: {
|
|
405
404
|
marginLeft: 0
|
|
406
405
|
},
|
|
407
406
|
children: /* @__PURE__ */ I(
|
|
408
|
-
|
|
407
|
+
qt,
|
|
409
408
|
{
|
|
410
409
|
size: "small",
|
|
411
410
|
"aria-label": "clear-date-picker-editor-value",
|
|
@@ -418,7 +417,7 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
418
417
|
margin: 0,
|
|
419
418
|
padding: 0.25
|
|
420
419
|
},
|
|
421
|
-
children: /* @__PURE__ */ I(
|
|
420
|
+
children: /* @__PURE__ */ I(Nt, { fontSize: "small" })
|
|
422
421
|
}
|
|
423
422
|
)
|
|
424
423
|
}
|
|
@@ -436,8 +435,8 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
436
435
|
}
|
|
437
436
|
}
|
|
438
437
|
),
|
|
439
|
-
m.kind === "time" ? /* @__PURE__ */ I(
|
|
440
|
-
|
|
438
|
+
m.kind === "time" ? /* @__PURE__ */ I(Zt, { dateAdapter: te, adapterLocale: Pt, children: /* @__PURE__ */ I(
|
|
439
|
+
gt,
|
|
441
440
|
{
|
|
442
441
|
ampm: !1,
|
|
443
442
|
value: At,
|
|
@@ -476,7 +475,7 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
476
475
|
}
|
|
477
476
|
}
|
|
478
477
|
) }) : /* @__PURE__ */ I(
|
|
479
|
-
|
|
478
|
+
ne,
|
|
480
479
|
{
|
|
481
480
|
inline: !0,
|
|
482
481
|
locale: ft,
|
|
@@ -486,7 +485,7 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
486
485
|
showMonthYearPicker: m.kind === "yearMonth" || m.kind === "month",
|
|
487
486
|
showTimeInput: m.kind === "dateTime",
|
|
488
487
|
timeIntervals: t == null ? void 0 : t.timeIntervals,
|
|
489
|
-
dateFormat:
|
|
488
|
+
dateFormat: Ee(m),
|
|
490
489
|
timeFormat: Bt,
|
|
491
490
|
timeCaption: `${c("Common.시간")}: `,
|
|
492
491
|
timeInputLabel: `${c("Common.시간")}: `
|
|
@@ -504,6 +503,6 @@ const $ = `${k} ${z}`, O = `${k} ${S}`, Et = "", It = "OwpTreeGridDatePickerEdi
|
|
|
504
503
|
};
|
|
505
504
|
}, "useOwpTreeGridDatePickerEditor");
|
|
506
505
|
export {
|
|
507
|
-
|
|
506
|
+
je as useOwpTreeGridDatePickerEditor
|
|
508
507
|
};
|
|
509
508
|
//# sourceMappingURL=useOwpTreeGridDatePickerEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOwpTreeGridDatePickerEditor.js","sources":["../../../../../src/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.tsx"],"sourcesContent":["import {\n PICKER_INVALID_INPUT_MESSAGE_KEY,\n TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n TIME_PICKER_EDITOR_SECTION_WIDTH,\n TIME_PICKER_SELECTED_ITEM_SX,\n VALUE_DATE_FORMATTER,\n VALUE_MONTH_FORMATTER,\n VALUE_TIME_FORMATTER,\n VALUE_TIME_SECOND_FORMATTER,\n VALUE_YEAR_FORMATTER,\n} from '@/components/OwpPicker/constants';\nimport { getPickerInputMask } from '@/components/OwpPicker/utils';\nimport { OwpTextMaskField, type OwpTextMaskFieldChangeEvent } from '@/components/OwpTextField';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { ensureDayjsBrowserSetup } from '@/utils/dayjsBrowser';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport Paper from '@mui/material/Paper';\nimport Popper, { type PopperProps } from '@mui/material/Popper';\nimport { LocalizationProvider, MultiSectionDigitalClock } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { ko } from 'date-fns/locale/ko';\nimport dayjs, { type Dayjs } from '@/dayjs';\nimport {\n type MouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ReactDatePicker, { registerLocale, setDefaultLocale } from 'react-datepicker';\nimport type { OwpTreeGridDatePickerEditorConfig, OwpTreeGridRowModel } from '../../OwpTreeGrid';\n\nregisterLocale('ko', ko);\nregisterLocale('en', enUS);\nsetDefaultLocale('ko');\nensureDayjsBrowserSetup();\n\nconst DATE_TIME_VALUE_FORMATTER = `${VALUE_DATE_FORMATTER} ${VALUE_TIME_FORMATTER}`;\nconst DATE_TIME_SECOND_VALUE_FORMATTER = `${VALUE_DATE_FORMATTER} ${VALUE_TIME_SECOND_FORMATTER}`;\nconst DATE_PICKER_EDITOR_COLUMNS_SEPARATOR = '\\u001f';\nconst TREE_GRID_DATE_PICKER_EDITOR_CLASS = 'OwpTreeGridDatePickerEditor';\nconst TREE_GRID_TIME_PICKER_EDITOR_CLASS = 'OwpTreeGridTimePickerEditor';\nconst TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML =\n '<span class=\"OwpTreeGridTimePickerEditorIcon\" aria-hidden=\"true\"></span>';\nconst DATE_PICKER_EDITOR_MONTH_FORMATTER = 'MM';\nconst DATE_PICKER_EDITOR_DAY_FORMATTER = 'DD';\nconst TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS = new Map<\n string,\n OwpTreeGridDatePickerEditorValueFormat\n>([\n ['yyyy', VALUE_YEAR_FORMATTER],\n ['YYYY', VALUE_YEAR_FORMATTER],\n ['mm', DATE_PICKER_EDITOR_MONTH_FORMATTER],\n ['MM', DATE_PICKER_EDITOR_MONTH_FORMATTER],\n ['dd', DATE_PICKER_EDITOR_DAY_FORMATTER],\n ['DD', DATE_PICKER_EDITOR_DAY_FORMATTER],\n ['yyyy-mm', VALUE_MONTH_FORMATTER],\n ['YYYY-MM', VALUE_MONTH_FORMATTER],\n ['yyyy-mm-dd', VALUE_DATE_FORMATTER],\n ['YYYY-MM-DD', VALUE_DATE_FORMATTER],\n ['HH:mm', VALUE_TIME_FORMATTER],\n ['HH:mm:ss', VALUE_TIME_SECOND_FORMATTER],\n ['yyyy-mm-dd HH:mm', DATE_TIME_VALUE_FORMATTER],\n ['YYYY-MM-DD HH:mm', DATE_TIME_VALUE_FORMATTER],\n ['yyyy-mm-dd HH:mm:ss', DATE_TIME_SECOND_VALUE_FORMATTER],\n ['YYYY-MM-DD HH:mm:ss', DATE_TIME_SECOND_VALUE_FORMATTER],\n]);\ntype OwpTreeGridDatePickerEditorValueFormat =\n | typeof VALUE_YEAR_FORMATTER\n | typeof DATE_PICKER_EDITOR_MONTH_FORMATTER\n | typeof VALUE_MONTH_FORMATTER\n | typeof DATE_PICKER_EDITOR_DAY_FORMATTER\n | typeof VALUE_DATE_FORMATTER\n | typeof VALUE_TIME_FORMATTER\n | typeof VALUE_TIME_SECOND_FORMATTER\n | typeof DATE_TIME_VALUE_FORMATTER\n | typeof DATE_TIME_SECOND_VALUE_FORMATTER;\n\ntype OwpTreeGridDatePickerEditorKind =\n | 'year'\n | 'month'\n | 'day'\n | 'yearMonth'\n | 'date'\n | 'time'\n | 'dateTime';\n\ntype OwpTreeGridDatePickerEditorFormatMeta = {\n kind: OwpTreeGridDatePickerEditorKind;\n valueFormat: OwpTreeGridDatePickerEditorValueFormat;\n inputLength: number;\n digitLength: number;\n};\n\ntype TreeGridDatePickerColumn = TCol & {\n OnClickSide?: string;\n OnClickSideDate?: string;\n};\n\ntype TreeGridDatePickerEditorState<T> = {\n grid: TGrid;\n row: OwpTreeGridRowModel<T>;\n col: string;\n anchorRect: DOMRect;\n value?: string;\n};\n\ninterface UseOwpTreeGridDatePickerEditorParams<T> {\n config?: OwpTreeGridDatePickerEditorConfig;\n treeGridInstanceRef: RefObject<TGrid>;\n isTreeGridReady: boolean;\n onValueChange?: (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string, value: string) => void;\n}\n\n/** DatePicker editor 활성 여부 */\nconst isDatePickerEditorEnabled = (config?: OwpTreeGridDatePickerEditorConfig) =>\n config?.enabled !== false;\n\n/** TreeGrid 날짜 포맷 정규화 */\nconst normalizeTreeGridDateFormat = (format?: string) => format?.trim().replace(/\\s+/g, ' ');\n\n/** TreeGrid 날짜 포맷 Dayjs 변환 */\nconst convertTreeGridDateFormatToDayjs = (format?: string) => {\n const normalizedFormat = normalizeTreeGridDateFormat(format);\n\n if (!normalizedFormat) {\n return null;\n }\n\n return (\n TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS.get(normalizedFormat) ??\n TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS.get(normalizedFormat.toLowerCase()) ??\n null\n );\n};\n\n/** DatePicker editor 포맷 메타 */\nconst getDatePickerEditorFormatMeta = (\n valueFormat: OwpTreeGridDatePickerEditorValueFormat,\n): OwpTreeGridDatePickerEditorFormatMeta => {\n switch (valueFormat) {\n case VALUE_YEAR_FORMATTER:\n return { kind: 'year', valueFormat, inputLength: 4, digitLength: 4 };\n case DATE_PICKER_EDITOR_MONTH_FORMATTER:\n return { kind: 'month', valueFormat, inputLength: 2, digitLength: 2 };\n case VALUE_MONTH_FORMATTER:\n return { kind: 'yearMonth', valueFormat, inputLength: 7, digitLength: 6 };\n case DATE_PICKER_EDITOR_DAY_FORMATTER:\n return { kind: 'day', valueFormat, inputLength: 2, digitLength: 2 };\n case VALUE_TIME_FORMATTER:\n return { kind: 'time', valueFormat, inputLength: 5, digitLength: 4 };\n case VALUE_TIME_SECOND_FORMATTER:\n return { kind: 'time', valueFormat, inputLength: 8, digitLength: 6 };\n case DATE_TIME_VALUE_FORMATTER:\n return { kind: 'dateTime', valueFormat, inputLength: 16, digitLength: 12 };\n case DATE_TIME_SECOND_VALUE_FORMATTER:\n return { kind: 'dateTime', valueFormat, inputLength: 19, digitLength: 14 };\n default:\n return { kind: 'date', valueFormat, inputLength: 10, digitLength: 8 };\n }\n};\n\n/** DatePicker editor 컬럼 포맷 메타 */\nconst resolveDatePickerEditorFormatMeta = <T,>(\n editorState: TreeGridDatePickerEditorState<T> | null,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!editorState) {\n return getDatePickerEditorFormatMeta(VALUE_DATE_FORMATTER);\n }\n\n const rowRecord = editorState.row as Record<string, unknown>;\n const column = editorState.grid.Cols?.[editorState.col];\n const treeGridFormat =\n rowRecord[`${editorState.col}EditFormat`] ??\n rowRecord[`${editorState.col}Format`] ??\n column?.EditFormat ??\n column?.Format;\n const valueFormat =\n convertTreeGridDateFormatToDayjs(\n typeof treeGridFormat === 'string' ? treeGridFormat : undefined,\n ) ??\n (config?.showTimeInput || config?.showTimeSelect\n ? DATE_TIME_VALUE_FORMATTER\n : VALUE_DATE_FORMATTER);\n\n return getDatePickerEditorFormatMeta(valueFormat);\n};\n\n/** DatePicker editor 입력 마스크 */\nconst formatDatePickerEditorInput = (\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => {\n const digits = value.replace(/\\D/g, '').slice(0, formatMeta.digitLength);\n const year = digits.slice(0, 4);\n const month = digits.slice(4, 6);\n const date = digits.slice(6, 8);\n const hour = digits.slice(8, 10);\n const minute = digits.slice(10, 12);\n const second = digits.slice(12, 14);\n\n switch (formatMeta.kind) {\n case 'year':\n case 'month':\n case 'day':\n return digits;\n case 'yearMonth':\n return [year, month].filter(Boolean).join('-');\n case 'time':\n return [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 6)].filter(Boolean).join(':');\n case 'dateTime':\n return (\n [year, month, date].filter(Boolean).join('-') +\n (hour ? ` ${hour}` : '') +\n (minute ? `:${minute}` : '') +\n (second ? `:${second}` : '')\n );\n default:\n return [year, month, date].filter(Boolean).join('-');\n }\n};\n\n/** DatePicker editor 입력 완성 여부 */\nconst isCompleteDatePickerEditorInput = (\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => value.length === formatMeta.inputLength;\n\n/** DatePicker editor 단독 월/일 파싱 값 */\nconst resolvePartialDatePickerEditorInputValue = (\n col: string,\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (formatMeta.kind === 'month') {\n return `${config?.columnOptions?.[col]?.baseYear ?? dayjs().format(VALUE_YEAR_FORMATTER)}-${value}`;\n }\n\n if (formatMeta.kind === 'day') {\n return `${config?.columnOptions?.[col]?.baseYearMonth ?? dayjs().format(VALUE_MONTH_FORMATTER)}-${value}`;\n }\n\n return value;\n};\n\n/** DatePicker editor 단독 월/일 파싱 포맷 */\nconst resolvePartialDatePickerEditorInputFormat = (\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => {\n if (formatMeta.kind === 'month') {\n return VALUE_MONTH_FORMATTER;\n }\n\n if (formatMeta.kind === 'day') {\n return VALUE_DATE_FORMATTER;\n }\n\n return formatMeta.valueFormat;\n};\n\n/** DatePicker editor 선택 값 파싱 */\nconst parseDatePickerEditorValue = (\n col: string,\n value: string | undefined,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!value) {\n return null;\n }\n\n if (formatMeta.kind === 'year') {\n const normalizedValue = `${value}-01-01`;\n const parsedValue = dayjs(normalizedValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedValue\n ? parsedValue\n : null;\n }\n\n if (formatMeta.kind === 'yearMonth') {\n const normalizedValue = `${value}-01`;\n const parsedValue = dayjs(normalizedValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedValue\n ? parsedValue\n : null;\n }\n\n const resolvedValue = resolvePartialDatePickerEditorInputValue(col, value, formatMeta, config);\n const resolvedFormat = resolvePartialDatePickerEditorInputFormat(formatMeta);\n const parsedValue = dayjs(resolvedValue, resolvedFormat, true);\n\n return parsedValue.isValid() && parsedValue.format(resolvedFormat) === resolvedValue\n ? parsedValue\n : null;\n};\n\n/** DatePicker editor react-datepicker 표시 포맷 */\nconst getReactDatePickerDisplayFormat = (formatMeta: OwpTreeGridDatePickerEditorFormatMeta) => {\n switch (formatMeta.kind) {\n case 'year':\n return 'yyyy';\n case 'month':\n return 'MM';\n case 'yearMonth':\n return 'yyyy-MM';\n case 'day':\n return 'dd';\n case 'dateTime':\n return formatMeta.valueFormat === DATE_TIME_SECOND_VALUE_FORMATTER\n ? 'yyyy-MM-dd HH:mm:ss'\n : 'yyyy-MM-dd HH:mm';\n default:\n return 'yyyy-MM-dd';\n }\n};\n\n/** DatePicker editor 입력 유효 여부 */\nconst isValidDatePickerEditorInput = (\n col: string,\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) =>\n isCompleteDatePickerEditorInput(value, formatMeta) &&\n Boolean(parseDatePickerEditorValue(col, value, formatMeta, config));\n\n/** DatePicker editor 초 포함 여부 */\nconst hasDatePickerEditorSeconds = (formatMeta: OwpTreeGridDatePickerEditorFormatMeta) =>\n formatMeta.valueFormat === VALUE_TIME_SECOND_FORMATTER ||\n formatMeta.valueFormat === DATE_TIME_SECOND_VALUE_FORMATTER;\n\n/** DatePicker editor Tab 포커스 이동 */\nconst moveTreeGridDatePickerEditorFocusByTab = (grid: TGrid, isShiftKey: boolean) => {\n const action = isShiftKey ? grid.ActionTabLeft : grid.ActionTabRight;\n\n action?.call(grid, 1, 0);\n};\n\n/** DatePicker editor 대상 셀 포커스 */\nconst focusTreeGridDatePickerEditorCell = (grid: TGrid, row: TRow, col: string) => {\n grid.Focus(row, col, undefined, undefined, 1);\n};\n\n/** TreeGrid class 병합 */\nconst appendTreeGridClass = (className: string | undefined, targetClassName: string) => {\n const classNames = className?.split(/\\s+/).filter(Boolean) ?? [];\n\n if (classNames.includes(targetClassName)) {\n return className;\n }\n\n return [...classNames, targetClassName].join(' ');\n};\n\n/** DatePicker editor 초기 표시 값 */\nconst resolveDatePickerEditorInitialValue = (\n grid: TGrid,\n row: TRow,\n col: string,\n cellElement: HTMLElement,\n) => {\n const stringEditValue = grid.GetStringEdit?.(row, col);\n const stringValue = grid.GetString?.(row, col);\n const rawValue = grid.GetValue?.(row, col);\n const textValue = cellElement.textContent?.trim();\n\n return String(stringEditValue || stringValue || textValue || rawValue || '');\n};\n\n/** DatePicker editor 초기 입력 값 정규화 */\nconst normalizeDatePickerEditorInitialValue = (\n col: string,\n value: string | undefined,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!value) {\n return '';\n }\n\n if (isValidDatePickerEditorInput(col, value, formatMeta, config)) {\n return value;\n }\n\n const formattedValue = formatDatePickerEditorInput(value, formatMeta);\n\n return isValidDatePickerEditorInput(col, formattedValue, formatMeta, config)\n ? formattedValue\n : value;\n};\n\n/** DatePicker editor 키보드 시작 키 여부 */\nconst isDatePickerEditorStartKey = (key: string, event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n\n if (keyboardEvent.ctrlKey || keyboardEvent.altKey || keyboardEvent.metaKey) {\n return false;\n }\n\n return (\n /^\\d$/.test(key) ||\n /^\\d$/.test(keyboardEvent.key) ||\n key === 'F2' ||\n key === 'Backspace' ||\n key === 'Delete' ||\n keyboardEvent.key === 'F2' ||\n keyboardEvent.key === 'Backspace' ||\n keyboardEvent.key === 'Delete'\n );\n};\n\n/** DatePicker editor 내부 이벤트 여부 */\nconst isDatePickerEditorEventTarget = (event: Event) => {\n const target = event.target;\n\n return (\n target instanceof Element && Boolean(target.closest(`.${TREE_GRID_DATE_PICKER_EDITOR_CLASS}`))\n );\n};\n\n/** TreeGrid CanEdit 명시 활성 여부 */\nconst isTreeGridCanEditEnabled = (value: unknown) => value === 1 || value === '1';\n\n/** TreeGrid CanEdit 명시 비활성 여부 */\nconst isTreeGridCanEditDisabled = (value: unknown) =>\n value === 0 || value === '0' || value === false;\n\n/** TreeGrid 표시 행 여부 */\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot') {\n return false;\n }\n\n return row.Kind === 'Data' || isTreeGridCanEditEnabled((row as { Added?: unknown }).Added);\n};\n\n/** TreeGrid 날짜 셀 편집 가능 여부 */\nconst isEditableDatePickerCell = <T,>(\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n columns: ReadonlySet<string>,\n) => {\n if (columns.size > 0 && !columns.has(col)) {\n return false;\n }\n\n const column = grid.Cols?.[col];\n const cellCanEdit = (row as Record<string, unknown>)[`${col}CanEdit`];\n const hasCellCanEdit = cellCanEdit !== undefined && cellCanEdit !== null;\n const canEdit = hasCellCanEdit\n ? isTreeGridCanEditEnabled(cellCanEdit)\n : isTreeGridCanEditEnabled(column?.CanEdit);\n\n return (\n column?.Type === 'Date' &&\n isDisplayTreeGridRow(row) &&\n !isTreeGridCanEditDisabled(row.CanEdit) &&\n canEdit &&\n row.Deleted !== 1\n );\n};\n\n/** TreeGrid DatePicker editor 컬럼 설정 */\nconst configureTreeGridDatePickerColumns = (grid: TGrid | null, columns: readonly string[]) => {\n if (!grid) {\n return;\n }\n\n const targetColumns =\n columns.length > 0\n ? columns\n : Object.keys(grid.Cols ?? {}).filter((col) => grid.Cols?.[col]?.Type === 'Date');\n\n targetColumns.forEach((col) => {\n const column = grid.Cols?.[col] as TreeGridDatePickerColumn | undefined;\n\n if (!column || column.Type !== 'Date' || !isTreeGridCanEditEnabled(column.CanEdit)) {\n return;\n }\n\n column.AutoCalendar = 0;\n column.CalendarButtons = 0;\n\n const treeGridFormat = column.EditFormat ?? column.Format;\n const valueFormat =\n convertTreeGridDateFormatToDayjs(\n typeof treeGridFormat === 'string' ? treeGridFormat : undefined,\n ) ?? VALUE_DATE_FORMATTER;\n\n if (getDatePickerEditorFormatMeta(valueFormat).kind === 'time') {\n column.Button = 'Html';\n column.ButtonText = TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML;\n column.OnClickSide = 'Focus';\n column.Class = appendTreeGridClass(column.Class, TREE_GRID_TIME_PICKER_EDITOR_CLASS);\n } else {\n column.Button = 'Date';\n column.OnClickSideDate = 'Focus';\n }\n });\n\n grid.Rerender?.(1, 1);\n};\n\n/** OwpTreeGrid Date 셀 React DatePicker editor */\nexport const useOwpTreeGridDatePickerEditor = <T,>({\n config,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange,\n}: UseOwpTreeGridDatePickerEditorParams<T>) => {\n const { t, i18n } = useOwpTranslation();\n const [editorState, setEditorState] = useState<TreeGridDatePickerEditorState<T> | null>(null);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const [hasInputCommitError, setHasInputCommitError] = useState(false);\n const editorInputRef = useRef<HTMLInputElement | null>(null);\n const isClosingAfterCommitRef = useRef(false);\n const enabled = isDatePickerEditorEnabled(config);\n const columnsKey = config?.columns?.join(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) ?? '';\n const columns = useMemo(\n () => (columnsKey ? columnsKey.split(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) : []),\n [columnsKey],\n );\n const columnSet = useMemo(() => new Set(columns), [columns]);\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const datePickerLocale = languageId === 'kr' ? 'ko' : 'en';\n const adapterLocale = languageId === 'kr' ? 'ko' : 'en';\n const allowInput = config?.allowInput !== false;\n const formatMeta = useMemo(\n () => resolveDatePickerEditorFormatMeta(editorState, config),\n [config, editorState],\n );\n\n useEffect(() => {\n if (!enabled || !isTreeGridReady) {\n return;\n }\n\n configureTreeGridDatePickerColumns(treeGridInstanceRef.current, columns);\n }, [columns, enabled, isTreeGridReady, treeGridInstanceRef]);\n\n const closeEditor = useCallback(() => {\n setEditorState(null);\n }, []);\n\n const openDatePickerEditor = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string) => {\n focusTreeGridDatePickerEditorCell(grid, row, col);\n\n const cellElement = grid.GetCell(row, col) as HTMLElement | null;\n\n if (!cellElement) {\n return undefined;\n }\n\n const rawEditorState: TreeGridDatePickerEditorState<T> = {\n grid,\n row,\n col,\n anchorRect: cellElement.getBoundingClientRect(),\n value: resolveDatePickerEditorInitialValue(grid, row, col, cellElement),\n };\n const nextFormatMeta = resolveDatePickerEditorFormatMeta(rawEditorState, config);\n const baseEditorState = {\n ...rawEditorState,\n value: normalizeDatePickerEditorInitialValue(\n col,\n rawEditorState.value,\n nextFormatMeta,\n config,\n ),\n };\n isClosingAfterCommitRef.current = false;\n setHasInputCommitError(false);\n setInputDraftValue(baseEditorState.value ?? '');\n setEditorState(baseEditorState);\n\n return 1;\n },\n [config],\n );\n\n const handleDatePickerEditorCellClick = useCallback(\n (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n _x: number,\n _y: number,\n event: Event,\n ) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n closeEditor();\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [closeEditor, columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorButtonClick = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string, event: Event) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorKeyDown = useCallback(\n (grid: TGrid, key: string, event: Event) => {\n if (isDatePickerEditorEventTarget(event)) {\n return 1;\n }\n\n const row = (grid.FRow || grid.ARow) as OwpTreeGridRowModel<T> | null | undefined;\n const col = grid.FCol || grid.ACol;\n\n if (\n !enabled ||\n !row ||\n !col ||\n !isEditableDatePickerCell(grid, row, col, columnSet) ||\n !isDatePickerEditorStartKey(key, event)\n ) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorStartEdit = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n openDatePickerEditor(grid, row, col);\n\n return true;\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const selectedDateValue = useMemo(() => {\n if (!editorState || formatMeta.kind === 'time') {\n return null;\n }\n\n const parsedInputDraftValue = isValidDatePickerEditorInput(\n editorState.col,\n inputDraftValue,\n formatMeta,\n config,\n )\n ? parseDatePickerEditorValue(editorState.col, inputDraftValue, formatMeta, config)\n : null;\n\n if (parsedInputDraftValue) {\n return parsedInputDraftValue.toDate();\n }\n\n return (\n parseDatePickerEditorValue(\n editorState.col,\n editorState.value,\n formatMeta,\n config,\n )?.toDate() ?? null\n );\n }, [config, editorState, formatMeta, inputDraftValue]);\n\n const selectedTimeValue = useMemo(() => {\n if (formatMeta.kind !== 'time') {\n return null;\n }\n\n const draftDateValue = dayjs(inputDraftValue, formatMeta.valueFormat, true);\n\n if (draftDateValue.isValid()) {\n return draftDateValue;\n }\n\n if (!editorState?.value) {\n return null;\n }\n\n const dateValue = dayjs(editorState.value, formatMeta.valueFormat, true);\n\n return dateValue.isValid() ? dateValue : null;\n }, [editorState?.value, formatMeta, inputDraftValue]);\n\n const anchorEl = useMemo<PopperProps['anchorEl']>(() => {\n if (!editorState) {\n return null;\n }\n\n return {\n getBoundingClientRect: () => editorState.anchorRect,\n };\n }, [editorState]);\n const popperContainer = useMemo(() => {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n return document.getElementById('calendar-portal') ?? undefined;\n }, []);\n\n const handleDateSelect = (dateValue: Date | null) => {\n if (!editorState) {\n return;\n }\n\n const nextValue = dateValue ? dayjs(dateValue).format(formatMeta.valueFormat) : '';\n isClosingAfterCommitRef.current = true;\n setInputDraftValue(nextValue);\n\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n closeEditor();\n };\n\n const handleTimeSelect = (dateValue: Dayjs | null, selectedView?: string) => {\n if (!editorState) {\n return;\n }\n\n const nextValue = dateValue?.isValid() ? dateValue.format(formatMeta.valueFormat) : '';\n const shouldClose =\n selectedView === (hasDatePickerEditorSeconds(formatMeta) ? 'seconds' : 'minutes');\n\n if (shouldClose) {\n isClosingAfterCommitRef.current = true;\n }\n\n setInputDraftValue(nextValue);\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n setEditorState((prevState) => (prevState ? { ...prevState, value: nextValue } : prevState));\n\n if (shouldClose) {\n closeEditor();\n }\n };\n\n const commitInputValue = useCallback(\n (nextValue: string) => {\n if (!editorState) {\n return;\n }\n\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n },\n [editorState, onValueChange],\n );\n\n const commitInputDraftValue = useCallback(() => {\n if (\n !editorState ||\n (inputDraftValue !== '' &&\n !isValidDatePickerEditorInput(editorState.col, inputDraftValue, formatMeta, config))\n ) {\n if (editorState && inputDraftValue) {\n setHasInputCommitError(true);\n }\n\n return false;\n }\n\n isClosingAfterCommitRef.current = true;\n setHasInputCommitError(false);\n commitInputValue(inputDraftValue);\n\n return true;\n }, [commitInputValue, config, editorState, formatMeta, inputDraftValue]);\n\n const closeEditorWithInputCommit = useCallback(() => {\n commitInputDraftValue();\n closeEditor();\n }, [closeEditor, commitInputDraftValue]);\n\n const handleInputChange = (event: OwpTextMaskFieldChangeEvent) => {\n if (!editorState) {\n return;\n }\n\n setInputDraftValue(event.target.value);\n setHasInputCommitError(false);\n };\n\n const commitEditorByKey = useCallback(\n (key: string, isShiftKey: boolean) => {\n if (!editorState || (key !== 'Enter' && key !== 'Tab') || !commitInputDraftValue()) {\n return false;\n }\n\n const { grid } = editorState;\n const isTabKey = key === 'Tab';\n\n closeEditor();\n\n if (isTabKey) {\n window.requestAnimationFrame(() => {\n moveTreeGridDatePickerEditorFocusByTab(grid, isShiftKey);\n });\n }\n\n return true;\n },\n [closeEditor, commitInputDraftValue, editorState],\n );\n\n const handleEditorCommitKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLElement>) => {\n if (event.key !== 'Enter' && event.key !== 'Tab') {\n return;\n }\n\n event.preventDefault();\n commitEditorByKey(event.key, event.shiftKey);\n },\n [commitEditorByKey],\n );\n\n const handleInputKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n\n handleEditorCommitKeyDown(event);\n };\n\n const handleInputClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!editorState) {\n return;\n }\n\n isClosingAfterCommitRef.current = true;\n editorState.grid.SetString(editorState.row, editorState.col, '', 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, '');\n setInputDraftValue('');\n setHasInputCommitError(false);\n setEditorState((prevState) => (prevState ? { ...prevState, value: '' } : prevState));\n };\n\n const handleEditorMouseEvent = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n const handleEditorKeyboardEvent = (event: ReactKeyboardEvent<HTMLElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n handleEditorCommitKeyDown(event);\n };\n\n const inputValue = inputDraftValue;\n const editorFocusGrid = editorState?.grid;\n const editorFocusRow = editorState?.row;\n const editorFocusCol = editorState?.col;\n const hasInputError =\n hasInputCommitError &&\n !isClosingAfterCommitRef.current &&\n Boolean(inputValue) &&\n !isValidDatePickerEditorInput(editorState?.col ?? '', inputValue, formatMeta, config);\n const hasSeconds = hasDatePickerEditorSeconds(formatMeta);\n const timePickerEditorWidth = TIME_PICKER_EDITOR_SECTION_WIDTH * (hasSeconds ? 3 : 2);\n const timePickerViews = hasSeconds\n ? (['hours', 'minutes', 'seconds'] as const)\n : (['hours', 'minutes'] as const);\n const timeFormat = hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER;\n\n useEffect(() => {\n if (!editorState) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeEditor();\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== 'Tab') {\n return;\n }\n\n if (!isDatePickerEditorEventTarget(event)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n\n commitEditorByKey(event.key, event.shiftKey);\n };\n\n window.addEventListener('keydown', handleKeyDown, true);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown, true);\n };\n }, [closeEditor, commitEditorByKey, editorState]);\n\n useEffect(() => {\n if (!editorFocusGrid || !editorFocusRow || !editorFocusCol || !allowInput) {\n return undefined;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n editorInputRef.current?.focus();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [allowInput, editorFocusCol, editorFocusGrid, editorFocusRow]);\n\n const datePickerEditorElement = editorState ? (\n <Popper\n open\n anchorEl={anchorEl}\n container={popperContainer}\n placement=\"bottom-start\"\n sx={{ zIndex: 1400 }}\n >\n <ClickAwayListener onClickAway={closeEditorWithInputCommit}>\n <Paper\n className={TREE_GRID_DATE_PICKER_EDITOR_CLASS}\n elevation={8}\n onClick={handleEditorMouseEvent}\n onKeyDown={handleEditorKeyboardEvent}\n onKeyUp={handleEditorKeyboardEvent}\n onMouseDown={handleEditorMouseEvent}\n sx={{\n borderRadius: 1,\n lineHeight: 0,\n overflow: 'hidden',\n width: formatMeta.kind === 'time' ? timePickerEditorWidth : 'auto',\n '& .react-datepicker': {\n border: 0,\n display: 'block',\n lineHeight: 'normal',\n },\n '& .react-datepicker__month-container': {\n float: 'none',\n },\n '& .react-datepicker__month': {\n marginBottom: 0,\n },\n }}\n >\n {allowInput && (\n <OwpTextMaskField\n autoFocus\n inputRef={editorInputRef}\n fullWidth\n size=\"small\"\n variant=\"outlined\"\n value={inputValue}\n error={hasInputError}\n helperText={hasInputError ? t(PICKER_INVALID_INPUT_MESSAGE_KEY) : undefined}\n color={isClosingAfterCommitRef.current ? 'primary' : undefined}\n mask={getPickerInputMask(formatMeta.valueFormat)}\n placeholder={formatMeta.valueFormat}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n inputProps={{\n inputMode: 'numeric',\n 'aria-label': formatMeta.valueFormat,\n }}\n endAdornment={\n <InputAdornment\n position=\"end\"\n sx={{\n marginLeft: 0,\n }}\n >\n <IconButton\n size=\"small\"\n aria-label=\"clear-date-picker-editor-value\"\n disabled={!inputValue}\n onClick={handleInputClear}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n sx={{\n margin: 0,\n padding: 0.25,\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n }\n sx={{\n boxSizing: 'border-box',\n width: formatMeta.kind === 'time' ? timePickerEditorWidth : '100%',\n px: 1,\n py: 1,\n '& .MuiOutlinedInput-root': {\n borderRadius: 0.75,\n fontSize: 13,\n paddingRight: 0.5,\n },\n }}\n />\n )}\n {formatMeta.kind === 'time' ? (\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={adapterLocale}>\n <MultiSectionDigitalClock\n ampm={false}\n value={selectedTimeValue}\n views={timePickerViews}\n onChange={(dateValue, _selectionState, selectedView) =>\n handleTimeSelect(dateValue, selectedView)\n }\n timeSteps={{\n minutes: config?.timeIntervals ?? 1,\n seconds: 1,\n }}\n slotProps={{\n digitalClockSectionItem: {\n sx: TIME_PICKER_SELECTED_ITEM_SX,\n },\n }}\n sx={{\n border: 0,\n width: timePickerEditorWidth,\n '& .MuiMultiSectionDigitalClockSection-root': {\n border: 0,\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_WIDTH,\n flex: `0 0 ${TIME_PICKER_EDITOR_SECTION_WIDTH}px`,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n },\n '& .MuiMultiSectionDigitalClockSection-item': {\n alignSelf: 'stretch',\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n minWidth: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n justifyContent: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n }}\n />\n </LocalizationProvider>\n ) : (\n <ReactDatePicker\n inline\n locale={datePickerLocale}\n selected={selectedDateValue}\n onChange={(dateValue: Date | null) => handleDateSelect(dateValue)}\n showYearPicker={formatMeta.kind === 'year'}\n showMonthYearPicker={formatMeta.kind === 'yearMonth' || formatMeta.kind === 'month'}\n showTimeInput={formatMeta.kind === 'dateTime'}\n timeIntervals={config?.timeIntervals}\n dateFormat={getReactDatePickerDisplayFormat(formatMeta)}\n timeFormat={timeFormat}\n timeCaption={`${t('Common.시간')}: `}\n timeInputLabel={`${t('Common.시간')}: `}\n />\n )}\n </Paper>\n </ClickAwayListener>\n </Popper>\n ) : null;\n\n return {\n datePickerEditorElement,\n handleDatePickerEditorButtonClick,\n handleDatePickerEditorCellClick,\n handleDatePickerEditorKeyDown,\n handleDatePickerEditorStartEdit,\n };\n};\n"],"names":["registerLocale","ko","enUS","setDefaultLocale","ensureDayjsBrowserSetup","DATE_TIME_VALUE_FORMATTER","VALUE_DATE_FORMATTER","VALUE_TIME_FORMATTER","DATE_TIME_SECOND_VALUE_FORMATTER","VALUE_TIME_SECOND_FORMATTER","DATE_PICKER_EDITOR_COLUMNS_SEPARATOR","TREE_GRID_DATE_PICKER_EDITOR_CLASS","TREE_GRID_TIME_PICKER_EDITOR_CLASS","TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML","DATE_PICKER_EDITOR_MONTH_FORMATTER","DATE_PICKER_EDITOR_DAY_FORMATTER","TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS","VALUE_YEAR_FORMATTER","VALUE_MONTH_FORMATTER","isDatePickerEditorEnabled","__name","config","normalizeTreeGridDateFormat","format","convertTreeGridDateFormatToDayjs","normalizedFormat","getDatePickerEditorFormatMeta","valueFormat","resolveDatePickerEditorFormatMeta","editorState","rowRecord","column","_a","treeGridFormat","formatDatePickerEditorInput","value","formatMeta","digits","year","month","date","hour","minute","second","isCompleteDatePickerEditorInput","resolvePartialDatePickerEditorInputValue","col","_b","dayjs","_d","_c","resolvePartialDatePickerEditorInputFormat","parseDatePickerEditorValue","normalizedValue","parsedValue","resolvedValue","resolvedFormat","getReactDatePickerDisplayFormat","isValidDatePickerEditorInput","hasDatePickerEditorSeconds","moveTreeGridDatePickerEditorFocusByTab","grid","isShiftKey","action","focusTreeGridDatePickerEditorCell","row","appendTreeGridClass","className","targetClassName","classNames","resolveDatePickerEditorInitialValue","cellElement","stringEditValue","stringValue","rawValue","textValue","normalizeDatePickerEditorInitialValue","formattedValue","isDatePickerEditorStartKey","key","event","keyboardEvent","isDatePickerEditorEventTarget","target","isTreeGridCanEditEnabled","isTreeGridCanEditDisabled","isDisplayTreeGridRow","isEditableDatePickerCell","columns","cellCanEdit","hasCellCanEdit","canEdit","configureTreeGridDatePickerColumns","useOwpTreeGridDatePickerEditor","treeGridInstanceRef","isTreeGridReady","onValueChange","t","i18n","useOwpTranslation","setEditorState","useState","inputDraftValue","setInputDraftValue","hasInputCommitError","setHasInputCommitError","editorInputRef","useRef","isClosingAfterCommitRef","enabled","columnsKey","useMemo","columnSet","languageId","datePickerLocale","adapterLocale","allowInput","useEffect","closeEditor","useCallback","openDatePickerEditor","rawEditorState","nextFormatMeta","baseEditorState","handleDatePickerEditorCellClick","_x","_y","handleDatePickerEditorButtonClick","handleDatePickerEditorKeyDown","handleDatePickerEditorStartEdit","selectedDateValue","parsedInputDraftValue","selectedTimeValue","draftDateValue","dateValue","anchorEl","popperContainer","handleDateSelect","nextValue","handleTimeSelect","selectedView","shouldClose","prevState","commitInputValue","commitInputDraftValue","closeEditorWithInputCommit","handleInputChange","commitEditorByKey","isTabKey","handleEditorCommitKeyDown","handleInputKeyDown","handleInputClear","handleEditorMouseEvent","handleEditorKeyboardEvent","inputValue","editorFocusGrid","editorFocusRow","editorFocusCol","hasInputError","hasSeconds","timePickerEditorWidth","TIME_PICKER_EDITOR_SECTION_WIDTH","timePickerViews","timeFormat","handleKeyDown","animationFrameId","jsx","Popper","ClickAwayListener","jsxs","Paper","OwpTextMaskField","PICKER_INVALID_INPUT_MESSAGE_KEY","getPickerInputMask","InputAdornment","IconButton","ClearIcon","LocalizationProvider","AdapterDayjs","MultiSectionDigitalClock","_selectionState","TIME_PICKER_SELECTED_ITEM_SX","TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH","ReactDatePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useOwpTreeGridDatePickerEditor.js","sources":["../../../../../src/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.tsx"],"sourcesContent":["import {\n PICKER_INVALID_INPUT_MESSAGE_KEY,\n TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n TIME_PICKER_EDITOR_SECTION_WIDTH,\n TIME_PICKER_SELECTED_ITEM_SX,\n VALUE_DATE_FORMATTER,\n VALUE_MONTH_FORMATTER,\n VALUE_TIME_FORMATTER,\n VALUE_TIME_SECOND_FORMATTER,\n VALUE_YEAR_FORMATTER,\n} from '@/components/OwpPicker/constants';\nimport { getPickerInputMask } from '@/components/OwpPicker/utils';\nimport { OwpTextMaskField, type OwpTextMaskFieldChangeEvent } from '@/components/OwpTextField';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport Paper from '@mui/material/Paper';\nimport Popper, { type PopperProps } from '@mui/material/Popper';\nimport { LocalizationProvider, MultiSectionDigitalClock } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { ko } from 'date-fns/locale/ko';\nimport dayjs, { type Dayjs } from '@/dayjs';\nimport {\n type MouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ReactDatePicker, { registerLocale, setDefaultLocale } from 'react-datepicker';\nimport type { OwpTreeGridDatePickerEditorConfig, OwpTreeGridRowModel } from '../../OwpTreeGrid';\n\nregisterLocale('ko', ko);\nregisterLocale('en', enUS);\nsetDefaultLocale('ko');\n\nconst DATE_TIME_VALUE_FORMATTER = `${VALUE_DATE_FORMATTER} ${VALUE_TIME_FORMATTER}`;\nconst DATE_TIME_SECOND_VALUE_FORMATTER = `${VALUE_DATE_FORMATTER} ${VALUE_TIME_SECOND_FORMATTER}`;\nconst DATE_PICKER_EDITOR_COLUMNS_SEPARATOR = '\\u001f';\nconst TREE_GRID_DATE_PICKER_EDITOR_CLASS = 'OwpTreeGridDatePickerEditor';\nconst TREE_GRID_TIME_PICKER_EDITOR_CLASS = 'OwpTreeGridTimePickerEditor';\nconst TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML =\n '<span class=\"OwpTreeGridTimePickerEditorIcon\" aria-hidden=\"true\"></span>';\nconst DATE_PICKER_EDITOR_MONTH_FORMATTER = 'MM';\nconst DATE_PICKER_EDITOR_DAY_FORMATTER = 'DD';\nconst TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS = new Map<\n string,\n OwpTreeGridDatePickerEditorValueFormat\n>([\n ['yyyy', VALUE_YEAR_FORMATTER],\n ['YYYY', VALUE_YEAR_FORMATTER],\n ['mm', DATE_PICKER_EDITOR_MONTH_FORMATTER],\n ['MM', DATE_PICKER_EDITOR_MONTH_FORMATTER],\n ['dd', DATE_PICKER_EDITOR_DAY_FORMATTER],\n ['DD', DATE_PICKER_EDITOR_DAY_FORMATTER],\n ['yyyy-mm', VALUE_MONTH_FORMATTER],\n ['YYYY-MM', VALUE_MONTH_FORMATTER],\n ['yyyy-mm-dd', VALUE_DATE_FORMATTER],\n ['YYYY-MM-DD', VALUE_DATE_FORMATTER],\n ['HH:mm', VALUE_TIME_FORMATTER],\n ['HH:mm:ss', VALUE_TIME_SECOND_FORMATTER],\n ['yyyy-mm-dd HH:mm', DATE_TIME_VALUE_FORMATTER],\n ['YYYY-MM-DD HH:mm', DATE_TIME_VALUE_FORMATTER],\n ['yyyy-mm-dd HH:mm:ss', DATE_TIME_SECOND_VALUE_FORMATTER],\n ['YYYY-MM-DD HH:mm:ss', DATE_TIME_SECOND_VALUE_FORMATTER],\n]);\ntype OwpTreeGridDatePickerEditorValueFormat =\n | typeof VALUE_YEAR_FORMATTER\n | typeof DATE_PICKER_EDITOR_MONTH_FORMATTER\n | typeof VALUE_MONTH_FORMATTER\n | typeof DATE_PICKER_EDITOR_DAY_FORMATTER\n | typeof VALUE_DATE_FORMATTER\n | typeof VALUE_TIME_FORMATTER\n | typeof VALUE_TIME_SECOND_FORMATTER\n | typeof DATE_TIME_VALUE_FORMATTER\n | typeof DATE_TIME_SECOND_VALUE_FORMATTER;\n\ntype OwpTreeGridDatePickerEditorKind =\n | 'year'\n | 'month'\n | 'day'\n | 'yearMonth'\n | 'date'\n | 'time'\n | 'dateTime';\n\ntype OwpTreeGridDatePickerEditorFormatMeta = {\n kind: OwpTreeGridDatePickerEditorKind;\n valueFormat: OwpTreeGridDatePickerEditorValueFormat;\n inputLength: number;\n digitLength: number;\n};\n\ntype TreeGridDatePickerColumn = TCol & {\n OnClickSide?: string;\n OnClickSideDate?: string;\n};\n\ntype TreeGridDatePickerEditorState<T> = {\n grid: TGrid;\n row: OwpTreeGridRowModel<T>;\n col: string;\n anchorRect: DOMRect;\n value?: string;\n};\n\ninterface UseOwpTreeGridDatePickerEditorParams<T> {\n config?: OwpTreeGridDatePickerEditorConfig;\n treeGridInstanceRef: RefObject<TGrid>;\n isTreeGridReady: boolean;\n onValueChange?: (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string, value: string) => void;\n}\n\n/** DatePicker editor 활성 여부 */\nconst isDatePickerEditorEnabled = (config?: OwpTreeGridDatePickerEditorConfig) =>\n config?.enabled !== false;\n\n/** TreeGrid 날짜 포맷 정규화 */\nconst normalizeTreeGridDateFormat = (format?: string) => format?.trim().replace(/\\s+/g, ' ');\n\n/** TreeGrid 날짜 포맷 Dayjs 변환 */\nconst convertTreeGridDateFormatToDayjs = (format?: string) => {\n const normalizedFormat = normalizeTreeGridDateFormat(format);\n\n if (!normalizedFormat) {\n return null;\n }\n\n return (\n TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS.get(normalizedFormat) ??\n TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS.get(normalizedFormat.toLowerCase()) ??\n null\n );\n};\n\n/** DatePicker editor 포맷 메타 */\nconst getDatePickerEditorFormatMeta = (\n valueFormat: OwpTreeGridDatePickerEditorValueFormat,\n): OwpTreeGridDatePickerEditorFormatMeta => {\n switch (valueFormat) {\n case VALUE_YEAR_FORMATTER:\n return { kind: 'year', valueFormat, inputLength: 4, digitLength: 4 };\n case DATE_PICKER_EDITOR_MONTH_FORMATTER:\n return { kind: 'month', valueFormat, inputLength: 2, digitLength: 2 };\n case VALUE_MONTH_FORMATTER:\n return { kind: 'yearMonth', valueFormat, inputLength: 7, digitLength: 6 };\n case DATE_PICKER_EDITOR_DAY_FORMATTER:\n return { kind: 'day', valueFormat, inputLength: 2, digitLength: 2 };\n case VALUE_TIME_FORMATTER:\n return { kind: 'time', valueFormat, inputLength: 5, digitLength: 4 };\n case VALUE_TIME_SECOND_FORMATTER:\n return { kind: 'time', valueFormat, inputLength: 8, digitLength: 6 };\n case DATE_TIME_VALUE_FORMATTER:\n return { kind: 'dateTime', valueFormat, inputLength: 16, digitLength: 12 };\n case DATE_TIME_SECOND_VALUE_FORMATTER:\n return { kind: 'dateTime', valueFormat, inputLength: 19, digitLength: 14 };\n default:\n return { kind: 'date', valueFormat, inputLength: 10, digitLength: 8 };\n }\n};\n\n/** DatePicker editor 컬럼 포맷 메타 */\nconst resolveDatePickerEditorFormatMeta = <T,>(\n editorState: TreeGridDatePickerEditorState<T> | null,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!editorState) {\n return getDatePickerEditorFormatMeta(VALUE_DATE_FORMATTER);\n }\n\n const rowRecord = editorState.row as Record<string, unknown>;\n const column = editorState.grid.Cols?.[editorState.col];\n const treeGridFormat =\n rowRecord[`${editorState.col}EditFormat`] ??\n rowRecord[`${editorState.col}Format`] ??\n column?.EditFormat ??\n column?.Format;\n const valueFormat =\n convertTreeGridDateFormatToDayjs(\n typeof treeGridFormat === 'string' ? treeGridFormat : undefined,\n ) ??\n (config?.showTimeInput || config?.showTimeSelect\n ? DATE_TIME_VALUE_FORMATTER\n : VALUE_DATE_FORMATTER);\n\n return getDatePickerEditorFormatMeta(valueFormat);\n};\n\n/** DatePicker editor 입력 마스크 */\nconst formatDatePickerEditorInput = (\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => {\n const digits = value.replace(/\\D/g, '').slice(0, formatMeta.digitLength);\n const year = digits.slice(0, 4);\n const month = digits.slice(4, 6);\n const date = digits.slice(6, 8);\n const hour = digits.slice(8, 10);\n const minute = digits.slice(10, 12);\n const second = digits.slice(12, 14);\n\n switch (formatMeta.kind) {\n case 'year':\n case 'month':\n case 'day':\n return digits;\n case 'yearMonth':\n return [year, month].filter(Boolean).join('-');\n case 'time':\n return [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 6)].filter(Boolean).join(':');\n case 'dateTime':\n return (\n [year, month, date].filter(Boolean).join('-') +\n (hour ? ` ${hour}` : '') +\n (minute ? `:${minute}` : '') +\n (second ? `:${second}` : '')\n );\n default:\n return [year, month, date].filter(Boolean).join('-');\n }\n};\n\n/** DatePicker editor 입력 완성 여부 */\nconst isCompleteDatePickerEditorInput = (\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => value.length === formatMeta.inputLength;\n\n/** DatePicker editor 단독 월/일 파싱 값 */\nconst resolvePartialDatePickerEditorInputValue = (\n col: string,\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (formatMeta.kind === 'month') {\n return `${config?.columnOptions?.[col]?.baseYear ?? dayjs().format(VALUE_YEAR_FORMATTER)}-${value}`;\n }\n\n if (formatMeta.kind === 'day') {\n return `${config?.columnOptions?.[col]?.baseYearMonth ?? dayjs().format(VALUE_MONTH_FORMATTER)}-${value}`;\n }\n\n return value;\n};\n\n/** DatePicker editor 단독 월/일 파싱 포맷 */\nconst resolvePartialDatePickerEditorInputFormat = (\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => {\n if (formatMeta.kind === 'month') {\n return VALUE_MONTH_FORMATTER;\n }\n\n if (formatMeta.kind === 'day') {\n return VALUE_DATE_FORMATTER;\n }\n\n return formatMeta.valueFormat;\n};\n\n/** DatePicker editor 선택 값 파싱 */\nconst parseDatePickerEditorValue = (\n col: string,\n value: string | undefined,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!value) {\n return null;\n }\n\n if (formatMeta.kind === 'year') {\n const normalizedValue = `${value}-01-01`;\n const parsedValue = dayjs(normalizedValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedValue\n ? parsedValue\n : null;\n }\n\n if (formatMeta.kind === 'yearMonth') {\n const normalizedValue = `${value}-01`;\n const parsedValue = dayjs(normalizedValue, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() && parsedValue.format(VALUE_DATE_FORMATTER) === normalizedValue\n ? parsedValue\n : null;\n }\n\n const resolvedValue = resolvePartialDatePickerEditorInputValue(col, value, formatMeta, config);\n const resolvedFormat = resolvePartialDatePickerEditorInputFormat(formatMeta);\n const parsedValue = dayjs(resolvedValue, resolvedFormat, true);\n\n return parsedValue.isValid() && parsedValue.format(resolvedFormat) === resolvedValue\n ? parsedValue\n : null;\n};\n\n/** DatePicker editor react-datepicker 표시 포맷 */\nconst getReactDatePickerDisplayFormat = (formatMeta: OwpTreeGridDatePickerEditorFormatMeta) => {\n switch (formatMeta.kind) {\n case 'year':\n return 'yyyy';\n case 'month':\n return 'MM';\n case 'yearMonth':\n return 'yyyy-MM';\n case 'day':\n return 'dd';\n case 'dateTime':\n return formatMeta.valueFormat === DATE_TIME_SECOND_VALUE_FORMATTER\n ? 'yyyy-MM-dd HH:mm:ss'\n : 'yyyy-MM-dd HH:mm';\n default:\n return 'yyyy-MM-dd';\n }\n};\n\n/** DatePicker editor 입력 유효 여부 */\nconst isValidDatePickerEditorInput = (\n col: string,\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) =>\n isCompleteDatePickerEditorInput(value, formatMeta) &&\n Boolean(parseDatePickerEditorValue(col, value, formatMeta, config));\n\n/** DatePicker editor 초 포함 여부 */\nconst hasDatePickerEditorSeconds = (formatMeta: OwpTreeGridDatePickerEditorFormatMeta) =>\n formatMeta.valueFormat === VALUE_TIME_SECOND_FORMATTER ||\n formatMeta.valueFormat === DATE_TIME_SECOND_VALUE_FORMATTER;\n\n/** DatePicker editor Tab 포커스 이동 */\nconst moveTreeGridDatePickerEditorFocusByTab = (grid: TGrid, isShiftKey: boolean) => {\n const action = isShiftKey ? grid.ActionTabLeft : grid.ActionTabRight;\n\n action?.call(grid, 1, 0);\n};\n\n/** DatePicker editor 대상 셀 포커스 */\nconst focusTreeGridDatePickerEditorCell = (grid: TGrid, row: TRow, col: string) => {\n grid.Focus(row, col, undefined, undefined, 1);\n};\n\n/** TreeGrid class 병합 */\nconst appendTreeGridClass = (className: string | undefined, targetClassName: string) => {\n const classNames = className?.split(/\\s+/).filter(Boolean) ?? [];\n\n if (classNames.includes(targetClassName)) {\n return className;\n }\n\n return [...classNames, targetClassName].join(' ');\n};\n\n/** DatePicker editor 초기 표시 값 */\nconst resolveDatePickerEditorInitialValue = (\n grid: TGrid,\n row: TRow,\n col: string,\n cellElement: HTMLElement,\n) => {\n const stringEditValue = grid.GetStringEdit?.(row, col);\n const stringValue = grid.GetString?.(row, col);\n const rawValue = grid.GetValue?.(row, col);\n const textValue = cellElement.textContent?.trim();\n\n return String(stringEditValue || stringValue || textValue || rawValue || '');\n};\n\n/** DatePicker editor 초기 입력 값 정규화 */\nconst normalizeDatePickerEditorInitialValue = (\n col: string,\n value: string | undefined,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!value) {\n return '';\n }\n\n if (isValidDatePickerEditorInput(col, value, formatMeta, config)) {\n return value;\n }\n\n const formattedValue = formatDatePickerEditorInput(value, formatMeta);\n\n return isValidDatePickerEditorInput(col, formattedValue, formatMeta, config)\n ? formattedValue\n : value;\n};\n\n/** DatePicker editor 키보드 시작 키 여부 */\nconst isDatePickerEditorStartKey = (key: string, event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n\n if (keyboardEvent.ctrlKey || keyboardEvent.altKey || keyboardEvent.metaKey) {\n return false;\n }\n\n return (\n /^\\d$/.test(key) ||\n /^\\d$/.test(keyboardEvent.key) ||\n key === 'F2' ||\n key === 'Backspace' ||\n key === 'Delete' ||\n keyboardEvent.key === 'F2' ||\n keyboardEvent.key === 'Backspace' ||\n keyboardEvent.key === 'Delete'\n );\n};\n\n/** DatePicker editor 내부 이벤트 여부 */\nconst isDatePickerEditorEventTarget = (event: Event) => {\n const target = event.target;\n\n return (\n target instanceof Element && Boolean(target.closest(`.${TREE_GRID_DATE_PICKER_EDITOR_CLASS}`))\n );\n};\n\n/** TreeGrid CanEdit 명시 활성 여부 */\nconst isTreeGridCanEditEnabled = (value: unknown) => value === 1 || value === '1';\n\n/** TreeGrid CanEdit 명시 비활성 여부 */\nconst isTreeGridCanEditDisabled = (value: unknown) =>\n value === 0 || value === '0' || value === false;\n\n/** TreeGrid 표시 행 여부 */\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot') {\n return false;\n }\n\n return row.Kind === 'Data' || isTreeGridCanEditEnabled((row as { Added?: unknown }).Added);\n};\n\n/** TreeGrid 날짜 셀 편집 가능 여부 */\nconst isEditableDatePickerCell = <T,>(\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n columns: ReadonlySet<string>,\n) => {\n if (columns.size > 0 && !columns.has(col)) {\n return false;\n }\n\n const column = grid.Cols?.[col];\n const cellCanEdit = (row as Record<string, unknown>)[`${col}CanEdit`];\n const hasCellCanEdit = cellCanEdit !== undefined && cellCanEdit !== null;\n const canEdit = hasCellCanEdit\n ? isTreeGridCanEditEnabled(cellCanEdit)\n : isTreeGridCanEditEnabled(column?.CanEdit);\n\n return (\n column?.Type === 'Date' &&\n isDisplayTreeGridRow(row) &&\n !isTreeGridCanEditDisabled(row.CanEdit) &&\n canEdit &&\n row.Deleted !== 1\n );\n};\n\n/** TreeGrid DatePicker editor 컬럼 설정 */\nconst configureTreeGridDatePickerColumns = (grid: TGrid | null, columns: readonly string[]) => {\n if (!grid) {\n return;\n }\n\n const targetColumns =\n columns.length > 0\n ? columns\n : Object.keys(grid.Cols ?? {}).filter((col) => grid.Cols?.[col]?.Type === 'Date');\n\n targetColumns.forEach((col) => {\n const column = grid.Cols?.[col] as TreeGridDatePickerColumn | undefined;\n\n if (!column || column.Type !== 'Date' || !isTreeGridCanEditEnabled(column.CanEdit)) {\n return;\n }\n\n column.AutoCalendar = 0;\n column.CalendarButtons = 0;\n\n const treeGridFormat = column.EditFormat ?? column.Format;\n const valueFormat =\n convertTreeGridDateFormatToDayjs(\n typeof treeGridFormat === 'string' ? treeGridFormat : undefined,\n ) ?? VALUE_DATE_FORMATTER;\n\n if (getDatePickerEditorFormatMeta(valueFormat).kind === 'time') {\n column.Button = 'Html';\n column.ButtonText = TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML;\n column.OnClickSide = 'Focus';\n column.Class = appendTreeGridClass(column.Class, TREE_GRID_TIME_PICKER_EDITOR_CLASS);\n } else {\n column.Button = 'Date';\n column.OnClickSideDate = 'Focus';\n }\n });\n\n grid.Rerender?.(1, 1);\n};\n\n/** OwpTreeGrid Date 셀 React DatePicker editor */\nexport const useOwpTreeGridDatePickerEditor = <T,>({\n config,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange,\n}: UseOwpTreeGridDatePickerEditorParams<T>) => {\n const { t, i18n } = useOwpTranslation();\n const [editorState, setEditorState] = useState<TreeGridDatePickerEditorState<T> | null>(null);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const [hasInputCommitError, setHasInputCommitError] = useState(false);\n const editorInputRef = useRef<HTMLInputElement | null>(null);\n const isClosingAfterCommitRef = useRef(false);\n const enabled = isDatePickerEditorEnabled(config);\n const columnsKey = config?.columns?.join(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) ?? '';\n const columns = useMemo(\n () => (columnsKey ? columnsKey.split(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) : []),\n [columnsKey],\n );\n const columnSet = useMemo(() => new Set(columns), [columns]);\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const datePickerLocale = languageId === 'kr' ? 'ko' : 'en';\n const adapterLocale = languageId === 'kr' ? 'ko' : 'en';\n const allowInput = config?.allowInput !== false;\n const formatMeta = useMemo(\n () => resolveDatePickerEditorFormatMeta(editorState, config),\n [config, editorState],\n );\n\n useEffect(() => {\n if (!enabled || !isTreeGridReady) {\n return;\n }\n\n configureTreeGridDatePickerColumns(treeGridInstanceRef.current, columns);\n }, [columns, enabled, isTreeGridReady, treeGridInstanceRef]);\n\n const closeEditor = useCallback(() => {\n setEditorState(null);\n }, []);\n\n const openDatePickerEditor = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string) => {\n focusTreeGridDatePickerEditorCell(grid, row, col);\n\n const cellElement = grid.GetCell(row, col) as HTMLElement | null;\n\n if (!cellElement) {\n return undefined;\n }\n\n const rawEditorState: TreeGridDatePickerEditorState<T> = {\n grid,\n row,\n col,\n anchorRect: cellElement.getBoundingClientRect(),\n value: resolveDatePickerEditorInitialValue(grid, row, col, cellElement),\n };\n const nextFormatMeta = resolveDatePickerEditorFormatMeta(rawEditorState, config);\n const baseEditorState = {\n ...rawEditorState,\n value: normalizeDatePickerEditorInitialValue(\n col,\n rawEditorState.value,\n nextFormatMeta,\n config,\n ),\n };\n isClosingAfterCommitRef.current = false;\n setHasInputCommitError(false);\n setInputDraftValue(baseEditorState.value ?? '');\n setEditorState(baseEditorState);\n\n return 1;\n },\n [config],\n );\n\n const handleDatePickerEditorCellClick = useCallback(\n (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n _x: number,\n _y: number,\n event: Event,\n ) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n closeEditor();\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [closeEditor, columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorButtonClick = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string, event: Event) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorKeyDown = useCallback(\n (grid: TGrid, key: string, event: Event) => {\n if (isDatePickerEditorEventTarget(event)) {\n return 1;\n }\n\n const row = (grid.FRow || grid.ARow) as OwpTreeGridRowModel<T> | null | undefined;\n const col = grid.FCol || grid.ACol;\n\n if (\n !enabled ||\n !row ||\n !col ||\n !isEditableDatePickerCell(grid, row, col, columnSet) ||\n !isDatePickerEditorStartKey(key, event)\n ) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorStartEdit = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n openDatePickerEditor(grid, row, col);\n\n return true;\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const selectedDateValue = useMemo(() => {\n if (!editorState || formatMeta.kind === 'time') {\n return null;\n }\n\n const parsedInputDraftValue = isValidDatePickerEditorInput(\n editorState.col,\n inputDraftValue,\n formatMeta,\n config,\n )\n ? parseDatePickerEditorValue(editorState.col, inputDraftValue, formatMeta, config)\n : null;\n\n if (parsedInputDraftValue) {\n return parsedInputDraftValue.toDate();\n }\n\n return (\n parseDatePickerEditorValue(\n editorState.col,\n editorState.value,\n formatMeta,\n config,\n )?.toDate() ?? null\n );\n }, [config, editorState, formatMeta, inputDraftValue]);\n\n const selectedTimeValue = useMemo(() => {\n if (formatMeta.kind !== 'time') {\n return null;\n }\n\n const draftDateValue = dayjs(inputDraftValue, formatMeta.valueFormat, true);\n\n if (draftDateValue.isValid()) {\n return draftDateValue;\n }\n\n if (!editorState?.value) {\n return null;\n }\n\n const dateValue = dayjs(editorState.value, formatMeta.valueFormat, true);\n\n return dateValue.isValid() ? dateValue : null;\n }, [editorState?.value, formatMeta, inputDraftValue]);\n\n const anchorEl = useMemo<PopperProps['anchorEl']>(() => {\n if (!editorState) {\n return null;\n }\n\n return {\n getBoundingClientRect: () => editorState.anchorRect,\n };\n }, [editorState]);\n const popperContainer = useMemo(() => {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n return document.getElementById('calendar-portal') ?? undefined;\n }, []);\n\n const handleDateSelect = (dateValue: Date | null) => {\n if (!editorState) {\n return;\n }\n\n const nextValue = dateValue ? dayjs(dateValue).format(formatMeta.valueFormat) : '';\n isClosingAfterCommitRef.current = true;\n setInputDraftValue(nextValue);\n\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n closeEditor();\n };\n\n const handleTimeSelect = (dateValue: Dayjs | null, selectedView?: string) => {\n if (!editorState) {\n return;\n }\n\n const nextValue = dateValue?.isValid() ? dateValue.format(formatMeta.valueFormat) : '';\n const shouldClose =\n selectedView === (hasDatePickerEditorSeconds(formatMeta) ? 'seconds' : 'minutes');\n\n if (shouldClose) {\n isClosingAfterCommitRef.current = true;\n }\n\n setInputDraftValue(nextValue);\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n setEditorState((prevState) => (prevState ? { ...prevState, value: nextValue } : prevState));\n\n if (shouldClose) {\n closeEditor();\n }\n };\n\n const commitInputValue = useCallback(\n (nextValue: string) => {\n if (!editorState) {\n return;\n }\n\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n },\n [editorState, onValueChange],\n );\n\n const commitInputDraftValue = useCallback(() => {\n if (\n !editorState ||\n (inputDraftValue !== '' &&\n !isValidDatePickerEditorInput(editorState.col, inputDraftValue, formatMeta, config))\n ) {\n if (editorState && inputDraftValue) {\n setHasInputCommitError(true);\n }\n\n return false;\n }\n\n isClosingAfterCommitRef.current = true;\n setHasInputCommitError(false);\n commitInputValue(inputDraftValue);\n\n return true;\n }, [commitInputValue, config, editorState, formatMeta, inputDraftValue]);\n\n const closeEditorWithInputCommit = useCallback(() => {\n commitInputDraftValue();\n closeEditor();\n }, [closeEditor, commitInputDraftValue]);\n\n const handleInputChange = (event: OwpTextMaskFieldChangeEvent) => {\n if (!editorState) {\n return;\n }\n\n setInputDraftValue(event.target.value);\n setHasInputCommitError(false);\n };\n\n const commitEditorByKey = useCallback(\n (key: string, isShiftKey: boolean) => {\n if (!editorState || (key !== 'Enter' && key !== 'Tab') || !commitInputDraftValue()) {\n return false;\n }\n\n const { grid } = editorState;\n const isTabKey = key === 'Tab';\n\n closeEditor();\n\n if (isTabKey) {\n window.requestAnimationFrame(() => {\n moveTreeGridDatePickerEditorFocusByTab(grid, isShiftKey);\n });\n }\n\n return true;\n },\n [closeEditor, commitInputDraftValue, editorState],\n );\n\n const handleEditorCommitKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLElement>) => {\n if (event.key !== 'Enter' && event.key !== 'Tab') {\n return;\n }\n\n event.preventDefault();\n commitEditorByKey(event.key, event.shiftKey);\n },\n [commitEditorByKey],\n );\n\n const handleInputKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n\n handleEditorCommitKeyDown(event);\n };\n\n const handleInputClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!editorState) {\n return;\n }\n\n isClosingAfterCommitRef.current = true;\n editorState.grid.SetString(editorState.row, editorState.col, '', 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, '');\n setInputDraftValue('');\n setHasInputCommitError(false);\n setEditorState((prevState) => (prevState ? { ...prevState, value: '' } : prevState));\n };\n\n const handleEditorMouseEvent = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n const handleEditorKeyboardEvent = (event: ReactKeyboardEvent<HTMLElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n handleEditorCommitKeyDown(event);\n };\n\n const inputValue = inputDraftValue;\n const editorFocusGrid = editorState?.grid;\n const editorFocusRow = editorState?.row;\n const editorFocusCol = editorState?.col;\n const hasInputError =\n hasInputCommitError &&\n !isClosingAfterCommitRef.current &&\n Boolean(inputValue) &&\n !isValidDatePickerEditorInput(editorState?.col ?? '', inputValue, formatMeta, config);\n const hasSeconds = hasDatePickerEditorSeconds(formatMeta);\n const timePickerEditorWidth = TIME_PICKER_EDITOR_SECTION_WIDTH * (hasSeconds ? 3 : 2);\n const timePickerViews = hasSeconds\n ? (['hours', 'minutes', 'seconds'] as const)\n : (['hours', 'minutes'] as const);\n const timeFormat = hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER;\n\n useEffect(() => {\n if (!editorState) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeEditor();\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== 'Tab') {\n return;\n }\n\n if (!isDatePickerEditorEventTarget(event)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n\n commitEditorByKey(event.key, event.shiftKey);\n };\n\n window.addEventListener('keydown', handleKeyDown, true);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown, true);\n };\n }, [closeEditor, commitEditorByKey, editorState]);\n\n useEffect(() => {\n if (!editorFocusGrid || !editorFocusRow || !editorFocusCol || !allowInput) {\n return undefined;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n editorInputRef.current?.focus();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [allowInput, editorFocusCol, editorFocusGrid, editorFocusRow]);\n\n const datePickerEditorElement = editorState ? (\n <Popper\n open\n anchorEl={anchorEl}\n container={popperContainer}\n placement=\"bottom-start\"\n sx={{ zIndex: 1400 }}\n >\n <ClickAwayListener onClickAway={closeEditorWithInputCommit}>\n <Paper\n className={TREE_GRID_DATE_PICKER_EDITOR_CLASS}\n elevation={8}\n onClick={handleEditorMouseEvent}\n onKeyDown={handleEditorKeyboardEvent}\n onKeyUp={handleEditorKeyboardEvent}\n onMouseDown={handleEditorMouseEvent}\n sx={{\n borderRadius: 1,\n lineHeight: 0,\n overflow: 'hidden',\n width: formatMeta.kind === 'time' ? timePickerEditorWidth : 'auto',\n '& .react-datepicker': {\n border: 0,\n display: 'block',\n lineHeight: 'normal',\n },\n '& .react-datepicker__month-container': {\n float: 'none',\n },\n '& .react-datepicker__month': {\n marginBottom: 0,\n },\n }}\n >\n {allowInput && (\n <OwpTextMaskField\n autoFocus\n inputRef={editorInputRef}\n fullWidth\n size=\"small\"\n variant=\"outlined\"\n value={inputValue}\n error={hasInputError}\n helperText={hasInputError ? t(PICKER_INVALID_INPUT_MESSAGE_KEY) : undefined}\n color={isClosingAfterCommitRef.current ? 'primary' : undefined}\n mask={getPickerInputMask(formatMeta.valueFormat)}\n placeholder={formatMeta.valueFormat}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n inputProps={{\n inputMode: 'numeric',\n 'aria-label': formatMeta.valueFormat,\n }}\n endAdornment={\n <InputAdornment\n position=\"end\"\n sx={{\n marginLeft: 0,\n }}\n >\n <IconButton\n size=\"small\"\n aria-label=\"clear-date-picker-editor-value\"\n disabled={!inputValue}\n onClick={handleInputClear}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n sx={{\n margin: 0,\n padding: 0.25,\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n }\n sx={{\n boxSizing: 'border-box',\n width: formatMeta.kind === 'time' ? timePickerEditorWidth : '100%',\n px: 1,\n py: 1,\n '& .MuiOutlinedInput-root': {\n borderRadius: 0.75,\n fontSize: 13,\n paddingRight: 0.5,\n },\n }}\n />\n )}\n {formatMeta.kind === 'time' ? (\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={adapterLocale}>\n <MultiSectionDigitalClock\n ampm={false}\n value={selectedTimeValue}\n views={timePickerViews}\n onChange={(dateValue, _selectionState, selectedView) =>\n handleTimeSelect(dateValue, selectedView)\n }\n timeSteps={{\n minutes: config?.timeIntervals ?? 1,\n seconds: 1,\n }}\n slotProps={{\n digitalClockSectionItem: {\n sx: TIME_PICKER_SELECTED_ITEM_SX,\n },\n }}\n sx={{\n border: 0,\n width: timePickerEditorWidth,\n '& .MuiMultiSectionDigitalClockSection-root': {\n border: 0,\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_WIDTH,\n flex: `0 0 ${TIME_PICKER_EDITOR_SECTION_WIDTH}px`,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n },\n '& .MuiMultiSectionDigitalClockSection-item': {\n alignSelf: 'stretch',\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n minWidth: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n justifyContent: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n }}\n />\n </LocalizationProvider>\n ) : (\n <ReactDatePicker\n inline\n locale={datePickerLocale}\n selected={selectedDateValue}\n onChange={(dateValue: Date | null) => handleDateSelect(dateValue)}\n showYearPicker={formatMeta.kind === 'year'}\n showMonthYearPicker={formatMeta.kind === 'yearMonth' || formatMeta.kind === 'month'}\n showTimeInput={formatMeta.kind === 'dateTime'}\n timeIntervals={config?.timeIntervals}\n dateFormat={getReactDatePickerDisplayFormat(formatMeta)}\n timeFormat={timeFormat}\n timeCaption={`${t('Common.시간')}: `}\n timeInputLabel={`${t('Common.시간')}: `}\n />\n )}\n </Paper>\n </ClickAwayListener>\n </Popper>\n ) : null;\n\n return {\n datePickerEditorElement,\n handleDatePickerEditorButtonClick,\n handleDatePickerEditorCellClick,\n handleDatePickerEditorKeyDown,\n handleDatePickerEditorStartEdit,\n };\n};\n"],"names":["registerLocale","ko","enUS","setDefaultLocale","DATE_TIME_VALUE_FORMATTER","VALUE_DATE_FORMATTER","VALUE_TIME_FORMATTER","DATE_TIME_SECOND_VALUE_FORMATTER","VALUE_TIME_SECOND_FORMATTER","DATE_PICKER_EDITOR_COLUMNS_SEPARATOR","TREE_GRID_DATE_PICKER_EDITOR_CLASS","TREE_GRID_TIME_PICKER_EDITOR_CLASS","TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML","DATE_PICKER_EDITOR_MONTH_FORMATTER","DATE_PICKER_EDITOR_DAY_FORMATTER","TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS","VALUE_YEAR_FORMATTER","VALUE_MONTH_FORMATTER","isDatePickerEditorEnabled","__name","config","normalizeTreeGridDateFormat","format","convertTreeGridDateFormatToDayjs","normalizedFormat","getDatePickerEditorFormatMeta","valueFormat","resolveDatePickerEditorFormatMeta","editorState","rowRecord","column","_a","treeGridFormat","formatDatePickerEditorInput","value","formatMeta","digits","year","month","date","hour","minute","second","isCompleteDatePickerEditorInput","resolvePartialDatePickerEditorInputValue","col","_b","dayjs","_d","_c","resolvePartialDatePickerEditorInputFormat","parseDatePickerEditorValue","normalizedValue","parsedValue","resolvedValue","resolvedFormat","getReactDatePickerDisplayFormat","isValidDatePickerEditorInput","hasDatePickerEditorSeconds","moveTreeGridDatePickerEditorFocusByTab","grid","isShiftKey","action","focusTreeGridDatePickerEditorCell","row","appendTreeGridClass","className","targetClassName","classNames","resolveDatePickerEditorInitialValue","cellElement","stringEditValue","stringValue","rawValue","textValue","normalizeDatePickerEditorInitialValue","formattedValue","isDatePickerEditorStartKey","key","event","keyboardEvent","isDatePickerEditorEventTarget","target","isTreeGridCanEditEnabled","isTreeGridCanEditDisabled","isDisplayTreeGridRow","isEditableDatePickerCell","columns","cellCanEdit","hasCellCanEdit","canEdit","configureTreeGridDatePickerColumns","useOwpTreeGridDatePickerEditor","treeGridInstanceRef","isTreeGridReady","onValueChange","t","i18n","useOwpTranslation","setEditorState","useState","inputDraftValue","setInputDraftValue","hasInputCommitError","setHasInputCommitError","editorInputRef","useRef","isClosingAfterCommitRef","enabled","columnsKey","useMemo","columnSet","languageId","datePickerLocale","adapterLocale","allowInput","useEffect","closeEditor","useCallback","openDatePickerEditor","rawEditorState","nextFormatMeta","baseEditorState","handleDatePickerEditorCellClick","_x","_y","handleDatePickerEditorButtonClick","handleDatePickerEditorKeyDown","handleDatePickerEditorStartEdit","selectedDateValue","parsedInputDraftValue","selectedTimeValue","draftDateValue","dateValue","anchorEl","popperContainer","handleDateSelect","nextValue","handleTimeSelect","selectedView","shouldClose","prevState","commitInputValue","commitInputDraftValue","closeEditorWithInputCommit","handleInputChange","commitEditorByKey","isTabKey","handleEditorCommitKeyDown","handleInputKeyDown","handleInputClear","handleEditorMouseEvent","handleEditorKeyboardEvent","inputValue","editorFocusGrid","editorFocusRow","editorFocusCol","hasInputError","hasSeconds","timePickerEditorWidth","TIME_PICKER_EDITOR_SECTION_WIDTH","timePickerViews","timeFormat","handleKeyDown","animationFrameId","jsx","Popper","ClickAwayListener","jsxs","Paper","OwpTextMaskField","PICKER_INVALID_INPUT_MESSAGE_KEY","getPickerInputMask","InputAdornment","IconButton","ClearIcon","LocalizationProvider","AdapterDayjs","MultiSectionDigitalClock","_selectionState","TIME_PICKER_SELECTED_ITEM_SX","TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH","ReactDatePicker"],"mappings":"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"}
|