d2coreui 21.0.15 → 21.0.17
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/components/clipboard/clipboardUtils.js.map +1 -1
- package/components/codemirror/SyntaxHighlighter.js.map +1 -1
- package/components/collapse/expandable.js.map +1 -1
- package/components/color/colorPicker.d.ts +1 -0
- package/components/color/colorPicker.js +1 -1
- package/components/color/colorPicker.js.map +1 -1
- package/components/color/colorSwatch.js.map +1 -1
- package/components/color/colorUtils.js.map +1 -1
- package/components/date/dateRangeInput.js +2 -2
- package/components/date/dateRangeInput.js.map +1 -1
- package/components/date/dateRangeInputAdvancedPanel.js.map +1 -1
- package/components/date/dateRangeInputConfirm.js.map +1 -1
- package/components/date/dateTimeInput.d.ts +2 -0
- package/components/date/dateTimeInput.js +10 -4
- package/components/date/dateTimeInput.js.map +1 -1
- package/components/date/durationInput.d.ts +7 -7
- package/components/date/durationInput.js +128 -75
- package/components/date/durationInput.js.map +1 -1
- package/components/form/NiceFormItem.d.ts +13 -0
- package/components/form/NiceFormItem.js +29 -0
- package/components/form/NiceFormItem.js.map +1 -0
- package/components/grid/cell/cellEditorUtils.js.map +1 -1
- package/components/grid/cell/customEnumCellEditor.js.map +1 -1
- package/components/grid/cell/dateCellEditor.js +1 -1
- package/components/grid/cell/dateCellEditor.js.map +1 -1
- package/components/grid/cell/durationCellEditor.js.map +1 -1
- package/components/grid/cell/hexaOctetStringCellEditor.js.map +1 -1
- package/components/grid/cell/hexaValueCellEditor.js.map +1 -1
- package/components/grid/cell/numberCellEditor.js.map +1 -1
- package/components/grid/cell/rangeSelector.js.map +1 -1
- package/components/grid/cell/simpleStatusTextCellEditor.js.map +1 -1
- package/components/grid/cell/statusTextCellEditor.js.map +1 -1
- package/components/grid/cell/tableDefaultRowStyleRules.js.map +1 -1
- package/components/grid/cell/textCellEditor.js +5 -1
- package/components/grid/cell/textCellEditor.js.map +1 -1
- package/components/grid/cell/wildcardQuickFilter.js.map +1 -1
- package/components/grid/columnUtils.js.map +1 -1
- package/components/grid/config/columnTransfer.js.map +1 -1
- package/components/grid/config/dataGridEditor.js.map +1 -1
- package/components/grid/config/rowStylePicker.js.map +1 -1
- package/components/grid/dataGrid.d.ts +3 -2
- package/components/grid/dataGrid.js +51 -54
- package/components/grid/dataGrid.js.map +1 -1
- package/components/grid/export/contextMenu.d.ts +2 -1
- package/components/grid/export/contextMenu.js +3 -3
- package/components/grid/export/contextMenu.js.map +1 -1
- package/components/grid/export/progressPopup.js.map +1 -1
- package/components/grid/export/worker/clipboardExport.js.map +1 -1
- package/components/grid/export/worker/csvExport.js.map +1 -1
- package/components/grid/export/worker/pdfExport.js.map +1 -1
- package/components/grid/export/worker/txtExport.js.map +1 -1
- package/components/grid/extendedDataGrid.d.ts +1 -0
- package/components/grid/extendedDataGrid.js +6 -2
- package/components/grid/extendedDataGrid.js.map +1 -1
- package/components/grid/filter/customColumnFilter.js.map +1 -1
- package/components/grid/filter/dateColumnFilter.js.map +1 -1
- package/components/grid/filter/textColumnFilter.js.map +1 -1
- package/components/grid/header/simpleHeader.js.map +1 -1
- package/components/grid/panel/dataGridPagination.d.ts +16 -0
- package/components/grid/panel/dataGridPagination.js +59 -0
- package/components/grid/panel/dataGridPagination.js.map +1 -0
- package/components/grid/panel/loadingOverlay.js.map +1 -1
- package/components/grid/panel/noRecordsOverlay.js.map +1 -1
- package/components/grid/panel/tablePagination.js.map +1 -1
- package/components/icons/ant-design-double-right-outline.svg +5 -5
- package/components/icons/ant-design_close-outline.svg +5 -5
- package/components/icons/undoIcon.js.map +1 -1
- package/components/input/autoCompleteInput.js.map +1 -1
- package/components/input/draftUtils.js.map +1 -1
- package/components/input/draftail.js.map +1 -1
- package/components/input/hexaFormattedInput.js.map +1 -1
- package/components/input/mask/helpers.js.map +1 -1
- package/components/input/mask/inputMaskCore.js.map +1 -1
- package/components/input/mask/pattern.js.map +1 -1
- package/components/input/maskedInput.d.ts +2 -2
- package/components/input/maskedInput.js.map +1 -1
- package/components/input/passwordInput.js.map +1 -1
- package/components/input/simpleAutoComplete.js.map +1 -1
- package/components/input/textarea/extractSpansOfClasses.js.map +1 -1
- package/components/input/textarea/getRanges.js.map +1 -1
- package/components/input/textarea/getType.js.map +1 -1
- package/components/input/textarea/highlighedContents.js.map +1 -1
- package/components/input/textarea/mentionsWithHighlighting.js +1 -1
- package/components/input/textarea/mentionsWithHighlighting.js.map +1 -1
- package/components/keyboard/keyboardUtils.js.map +1 -1
- package/components/modal/draggableModalProvider.js.map +1 -1
- package/components/modal/impl/clamp.js.map +1 -1
- package/components/modal/impl/draggableModal.js.map +1 -1
- package/components/modal/impl/draggableModalContext.js.map +1 -1
- package/components/modal/impl/draggableModalInner.js.map +1 -1
- package/components/modal/impl/draggableModalReducer.js.map +1 -1
- package/components/modal/impl/getWindowSize.js.map +1 -1
- package/components/modal/impl/index.js.map +1 -1
- package/components/modal/impl/resizeHandle.js.map +1 -1
- package/components/modal/impl/useDrag.js.map +1 -1
- package/components/modal/impl/usePrevious.js.map +1 -1
- package/components/modal/impl/useResize.js.map +1 -1
- package/components/modal/modalDialog.js.map +1 -1
- package/components/picker/enumValuePicker.js.map +1 -1
- package/components/platformSpecific.js.map +1 -1
- package/components/scrollTo/onlyText.js.map +1 -1
- package/components/scrollTo/scrollTo.js.map +1 -1
- package/components/table/dataTable.d.ts +1 -0
- package/components/table/dataTable.js.map +1 -1
- package/components/table/dragSortingTable.js.map +1 -1
- package/components/text/impl/innerSize.js.map +1 -1
- package/components/text/impl/series.js.map +1 -1
- package/components/text/impl/shallowEqual.js.map +1 -1
- package/components/text/impl/uniqueId.js.map +1 -1
- package/components/text/impl/whilst.js.map +1 -1
- package/components/text/textFit.js.map +1 -1
- package/i18n/components.cs.json +100 -0
- package/i18n/components.sk.json +5 -1
- package/i18n/componentsLocaleHolder.d.ts +1 -1
- package/i18n/componentsLocaleHolder.js +6 -4
- package/i18n/componentsLocaleHolder.js.map +1 -1
- package/package.json +70 -70
- package/style/ag-grid/_ag-theme-antd-vars.scss +194 -194
- package/style/ag-grid/ag-theme-antd.scss +87 -87
- package/style/ag-grid/aggrid-adaptations.css +42 -42
- package/style/ag-grid/aggrid.scss +11 -11
- package/style/antd/antd-tree-showline.css +24 -24
- package/style/antd/full-height-tabs.scss +62 -62
- package/style/draftail/draftail-editor.css +179 -179
- package/style/flexLayout/flexLayout.scss +130 -130
- package/style/flexLayout/flexLayoutBase.scss +623 -623
- package/style/flexLayout/new/flexLayoutBase.scss +621 -621
- package/style/form/niceFormItem.css +39 -0
- package/style/index.less +291 -291
- package/style/loading.css +31 -31
- package/style/modal/DraggableModal.css +40 -40
- package/style/modal/ResizeHandle.css +19 -19
- package/style/splitPane/splitPane.css +48 -48
- package/style/table/dragSortingTable.css +6 -6
- package/components/date/millisecondDatePicker.d.ts +0 -16
- package/components/date/millisecondDatePicker.js +0 -56
- package/components/date/millisecondDatePicker.js.map +0 -1
|
@@ -23,6 +23,75 @@ const DURATION_DATA_MAP = [
|
|
|
23
23
|
{ key: "D", min: 0, max: 24854, len: 5, mult: 24 * 60 * 60 * 1000, unit: "d" },
|
|
24
24
|
];
|
|
25
25
|
export const MAX_VALID_DURATION = 24854 * 24 * 60 * 60 * 1000 + 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 59 * 1000 + 499;
|
|
26
|
+
export function parseDuration(value, mask, cursorPos, maskResult) {
|
|
27
|
+
const result = moment.duration(0);
|
|
28
|
+
const clearMaskResult = () => {
|
|
29
|
+
if (maskResult) {
|
|
30
|
+
maskResult.info = undefined;
|
|
31
|
+
maskResult.length = 0;
|
|
32
|
+
maskResult.infoFromMask = undefined;
|
|
33
|
+
maskResult.time = undefined;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
let maskPos = 0;
|
|
37
|
+
let valPos;
|
|
38
|
+
for (valPos = 0; valPos < value.length; valPos++) {
|
|
39
|
+
const c = value.charAt(valPos);
|
|
40
|
+
if (['D', 'H', 'm', 's', 'S'].includes(mask.charAt(maskPos))) {
|
|
41
|
+
if (/\d/.test(c)) {
|
|
42
|
+
const entry = getInfoFromMask(mask, maskPos);
|
|
43
|
+
if (entry) {
|
|
44
|
+
let str = c;
|
|
45
|
+
while (/\d/.test(value.charAt(valPos + 1))) {
|
|
46
|
+
valPos++;
|
|
47
|
+
str += value.charAt(valPos);
|
|
48
|
+
}
|
|
49
|
+
const time = parseInt(str);
|
|
50
|
+
result.add(moment.duration(time, entry.infoEntry.unit));
|
|
51
|
+
if (maskResult) {
|
|
52
|
+
const item = {
|
|
53
|
+
value: time,
|
|
54
|
+
length: str.length,
|
|
55
|
+
infoEntry: entry.infoEntry,
|
|
56
|
+
};
|
|
57
|
+
if (maskResult.infoFromMask) {
|
|
58
|
+
maskResult.infoFromMask.push(item);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
maskResult.infoFromMask = [item];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
maskPos += entry.length;
|
|
65
|
+
if (cursorPos !== undefined && maskResult !== undefined && cursorPos >= valPos - str.length + 1 && cursorPos <= valPos + 1) {
|
|
66
|
+
maskResult.info = entry.infoEntry;
|
|
67
|
+
maskResult.length = str.length;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
clearMaskResult();
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
clearMaskResult();
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
if (c === mask.charAt(maskPos)) {
|
|
82
|
+
maskPos++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (maskPos === mask.length && valPos === value.length && result.asMilliseconds() <= MAX_VALID_DURATION) {
|
|
87
|
+
if (maskResult !== undefined) {
|
|
88
|
+
maskResult.time = result;
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
clearMaskResult();
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
26
95
|
export default class DurationInput extends React.Component {
|
|
27
96
|
constructor(props) {
|
|
28
97
|
var _a;
|
|
@@ -30,7 +99,8 @@ export default class DurationInput extends React.Component {
|
|
|
30
99
|
this.inputRef = React.createRef();
|
|
31
100
|
this.state = {
|
|
32
101
|
valid: !!((_a = props.value) === null || _a === void 0 ? void 0 : _a.isValid()),
|
|
33
|
-
|
|
102
|
+
selectionStart: null,
|
|
103
|
+
selectionEnd: null,
|
|
34
104
|
currentInfo: {
|
|
35
105
|
info: undefined,
|
|
36
106
|
infoFromMask: undefined,
|
|
@@ -38,7 +108,7 @@ export default class DurationInput extends React.Component {
|
|
|
38
108
|
length: 0
|
|
39
109
|
},
|
|
40
110
|
opened: false,
|
|
41
|
-
value:
|
|
111
|
+
value: formatDuration(props.value, props.mask),
|
|
42
112
|
hover: false,
|
|
43
113
|
};
|
|
44
114
|
this.recalc = this.recalc.bind(this);
|
|
@@ -48,10 +118,10 @@ export default class DurationInput extends React.Component {
|
|
|
48
118
|
componentDidUpdate() {
|
|
49
119
|
var _a, _b;
|
|
50
120
|
if (this.inputRef.current !== null) {
|
|
51
|
-
this.inputRef.current.input.selectionStart = this.state.
|
|
52
|
-
this.inputRef.current.input.selectionEnd = this.state.
|
|
121
|
+
this.inputRef.current.input.selectionStart = this.state.selectionStart;
|
|
122
|
+
this.inputRef.current.input.selectionEnd = this.state.selectionEnd;
|
|
53
123
|
}
|
|
54
|
-
const value =
|
|
124
|
+
const value = formatDuration(this.props.value, this.props.mask);
|
|
55
125
|
if (this.state.value !== value) {
|
|
56
126
|
this.setState({
|
|
57
127
|
value: value,
|
|
@@ -60,24 +130,30 @@ export default class DurationInput extends React.Component {
|
|
|
60
130
|
}
|
|
61
131
|
}
|
|
62
132
|
recalc() {
|
|
133
|
+
var _a;
|
|
63
134
|
if (this.inputRef.current !== null) {
|
|
135
|
+
const value = { length: 0 };
|
|
136
|
+
parseDuration(this.inputRef.current.input.value, this.props.mask, (_a = this.inputRef.current.input.selectionStart) !== null && _a !== void 0 ? _a : undefined, value);
|
|
64
137
|
this.setState({
|
|
65
|
-
currentInfo:
|
|
66
|
-
|
|
138
|
+
currentInfo: value,
|
|
139
|
+
selectionStart: this.inputRef.current.input.selectionStart,
|
|
140
|
+
selectionEnd: this.inputRef.current.input.selectionEnd,
|
|
67
141
|
});
|
|
68
142
|
}
|
|
69
143
|
}
|
|
70
144
|
increment() {
|
|
71
145
|
var _a, _b, _c, _d, _e;
|
|
72
|
-
if (this.state.currentInfo.info !== undefined &&
|
|
146
|
+
if (this.state.currentInfo.info !== undefined && checkValue(this.state.currentInfo, this.props.value, 1)) {
|
|
73
147
|
(_b = (_a = this.props).onChange) === null || _b === void 0 ? void 0 : _b.call(_a, (_d = (_c = this.props.value) === null || _c === void 0 ? void 0 : _c.add(1, this.state.currentInfo.info.unit)) !== null && _d !== void 0 ? _d : null);
|
|
148
|
+
this.setState({ selectionEnd: this.state.selectionStart });
|
|
74
149
|
}
|
|
75
150
|
(_e = this.inputRef.current) === null || _e === void 0 ? void 0 : _e.focus();
|
|
76
151
|
}
|
|
77
152
|
decrement() {
|
|
78
153
|
var _a, _b, _c, _d, _e;
|
|
79
|
-
if (this.state.currentInfo.info !== undefined &&
|
|
154
|
+
if (this.state.currentInfo.info !== undefined && checkValue(this.state.currentInfo, this.props.value, -1)) {
|
|
80
155
|
(_b = (_a = this.props).onChange) === null || _b === void 0 ? void 0 : _b.call(_a, (_d = (_c = this.props.value) === null || _c === void 0 ? void 0 : _c.subtract(1, this.state.currentInfo.info.unit)) !== null && _d !== void 0 ? _d : null);
|
|
156
|
+
this.setState({ selectionEnd: this.state.selectionStart });
|
|
81
157
|
}
|
|
82
158
|
(_e = this.inputRef.current) === null || _e === void 0 ? void 0 : _e.focus();
|
|
83
159
|
}
|
|
@@ -90,9 +166,9 @@ export default class DurationInput extends React.Component {
|
|
|
90
166
|
(_a = this.inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
91
167
|
}
|
|
92
168
|
render() {
|
|
93
|
-
const _a = this.props, { mask, value, onChange, style, disabled, predefinedValues } = _a, props = __rest(_a, ["mask", "value", "onChange", "style", "disabled", "predefinedValues"]);
|
|
94
|
-
const incrementButtonDisabled = this.state.currentInfo.info === undefined || !
|
|
95
|
-
const decrementButtonDisabled = this.state.currentInfo.info === undefined || !
|
|
169
|
+
const _a = this.props, { mask, value, onChange, style, disabled, predefinedValues, autoFocus } = _a, props = __rest(_a, ["mask", "value", "onChange", "style", "disabled", "predefinedValues", "autoFocus"]);
|
|
170
|
+
const incrementButtonDisabled = this.state.currentInfo.info === undefined || !checkValue(this.state.currentInfo, this.props.value, 1);
|
|
171
|
+
const decrementButtonDisabled = this.state.currentInfo.info === undefined || !checkValue(this.state.currentInfo, this.props.value, -1);
|
|
96
172
|
return (React.createElement("div", Object.assign({ style: Object.assign({}, style, {
|
|
97
173
|
display: "flex",
|
|
98
174
|
flexDirection: "row",
|
|
@@ -116,19 +192,19 @@ export default class DurationInput extends React.Component {
|
|
|
116
192
|
} }),
|
|
117
193
|
React.createElement(AutoComplete, { className: (this.state.opened ? "autocomplete-open" : "") + " " + (this.state.valid ? "" : "invalid"), options: this.state.opened ? predefinedValues === null || predefinedValues === void 0 ? void 0 : predefinedValues.map(v => {
|
|
118
194
|
return { value: v.value, label: v.key };
|
|
119
|
-
}) : [], defaultOpen: false, defaultActiveFirstOption: false, defaultValue: undefined, disabled: disabled, style: { width: "100%" }, value: this.state.value, onSelect: (e) => {
|
|
195
|
+
}) : [], defaultOpen: false, defaultActiveFirstOption: false, defaultValue: undefined, disabled: disabled, autoFocus: autoFocus, style: { width: "100%" }, value: this.state.valid ? this.state.value : "", onSelect: (e) => {
|
|
120
196
|
const val = moment.duration(Number(e));
|
|
121
197
|
this.setState({
|
|
122
198
|
opened: false,
|
|
123
199
|
valid: val !== undefined && val.isValid(),
|
|
124
|
-
value:
|
|
200
|
+
value: formatDuration(val, this.props.mask),
|
|
125
201
|
});
|
|
126
202
|
onChange === null || onChange === void 0 ? void 0 : onChange(val === undefined ? null : val);
|
|
127
203
|
}, onBlur: () => {
|
|
128
204
|
this.setState({ opened: false });
|
|
129
205
|
} },
|
|
130
|
-
React.createElement(MaskedInput, { mask: this.props.mask.replace(/[a-zA-Z]/g, '1'), ref: this.inputRef, style: this.props.inputStyle, onFocus: (event => {
|
|
131
|
-
event.target.selectionStart = event.target.selectionEnd = this.state.
|
|
206
|
+
React.createElement(MaskedInput, { mask: this.props.mask.replace(/[a-zA-Z]/g, '1'), ref: this.inputRef, style: this.props.inputStyle, placeholder: this.props.mask.replace(/[a-zA-Z]/g, '_'), autoFocus: autoFocus, onFocus: (event => {
|
|
207
|
+
event.target.selectionStart = event.target.selectionEnd = this.state.selectionStart;
|
|
132
208
|
}), suffix: this.props.predefinedValues !== undefined && this.props.predefinedValues.length > 0 &&
|
|
133
209
|
React.createElement("span", { className: "dropdown-arrow" },
|
|
134
210
|
React.createElement(DownOutlined, { className: "dropdown-arrow-icon ant-input-clear-icon", role: "button", tabIndex: -1, onClick: () => {
|
|
@@ -136,7 +212,9 @@ export default class DurationInput extends React.Component {
|
|
|
136
212
|
this.setState({ opened: !this.state.opened });
|
|
137
213
|
}
|
|
138
214
|
} })), onMouseUp: this.recalc, onKeyUp: this.recalc, onChange: (event) => {
|
|
139
|
-
|
|
215
|
+
var _a;
|
|
216
|
+
const value = { length: 0 };
|
|
217
|
+
parseDuration(event.target.value, this.props.mask, (_a = event.target.selectionStart) !== null && _a !== void 0 ? _a : undefined, value);
|
|
140
218
|
onChange === null || onChange === void 0 ? void 0 : onChange(value.time === undefined ? null : value.time);
|
|
141
219
|
this.setState({
|
|
142
220
|
valid: value.time !== undefined && value.time.isValid(),
|
|
@@ -159,70 +237,45 @@ export default class DurationInput extends React.Component {
|
|
|
159
237
|
React.createElement("svg", { viewBox: "64 64 896 896", focusable: "false", "data-icon": "down", width: "1em", height: "1em", fill: "currentColor", "aria-hidden": "true" },
|
|
160
238
|
React.createElement("path", { d: "M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" }))))))));
|
|
161
239
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
value: val,
|
|
194
|
-
length: length,
|
|
195
|
-
infoEntry: v
|
|
196
|
-
});
|
|
240
|
+
}
|
|
241
|
+
function checkValue(info, value, offset = 0) {
|
|
242
|
+
var _a;
|
|
243
|
+
const currentMillis = value ? value.clone().add(offset, (_a = info.info) === null || _a === void 0 ? void 0 : _a.unit).asMilliseconds() : 0;
|
|
244
|
+
const maxValues = (info === null || info === void 0 ? void 0 : info.infoFromMask) ? info.infoFromMask.map((i) => (i.length !== i.infoEntry.len ? (Math.pow(10, i.length) - 1) : i.infoEntry.max) * i.infoEntry.mult) : [];
|
|
245
|
+
const maxMaskedValue = (info === null || info === void 0 ? void 0 : info.infoFromMask) ? maxValues.reduce((p, n) => p + n, 0) : 0;
|
|
246
|
+
return !!value && currentMillis >= 0 && currentMillis <= MAX_VALID_DURATION && currentMillis <= maxMaskedValue;
|
|
247
|
+
}
|
|
248
|
+
function formatDuration(value, mask) {
|
|
249
|
+
return (value !== null && value !== void 0 ? value : moment.duration(0)).locale("locale.d2000").format(mask, {
|
|
250
|
+
trim: false,
|
|
251
|
+
decimalSeparator: LocaleHolder.decimalSeparator,
|
|
252
|
+
useGrouping: false,
|
|
253
|
+
groupingSeparator: "",
|
|
254
|
+
userLocale: LocaleHolder.formattingLocale
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
function getInfoFromMask(mask, fromPos) {
|
|
258
|
+
if (fromPos < mask.length) {
|
|
259
|
+
const ch = mask.charAt(fromPos);
|
|
260
|
+
const info = DURATION_DATA_MAP.find((d) => d.key.includes(ch));
|
|
261
|
+
if (info) {
|
|
262
|
+
const entry = {
|
|
263
|
+
length: 1,
|
|
264
|
+
value: 0,
|
|
265
|
+
infoEntry: info,
|
|
266
|
+
};
|
|
267
|
+
for (let i = fromPos + 1; i < mask.length; i++) {
|
|
268
|
+
const c = mask.charAt(i);
|
|
269
|
+
if (c === ch) {
|
|
270
|
+
entry.length++;
|
|
197
271
|
}
|
|
198
272
|
else {
|
|
199
|
-
result.time = undefined;
|
|
200
|
-
result.info = undefined;
|
|
201
|
-
result.infoFromMask = undefined;
|
|
202
|
-
result.length = 0;
|
|
203
273
|
break;
|
|
204
274
|
}
|
|
205
|
-
if (cursorPos !== null && cursorPos >= index && cursorPos <= index + length) {
|
|
206
|
-
result.info = v;
|
|
207
|
-
result.length = length;
|
|
208
|
-
}
|
|
209
275
|
}
|
|
276
|
+
return entry;
|
|
210
277
|
}
|
|
211
|
-
if (result.time !== undefined && result.infoFromMask !== undefined && result.time.isValid()) {
|
|
212
|
-
if (result.time.asMilliseconds() > MAX_VALID_DURATION) {
|
|
213
|
-
result.time = moment.duration(MAX_VALID_DURATION);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return result;
|
|
217
|
-
}
|
|
218
|
-
static parseTime(value, mask) {
|
|
219
|
-
return (value !== null && value !== void 0 ? value : moment.duration(0)).locale("locale.d2000").format(mask, {
|
|
220
|
-
trim: false,
|
|
221
|
-
decimalSeparator: LocaleHolder.decimalSeparator,
|
|
222
|
-
useGrouping: false,
|
|
223
|
-
groupingSeparator: "",
|
|
224
|
-
userLocale: LocaleHolder.formattingLocale
|
|
225
|
-
});
|
|
226
278
|
}
|
|
279
|
+
return undefined;
|
|
227
280
|
}
|
|
228
281
|
//# sourceMappingURL=durationInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durationInput.js","sourceRoot":"","sources":["../../../../components/date/durationInput.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAO,WAAW,MAAM,uCAAuC,CAAC;AAChE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAC,YAAY,EAAC,MAAM,MAAM,CAAC;AAClC,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AA0C/C,MAAM,iBAAiB,GAAgB;IACnC,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAC;IAC3D,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC;IAC1D,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC;IAC/D,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC;IACpE,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC;CAC/E,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,KAAK,CAAC,SAAiD;IAG9F,YAAY,KAAmC;;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC;QAHT,aAAQ,GAA2B,KAAK,CAAC,SAAS,EAAE,CAAC;QAIzD,IAAI,CAAC,KAAK,GAAG;YACT,KAAK,EAAE,CAAC,CAAC,CAAC,MAAA,KAAK,CAAC,KAAK,0CAAE,OAAO,EAAE,CAAC;YACjC,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE;gBACT,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,CAAC;aACZ;YACD,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;YACvD,KAAK,EAAE,KAAK;SACf,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB;;QACd,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACnE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;SACpE;QAED,MAAM,KAAK,GAAW,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjF,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC;gBACV,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,OAAO,EAAE,mCAAI,KAAK;aAC9C,CAAC,CAAC;SACN;IACL,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC;gBACV,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;gBAC9I,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc;aACzD,CAAC,CAAC;SACN;IACL,CAAC;IAED,SAAS;;QACL,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YACpH,MAAA,MAAA,IAAI,CAAC,KAAK,EAAC,QAAQ,mDAAG,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAI,IAAI,CAAC,CAAC;SAC7F;QAED,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,SAAS;;QACL,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YACrH,MAAA,MAAA,IAAI,CAAC,KAAK,EAAC,QAAQ,mDAAG,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAI,IAAI,CAAC,CAAC;SAClG;QAED,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,KAAK;;QACL,OAAO,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,0CAAE,KAAK,CAAC;IACxC,CAAC;IAED,KAAK;;QACD,MAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM;QACF,MAAM,KAAuE,IAAI,CAAC,KAAK,EAAjF,EAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,OAAwB,EAAnB,KAAK,cAAnE,sEAAoE,CAAa,CAAC;QACxF,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpJ,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAErJ,OAAO,CACH,2CAAK,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE;gBACjC,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,QAAQ;gBACpB,QAAQ,EAAE,UAAU;aACvB,CAAC,IAAM,KAAK,IACR,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;oBACtB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;iBAC3B;qBAAM,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;oBAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;iBAC3B;YACL,CAAC,EACD,YAAY,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;YACjC,CAAC,EACD,YAAY,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;YAClC,CAAC;YAEF,oBAAC,YAAY,IACT,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EACrG,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,GAAG,CAAC,CAAC,CAAC,EAAE;oBACnD,OAAO,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAC,CAAA;gBACzC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EACP,WAAW,EAAE,KAAK,EAClB,wBAAwB,EAAE,KAAK,EAC/B,YAAY,EAAE,SAAS,EACvB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,EACtB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACZ,MAAM,GAAG,GAAoB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,CAAC,QAAQ,CAAC;wBACV,MAAM,EAAE,KAAK;wBACb,KAAK,EAAE,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE;wBACzC,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;qBACvD,CAAC,CAAC;oBACH,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/C,CAAC,EACD,MAAM,EAAE,GAAG,EAAE;oBACT,IAAI,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;gBACnC,CAAC;gBACD,oBAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,EAC/C,GAAG,EAAE,IAAI,CAAC,QAAQ,EAClB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAC5B,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE;wBACd,KAAK,CAAC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;oBACpF,CAAC,CAAC,EACF,MAAM,EACF,IAAI,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;wBACnF,8BAAM,SAAS,EAAC,gBAAgB;4BACxB,oBAAC,YAAY,IAAC,SAAS,EAAC,0CAA0C,EACpD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC,EACZ,OAAO,EAAE,GAAG,EAAE;oCACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;wCACtB,IAAI,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC;qCAC/C;gCACL,CAAC,GAAG,CAChB,EAEd,SAAS,EAAE,IAAI,CAAC,MAAM,EACtB,OAAO,EAAE,IAAI,CAAC,MAAM,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAChB,MAAM,KAAK,GAAe,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;wBAC9H,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACzD,IAAI,CAAC,QAAQ,CAAC;4BACV,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;4BACvD,WAAW,EAAE,KAAK;4BAClB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;yBAC5B,CAAC,CAAC;oBACP,CAAC,GACZ,CACS;YACf,6BAAK,KAAK,EAAE,EAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAC;gBACpD,6BAAK,SAAS,EAAC,+BAA+B,EAAC,GAAG,EAAE,GAAG,CAAC,EAAE;wBACtD,IAAI,GAAG,EAAE;4BACL,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;yBAC/E;oBACL,CAAC;oBACG,8BACI,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,gBAAY,gBAAgB,EACpF,SAAS,EAAE,wDAAwD,uBAAuB,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,EAAE,EAAE;wBAE1I,8BAAM,IAAI,EAAC,KAAK,gBAAY,IAAI,EAAC,SAAS,EAAC,sDAAsD;4BAC7F,6BAAK,OAAO,EAAC,eAAe,EAAC,SAAS,EAAC,OAAO,eAAW,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAC,cAAc,iBAAa,MAAM;gCACzH,8BAAM,CAAC,EAAC,mLAAmL,GAAQ,CACjM,CACH,CACJ;oBAEP,8BACI,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,gBAAY,gBAAgB,EACpF,SAAS,EAAE,0DAA0D,uBAAuB,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE,EAAE;wBAE9I,8BAAM,IAAI,EAAC,KAAK,gBAAY,MAAM,EAAC,SAAS,EAAC,0DAA0D;4BACnG,6BAAK,OAAO,EAAC,eAAe,EAAC,SAAS,EAAC,OAAO,eAAW,MAAM,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAC,cAAc,iBAAa,MAAM;gCAC3H,8BAAM,CAAC,EAAC,2LAA2L,GAAQ,CACzM,CACH,CACJ,CACL,CACJ,CACJ,CACT,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,UAAU,CAAC,IAAgB,EAAE,KAA6B,EAAE,MAAM,GAAG,CAAC;;QACjF,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,SAAS,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,EAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7K,MAAM,cAAc,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,CAAC,KAAK,IAAI,aAAa,IAAI,CAAC,IAAI,aAAa,IAAI,kBAAkB,IAAI,aAAa,IAAI,cAAc,CAAC;IACnH,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,KAAa,EAAE,IAAY,EAAE,SAAwB;;QACpF,IAAI,MAAM,GAAe;YACrB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxB,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;SACZ,CAAC;QAEF,KAAK,IAAI,CAAC,IAAI,iBAAiB,EAAE;YAC7B,IAAI,KAAK,GAAW,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAExC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,MAAM,GAAW,CAAC,CAAC;gBAEvB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAE,CAAC,EAAE,EAAE;oBACrB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;wBACvC,MAAM,EAAE,CAAC;qBACZ;yBAAM;wBACH,MAAM;qBACT;iBACJ;gBAED,MAAM,GAAG,GAAW,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;gBAEnE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC3F,MAAA,MAAM,CAAC,IAAI,0CAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAA,MAAM,CAAC,YAAY,0CAAE,IAAI,CAAC;wBACtB,KAAK,EAAE,GAAG;wBACV,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,CAAC;qBACf,CAAC,CAAC;iBACN;qBAAM;oBACH,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;oBACxB,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;oBACxB,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;oBAChC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBAClB,MAAM;iBACT;gBAED,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,GAAG,MAAM,EAAE;oBACzE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;oBAChB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;iBAC1B;aACJ;SACJ;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACzF,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,kBAAkB,EAAE;gBACnD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;aACrD;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,KAA6B,EAAE,IAAY;QAChE,OAAO,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;YACrE,IAAI,EAAE,KAAK;YACX,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,WAAW,EAAE,KAAK;YAClB,iBAAiB,EAAE,EAAE;YACrB,UAAU,EAAE,YAAY,CAAC,gBAAgB;SAC5C,CAAC,CAAA;IACN,CAAC;CACJ","sourcesContent":["import React, {HTMLAttributes, RefObject} from \"react\";\r\nimport MaskedInput from \"d2coreui/components/input/maskedInput\";\r\nimport moment from \"moment\";\r\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\r\nimport {AutoComplete} from \"antd\";\r\nimport {DownOutlined} from \"@ant-design/icons\";\r\n\r\ninterface DurationInputProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\r\n mask: string\r\n value: moment.Duration | null\r\n onChange?: (time: moment.Duration | null) => void\r\n predefinedValues?: { key: string, value: string }[]\r\n disabled?: boolean\r\n inputStyle?: React.CSSProperties\r\n}\r\n\r\ninterface DurationInputState {\r\n valid: boolean\r\n currentPos: number | null\r\n currentInfo: MaskResult\r\n opened: boolean\r\n value: string\r\n hover: boolean\r\n}\r\n\r\ninterface MaskResult {\r\n time: moment.Duration | undefined\r\n info: InfoEntry | undefined\r\n infoFromMask: EntryValue[] | undefined\r\n length: number\r\n}\r\n\r\ninterface InfoEntry {\r\n key: string\r\n min: number\r\n max: number\r\n len: number\r\n mult: number\r\n unit: moment.unitOfTime.Base\r\n}\r\n\r\ninterface EntryValue {\r\n length: number\r\n infoEntry: InfoEntry\r\n value: number\r\n}\r\n\r\nconst DURATION_DATA_MAP: InfoEntry[] = [\r\n {key: \"SSS\", min: 0, max: 999, len: 3, mult: 1, unit: \"ms\"},\r\n {key: \"s\", min: 0, max: 59, len: 2, mult: 1000, unit: \"s\"},\r\n {key: \"m\", min: 0, max: 59, len: 2, mult: 60 * 1000, unit: \"m\"},\r\n {key: \"H\", min: 0, max: 23, len: 2, mult: 60 * 60 * 1000, unit: \"h\"},\r\n {key: \"D\", min: 0, max: 24854, len: 5, mult: 24 * 60 * 60 * 1000, unit: \"d\"},\r\n];\r\n\r\nexport const MAX_VALID_DURATION = 24854 * 24 * 60 * 60 * 1000 + 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 59 * 1000 + 499;\r\n\r\nexport default class DurationInput extends React.Component<DurationInputProps, DurationInputState> {\r\n private inputRef: RefObject<MaskedInput> = React.createRef();\r\n\r\n constructor(props: Readonly<DurationInputProps>) {\r\n super(props);\r\n this.state = {\r\n valid: !!(props.value?.isValid()),\r\n currentPos: null,\r\n currentInfo: {\r\n info: undefined,\r\n infoFromMask: undefined,\r\n time: undefined,\r\n length: 0\r\n },\r\n opened: false,\r\n value: DurationInput.parseTime(props.value, props.mask),\r\n hover: false,\r\n };\r\n\r\n this.recalc = this.recalc.bind(this);\r\n this.increment = this.increment.bind(this);\r\n this.decrement = this.decrement.bind(this);\r\n }\r\n\r\n componentDidUpdate(): void {\r\n if (this.inputRef.current !== null) {\r\n this.inputRef.current.input.selectionStart = this.state.currentPos;\r\n this.inputRef.current.input.selectionEnd = this.state.currentPos;\r\n }\r\n\r\n const value: string = DurationInput.parseTime(this.props.value, this.props.mask);\r\n\r\n if (this.state.value !== value) {\r\n this.setState({\r\n value: value,\r\n valid: this.props.value?.isValid() ?? false,\r\n });\r\n }\r\n }\r\n\r\n recalc(): void {\r\n if (this.inputRef.current !== null) {\r\n this.setState({\r\n currentInfo: DurationInput.parseDurationFormat(this.inputRef.current.input.value, this.props.mask, this.inputRef.current.input.selectionStart),\r\n currentPos: this.inputRef.current.input.selectionStart,\r\n });\r\n }\r\n }\r\n\r\n increment(): void {\r\n if (this.state.currentInfo.info !== undefined && DurationInput.checkValue(this.state.currentInfo, this.props.value, 1)) {\r\n this.props.onChange?.(this.props.value?.add(1, this.state.currentInfo.info.unit) ?? null);\r\n }\r\n\r\n this.inputRef.current?.focus();\r\n }\r\n\r\n decrement(): void {\r\n if (this.state.currentInfo.info !== undefined && DurationInput.checkValue(this.state.currentInfo, this.props.value, -1)) {\r\n this.props.onChange?.(this.props.value?.subtract(1, this.state.currentInfo.info.unit) ?? null);\r\n }\r\n\r\n this.inputRef.current?.focus();\r\n }\r\n\r\n get input() {\r\n return this.inputRef.current?.input;\r\n }\r\n\r\n focus() {\r\n this.inputRef.current?.focus();\r\n }\r\n\r\n render() {\r\n const {mask, value, onChange, style, disabled, predefinedValues, ...props} = this.props;\r\n const incrementButtonDisabled = this.state.currentInfo.info === undefined || !DurationInput.checkValue(this.state.currentInfo, this.props.value, 1);\r\n const decrementButtonDisabled = this.state.currentInfo.info === undefined || !DurationInput.checkValue(this.state.currentInfo, this.props.value, -1);\r\n\r\n return (\r\n <div style={Object.assign({}, style, {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n position: \"relative\",\r\n })} {...props}\r\n onKeyDown={(event) => {\r\n if (event.keyCode === 38) { // up\r\n this.increment();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n } else if (event.keyCode === 40) { // down\r\n this.decrement();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }}\r\n onMouseEnter={() => {\r\n this.setState({hover: true});\r\n }}\r\n onMouseLeave={() => {\r\n this.setState({hover: false});\r\n }}\r\n >\r\n <AutoComplete\r\n className={(this.state.opened ? \"autocomplete-open\" : \"\") + \" \" + (this.state.valid ? \"\" : \"invalid\")}\r\n options={this.state.opened ? predefinedValues?.map(v => {\r\n return {value: v.value, label: v.key}\r\n }) : []}\r\n defaultOpen={false}\r\n defaultActiveFirstOption={false}\r\n defaultValue={undefined}\r\n disabled={disabled}\r\n style={{width: \"100%\"}}\r\n value={this.state.value}\r\n onSelect={(e) => {\r\n const val: moment.Duration = moment.duration(Number(e));\r\n this.setState({\r\n opened: false,\r\n valid: val !== undefined && val.isValid(),\r\n value: DurationInput.parseTime(val, this.props.mask),\r\n });\r\n onChange?.(val === undefined ? null : val);\r\n }}\r\n onBlur={() => {\r\n this.setState({opened: false});\r\n }}>\r\n <MaskedInput mask={this.props.mask.replace(/[a-zA-Z]/g, '1')}\r\n ref={this.inputRef}\r\n style={this.props.inputStyle}\r\n onFocus={(event => {\r\n event.target.selectionStart = event.target.selectionEnd = this.state.currentPos;\r\n })}\r\n suffix={\r\n this.props.predefinedValues !== undefined && this.props.predefinedValues.length > 0 &&\r\n <span className=\"dropdown-arrow\">\r\n <DownOutlined className=\"dropdown-arrow-icon ant-input-clear-icon\"\r\n role=\"button\"\r\n tabIndex={-1}\r\n onClick={() => {\r\n if (!this.props.disabled) {\r\n this.setState({opened: !this.state.opened});\r\n }\r\n }}/>\r\n </span>\r\n }\r\n onMouseUp={this.recalc}\r\n onKeyUp={this.recalc}\r\n onChange={(event) => {\r\n const value: MaskResult = DurationInput.parseDurationFormat(event.target.value, this.props.mask, event.target.selectionStart);\r\n onChange?.(value.time === undefined ? null : value.time);\r\n this.setState({\r\n valid: value.time !== undefined && value.time.isValid(),\r\n currentInfo: value,\r\n value: event.target.value,\r\n });\r\n }}\r\n />\r\n </AutoComplete>\r\n <div style={{position: \"absolute\", right: 2, height: 30}}>\r\n <div className=\"ant-input-number-handler-wrap\" ref={ref => {\r\n if (ref) {\r\n ref.style.setProperty(\"opacity\", this.state.hover ? \"1\" : \"0\", \"important\");\r\n }\r\n }}>\r\n <span\r\n onClick={this.increment} unselectable=\"on\" role=\"button\" aria-label=\"Increase Value\"\r\n className={`ant-input-number-handler ant-input-number-handler-up ${incrementButtonDisabled ? \"ant-input-number-handler-up-disabled\" : \"\"}`}\r\n >\r\n <span role=\"img\" aria-label=\"up\" className=\"anticon anticon-up ant-input-number-handler-up-inner\">\r\n <svg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"up\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path d=\"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z\"></path>\r\n </svg>\r\n </span>\r\n </span>\r\n\r\n <span\r\n onClick={this.decrement} unselectable=\"on\" role=\"button\" aria-label=\"Decrease Value\"\r\n className={`ant-input-number-handler ant-input-number-handler-down ${decrementButtonDisabled ? \"ant-input-number-handler-down-disabled\" : \"\"}`}\r\n >\r\n <span role=\"img\" aria-label=\"down\" className=\"anticon anticon-down ant-input-number-handler-down-inner\">\r\n <svg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"down\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"></path>\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private static checkValue(info: MaskResult, value: moment.Duration | null, offset = 0): boolean {\r\n const currentMillis = value ? value.clone().add(offset, info.info?.unit).asMilliseconds() : 0;\r\n const maxValues = info?.infoFromMask ? info.infoFromMask.map((i) => (i.length !== i.infoEntry.len ? (Math.pow(10, i.length) - 1) : i.infoEntry.max) * i.infoEntry.mult) : [];\r\n const maxMaskedValue = info?.infoFromMask ? maxValues.reduce((p, n) => p + n, 0) : 0;\r\n return !!value && currentMillis >= 0 && currentMillis <= MAX_VALID_DURATION && currentMillis <= maxMaskedValue;\r\n }\r\n\r\n private static parseDurationFormat(value: string, mask: string, cursorPos: number | null): MaskResult {\r\n let result: MaskResult = {\r\n time: moment.duration(0),\r\n info: undefined,\r\n infoFromMask: [],\r\n length: 0,\r\n };\r\n\r\n for (let v of DURATION_DATA_MAP) {\r\n let index: number = mask.indexOf(v.key);\r\n\r\n if (index !== -1) {\r\n let length: number = 0;\r\n\r\n for (let i = index;;i++) {\r\n if (mask.charAt(i) === mask.charAt(index)) {\r\n length++;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n const val: number = Number(value.substring(index, index + length));\r\n\r\n if (!isNaN(val) && ((length === v.len && val >= v.min && val <= v.max) || (length !== v.len))) {\r\n result.time?.add(val, v.unit);\r\n result.infoFromMask?.push({\r\n value: val,\r\n length: length,\r\n infoEntry: v\r\n });\r\n } else {\r\n result.time = undefined;\r\n result.info = undefined;\r\n result.infoFromMask = undefined;\r\n result.length = 0;\r\n break;\r\n }\r\n\r\n if (cursorPos !== null && cursorPos >= index && cursorPos <= index + length) {\r\n result.info = v;\r\n result.length = length;\r\n }\r\n }\r\n }\r\n\r\n if (result.time !== undefined && result.infoFromMask !== undefined && result.time.isValid()) {\r\n if (result.time.asMilliseconds() > MAX_VALID_DURATION) {\r\n result.time = moment.duration(MAX_VALID_DURATION);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private static parseTime(value: moment.Duration | null, mask: string): string {\r\n return (value ?? moment.duration(0)).locale(\"locale.d2000\").format(mask, {\r\n trim: false,\r\n decimalSeparator: LocaleHolder.decimalSeparator,\r\n useGrouping: false,\r\n groupingSeparator: \"\",\r\n userLocale: LocaleHolder.formattingLocale\r\n })\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"durationInput.js","sourceRoot":"","sources":["../../../../components/date/durationInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {HTMLAttributes, RefObject} from \"react\";\nimport MaskedInput from \"d2coreui/components/input/maskedInput\";\nimport moment from \"moment\";\nimport {LocaleHolder} from \"d2core/i18n/localeHolder\";\nimport {AutoComplete} from \"antd\";\nimport {DownOutlined} from \"@ant-design/icons\";\n\ninterface DurationInputProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n mask: string\n value: moment.Duration | null\n onChange?: (time: moment.Duration | null) => void\n predefinedValues?: { key: string, value: string }[]\n disabled?: boolean\n inputStyle?: React.CSSProperties\n autoFocus?: boolean\n}\n\ninterface DurationInputState {\n valid: boolean\n selectionStart: number | null\n selectionEnd: number | null\n currentInfo: MaskResult\n opened: boolean\n value: string\n hover: boolean\n}\n\ninterface MaskResult {\n time?: moment.Duration\n info?: InfoEntry\n infoFromMask?: EntryValue[]\n length: number\n}\n\ninterface InfoEntry {\n key: string\n min: number\n max: number\n len: number\n mult: number\n unit: moment.unitOfTime.Base\n}\n\ninterface EntryValue {\n length: number\n infoEntry: InfoEntry\n value: number\n}\n\nconst DURATION_DATA_MAP: InfoEntry[] = [\n {key: \"SSS\", min: 0, max: 999, len: 3, mult: 1, unit: \"ms\"},\n {key: \"s\", min: 0, max: 59, len: 2, mult: 1000, unit: \"s\"},\n {key: \"m\", min: 0, max: 59, len: 2, mult: 60 * 1000, unit: \"m\"},\n {key: \"H\", min: 0, max: 23, len: 2, mult: 60 * 60 * 1000, unit: \"h\"},\n {key: \"D\", min: 0, max: 24854, len: 5, mult: 24 * 60 * 60 * 1000, unit: \"d\"},\n];\n\nexport const MAX_VALID_DURATION = 24854 * 24 * 60 * 60 * 1000 + 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 59 * 1000 + 499;\n\nexport function parseDuration(value: string, mask: string, cursorPos?: number, maskResult?: MaskResult): moment.Duration | null {\n const result: moment.Duration = moment.duration(0);\n const clearMaskResult = () => {\n if (maskResult) {\n maskResult.info = undefined;\n maskResult.length = 0;\n maskResult.infoFromMask = undefined;\n maskResult.time = undefined;\n }\n }\n let maskPos: number = 0;\n let valPos: number;\n\n for (valPos = 0; valPos < value.length; valPos++) {\n const c: string = value.charAt(valPos);\n\n if (['D', 'H', 'm', 's', 'S'].includes(mask.charAt(maskPos))) { // je to maska\n if (/\\d/.test(c)) {\n const entry: EntryValue | undefined = getInfoFromMask(mask, maskPos);\n\n if (entry) {\n let str = c;\n\n while (/\\d/.test(value.charAt(valPos + 1))) {\n valPos++;\n str += value.charAt(valPos);\n }\n\n const time: number = parseInt(str);\n\n result.add(moment.duration(time, entry.infoEntry.unit));\n if (maskResult) {\n const item: EntryValue = {\n value: time,\n length: str.length,\n infoEntry: entry.infoEntry,\n }\n\n if (maskResult.infoFromMask) {\n maskResult.infoFromMask.push(item);\n } else {\n maskResult.infoFromMask = [item];\n }\n }\n maskPos += entry.length;\n\n if (cursorPos !== undefined && maskResult !== undefined && cursorPos >= valPos - str.length + 1 && cursorPos <= valPos + 1) {\n maskResult.info = entry.infoEntry;\n maskResult.length = str.length;\n }\n } else {\n clearMaskResult();\n return null;\n }\n } else {\n // non-numeric character when value expected\n clearMaskResult();\n return null;\n }\n } else {\n if (c === mask.charAt(maskPos)) {\n // skip special characters\n maskPos++;\n }\n }\n }\n\n if (maskPos === mask.length && valPos === value.length && result.asMilliseconds() <= MAX_VALID_DURATION) {\n if (maskResult !== undefined) {\n maskResult.time = result;\n }\n return result;\n }\n\n clearMaskResult();\n return null;\n}\n\nexport default class DurationInput extends React.Component<DurationInputProps, DurationInputState> {\n private inputRef: RefObject<MaskedInput> = React.createRef();\n\n constructor(props: Readonly<DurationInputProps>) {\n super(props);\n this.state = {\n valid: !!(props.value?.isValid()),\n selectionStart: null,\n selectionEnd: null,\n currentInfo: {\n info: undefined,\n infoFromMask: undefined,\n time: undefined,\n length: 0\n },\n opened: false,\n value: formatDuration(props.value, props.mask),\n hover: false,\n };\n\n this.recalc = this.recalc.bind(this);\n this.increment = this.increment.bind(this);\n this.decrement = this.decrement.bind(this);\n }\n\n componentDidUpdate(): void {\n if (this.inputRef.current !== null) {\n this.inputRef.current.input.selectionStart = this.state.selectionStart;\n this.inputRef.current.input.selectionEnd = this.state.selectionEnd;\n }\n\n const value: string = formatDuration(this.props.value, this.props.mask);\n\n if (this.state.value !== value) {\n this.setState({\n value: value,\n valid: this.props.value?.isValid() ?? false,\n });\n }\n }\n\n recalc(): void {\n if (this.inputRef.current !== null) {\n const value: MaskResult = {length: 0};\n parseDuration(this.inputRef.current.input.value, this.props.mask, this.inputRef.current.input.selectionStart ?? undefined, value);\n this.setState({\n currentInfo: value,\n selectionStart: this.inputRef.current.input.selectionStart,\n selectionEnd: this.inputRef.current.input.selectionEnd,\n });\n }\n }\n\n increment(): void {\n if (this.state.currentInfo.info !== undefined && checkValue(this.state.currentInfo, this.props.value, 1)) {\n this.props.onChange?.(this.props.value?.add(1, this.state.currentInfo.info.unit) ?? null);\n this.setState({selectionEnd: this.state.selectionStart});\n }\n\n this.inputRef.current?.focus();\n }\n\n decrement(): void {\n if (this.state.currentInfo.info !== undefined && checkValue(this.state.currentInfo, this.props.value, -1)) {\n this.props.onChange?.(this.props.value?.subtract(1, this.state.currentInfo.info.unit) ?? null);\n this.setState({selectionEnd: this.state.selectionStart});\n }\n\n this.inputRef.current?.focus();\n }\n\n get input() {\n return this.inputRef.current?.input;\n }\n\n focus() {\n this.inputRef.current?.focus();\n }\n\n render() {\n const {mask, value, onChange, style, disabled, predefinedValues, autoFocus, ...props} = this.props;\n const incrementButtonDisabled = this.state.currentInfo.info === undefined || !checkValue(this.state.currentInfo, this.props.value, 1);\n const decrementButtonDisabled = this.state.currentInfo.info === undefined || !checkValue(this.state.currentInfo, this.props.value, -1);\n\n return (\n <div style={Object.assign({}, style, {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n position: \"relative\",\n })} {...props}\n onKeyDown={(event) => {\n if (event.keyCode === 38) { // up\n this.increment();\n event.preventDefault();\n event.stopPropagation();\n } else if (event.keyCode === 40) { // down\n this.decrement();\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n onMouseEnter={() => {\n this.setState({hover: true});\n }}\n onMouseLeave={() => {\n this.setState({hover: false});\n }}\n >\n <AutoComplete\n className={(this.state.opened ? \"autocomplete-open\" : \"\") + \" \" + (this.state.valid ? \"\" : \"invalid\")}\n options={this.state.opened ? predefinedValues?.map(v => {\n return {value: v.value, label: v.key}\n }) : []}\n defaultOpen={false}\n defaultActiveFirstOption={false}\n defaultValue={undefined}\n disabled={disabled}\n autoFocus={autoFocus}\n style={{width: \"100%\"}}\n value={this.state.valid ? this.state.value : \"\"}\n onSelect={(e) => {\n const val: moment.Duration = moment.duration(Number(e));\n this.setState({\n opened: false,\n valid: val !== undefined && val.isValid(),\n value: formatDuration(val, this.props.mask),\n });\n onChange?.(val === undefined ? null : val);\n }}\n onBlur={() => {\n this.setState({opened: false});\n }}>\n <MaskedInput mask={this.props.mask.replace(/[a-zA-Z]/g, '1')}\n ref={this.inputRef}\n style={this.props.inputStyle}\n placeholder={this.props.mask.replace(/[a-zA-Z]/g, '_')}\n autoFocus={autoFocus}\n onFocus={(event => {\n event.target.selectionStart = event.target.selectionEnd = this.state.selectionStart;\n })}\n suffix={\n this.props.predefinedValues !== undefined && this.props.predefinedValues.length > 0 &&\n <span className=\"dropdown-arrow\">\n <DownOutlined className=\"dropdown-arrow-icon ant-input-clear-icon\"\n role=\"button\"\n tabIndex={-1}\n onClick={() => {\n if (!this.props.disabled) {\n this.setState({opened: !this.state.opened});\n }\n }}/>\n </span>\n }\n onMouseUp={this.recalc}\n onKeyUp={this.recalc}\n onChange={(event) => {\n const value: MaskResult = {length: 0};\n parseDuration(event.target.value, this.props.mask, event.target.selectionStart ?? undefined, value);\n onChange?.(value.time === undefined ? null : value.time);\n this.setState({\n valid: value.time !== undefined && value.time.isValid(),\n currentInfo: value,\n value: event.target.value,\n });\n }}\n />\n </AutoComplete>\n <div style={{position: \"absolute\", right: 2, height: 30}}>\n <div className=\"ant-input-number-handler-wrap\" ref={ref => {\n if (ref) {\n ref.style.setProperty(\"opacity\", this.state.hover ? \"1\" : \"0\", \"important\");\n }\n }}>\n <span\n onClick={this.increment} unselectable=\"on\" role=\"button\" aria-label=\"Increase Value\"\n className={`ant-input-number-handler ant-input-number-handler-up ${incrementButtonDisabled ? \"ant-input-number-handler-up-disabled\" : \"\"}`}\n >\n <span role=\"img\" aria-label=\"up\" className=\"anticon anticon-up ant-input-number-handler-up-inner\">\n <svg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"up\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z\"></path>\n </svg>\n </span>\n </span>\n\n <span\n onClick={this.decrement} unselectable=\"on\" role=\"button\" aria-label=\"Decrease Value\"\n className={`ant-input-number-handler ant-input-number-handler-down ${decrementButtonDisabled ? \"ant-input-number-handler-down-disabled\" : \"\"}`}\n >\n <span role=\"img\" aria-label=\"down\" className=\"anticon anticon-down ant-input-number-handler-down-inner\">\n <svg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"down\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"></path>\n </svg>\n </span>\n </span>\n </div>\n </div>\n </div>\n );\n }\n}\n\nfunction checkValue(info: MaskResult, value: moment.Duration | null, offset = 0): boolean {\n const currentMillis = value ? value.clone().add(offset, info.info?.unit).asMilliseconds() : 0;\n const maxValues = info?.infoFromMask ? info.infoFromMask.map((i) => (i.length !== i.infoEntry.len ? (Math.pow(10, i.length) - 1) : i.infoEntry.max) * i.infoEntry.mult) : [];\n const maxMaskedValue = info?.infoFromMask ? maxValues.reduce((p, n) => p + n, 0) : 0;\n return !!value && currentMillis >= 0 && currentMillis <= MAX_VALID_DURATION && currentMillis <= maxMaskedValue;\n}\n\nfunction formatDuration(value: moment.Duration | null, mask: string): string {\n return (value ?? moment.duration(0)).locale(\"locale.d2000\").format(mask, {\n trim: false,\n decimalSeparator: LocaleHolder.decimalSeparator,\n useGrouping: false,\n groupingSeparator: \"\",\n userLocale: LocaleHolder.formattingLocale\n })\n}\n\nfunction getInfoFromMask(mask: string, fromPos: number): EntryValue | undefined {\n if (fromPos < mask.length) {\n const ch = mask.charAt(fromPos);\n const info = DURATION_DATA_MAP.find((d) => d.key.includes(ch));\n\n if (info) {\n const entry: EntryValue = {\n length: 1,\n value: 0,\n infoEntry: info,\n }\n\n for (let i = fromPos + 1; i < mask.length; i++) {\n const c = mask.charAt(i);\n\n if (c === ch) {\n entry.length++;\n } else {\n break;\n }\n }\n\n return entry;\n }\n }\n\n return undefined;\n}"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { FormItemProps } from "antd";
|
|
3
|
+
import "../../style/form/niceFormItem.css";
|
|
4
|
+
export interface NiceFormItemProps extends FormItemProps {
|
|
5
|
+
border?: boolean;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface NiceFormItemState {
|
|
9
|
+
}
|
|
10
|
+
export declare class NiceFormItem extends React.Component<NiceFormItemProps, NiceFormItemState> {
|
|
11
|
+
constructor(props: Readonly<NiceFormItemProps> | NiceFormItemProps);
|
|
12
|
+
render(): JSX.Element;
|
|
13
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import React from "react";
|
|
13
|
+
import { Form } from "antd";
|
|
14
|
+
import "../../style/form/niceFormItem.css";
|
|
15
|
+
export class NiceFormItem extends React.Component {
|
|
16
|
+
constructor(props) {
|
|
17
|
+
super(props);
|
|
18
|
+
}
|
|
19
|
+
render() {
|
|
20
|
+
const _a = this.props, { label, children, border, disabled, className } = _a, rest = __rest(_a, ["label", "children", "border", "disabled", "className"]);
|
|
21
|
+
const labelStyle = disabled ? { background: "transparent" } : undefined;
|
|
22
|
+
const classNames = "nice-form-item" + (className !== null && className !== void 0 ? className : "");
|
|
23
|
+
return (React.createElement(Form.Item, Object.assign({}, rest, { className: classNames }),
|
|
24
|
+
React.createElement("div", { className: "nice-float-label" },
|
|
25
|
+
border ? React.createElement("section", { className: "nice-form-item-box" }, children) : children,
|
|
26
|
+
React.createElement("label", { className: "nice-label nice-label-float", style: labelStyle }, label))));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=NiceFormItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NiceFormItem.js","sourceRoot":"","sources":["../../../../components/form/NiceFormItem.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAC,IAAI,EAAgB,MAAM,MAAM,CAAA;AACxC,OAAO,mCAAmC,CAAA;AAU1C,MAAM,OAAO,YAAa,SAAQ,KAAK,CAAC,SAA+C;IACnF,YAAY,KAAsD;QAC9D,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,MAAM;QACF,MAAM,KAA0D,IAAI,CAAC,KAAK,EAApE,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,OAAuB,EAAlB,IAAI,cAAtD,wDAAuD,CAAa,CAAC;QAC3E,MAAM,UAAU,GAA8B,QAAQ,CAAC,CAAC,CAAC,EAAC,UAAU,EAAE,aAAa,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjG,MAAM,UAAU,GAAG,gBAAgB,GAAG,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC,CAAA;QAEvD,OAAO,CACH,oBAAC,IAAI,CAAC,IAAI,oBAAK,IAAI,IAAE,SAAS,EAAE,UAAU;YACtC,6BAAK,SAAS,EAAC,kBAAkB;gBAC5B,MAAM,CAAC,CAAC,CAAC,iCAAS,SAAS,EAAC,oBAAoB,IAAE,QAAQ,CAAW,CAAC,CAAC,CAAC,QAAQ;gBACjF,+BAAO,SAAS,EAAC,6BAA6B,EAAC,KAAK,EAAE,UAAU,IAAG,KAAK,CAAS,CAC/E,CACE,CAAC,CAAC;IACtB,CAAC;CACJ","sourcesContent":["import React, {CSSProperties} from \"react\";\nimport {Form, FormItemProps} from \"antd\"\nimport \"../../style/form/niceFormItem.css\"\n\nexport interface NiceFormItemProps extends FormItemProps {\n border?: boolean\n disabled?: boolean\n}\n\nexport interface NiceFormItemState {\n}\n\nexport class NiceFormItem extends React.Component<NiceFormItemProps, NiceFormItemState> {\n constructor(props: Readonly<NiceFormItemProps> | NiceFormItemProps) {\n super(props);\n }\n\n render() {\n const {label, children, border, disabled, className, ...rest} = this.props;\n const labelStyle: CSSProperties | undefined = disabled ? {background: \"transparent\"} : undefined;\n const classNames = \"nice-form-item\" + (className ?? \"\")\n\n return (\n <Form.Item {...rest} className={classNames}>\n <div className=\"nice-float-label\">\n {border ? <section className=\"nice-form-item-box\">{children}</section> : children}\n <label className=\"nice-label nice-label-float\" style={labelStyle}>{label}</label>\n </div>\n </Form.Item>);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellEditorUtils.js","sourceRoot":"","sources":["../../../../../components/grid/cell/cellEditorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;AAGhC,MAAM,OAAO,eAAe;IACxB,MAAM,CAAC,oBAAoB,CAAI,CAAyB;QACpD,OAAO,CACH,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3F,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAChE,CAAC;IACN,CAAC;CACJ","sourcesContent":["import KeyboardUtils from \"d2coreui/components/keyboard/keyboardUtils\";\
|
|
1
|
+
{"version":3,"file":"cellEditorUtils.js","sourceRoot":"","sources":["../../../../../components/grid/cell/cellEditorUtils.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;AAGhC,MAAM,OAAO,eAAe;IACxB,MAAM,CAAC,oBAAoB,CAAI,CAAyB;QACpD,OAAO,CACH,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3F,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAChE,CAAC;IACN,CAAC;CACJ","sourcesContent":["import KeyboardUtils from \"d2coreui/components/keyboard/keyboardUtils\";\nimport {Key} from \"ts-key-enum\";\nimport React from 'react';\n\nexport class CellEditorUtils {\n static shouldIgnoreKeyEvent<T>(e: React.KeyboardEvent<T>): boolean {\n return (\n (KeyboardUtils.isKeyPressed(Key.Alt) && (e.key === Key.ArrowUp || e.key === Key.ArrowDown)) ||\n (KeyboardUtils.isKeyPressed(Key.Control) && e.key === \"KeyA\")\n );\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customEnumCellEditor.js","sourceRoot":"","sources":["../../../../../components/grid/cell/customEnumCellEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"file":"customEnumCellEditor.js","sourceRoot":"","sources":["../../../../../components/grid/cell/customEnumCellEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport {ICellEditor, ICellEditorParams} from \"ag-grid-community\";\nimport {RefSelectProps} from \"antd/es/select\";\nimport debounce from \"lodash/debounce\";\nimport {Select} from \"antd\";\nimport ReactDOM from \"react-dom\";\n\nconst KEY_BACKSPACE = 8;\nconst KEY_DELETE = 46;\n\ninterface CustomEnumCellEditorProps extends ICellEditorParams {\n values: string[]\n}\n\ninterface CustomEnumCellEditorState {\n value: number | null\n cancelEdit: boolean\n opened: boolean\n}\n\nexport default class CustomEnumCellEditor extends React.Component<CustomEnumCellEditorProps, CustomEnumCellEditorState> implements ICellEditor {\n private selectComponent: RefSelectProps | null = null;\n private focusOpId: number | null = null;\n private wrappingComponent: HTMLDivElement | null = null;\n\n constructor(props: Readonly<CustomEnumCellEditorProps>) {\n super(props);\n this.state = this.getInitialState(props);\n this.updateValueFromPreselection = debounce(this.updateValueFromPreselection.bind(this), 200, {maxWait: 200});\n }\n\n getInitialState(props: Readonly<CustomEnumCellEditorProps>): CustomEnumCellEditorState {\n let value: number | null;\n if (props.keyPress === KEY_BACKSPACE || props.keyPress === KEY_DELETE) {\n // if backspace or delete pressed, we clear the cell\n value = null;\n } else if (props.charPress) {\n // if a letter was pressed, we start with the letter\n const parsedValue = Number.parseInt(props.charPress);\n value = isNaN(parsedValue) ? props.value : parsedValue;\n } else {\n // otherwise we start with the current value\n value = props.value;\n }\n return {\n value: value,\n cancelEdit: false,\n opened: true,\n } as CustomEnumCellEditorState;\n }\n\n componentWillUnmount() {\n if (this.focusOpId) {\n clearTimeout(this.focusOpId);\n }\n }\n\n afterGuiAttached() {\n this.focusOpId = window.setTimeout(() => {\n this.selectComponent?.focus();\n }, 200);\n }\n\n getValue() {\n return this.state.value;\n }\n\n isPopup(): boolean {\n return true;\n }\n\n isCancelBeforeStart(): boolean {\n return false;\n }\n\n isCancelAfterEnd() {\n return false;\n }\n\n private updateValueFromPreselection() {\n setTimeout(() => {\n let selectables: HTMLElement[] = Array.from(this.wrappingComponent?.getElementsByClassName(\"ant-select-item-option-active\") ?? []) as HTMLElement[];\n if (selectables.length > 0) {\n const optionStringValue = selectables[0].dataset?.optionvalue;\n const optionValue = optionStringValue !== undefined ? Number.parseFloat(optionStringValue) : undefined\n if (optionValue) {\n this.setState({value: optionValue});\n }\n }\n }, 200)\n }\n\n render() {\n return (\n <div style={{width: \"100%\", minWidth: 150, height: 24}}>\n <Select\n ref={(component) => {\n this.selectComponent = component;\n }}\n size={\"small\"}\n virtual={false}\n className={\"select-with-one-item\"}\n dropdownMatchSelectWidth={false}\n style={{width: \"100%\", overflow: \"auto\", padding: 0, margin: 0}}\n dropdownStyle={{width: \"100%\", maxHeight: 400, overflow: 'auto'}}\n showAction={['focus', 'click']}\n value={this.state.value !== null ? this.state.value : undefined}\n onChange={(value) => {\n this.setState({value: value === undefined ? null : value});\n }}\n onSelect={(value) => {\n this.setState({value: value === undefined ? null : value});\n }}\n open={this.state.opened}\n onDropdownVisibleChange={(visible) => {\n this.setState({opened: visible});\n }}\n getPopupContainer={(_trigger) => {\n // very nasty trick how to keep select's popup within focusable area of ag-grid cell editor popup (prevent closing cell editor when we click in select's dropdown area)\n return (ReactDOM.findDOMNode(this)?.parentNode ?? document.body) as HTMLElement;\n }}\n dropdownRender={(menu) => {\n return (\n <div ref={(component) => {\n this.wrappingComponent = component;\n }}>\n {menu}\n </div>\n );\n }}\n >\n {this.props.values.map((value, index) => {\n return (\n <Select.Option value={index} key={index}>{value}</Select.Option>\n )\n })}\n </Select>\n </div>\n )\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import KeyboardUtils from "d2coreui/components/keyboard/keyboardUtils";
|
|
|
4
4
|
import DateTimeInput from "d2coreui/components/date/dateTimeInput";
|
|
5
5
|
import { DateTimeUtils } from "d2core/utils/dateTimeUtils";
|
|
6
6
|
import ReactDOM from "react-dom";
|
|
7
|
-
import { unixTimeToMoment } from "d2core/types/
|
|
7
|
+
import { unixTimeToMoment } from "d2core/types/unixTimeUtils";
|
|
8
8
|
const KEY_BACKSPACE = 8;
|
|
9
9
|
const KEY_DELETE = 46;
|
|
10
10
|
const KEY_F2 = 113;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateCellEditor.js","sourceRoot":"","sources":["../../../../../components/grid/cell/dateCellEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;AAChC,OAAO,aAAa,MAAM,4CAA4C,CAAC;AACvE,OAAO,aAAa,MAAM,wCAAwC,CAAC;AAEnE,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAC,gBAAgB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"dateCellEditor.js","sourceRoot":"","sources":["../../../../../components/grid/cell/dateCellEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;AAChC,OAAO,aAAa,MAAM,4CAA4C,CAAC;AACvE,OAAO,aAAa,MAAM,wCAAwC,CAAC;AAEnE,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAE5D,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,GAAG,CAAC;AAYnB,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,SAAwD;IAItG,YAAY,KAAyC;QACjD,KAAK,CAAC,KAAK,CAAC,CAAC;QAJT,mBAAc,GAAyB,IAAI,CAAC;QAC5C,cAAS,GAAkB,IAAI,CAAC;QAIpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,KAAyC;QACrD,IAAI,KAAoB,CAAC;QACzB,IAAI,mBAAmB,GAAG,IAAI,CAAC;QAE/B,IAAI,KAAK,CAAC,QAAQ,KAAK,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE;YAEnE,KAAK,GAAG,IAAI,CAAC;SAChB;aAAM;YAEH,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3D,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE;gBAC3B,mBAAmB,GAAG,KAAK,CAAC;aAC/B;SACJ;QACD,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,mBAAmB;YACnB,UAAU,EAAE,KAAK;SACG,CAAC;IAC7B,CAAC;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAChC;IACL,CAAC;IAED,gBAAgB;QACZ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;;YACpC,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,EAAE,CAAC;QAgBjC,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mBAAmB;QACf,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,gBAAgB;QACZ,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM;QACF,OAAO,CACH,oBAAC,aAAa,IACV,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE;gBACf,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YACpC,CAAC,EACD,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EACrB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE;;gBAE5B,OAAO,CAAC,MAAA,MAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,0CAAE,UAAU,mCAAI,QAAQ,CAAC,IAAI,CAAgB,CAAC;YACpF,CAAC,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,IAAI,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAErC,OAAO;iBACV;gBACD,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC;YAClC,CAAC,EACD,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAC,GACvC,CACL,CAAC;IACN,CAAC;CACJ","sourcesContent":["import React from 'react';\nimport {ICellEditor, ICellEditorParams} from \"ag-grid-community\";\nimport {Key} from \"ts-key-enum\";\nimport KeyboardUtils from \"d2coreui/components/keyboard/keyboardUtils\";\nimport DateTimeInput from \"d2coreui/components/date/dateTimeInput\";\nimport {Moment} from \"moment\";\nimport {DateTimeUtils} from \"d2core/utils/dateTimeUtils\";\nimport ReactDOM from \"react-dom\";\nimport {unixTimeToMoment} from \"d2core/types/unixTimeUtils\";\n\nconst KEY_BACKSPACE = 8;\nconst KEY_DELETE = 46;\nconst KEY_F2 = 113;\n\ninterface DateCellEditorProperties extends ICellEditorParams {\n mask: string\n}\n\ninterface DateCellEditorState {\n value: Moment | null\n highlightAllOnFocus: boolean\n cancelEdit: boolean\n}\n\nexport default class DateCellEditor extends React.Component<DateCellEditorProperties, DateCellEditorState> implements ICellEditor {\n private inputComponent: DateTimeInput | null = null;\n private focusOpId: number | null = null;\n\n constructor(props: Readonly<DateCellEditorProperties>) {\n super(props);\n this.state = this.getInitialState(props);\n }\n\n getInitialState(props: Readonly<DateCellEditorProperties>): DateCellEditorState {\n let value: Moment | null;\n let highlightAllOnFocus = true;\n\n if (props.keyPress === KEY_BACKSPACE || props.keyPress === KEY_DELETE) {\n // if backspace or delete pressed, we clear the cell\n value = null;\n } else {\n // otherwise we start with the current value\n value = props.value ? unixTimeToMoment(props.value) : null;\n if (props.keyPress === KEY_F2) {\n highlightAllOnFocus = false;\n }\n }\n return {\n value: value,\n highlightAllOnFocus,\n cancelEdit: false\n } as DateCellEditorState;\n }\n\n componentWillUnmount() {\n if (this.focusOpId) {\n clearTimeout(this.focusOpId);\n }\n }\n\n afterGuiAttached() {\n this.focusOpId = window.setTimeout(() => {\n this.inputComponent?.focus();\n // if (this.state.highlightAllOnFocus) {\n // this.inputComponent?.input?.select();\n // this.setState({\n // highlightAllOnFocus: false,\n // });\n // } else {\n // // when we started editing, we want the carot at the end, not the start.\n // // this comes into play in two scenarios: a) when user hits F2 and b)\n // // when user hits a printable character, then on IE (and only IE) the carot\n // // was placed after the first character, thus 'apply' would end up as 'pplea'\n // const length = this.inputComponent?.input?.value ? this.inputComponent?.input.value.length : 0;\n // if (length > 0) {\n // this.inputComponent?.input?.setSelectionRange(length, length);\n // }\n // }\n }, 200);\n }\n\n getValue() {\n return this.state.value ? DateTimeUtils.toUnixTime(this.state.value) : null;\n }\n\n isPopup(): boolean {\n return true;\n }\n\n isCancelBeforeStart(): boolean {\n return !!this.props.charPress && '1234567890'.indexOf(this.props.charPress) < 0;\n }\n\n isCancelAfterEnd() {\n return false;\n }\n\n render() {\n return (\n <DateTimeInput\n ref={(component) => {\n this.inputComponent = component;\n }}\n mask={this.props.mask}\n value={this.state.value}\n getPopupContainer={(_trigger) => {\n // very nasty trick how to keep select's popup within focusable area of ag-grid cell editor popup (prevent closing cell editor when we click in select's dropdown area)\n return (ReactDOM.findDOMNode(this)?.parentNode ?? document.body) as HTMLElement;\n }}\n onChange={(value) => {\n if (KeyboardUtils.isKeyPressed(Key.Alt)) {\n // ignore navigational keystrokes ALT+cursor arrow\n return;\n }\n this.setState({value: value});\n }}\n style={{width: '100%', minWidth: 220}}\n />\n );\n }\n}"]}
|