Skip to content

Commit be4737e

Browse files
authored
Merge pull request #5 from littlecinemadigital/dates-textarea-url
Add Date, Date Time, URL Widgets, Text Area Updates
2 parents 276f3d0 + fd0f599 commit be4737e

File tree

10 files changed

+135
-14
lines changed

10 files changed

+135
-14
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import React from "react";
2+
import { utils } from "@rjsf/core";
3+
import { TextWidgetProps } from "../TextWidget";
4+
5+
const { localToUTC, utcToLocal } = utils;
6+
7+
const DateTimeWidget = (props: TextWidgetProps) => {
8+
const { registry } = props;
9+
const { TextWidget } = registry.widgets;
10+
const value = utcToLocal(props.value);
11+
const onChange = (value: any) => {
12+
props.onChange(localToUTC(value));
13+
};
14+
15+
return (
16+
<TextWidget
17+
type="datetime-local"
18+
InputLabelProps={{
19+
shrink: true,
20+
}}
21+
{...props}
22+
value={value}
23+
onChange={onChange}
24+
/>
25+
);
26+
};
27+
28+
export default DateTimeWidget;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { default } from "./DateTimeWidget";
2+
export * from "./DateTimeWidget";
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import React from "react";
2+
import { TextWidgetProps } from "../TextWidget";
3+
4+
const DateWidget = (props: TextWidgetProps) => {
5+
const { registry } = props;
6+
const { TextWidget } = registry.widgets;
7+
return (
8+
<TextWidget
9+
type="date"
10+
InputLabelProps={{
11+
shrink: true,
12+
}}
13+
{...props}
14+
/>
15+
);
16+
};
17+
18+
export default DateWidget;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { default } from "./DateWidget";
2+
export * from "./DateWidget";
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import React from "react";
2+
import { utils } from "@rjsf/core";
3+
import { WidgetProps } from "@rjsf/core";
4+
import { FormControl, FormLabel, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from "@chakra-ui/react";
5+
6+
const { rangeSpec } = utils;
7+
8+
const RangeWidget = ({
9+
value,
10+
readonly,
11+
disabled,
12+
onBlur,
13+
onFocus,
14+
options,
15+
schema,
16+
onChange,
17+
label,
18+
id,
19+
}: WidgetProps) => {
20+
let sliderProps = { value, label, id, ...rangeSpec(schema) };
21+
22+
const _onChange = (value: undefined | number) =>
23+
onChange(value === undefined ? options.emptyValue : value);
24+
const _onBlur = ({ target: { value } }: React.FocusEvent<HTMLInputElement>) =>
25+
onBlur(id, value);
26+
const _onFocus = ({
27+
target: { value },
28+
}: React.FocusEvent<HTMLInputElement>) => onFocus(id, value);
29+
30+
return (
31+
<FormControl>
32+
<FormLabel htmlFor={id}>{label}</FormLabel>
33+
<Slider
34+
{...sliderProps}
35+
id={id}
36+
isDisabled={disabled || readonly}
37+
onChange={_onChange}
38+
onBlur={_onBlur}
39+
onFocus={_onFocus}
40+
>
41+
<SliderTrack />
42+
<SliderFilledTrack />
43+
<SliderThumb />
44+
</Slider>
45+
</FormControl>
46+
);
47+
};
48+
49+
export default RangeWidget;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { default } from './RangeWidget';
2+
export * from './RangeWidget';

packages/chakra-ui/src/TextareaWidget/TextareaWidget.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import { Textarea } from "@chakra-ui/react";
1+
import { FormControl, FormLabel, Textarea } from "@chakra-ui/react";
22
import { WidgetProps } from "@rjsf/core";
33
import React from "react";
44

55
const TextareaWidget = ({
66
id,
77
placeholder,
88
value,
9+
label,
910
disabled,
1011
autofocus,
1112
readonly,
@@ -19,17 +20,20 @@ const TextareaWidget = ({
1920
const _onFocus = ({ target: { value } }: React.FocusEvent<HTMLTextAreaElement>) => onFocus(id, value);
2021

2122
return (
22-
<Textarea
23-
id={id}
24-
value={value}
25-
placeholder={placeholder}
26-
isDisabled={disabled}
27-
isReadOnly={readonly}
28-
autoFocus={autofocus}
29-
onChange={_onChange}
30-
onBlur={_onBlur}
31-
onFocus={_onFocus}
32-
/>
23+
<FormControl>
24+
<FormLabel htmlFor={id}>{label}</FormLabel>
25+
<Textarea
26+
id={id}
27+
value={value}
28+
placeholder={placeholder}
29+
isDisabled={disabled}
30+
isReadOnly={readonly}
31+
autoFocus={autofocus}
32+
onChange={_onChange}
33+
onBlur={_onBlur}
34+
onFocus={_onFocus}
35+
/>
36+
</FormControl>
3337
);
3438
};
3539

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from "react";
2+
import { TextWidgetProps } from "../TextWidget";
3+
4+
const URLWidget = (props: TextWidgetProps) => {
5+
const { registry } = props;
6+
const { TextWidget } = registry.widgets;
7+
return <TextWidget type="url" {...props} />;
8+
};
9+
10+
export default URLWidget;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export { default } from "./URLWidget";
2+
export * from "./URLWidget";

packages/chakra-ui/src/Widgets/Widgets.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@
22
import CheckboxesWidget from "../CheckboxesWidget/CheckboxesWidget";
33
import CheckboxWidget from "../CheckboxWidget/CheckboxWidget";
44
// import RadioWidget from '../RadioWidget/RadioWidget'
5-
// import RangeWidget from '../RangeWidget/RangeWidget'
5+
import RangeWidget from '../RangeWidget/RangeWidget'
66
// import SelectWidget from '../SelectWidget/SelectWidget'
77
import TextareaWidget from "../TextareaWidget/TextareaWidget";
88
import UpDownWidget from "../UpDownWidget/UpDownWidget";
99
import TextWidget from "../TextWidget/TextWidget";
1010
import PasswordWidget from "../PasswordWidget/PasswordWidget";
11+
import DateWidget from "../DateWidget/DateWidget";
12+
import DateTimeWidget from "../DateTimeWidget/DateTimeWidget";
1113

1214
const widgets = {
1315
// BaseInput,
1416
CheckboxWidget,
1517
CheckboxesWidget,
18+
DateWidget,
19+
DateTimeWidget,
1620
PasswordWidget,
1721
// radio: RadioWidget,
18-
// RangeWidget,
22+
RangeWidget,
1923
// select: SelectWidget,
2024
TextareaWidget,
2125
TextWidget,

0 commit comments

Comments
 (0)