@ceed/cds 1.8.0 → 1.8.2
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/components/DateRangePicker/DateRangePicker.d.ts +10 -0
- package/dist/index.cjs +110 -11
- package/dist/index.js +110 -11
- package/framer/index.js +39 -39
- package/package.json +1 -1
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import Input from "../Input";
|
|
3
3
|
interface BaseDateRangePickerProps {
|
|
4
|
+
/**
|
|
5
|
+
* props.format 의 형식을 따라야 한다.
|
|
6
|
+
*/
|
|
4
7
|
value?: string;
|
|
5
8
|
defaultValue?: string;
|
|
6
9
|
onChange?: (event: {
|
|
@@ -19,7 +22,14 @@ interface BaseDateRangePickerProps {
|
|
|
19
22
|
maxDate?: string;
|
|
20
23
|
disableFuture?: boolean;
|
|
21
24
|
disablePast?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* value, onChange의 값은 해당 포맷을 따른다.
|
|
27
|
+
*/
|
|
22
28
|
format?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Input 에 표시되는 값의 포맷을 지정한다.
|
|
31
|
+
*/
|
|
32
|
+
displayFormat?: string;
|
|
23
33
|
inputReadOnly?: boolean;
|
|
24
34
|
hideClearButton?: boolean;
|
|
25
35
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -3530,6 +3530,8 @@ function useDataTableRenderer({
|
|
|
3530
3530
|
isTotalSelected: _isTotalSelected,
|
|
3531
3531
|
isRowSelectable
|
|
3532
3532
|
}) {
|
|
3533
|
+
const onSelectionModelChangeRef = (0, import_react25.useRef)(onSelectionModelChange);
|
|
3534
|
+
onSelectionModelChangeRef.current = onSelectionModelChange;
|
|
3533
3535
|
const [focusedRowId, setFocusedRowId] = (0, import_react25.useState)(null);
|
|
3534
3536
|
const [sortModel, setSortModel] = useControlledState(
|
|
3535
3537
|
controlledSortModel,
|
|
@@ -3719,7 +3721,7 @@ function useDataTableRenderer({
|
|
|
3719
3721
|
}
|
|
3720
3722
|
}, [page, rowCount, pageSize, handlePageChange]);
|
|
3721
3723
|
(0, import_react25.useEffect)(() => {
|
|
3722
|
-
|
|
3724
|
+
onSelectionModelChangeRef.current?.([]);
|
|
3723
3725
|
}, [page]);
|
|
3724
3726
|
return {
|
|
3725
3727
|
rowCount,
|
|
@@ -4112,7 +4114,9 @@ var CalendarButton2 = (0, import_joy34.styled)(IconButton_default, {
|
|
|
4112
4114
|
"&:focus": {
|
|
4113
4115
|
"--Icon-color": "currentColor",
|
|
4114
4116
|
outlineOffset: `${theme.getCssVar("focus-thickness")}`,
|
|
4115
|
-
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4117
|
+
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4118
|
+
"palette-focusVisible"
|
|
4119
|
+
)}`
|
|
4116
4120
|
}
|
|
4117
4121
|
}));
|
|
4118
4122
|
var StyledPopper2 = (0, import_joy34.styled)(import_base3.Popper, {
|
|
@@ -4138,6 +4142,32 @@ var DateRangePickerRoot = (0, import_joy34.styled)("div", {
|
|
|
4138
4142
|
})({
|
|
4139
4143
|
width: "100%"
|
|
4140
4144
|
});
|
|
4145
|
+
var validValueFormat2 = (value, format) => {
|
|
4146
|
+
try {
|
|
4147
|
+
const [date1Str, date2Str] = value.split(" - ");
|
|
4148
|
+
if (!date1Str || !date2Str) {
|
|
4149
|
+
return false;
|
|
4150
|
+
}
|
|
4151
|
+
const parsedDate1 = parseDate2(date1Str, format);
|
|
4152
|
+
const parsedDate2 = parseDate2(date2Str, format);
|
|
4153
|
+
if (parsedDate1.toString() === "Invalid Date" || parsedDate2.toString() === "Invalid Date") {
|
|
4154
|
+
return false;
|
|
4155
|
+
}
|
|
4156
|
+
const formattedValue = formatValueString2(
|
|
4157
|
+
[parsedDate1, parsedDate2],
|
|
4158
|
+
format
|
|
4159
|
+
);
|
|
4160
|
+
if (value !== formattedValue) {
|
|
4161
|
+
return false;
|
|
4162
|
+
}
|
|
4163
|
+
const regex = new RegExp(
|
|
4164
|
+
`^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")} - ${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`
|
|
4165
|
+
);
|
|
4166
|
+
return regex.test(value);
|
|
4167
|
+
} catch (e) {
|
|
4168
|
+
return false;
|
|
4169
|
+
}
|
|
4170
|
+
};
|
|
4141
4171
|
var formatValueString2 = ([date1, date2], format) => {
|
|
4142
4172
|
const getStr = (date) => {
|
|
4143
4173
|
let day = `${date.getDate()}`;
|
|
@@ -4234,6 +4264,7 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4234
4264
|
sx,
|
|
4235
4265
|
className,
|
|
4236
4266
|
format = "YYYY/MM/DD",
|
|
4267
|
+
displayFormat = "YYYY/MM/DD",
|
|
4237
4268
|
size,
|
|
4238
4269
|
inputReadOnly,
|
|
4239
4270
|
hideClearButton,
|
|
@@ -4250,12 +4281,27 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4250
4281
|
[props.name, onChange]
|
|
4251
4282
|
)
|
|
4252
4283
|
);
|
|
4284
|
+
const [displayValue, setDisplayValue] = (0, import_react26.useState)(
|
|
4285
|
+
() => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
|
|
4286
|
+
);
|
|
4253
4287
|
const [anchorEl, setAnchorEl] = (0, import_react26.useState)(null);
|
|
4254
4288
|
const open = Boolean(anchorEl);
|
|
4255
4289
|
const calendarValue = (0, import_react26.useMemo)(
|
|
4256
4290
|
() => value ? parseDates(value, format) : void 0,
|
|
4257
4291
|
[value, format]
|
|
4258
4292
|
);
|
|
4293
|
+
(0, import_react26.useEffect)(() => {
|
|
4294
|
+
if (value) {
|
|
4295
|
+
try {
|
|
4296
|
+
const dates = parseDates(value, format);
|
|
4297
|
+
const newDisplayValue = formatValueString2(dates, displayFormat);
|
|
4298
|
+
setDisplayValue(newDisplayValue);
|
|
4299
|
+
} catch (error2) {
|
|
4300
|
+
}
|
|
4301
|
+
} else {
|
|
4302
|
+
setDisplayValue("");
|
|
4303
|
+
}
|
|
4304
|
+
}, [displayFormat, value, format]);
|
|
4259
4305
|
(0, import_react26.useEffect)(() => {
|
|
4260
4306
|
if (!anchorEl) {
|
|
4261
4307
|
innerRef.current?.blur();
|
|
@@ -4266,9 +4312,41 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4266
4312
|
]);
|
|
4267
4313
|
const handleChange = (0, import_react26.useCallback)(
|
|
4268
4314
|
(event) => {
|
|
4269
|
-
|
|
4315
|
+
const value2 = event.target.value;
|
|
4316
|
+
setDisplayValue(
|
|
4317
|
+
value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2
|
|
4318
|
+
);
|
|
4319
|
+
setValue(value2);
|
|
4270
4320
|
},
|
|
4271
|
-
[setValue]
|
|
4321
|
+
[displayFormat, format, setValue]
|
|
4322
|
+
);
|
|
4323
|
+
const handleDisplayInputChange = (0, import_react26.useCallback)(
|
|
4324
|
+
(event) => {
|
|
4325
|
+
if (event.target.value === "") {
|
|
4326
|
+
handleChange({
|
|
4327
|
+
target: {
|
|
4328
|
+
name: props.name,
|
|
4329
|
+
value: ""
|
|
4330
|
+
}
|
|
4331
|
+
});
|
|
4332
|
+
return;
|
|
4333
|
+
}
|
|
4334
|
+
const isValidDisplayValue = validValueFormat2(
|
|
4335
|
+
event.target.value,
|
|
4336
|
+
displayFormat
|
|
4337
|
+
);
|
|
4338
|
+
if (isValidDisplayValue) {
|
|
4339
|
+
const dates = parseDates(event.target.value, displayFormat);
|
|
4340
|
+
const formattedValue = formatValueString2(dates, format);
|
|
4341
|
+
handleChange({
|
|
4342
|
+
target: {
|
|
4343
|
+
name: props.name,
|
|
4344
|
+
value: formattedValue
|
|
4345
|
+
}
|
|
4346
|
+
});
|
|
4347
|
+
}
|
|
4348
|
+
},
|
|
4349
|
+
[displayFormat, format, handleChange, props.name]
|
|
4272
4350
|
);
|
|
4273
4351
|
const handleCalendarToggle = (0, import_react26.useCallback)(
|
|
4274
4352
|
(event) => {
|
|
@@ -4280,10 +4358,26 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4280
4358
|
const handleCalendarChange = (0, import_react26.useCallback)(
|
|
4281
4359
|
([date1, date2]) => {
|
|
4282
4360
|
if (!date1 || !date2) return;
|
|
4283
|
-
|
|
4361
|
+
const formattedValue = formatValueString2([date1, date2], format);
|
|
4362
|
+
if (props.value !== void 0) {
|
|
4363
|
+
onChange?.({ target: { name: props.name, value: formattedValue } });
|
|
4364
|
+
} else {
|
|
4365
|
+
setDisplayValue(
|
|
4366
|
+
formatValueString2([date1, date2], displayFormat)
|
|
4367
|
+
);
|
|
4368
|
+
setValue(formattedValue);
|
|
4369
|
+
}
|
|
4284
4370
|
setAnchorEl(null);
|
|
4285
4371
|
},
|
|
4286
|
-
[
|
|
4372
|
+
[
|
|
4373
|
+
props.value,
|
|
4374
|
+
props.name,
|
|
4375
|
+
onChange,
|
|
4376
|
+
setValue,
|
|
4377
|
+
setAnchorEl,
|
|
4378
|
+
format,
|
|
4379
|
+
displayFormat
|
|
4380
|
+
]
|
|
4287
4381
|
);
|
|
4288
4382
|
const handleInputMouseDown = (0, import_react26.useCallback)(
|
|
4289
4383
|
(event) => {
|
|
@@ -4301,17 +4395,21 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4301
4395
|
color: error ? "danger" : innerProps.color,
|
|
4302
4396
|
ref,
|
|
4303
4397
|
size,
|
|
4304
|
-
value,
|
|
4305
|
-
onChange:
|
|
4398
|
+
value: displayValue,
|
|
4399
|
+
onChange: handleDisplayInputChange,
|
|
4306
4400
|
disabled,
|
|
4307
4401
|
required,
|
|
4308
|
-
placeholder: `${
|
|
4402
|
+
placeholder: `${displayFormat} - ${displayFormat}`,
|
|
4309
4403
|
slotProps: {
|
|
4310
4404
|
input: {
|
|
4311
4405
|
component: TextMaskAdapter5,
|
|
4312
4406
|
ref: innerRef,
|
|
4313
|
-
format,
|
|
4314
|
-
sx: {
|
|
4407
|
+
format: displayFormat,
|
|
4408
|
+
sx: {
|
|
4409
|
+
"&:hover": {
|
|
4410
|
+
cursor: inputReadOnly || readOnly ? "default" : "text"
|
|
4411
|
+
}
|
|
4412
|
+
},
|
|
4315
4413
|
onMouseDown: handleInputMouseDown
|
|
4316
4414
|
}
|
|
4317
4415
|
},
|
|
@@ -4381,6 +4479,7 @@ var DateRangePicker = (0, import_react26.forwardRef)(
|
|
|
4381
4479
|
color: "neutral",
|
|
4382
4480
|
onClick: () => {
|
|
4383
4481
|
setValue("");
|
|
4482
|
+
setDisplayValue("");
|
|
4384
4483
|
setAnchorEl(null);
|
|
4385
4484
|
}
|
|
4386
4485
|
},
|
package/dist/index.js
CHANGED
|
@@ -3498,6 +3498,8 @@ function useDataTableRenderer({
|
|
|
3498
3498
|
isTotalSelected: _isTotalSelected,
|
|
3499
3499
|
isRowSelectable
|
|
3500
3500
|
}) {
|
|
3501
|
+
const onSelectionModelChangeRef = useRef4(onSelectionModelChange);
|
|
3502
|
+
onSelectionModelChangeRef.current = onSelectionModelChange;
|
|
3501
3503
|
const [focusedRowId, setFocusedRowId] = useState6(null);
|
|
3502
3504
|
const [sortModel, setSortModel] = useControlledState(
|
|
3503
3505
|
controlledSortModel,
|
|
@@ -3687,7 +3689,7 @@ function useDataTableRenderer({
|
|
|
3687
3689
|
}
|
|
3688
3690
|
}, [page, rowCount, pageSize, handlePageChange]);
|
|
3689
3691
|
useEffect5(() => {
|
|
3690
|
-
|
|
3692
|
+
onSelectionModelChangeRef.current?.([]);
|
|
3691
3693
|
}, [page]);
|
|
3692
3694
|
return {
|
|
3693
3695
|
rowCount,
|
|
@@ -4088,7 +4090,9 @@ var CalendarButton2 = styled13(IconButton_default, {
|
|
|
4088
4090
|
"&:focus": {
|
|
4089
4091
|
"--Icon-color": "currentColor",
|
|
4090
4092
|
outlineOffset: `${theme.getCssVar("focus-thickness")}`,
|
|
4091
|
-
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4093
|
+
outline: `${theme.getCssVar("focus-thickness")} solid ${theme.getCssVar(
|
|
4094
|
+
"palette-focusVisible"
|
|
4095
|
+
)}`
|
|
4092
4096
|
}
|
|
4093
4097
|
}));
|
|
4094
4098
|
var StyledPopper2 = styled13(Popper3, {
|
|
@@ -4114,6 +4118,32 @@ var DateRangePickerRoot = styled13("div", {
|
|
|
4114
4118
|
})({
|
|
4115
4119
|
width: "100%"
|
|
4116
4120
|
});
|
|
4121
|
+
var validValueFormat2 = (value, format) => {
|
|
4122
|
+
try {
|
|
4123
|
+
const [date1Str, date2Str] = value.split(" - ");
|
|
4124
|
+
if (!date1Str || !date2Str) {
|
|
4125
|
+
return false;
|
|
4126
|
+
}
|
|
4127
|
+
const parsedDate1 = parseDate2(date1Str, format);
|
|
4128
|
+
const parsedDate2 = parseDate2(date2Str, format);
|
|
4129
|
+
if (parsedDate1.toString() === "Invalid Date" || parsedDate2.toString() === "Invalid Date") {
|
|
4130
|
+
return false;
|
|
4131
|
+
}
|
|
4132
|
+
const formattedValue = formatValueString2(
|
|
4133
|
+
[parsedDate1, parsedDate2],
|
|
4134
|
+
format
|
|
4135
|
+
);
|
|
4136
|
+
if (value !== formattedValue) {
|
|
4137
|
+
return false;
|
|
4138
|
+
}
|
|
4139
|
+
const regex = new RegExp(
|
|
4140
|
+
`^${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")} - ${format.replace(/Y/g, "\\d").replace(/M/g, "\\d").replace(/D/g, "\\d")}$`
|
|
4141
|
+
);
|
|
4142
|
+
return regex.test(value);
|
|
4143
|
+
} catch (e) {
|
|
4144
|
+
return false;
|
|
4145
|
+
}
|
|
4146
|
+
};
|
|
4117
4147
|
var formatValueString2 = ([date1, date2], format) => {
|
|
4118
4148
|
const getStr = (date) => {
|
|
4119
4149
|
let day = `${date.getDate()}`;
|
|
@@ -4210,6 +4240,7 @@ var DateRangePicker = forwardRef8(
|
|
|
4210
4240
|
sx,
|
|
4211
4241
|
className,
|
|
4212
4242
|
format = "YYYY/MM/DD",
|
|
4243
|
+
displayFormat = "YYYY/MM/DD",
|
|
4213
4244
|
size,
|
|
4214
4245
|
inputReadOnly,
|
|
4215
4246
|
hideClearButton,
|
|
@@ -4226,12 +4257,27 @@ var DateRangePicker = forwardRef8(
|
|
|
4226
4257
|
[props.name, onChange]
|
|
4227
4258
|
)
|
|
4228
4259
|
);
|
|
4260
|
+
const [displayValue, setDisplayValue] = useState7(
|
|
4261
|
+
() => value ? formatValueString2(parseDates(value, format), displayFormat) : ""
|
|
4262
|
+
);
|
|
4229
4263
|
const [anchorEl, setAnchorEl] = useState7(null);
|
|
4230
4264
|
const open = Boolean(anchorEl);
|
|
4231
4265
|
const calendarValue = useMemo9(
|
|
4232
4266
|
() => value ? parseDates(value, format) : void 0,
|
|
4233
4267
|
[value, format]
|
|
4234
4268
|
);
|
|
4269
|
+
useEffect6(() => {
|
|
4270
|
+
if (value) {
|
|
4271
|
+
try {
|
|
4272
|
+
const dates = parseDates(value, format);
|
|
4273
|
+
const newDisplayValue = formatValueString2(dates, displayFormat);
|
|
4274
|
+
setDisplayValue(newDisplayValue);
|
|
4275
|
+
} catch (error2) {
|
|
4276
|
+
}
|
|
4277
|
+
} else {
|
|
4278
|
+
setDisplayValue("");
|
|
4279
|
+
}
|
|
4280
|
+
}, [displayFormat, value, format]);
|
|
4235
4281
|
useEffect6(() => {
|
|
4236
4282
|
if (!anchorEl) {
|
|
4237
4283
|
innerRef.current?.blur();
|
|
@@ -4242,9 +4288,41 @@ var DateRangePicker = forwardRef8(
|
|
|
4242
4288
|
]);
|
|
4243
4289
|
const handleChange = useCallback10(
|
|
4244
4290
|
(event) => {
|
|
4245
|
-
|
|
4291
|
+
const value2 = event.target.value;
|
|
4292
|
+
setDisplayValue(
|
|
4293
|
+
value2 ? formatValueString2(parseDates(value2, format), displayFormat) : value2
|
|
4294
|
+
);
|
|
4295
|
+
setValue(value2);
|
|
4246
4296
|
},
|
|
4247
|
-
[setValue]
|
|
4297
|
+
[displayFormat, format, setValue]
|
|
4298
|
+
);
|
|
4299
|
+
const handleDisplayInputChange = useCallback10(
|
|
4300
|
+
(event) => {
|
|
4301
|
+
if (event.target.value === "") {
|
|
4302
|
+
handleChange({
|
|
4303
|
+
target: {
|
|
4304
|
+
name: props.name,
|
|
4305
|
+
value: ""
|
|
4306
|
+
}
|
|
4307
|
+
});
|
|
4308
|
+
return;
|
|
4309
|
+
}
|
|
4310
|
+
const isValidDisplayValue = validValueFormat2(
|
|
4311
|
+
event.target.value,
|
|
4312
|
+
displayFormat
|
|
4313
|
+
);
|
|
4314
|
+
if (isValidDisplayValue) {
|
|
4315
|
+
const dates = parseDates(event.target.value, displayFormat);
|
|
4316
|
+
const formattedValue = formatValueString2(dates, format);
|
|
4317
|
+
handleChange({
|
|
4318
|
+
target: {
|
|
4319
|
+
name: props.name,
|
|
4320
|
+
value: formattedValue
|
|
4321
|
+
}
|
|
4322
|
+
});
|
|
4323
|
+
}
|
|
4324
|
+
},
|
|
4325
|
+
[displayFormat, format, handleChange, props.name]
|
|
4248
4326
|
);
|
|
4249
4327
|
const handleCalendarToggle = useCallback10(
|
|
4250
4328
|
(event) => {
|
|
@@ -4256,10 +4334,26 @@ var DateRangePicker = forwardRef8(
|
|
|
4256
4334
|
const handleCalendarChange = useCallback10(
|
|
4257
4335
|
([date1, date2]) => {
|
|
4258
4336
|
if (!date1 || !date2) return;
|
|
4259
|
-
|
|
4337
|
+
const formattedValue = formatValueString2([date1, date2], format);
|
|
4338
|
+
if (props.value !== void 0) {
|
|
4339
|
+
onChange?.({ target: { name: props.name, value: formattedValue } });
|
|
4340
|
+
} else {
|
|
4341
|
+
setDisplayValue(
|
|
4342
|
+
formatValueString2([date1, date2], displayFormat)
|
|
4343
|
+
);
|
|
4344
|
+
setValue(formattedValue);
|
|
4345
|
+
}
|
|
4260
4346
|
setAnchorEl(null);
|
|
4261
4347
|
},
|
|
4262
|
-
[
|
|
4348
|
+
[
|
|
4349
|
+
props.value,
|
|
4350
|
+
props.name,
|
|
4351
|
+
onChange,
|
|
4352
|
+
setValue,
|
|
4353
|
+
setAnchorEl,
|
|
4354
|
+
format,
|
|
4355
|
+
displayFormat
|
|
4356
|
+
]
|
|
4263
4357
|
);
|
|
4264
4358
|
const handleInputMouseDown = useCallback10(
|
|
4265
4359
|
(event) => {
|
|
@@ -4277,17 +4371,21 @@ var DateRangePicker = forwardRef8(
|
|
|
4277
4371
|
color: error ? "danger" : innerProps.color,
|
|
4278
4372
|
ref,
|
|
4279
4373
|
size,
|
|
4280
|
-
value,
|
|
4281
|
-
onChange:
|
|
4374
|
+
value: displayValue,
|
|
4375
|
+
onChange: handleDisplayInputChange,
|
|
4282
4376
|
disabled,
|
|
4283
4377
|
required,
|
|
4284
|
-
placeholder: `${
|
|
4378
|
+
placeholder: `${displayFormat} - ${displayFormat}`,
|
|
4285
4379
|
slotProps: {
|
|
4286
4380
|
input: {
|
|
4287
4381
|
component: TextMaskAdapter5,
|
|
4288
4382
|
ref: innerRef,
|
|
4289
|
-
format,
|
|
4290
|
-
sx: {
|
|
4383
|
+
format: displayFormat,
|
|
4384
|
+
sx: {
|
|
4385
|
+
"&:hover": {
|
|
4386
|
+
cursor: inputReadOnly || readOnly ? "default" : "text"
|
|
4387
|
+
}
|
|
4388
|
+
},
|
|
4291
4389
|
onMouseDown: handleInputMouseDown
|
|
4292
4390
|
}
|
|
4293
4391
|
},
|
|
@@ -4357,6 +4455,7 @@ var DateRangePicker = forwardRef8(
|
|
|
4357
4455
|
color: "neutral",
|
|
4358
4456
|
onClick: () => {
|
|
4359
4457
|
setValue("");
|
|
4458
|
+
setDisplayValue("");
|
|
4360
4459
|
setAnchorEl(null);
|
|
4361
4460
|
}
|
|
4362
4461
|
},
|