mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-17 15:10:14 +00:00
fix: fixed the issue where the datePicker component was not effective (#1821)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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':
|
||||||
|
@@ -13,13 +13,15 @@ export const RenderCascader = (params: Props) => {
|
|||||||
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<div className="p-2 text-sm">
|
||||||
<Cascader
|
<Cascader
|
||||||
{...attr}
|
{...attr}
|
||||||
options={data.options}
|
options={data.options}
|
||||||
defaultValue={defaultValue}
|
defaultValue={defaultValue}
|
||||||
placeholder="Please select"
|
placeholder="please select"
|
||||||
className="w-full nodrag"
|
className="w-full nodrag"
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -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}
|
|
||||||
/>
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -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} />;
|
|
||||||
};
|
|
25
web/components/flow/node-renderer/date-picker.tsx
Normal file
25
web/components/flow/node-renderer/date-picker.tsx
Normal 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>
|
||||||
|
);
|
||||||
|
};
|
@@ -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';
|
||||||
|
@@ -13,13 +13,16 @@ export const RenderInput = (params: Props) => {
|
|||||||
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<div className="p-2 text-sm">
|
||||||
<Input
|
<Input
|
||||||
{...attr}
|
{...attr}
|
||||||
className="w-full"
|
className="w-full"
|
||||||
|
placeholder="please input"
|
||||||
defaultValue={defaultValue}
|
defaultValue={defaultValue}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
onChange(e.target.value);
|
onChange(e.target.value);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -13,13 +13,15 @@ export const RenderRadio = (params: Props) => {
|
|||||||
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<div className="p-2 text-sm">
|
||||||
<Radio.Group
|
<Radio.Group
|
||||||
{...attr}
|
{...attr}
|
||||||
options={data.options}
|
options={data.options}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
onChange(e.target.checked);
|
onChange(e.target.value);
|
||||||
}}
|
}}
|
||||||
defaultValue={defaultValue}
|
defaultValue={defaultValue}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -13,13 +13,15 @@ export const RenderSelect = (params: Props) => {
|
|||||||
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
const attr = convertKeysToCamelCase(data.ui?.attr || {});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<div className="p-2 text-sm">
|
||||||
<Select
|
<Select
|
||||||
{...attr}
|
{...attr}
|
||||||
className="w-full nodrag"
|
className="w-full nodrag"
|
||||||
placeholder="Please select"
|
placeholder="please select"
|
||||||
defaultValue={defaultValue}
|
defaultValue={defaultValue}
|
||||||
options={data.options}
|
options={data.options}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -21,12 +21,13 @@ 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}>
|
||||||
<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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -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}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
};
|
};
|
||||||
|
@@ -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>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
@@ -79,6 +79,7 @@ export const RenderTreeSelect = (params: TextAreaProps) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<div className="p-2 text-sm">
|
||||||
<TreeSelect
|
<TreeSelect
|
||||||
fieldNames={{ label: 'label', value: 'value', children: 'children' }}
|
fieldNames={{ label: 'label', value: 'value', children: 'children' }}
|
||||||
{...data.ui.attr}
|
{...data.ui.attr}
|
||||||
@@ -89,6 +90,7 @@ export const RenderTreeSelect = (params: TextAreaProps) => {
|
|||||||
treeData={data.options}
|
treeData={data.options}
|
||||||
onDropdownVisibleChange={handleDropdownVisibleChange}
|
onDropdownVisibleChange={handleDropdownVisibleChange}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
// TODO: Implement the TreeSelect component
|
// TODO: Implement the TreeSelect component
|
||||||
// <TreeSelect
|
// <TreeSelect
|
||||||
|
Reference in New Issue
Block a user