fix: fixed the issue where the datePicker component was not effective (#1821)

This commit is contained in:
Dreammy23
2024-08-13 17:22:16 +08:00
committed by GitHub
15 changed files with 102 additions and 91 deletions

View File

@@ -48,7 +48,7 @@ yarn install
### Usage ### Usage
```sh ```sh
cp .env.example .env cp .env.template .env
``` ```
edit the `API_BASE_URL` to the real address edit the `API_BASE_URL` to the real address

View File

@@ -9,7 +9,7 @@ import {
RenderCheckbox, RenderCheckbox,
RenderRadio, RenderRadio,
RenderCascader, RenderCascader,
RenderDataPicker, RenderDatePicker,
RenderInput, RenderInput,
RenderSlider, RenderSlider,
RenderTreeSelect, RenderTreeSelect,
@@ -28,7 +28,6 @@ interface NodeParamHandlerProps {
// render node parameters item // render node parameters item
const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label, index }) => { const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label, index }) => {
function onChange(value: any) { function onChange(value: any) {
console.log(value);
data.value = value; data.value = value;
} }
@@ -116,7 +115,7 @@ const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label,
function renderNodeWithUiParam(data: IFlowNodeParameter) { function renderNodeWithUiParam(data: IFlowNodeParameter) {
let defaultValue = data.value ?? data.default; let defaultValue = data.value ?? data.default;
const props = { data, defaultValue, onChange }; const props = { data, defaultValue, onChange };
switch (data?.ui?.ui_type) { switch (data?.ui?.ui_type) {
case 'select': case 'select':
return <RenderSelect {...props} />; return <RenderSelect {...props} />;
@@ -134,8 +133,8 @@ const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label,
return <RenderTextArea {...props} />; return <RenderTextArea {...props} />;
case 'slider': case 'slider':
return <RenderSlider {...props} />; return <RenderSlider {...props} />;
case 'data_picker': case 'date_picker':
return <RenderDataPicker {...props} />; return <RenderDatePicker {...props} />;
case 'time_picker': case 'time_picker':
return <RenderTimePicker {...props} />; return <RenderTimePicker {...props} />;
case 'tree_select': case 'tree_select':

View File

@@ -13,13 +13,15 @@ export const RenderCascader = (params: Props) => {
const attr = convertKeysToCamelCase(data.ui?.attr || {}); const attr = convertKeysToCamelCase(data.ui?.attr || {});
return ( return (
<Cascader <div className="p-2 text-sm">
{...attr} <Cascader
options={data.options} {...attr}
defaultValue={defaultValue} options={data.options}
placeholder="Please select" defaultValue={defaultValue}
className="w-full nodrag" placeholder="please select"
onChange={onChange} className="w-full nodrag"
/> onChange={onChange}
/>
</div>
); );
}; };

View File

@@ -14,13 +14,9 @@ export const RenderCheckbox = (params: Props) => {
return ( return (
data.options?.length > 0 && ( data.options?.length > 0 && (
<Checkbox.Group <div className="p-2 text-sm">
{...attr} <Checkbox.Group {...attr} options={data.options} defaultValue={defaultValue} onChange={onChange} />
options={data.options} </div>
disabled
defaultValue={defaultValue}
onChange={onChange}
/>
) )
); );
}; };

View File

@@ -1,17 +0,0 @@
import { IFlowNodeParameter } from '@/types/flow';
import { convertKeysToCamelCase } from '@/utils/flow';
import { DatePicker } from 'antd';
import dayjs from 'dayjs';
type Props = {
data: IFlowNodeParameter;
defaultValue: any;
onChange: (value: any) => void;
};
export const RenderDataPicker = (params: Props) => {
const { data, defaultValue, onChange } = params;
const attr = convertKeysToCamelCase(data.ui?.attr || {});
return <DatePicker {...attr} defaultValue={dayjs(defaultValue)} onChange={onChange} />;
};

View File

@@ -0,0 +1,25 @@
import { IFlowNodeParameter } from '@/types/flow';
import { convertKeysToCamelCase } from '@/utils/flow';
import { DatePicker, DatePickerProps } from 'antd';
import dayjs from 'dayjs';
type Props = {
data: IFlowNodeParameter;
defaultValue: any;
onChange: (value: any) => void;
};
export const RenderDatePicker = (params: Props) => {
const { data, defaultValue, onChange } = params;
const attr = convertKeysToCamelCase(data.ui?.attr || {});
const onChangeDate: DatePickerProps['onChange'] = (date, dateString) => {
onChange(dateString);
};
return (
<div className="p-2 text-sm">
<DatePicker {...attr} className="w-full" defaultValue={dayjs(defaultValue)} onChange={onChangeDate} />
</div>
);
};

View File

@@ -1,6 +1,6 @@
export * from './select'; export * from './select';
export * from './cascader'; export * from './cascader';
export * from './data-picker'; export * from './date-picker';
export * from './input'; export * from './input';
export * from './checkbox'; export * from './checkbox';
export * from './radio'; export * from './radio';

View File

@@ -13,13 +13,16 @@ export const RenderInput = (params: Props) => {
const attr = convertKeysToCamelCase(data.ui?.attr || {}); const attr = convertKeysToCamelCase(data.ui?.attr || {});
return ( return (
<Input <div className="p-2 text-sm">
{...attr} <Input
className="w-full" {...attr}
defaultValue={defaultValue} className="w-full"
onChange={(e) => { placeholder="please input"
onChange(e.target.value); defaultValue={defaultValue}
}} onChange={(e) => {
/> onChange(e.target.value);
}}
/>
</div>
); );
}; };

View File

@@ -13,13 +13,15 @@ export const RenderRadio = (params: Props) => {
const attr = convertKeysToCamelCase(data.ui?.attr || {}); const attr = convertKeysToCamelCase(data.ui?.attr || {});
return ( return (
<Radio.Group <div className="p-2 text-sm">
{...attr} <Radio.Group
options={data.options} {...attr}
onChange={(e) => { options={data.options}
onChange(e.target.checked); onChange={(e) => {
}} onChange(e.target.value);
defaultValue={defaultValue} }}
/> defaultValue={defaultValue}
/>
</div>
); );
}; };

View File

@@ -13,13 +13,15 @@ export const RenderSelect = (params: Props) => {
const attr = convertKeysToCamelCase(data.ui?.attr || {}); const attr = convertKeysToCamelCase(data.ui?.attr || {});
return ( return (
<Select <div className="p-2 text-sm">
{...attr} <Select
className="w-full nodrag" {...attr}
placeholder="Please select" className="w-full nodrag"
defaultValue={defaultValue} placeholder="please select"
options={data.options} defaultValue={defaultValue}
onChange={onChange} options={data.options}
/> onChange={onChange}
/>
</div>
); );
}; };

View File

@@ -19,14 +19,15 @@ export const RenderSlider = (params: TextAreaProps) => {
setInputValue(newValue as number); setInputValue(newValue as number);
onChange(newValue as number); onChange(newValue as number);
}; };
return ( return (
<> <div className="p-2 text-sm">
{data?.ui?.show_input ? ( {data?.ui?.show_input ? (
<Row> <Row>
<Col span={12}> <Col span={12}>
<Slider {...attr} onChange={onChangeSlider} value={typeof inputValue === 'number' ? inputValue : 0} /> <Slider {...attr} onChange={onChangeSlider} value={typeof inputValue === 'number' ? inputValue : 0} />
</Col> </Col>
<Col span={4}> <Col span={4}>
<InputNumber {...attr} style={{ margin: '0 16px' }} value={inputValue} onChange={onChangeSlider} /> <InputNumber {...attr} style={{ margin: '0 16px' }} value={inputValue} onChange={onChangeSlider} />
</Col> </Col>
@@ -34,6 +35,6 @@ export const RenderSlider = (params: TextAreaProps) => {
) : ( ) : (
<Slider {...attr} onChange={onChangeSlider} value={typeof inputValue === 'number' ? inputValue : 0} /> <Slider {...attr} onChange={onChangeSlider} value={typeof inputValue === 'number' ? inputValue : 0} />
)} )}
</> </div>
); );
}; };

View File

@@ -21,7 +21,7 @@ export const RenderSlider = (params: TextAreaProps) => {
}; };
return ( return (
<> <div className="p-2 text-sm">
{data?.ui?.show_input ? ( {data?.ui?.show_input ? (
<Row> <Row>
<Col span={12}> <Col span={12}>
@@ -34,6 +34,6 @@ export const RenderSlider = (params: TextAreaProps) => {
) : ( ) : (
<Slider {...attr} onChange={onChangeSlider} value={typeof inputValue === 'number' ? inputValue : 0} /> <Slider {...attr} onChange={onChangeSlider} value={typeof inputValue === 'number' ? inputValue : 0} />
)} )}
</> </div>
); );
}; };

View File

@@ -15,12 +15,8 @@ export const RenderTextArea = (params: TextAreaProps) => {
convertKeysToCamelCase(data?.ui?.attr?.autosize || {}); convertKeysToCamelCase(data?.ui?.attr?.autosize || {});
return ( return (
<TextArea <div className="p-2 text-sm">
{...data.ui.attr} <TextArea {...data.ui.attr} defaultValue={defaultValue} onChange={(e) => onChange(e.target.value)} {...data.ui.attr.autosize} rows={4} />
defaultValue={defaultValue} </div>
onChange={(e) => onChange(e.target.value)} );
{...data.ui.attr.autosize}
rows={4}
/>
)
}; };

View File

@@ -11,15 +11,15 @@ type TextAreaProps = {
}; };
export const RenderTimePicker = (params: TextAreaProps) => { export const RenderTimePicker = (params: TextAreaProps) => {
const { data, defaultValue, onChange } = params; const { data, defaultValue, onChange } = params;
const [value, setValue] = useState(defaultValue);
const attr = convertKeysToCamelCase(data.ui?.attr || {}); const attr = convertKeysToCamelCase(data.ui?.attr || {});
// dayjs.extend(customParseFormat);
const onChangeTime: TimePickerProps['onChange'] = (time, timeString) => { const onChangeTime: TimePickerProps['onChange'] = (time, timeString) => {
onChange(timeString); onChange(timeString);
setValue(time);
}; };
return <TimePicker {...attr} style={{ width: '100%' }} value={value} onChange={onChangeTime} />; return (
<div className="p-2 text-sm">
<TimePicker {...attr} className="w-full" defaultValue={defaultValue} onChange={onChangeTime} />
</div>
);
}; };

View File

@@ -79,16 +79,18 @@ export const RenderTreeSelect = (params: TextAreaProps) => {
}; };
return ( return (
<TreeSelect <div className="p-2 text-sm">
fieldNames={{ label: 'label', value: 'value', children: 'children' }} <TreeSelect
{...data.ui.attr} fieldNames={{ label: 'label', value: 'value', children: 'children' }}
style={{ width: '100%' }} {...data.ui.attr}
value={defaultValue} style={{ width: '100%' }}
treeDefaultExpandAll value={defaultValue}
onChange={onChange} treeDefaultExpandAll
treeData={data.options} onChange={onChange}
onDropdownVisibleChange={handleDropdownVisibleChange} treeData={data.options}
/> onDropdownVisibleChange={handleDropdownVisibleChange}
/>
</div>
// TODO: Implement the TreeSelect component // TODO: Implement the TreeSelect component
// <TreeSelect // <TreeSelect