UNPKG

@aokiapp/rjsf-mantine-theme

Version:

Mantine theme, fields and widgets for react-jsonschema-form

1 lines 10.1 kB
{"version":3,"file":"AltDateWidget.cjs","sources":["../../src/widgets/AltDateWidget.tsx"],"sourcesContent":["import { MouseEvent, useCallback, useEffect, useReducer, useState } from 'react';\nimport {\n ariaDescribedByIds,\n parseDateString,\n toDateString,\n pad,\n DateObject,\n type DateElementFormat,\n FormContextType,\n RJSFSchema,\n StrictRJSFSchema,\n TranslatableString,\n WidgetProps,\n getDateElementProps,\n} from '@rjsf/utils';\nimport { Button, Grid, Group, Stack } from '@mantine/core';\n\nfunction rangeOptions(start: number, stop: number) {\n const options = [];\n for (let i = start; i <= stop; i++) {\n options.push({ value: i, label: pad(i, 2) });\n }\n return options;\n}\n\nfunction readyForChange(state: DateObject) {\n return Object.values(state).every((value) => value !== -1);\n}\n\ntype DateElementProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> = Pick<\n WidgetProps<T, S, F>,\n 'value' | 'name' | 'disabled' | 'readonly' | 'autofocus' | 'registry' | 'onBlur' | 'onFocus'\n> & {\n rootId: string;\n select: (property: keyof DateObject, value: any) => void;\n type: string;\n range: [number, number];\n};\n\nfunction DateElement<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({\n type,\n range,\n value,\n select,\n rootId,\n name,\n disabled,\n readonly,\n autofocus,\n registry,\n onBlur,\n onFocus,\n}: DateElementProps<T, S, F>) {\n const id = rootId + '_' + type;\n const { SelectWidget } = registry.widgets;\n return (\n <SelectWidget\n schema={{ type: 'integer' } as S}\n id={id}\n name={name}\n className='form-control'\n options={{ enumOptions: rangeOptions(range[0], range[1]) }}\n placeholder={type}\n value={value}\n disabled={disabled}\n readonly={readonly}\n autofocus={autofocus}\n onChange={(value: any) => select(type as keyof DateObject, value)}\n onBlur={onBlur}\n onFocus={onFocus}\n registry={registry}\n label=''\n aria-describedby={ariaDescribedByIds<T>(rootId)}\n />\n );\n}\n\n/** The `AltDateWidget` is an alternative widget for rendering date properties.\n * @param props - The `WidgetProps` for this component\n */\nfunction AltDateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({\n time = false,\n disabled = false,\n readonly = false,\n autofocus = false,\n options,\n id,\n name,\n registry,\n onBlur,\n onFocus,\n onChange,\n value,\n className,\n}: WidgetProps<T, S, F>) {\n const { translateString } = registry;\n const [lastValue, setLastValue] = useState(value);\n const [state, setState] = useReducer(\n (state: DateObject, action: Partial<DateObject>) => {\n return { ...state, ...action };\n },\n parseDateString(value, time),\n );\n\n useEffect(() => {\n const stateValue = toDateString(state, time);\n if (readyForChange(state) && stateValue !== value) {\n // The user changed the date to a new valid data via the comboboxes, so call onChange\n onChange(stateValue);\n } else if (lastValue !== value) {\n // We got a new value in the props\n setLastValue(value);\n setState(parseDateString(value, time));\n }\n }, [time, value, onChange, state, lastValue]);\n\n const handleChange = useCallback((property: keyof DateObject, value: string) => {\n setState({ [property]: value });\n }, []);\n\n const handleSetNow = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n if (disabled || readonly) {\n return;\n }\n const nextState = parseDateString(new Date().toJSON(), time);\n onChange(toDateString(nextState, time));\n },\n [disabled, onChange, readonly, time],\n );\n\n const handleClear = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n if (disabled || readonly) {\n return;\n }\n onChange(undefined);\n },\n [disabled, readonly, onChange],\n );\n\n return (\n <Stack className={`armt-widget-altdate ${className ?? ''}`} gap='xs'>\n <Grid>\n {getDateElementProps(\n state,\n time,\n options.yearsRange as [number, number] | undefined,\n options.format as DateElementFormat | undefined,\n ).map((elemProps, i) => (\n <Grid.Col span={4} key={i}>\n <DateElement\n rootId={id}\n name={name}\n select={handleChange}\n {...elemProps}\n disabled={disabled}\n readonly={readonly}\n registry={registry}\n onBlur={onBlur}\n onFocus={onFocus}\n autofocus={autofocus && i === 0}\n />\n </Grid.Col>\n ))}\n </Grid>\n <Group justify='flex-end'>\n {(options.hideNowButton !== 'undefined' ? !options.hideNowButton : true) && (\n <Button variant='filled' onClick={handleSetNow}>\n {translateString(TranslatableString.NowLabel)}\n </Button>\n )}\n {(options.hideClearButton !== 'undefined' ? !options.hideClearButton : true) && (\n <Button variant='outline' onClick={handleClear}>\n {translateString(TranslatableString.ClearLabel)}\n </Button>\n )}\n </Group>\n </Stack>\n );\n}\n\nexport default AltDateWidget;\n"],"names":["pad","jsx","ariaDescribedByIds","useState","useReducer","parseDateString","useEffect","toDateString","useCallback","jsxs","Stack","Grid","getDateElementProps","Group","Button","TranslatableString"],"mappings":"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"}