Skip to content

Commit 420c655

Browse files
authored
COMP-659:Enter current HOUR and MIN when the user creates continuatio… (#558)
* COMP-659:Enter current HOUR and MIN when the user creates continuation report entry without putting those values in * COMP-659:Enter current HOUR and MIN when the user creates continuation report entry without putting those values in
1 parent 5ba0082 commit 420c655

File tree

2 files changed

+78
-25
lines changed

2 files changed

+78
-25
lines changed

compliance-web/src/components/App/ContinuationReports/ContinuationReportEntryModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ const ContinuationReportEntryModal: React.FC<ContinuationReportEntryModal> = ({
136136
width="75%"
137137
maxDate={maxSelectableDate}
138138
isRequired={true}
139+
useCurrentTimeOnEmpty ={true}
139140
/>
140141
<ControlledLexicalEditor
141142
label="Entry"

compliance-web/src/components/Shared/Controlled/ControlledDateTimeField.tsx

Lines changed: 77 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ type IFormDateInputProps = {
1010
placeHolder?: string;
1111
width?: string;
1212
isRequired?: boolean;
13+
useCurrentTimeOnEmpty?: boolean;
1314
} & DatePickerProps<Dayjs>;
1415

1516
const ControlledDateTimeField: FC<IFormDateInputProps> = ({
1617
name,
1718
placeHolder = DATE_FORMAT,
1819
isRequired = false,
1920
width = "100%",
21+
useCurrentTimeOnEmpty = false,
2022
...otherProps
2123
}) => {
2224
const {
@@ -29,21 +31,38 @@ const ControlledDateTimeField: FC<IFormDateInputProps> = ({
2931
const dateValue = fieldValue ? dayjs(fieldValue) : null;
3032
// Format function to add leading zeros
3133
const formatTimeValue = (value: number | string): string => {
32-
if (value === 0 || value === "") return "";
33-
return typeof value === "number" ? value.toString().padStart(2, "0") : value;
34+
if (value === "") return "";
35+
const numValue = typeof value === "number" ? value : parseInt(value.toString());
36+
return numValue.toString().padStart(2, "0");
3437
};
3538

36-
const [hour, setHour] = useState(dateValue && dateValue.hour() !== 0 ? formatTimeValue(dateValue.hour()) : "");
37-
const [minute, setMinute] = useState(dateValue && dateValue.minute() !== 0 ? formatTimeValue(dateValue.minute()) : "");
39+
const [hour, setHour] = useState(dateValue ? formatTimeValue(dateValue.hour()) : "");
40+
const [minute, setMinute] = useState(dateValue ? formatTimeValue(dateValue.minute()) : "");
3841

3942
// Sync local state with field value when it changes externally
4043
useEffect(() => {
4144
if (fieldValue) {
4245
const date = dayjs(fieldValue);
43-
setHour(date.hour() === 0 ? "" : formatTimeValue(date.hour()));
44-
setMinute(date.minute() === 0 ? "" : formatTimeValue(date.minute()));
46+
if (useCurrentTimeOnEmpty) {
47+
const now = dayjs();
48+
const storedHour = date.hour();
49+
const storedMinute = date.minute();
50+
const currentHour = now.hour();
51+
const currentMinute = now.minute();
52+
53+
if (storedHour !== currentHour || storedMinute !== currentMinute) {
54+
setHour(formatTimeValue(storedHour));
55+
setMinute(formatTimeValue(storedMinute));
56+
} else {
57+
setHour("");
58+
setMinute("");
59+
}
60+
} else {
61+
setHour(formatTimeValue(date.hour()));
62+
setMinute(formatTimeValue(date.minute()));
63+
}
4564
}
46-
}, [fieldValue]);
65+
}, [fieldValue, useCurrentTimeOnEmpty]);
4766

4867
return (
4968
<Controller
@@ -62,11 +81,30 @@ const ControlledDateTimeField: FC<IFormDateInputProps> = ({
6281
return;
6382
}
6483

65-
// Allow empty values in hour/minute fields
66-
const hourNum = newHour === "" ? 0 :
67-
typeof newHour === "string" ? parseInt(newHour) : newHour;
68-
const minuteNum = newMinute === "" ? 0 :
69-
typeof newMinute === "string" ? parseInt(newMinute) : newMinute;
84+
let hourNum: number;
85+
let minuteNum: number;
86+
87+
if (useCurrentTimeOnEmpty && newHour === "" && newMinute === "") {
88+
const now = dayjs();
89+
hourNum = now.hour();
90+
minuteNum = now.minute();
91+
} else {
92+
93+
if (newHour === "") {
94+
hourNum = 0;
95+
} else if (typeof newHour === "string") {
96+
hourNum = parseInt(newHour);
97+
} else {
98+
hourNum = newHour;
99+
}
100+
if (newMinute === "") {
101+
minuteNum = 0;
102+
} else if (typeof newMinute === "string") {
103+
minuteNum = parseInt(newMinute);
104+
} else {
105+
minuteNum = newMinute;
106+
}
107+
}
70108

71109
// Only proceed if we have valid numbers
72110
if (!isNaN(hourNum) && !isNaN(minuteNum)) {
@@ -90,13 +128,27 @@ const ControlledDateTimeField: FC<IFormDateInputProps> = ({
90128
value={field.value ? dayjs(field.value) : null}
91129
onChange={(date: Dayjs | null) => {
92130
if (date) {
93-
// Get current hour and minute from the date
94-
const currentHour = date.hour();
95-
const currentMinute = date.minute();
96-
97-
// Set empty string for 0 values, format others with padding
98-
setHour(currentHour === 0 ? "" : formatTimeValue(currentHour));
99-
setMinute(currentMinute === 0 ? "" : formatTimeValue(currentMinute));
131+
if (useCurrentTimeOnEmpty) {
132+
const dateHour = date.hour();
133+
const dateMinute = date.minute();
134+
const now = dayjs();
135+
const currentHour = now.hour();
136+
const currentMinute = now.minute();
137+
138+
if (dateHour !== currentHour || dateMinute !== currentMinute) {
139+
setHour(formatTimeValue(dateHour));
140+
setMinute(formatTimeValue(dateMinute));
141+
} else {
142+
setHour("");
143+
setMinute("");
144+
}
145+
} else {
146+
const currentHour = date.hour();
147+
const currentMinute = date.minute();
148+
149+
setHour(currentHour === 0 ? "" : formatTimeValue(currentHour));
150+
setMinute(currentMinute === 0 ? "" : formatTimeValue(currentMinute));
151+
}
100152

101153
updateDateTime(date);
102154
} else {
@@ -170,13 +222,13 @@ const ControlledDateTimeField: FC<IFormDateInputProps> = ({
170222
onBlur={(e) => {
171223
// Format on blur for padding zeros
172224
if (e.target.value === "") {
225+
setHour("");
173226
if (field.value) {
174-
updateDateTime(dayjs(field.value), 0, minute);
227+
updateDateTime(dayjs(field.value), "", minute);
175228
}
176229
} else {
177230
const hourNum = parseInt(e.target.value);
178-
if (!isNaN(hourNum) && hourNum > 0) {
179-
// Apply padding only on blur
231+
if (!isNaN(hourNum) && hourNum >= 0) {
180232
setHour(formatTimeValue(hourNum));
181233
}
182234
}
@@ -230,13 +282,13 @@ const ControlledDateTimeField: FC<IFormDateInputProps> = ({
230282
onBlur={(e) => {
231283
// Format on blur for padding zeros
232284
if (e.target.value === "") {
285+
setMinute("");
233286
if (field.value) {
234-
updateDateTime(dayjs(field.value), hour, 0);
287+
updateDateTime(dayjs(field.value), hour, "");
235288
}
236289
} else {
237290
const minuteNum = parseInt(e.target.value);
238-
if (!isNaN(minuteNum) && minuteNum > 0) {
239-
// Apply padding only on blur
291+
if (!isNaN(minuteNum) && minuteNum >= 0) {
240292
setMinute(formatTimeValue(minuteNum));
241293
}
242294
}

0 commit comments

Comments
 (0)