Skip to content

Commit 7ba64e7

Browse files
Merge pull request #2129 from iamfaran/feat/date-component-mask
[Feat]: add support of multiple input formats for date component
2 parents adc5f64 + bbe7f74 commit 7ba64e7

File tree

5 files changed

+13
-14
lines changed

5 files changed

+13
-14
lines changed

client/packages/lowcoder/src/comps/comps/dateComp/dateCompUtil.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ export const getMobileStyle = (style: DateTimeStyleType) =>
171171

172172
export const dateRefMethods = refMethods<CommonPickerMethods>([focusMethod, blurMethod]);
173173

174+
export const parseInputFormats = (inputFormat?: string): string | string[] =>
175+
inputFormat?.includes(',') ? inputFormat.split(',').map(f => f.trim()) : inputFormat || '';
176+
174177
export const StyledPickerPanel = styled.div<{
175178
$style: ChildrenMultiSelectStyleType
176179
}>`

client/packages/lowcoder/src/comps/comps/dateComp/dateRangeUIView.tsx

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import dayjs from "dayjs";
22
import type { DateCompViewProps } from "./dateComp";
3-
import { disabledDate, getStyle, StyledPickerPanel } from "comps/comps/dateComp/dateCompUtil";
3+
import { disabledDate, getStyle, StyledPickerPanel, parseInputFormats } from "comps/comps/dateComp/dateCompUtil";
44
import { useUIView } from "../../utils/useUIView";
55
import { checkIsMobile } from "util/commonUtils";
66
import React, { useContext } from "react";
@@ -68,20 +68,15 @@ export interface DateRangeUIViewProps extends DateCompViewProps {
6868

6969
export const DateRangeUIView = (props: DateRangeUIViewProps) => {
7070
const editorState = useContext(EditorContext);
71+
const placeholders: [string, string] = Array.isArray(props.placeholder)
72+
? props.placeholder
73+
: [props.placeholder || 'Start Date', props.placeholder || 'End Date'];
7174

72-
// Extract or compute the placeholder values
73-
let placeholders: [string, string];
74-
if (Array.isArray(props.placeholder)) {
75-
placeholders = props.placeholder;
76-
} else {
77-
// Use the same placeholder for both start and end if it's a single string
78-
placeholders = [props.placeholder || 'Start Date', props.placeholder || 'End Date'];
79-
}
8075
return useUIView(
8176
<DateRangeMobileUIView {...props} />,
8277
<RangePickerStyled
8378
{...omit(props, "onChange" , "format", "inputFormat", "pickerMode", "$childrenInputFieldStyle")}
84-
format={props.inputFormat}
79+
format={parseInputFormats(props.inputFormat)}
8580
ref={props.viewRef as any}
8681
picker={props.pickerMode as any}
8782
value={[props.start, props.end]}

client/packages/lowcoder/src/comps/comps/dateComp/dateUIView.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import dayjs from "dayjs";
22
import type { DateCompViewProps } from "./dateComp";
3-
import { disabledDate, getStyle, StyledPickerPanel } from "comps/comps/dateComp/dateCompUtil";
3+
import { disabledDate, getStyle, StyledPickerPanel, parseInputFormats } from "comps/comps/dateComp/dateCompUtil";
44
import { useUIView } from "../../utils/useUIView";
55
import { checkIsMobile } from "util/commonUtils";
66
import React, { useContext } from "react";
@@ -67,15 +67,15 @@ const DateMobileUIView = React.lazy(() =>
6767

6868
export const DateUIView = (props: DataUIViewProps) => {
6969
const editorState = useContext(EditorContext);
70-
7170
const placeholder = Array.isArray(props.placeholder) ? props.placeholder[0] : props.placeholder;
71+
7272
return useUIView(
7373
<DateMobileUIView {...props} />,
7474
<DatePickerStyled
7575
{...omit(props, "format", "inputFormat", "pickerMode", "$childrenInputFieldStyle")}
7676
$disabledStyle={props.$disabledStyle}
7777
multiple={false}
78-
format={props.inputFormat}
78+
format={parseInputFormats(props.inputFormat)}
7979
ref={props.viewRef as any}
8080
minDate={props.minDate ? dayjs(props.minDate, DateParser) : undefined}
8181
maxDate={props.maxDate ? dayjs(props.maxDate, DateParser) : undefined}

client/packages/lowcoder/src/comps/utils/propertyUtils.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export const formatPropertyView = (params: {
135135
placeholder: params.placeholder,
136136
tooltip: (
137137
<>
138-
{trans("date.reference")} &nbsp;
138+
{trans("date.inputFormatTip")} &nbsp;
139139
<a
140140
href={`${
141141
language === "zh" ? "https://day.js.org/docs/zh-CN" : "https://day.js.org/docs/en"

client/packages/lowcoder/src/i18n/locales/en.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1971,6 +1971,7 @@ export const en = {
19711971
"format": "Format",
19721972
"inputFormat": "Input Format",
19731973
"formatTip": "Support: 'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD', 'Timestamp'",
1974+
"inputFormatTip": "Supports multiple formats separated by commas (e.g., 'MM/DD/YYYY, MMDDYYYY, YYYY-MM-DD'). First format is used for display. See",
19741975
"reference": "Please Refer to",
19751976
"showTime": "Show Time",
19761977
"start": "Start Date",

0 commit comments

Comments
 (0)