@gen-epix/ui-core-form 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/Autocomplete.js.map +1 -1
- package/dist/_chunks/DatePicker.js +1 -1
- package/dist/_chunks/DatePicker.js.map +1 -1
- package/dist/_chunks/FileUpload.js.map +1 -1
- package/dist/_chunks/FormUtil.js +2 -2
- package/dist/_chunks/FormUtil.js.map +1 -1
- package/dist/_chunks/RichTextEditor.js +9155 -6032
- package/dist/_chunks/RichTextEditor.js.map +1 -1
- package/dist/_chunks/TransferList.js.map +1 -1
- package/dist/_chunks/classnames.js.map +1 -1
- package/dist/_chunks/isEqual.js.map +1 -1
- package/dist/_chunks/isObjectLike.js.map +1 -1
- package/dist/_chunks/isValid.js.map +1 -1
- package/dist/_chunks/sv.js.map +1 -1
- package/dist/components/fields/Autocomplete/Autocomplete.d.ts +1 -1
- package/dist/components/fields/Autocomplete/AutocompleteSelectAllContext.d.ts +1 -1
- package/dist/components/fields/Autocomplete/AutocompleteSelectAllPaper.d.ts +1 -1
- package/dist/components/fields/Autocomplete/index.js +1 -2
- package/dist/components/fields/CheckboxGroup/CheckboxGroup.d.ts +1 -1
- package/dist/components/fields/CheckboxGroup/index.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -1
- package/dist/components/fields/DatePicker/DatePickerInputAdornment.d.ts +1 -1
- package/dist/components/fields/DatePicker/index.js +1 -2
- package/dist/components/fields/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/dist/components/fields/DateRangePicker/index.js +1 -1
- package/dist/components/fields/DateRangePicker/index.js.map +1 -1
- package/dist/components/fields/FileUpload/index.js +1 -2
- package/dist/components/fields/NumberField/index.js.map +1 -1
- package/dist/components/fields/NumberRangeInput/index.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -1
- package/dist/components/fields/RadioGroup/index.js.map +1 -1
- package/dist/components/fields/RichTextEditor/RichTextEditorContent.d.ts +1 -1
- package/dist/components/fields/RichTextEditor/index.js +1 -2
- package/dist/components/fields/Select/Select.d.ts +1 -1
- package/dist/components/fields/Select/index.js.map +1 -1
- package/dist/components/fields/Switch/index.js.map +1 -1
- package/dist/components/fields/TextField/index.js.map +1 -1
- package/dist/components/fields/ToggleButtonGroup/ToggleButtonGroup.d.ts +1 -1
- package/dist/components/fields/ToggleButtonGroup/index.js.map +1 -1
- package/dist/components/fields/TransferList/TransferList.d.ts +1 -1
- package/dist/components/fields/TransferList/index.js +1 -2
- package/dist/components/helpers/FormFieldHelperText/index.js.map +1 -1
- package/dist/components/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.d.ts +1 -1
- package/dist/components/helpers/FormFieldLoadingIndicator/index.js.map +1 -1
- package/dist/components/helpers/GenericForm/GenericForm.d.ts +2 -2
- package/dist/components/helpers/GenericForm/index.js +1 -1
- package/dist/components/helpers/GenericForm/index.js.map +1 -1
- package/dist/hooks/useIsFormFieldRequiredFromSchema/index.js.map +1 -1
- package/dist/models/{form.js → form.models.js} +2 -2
- package/dist/models/form.models.js.map +1 -0
- package/dist/setup/setup.js.map +1 -1
- package/dist/utils/FormUtil/FormUtil.d.ts +1 -1
- package/dist/utils/FormUtil/index.js +1 -2
- package/dist/utils/SchemaUtil/index.js.map +1 -1
- package/package.json +59 -59
- package/dist/models/form.js.map +0 -1
- /package/dist/models/{form.d.ts → form.models.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.js","names":[],"sources":["../../src/components/fields/Autocomplete/AutocompleteSelectAllContext.tsx","../../src/components/fields/Autocomplete/AutocompleteSelectAllPaper.tsx","../../src/components/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { AutocompleteSelectAllContextData } from '../../../models/form';\n\nexport const AutocompleteSelectAllContext = createContext<AutocompleteSelectAllContextData | null>(null);\n","import type { MouseEvent } from 'react';\nimport {\n use,\n useCallback,\n} from 'react';\nimport {\n Box,\n Checkbox,\n Divider,\n Paper,\n} from '@mui/material';\nimport type { PaperProps } from '@mui/material';\nimport CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '@mui/icons-material/CheckBox';\nimport IndeterminateCheckBoxIcon from '@mui/icons-material/IndeterminateCheckBox';\n\nimport { AutocompleteSelectAllContext } from './AutocompleteSelectAllContext';\n\nexport const AutocompleteSelectAllPaper = ({ children, ...props }: PaperProps) => {\n const ctx = use(AutocompleteSelectAllContext);\n\n const onClickSelectAll = useCallback(() => {\n if (!ctx) {\n return;\n }\n const { currentValues, enabledOptionValues, handleSelectAll } = ctx;\n const selCount = currentValues.filter(v => enabledOptionValues.includes(v)).length;\n const curIsAll = enabledOptionValues.length > 0 && selCount === enabledOptionValues.length;\n handleSelectAll(curIsAll, currentValues);\n }, [ctx]);\n\n const onMouseDownSelectAll = useCallback((e: MouseEvent<HTMLElement>) => {\n e.preventDefault();\n }, []);\n\n const currentValues = ctx?.currentValues ?? [];\n const enabledOptionValues = ctx?.enabledOptionValues ?? [];\n const selectedEnabledCount = currentValues.filter(v => enabledOptionValues.includes(v)).length;\n const isAll = enabledOptionValues.length > 0 && selectedEnabledCount === enabledOptionValues.length;\n const isSome = selectedEnabledCount > 0 && !isAll;\n\n return (\n <Paper {...props}>\n {!!ctx && (\n <>\n <Box\n onClick={onClickSelectAll}\n onMouseDown={onMouseDownSelectAll}\n sx={{ '&:hover': { bgcolor: 'action.hover' }, alignItems: 'center', cursor: 'pointer', display: 'flex' }}\n >\n <Checkbox\n checked={isAll}\n checkedIcon={<CheckBoxIcon />}\n icon={<CheckBoxOutlineBlankIcon />}\n indeterminate={isSome}\n indeterminateIcon={<IndeterminateCheckBoxIcon />}\n style={{ marginRight: 8 }}\n />\n {ctx.selectAllLabel}\n </Box>\n <Divider />\n </>\n )}\n {children}\n </Paper>\n );\n};\n","import type {\n HTMLAttributes,\n ReactElement,\n ReactNode,\n SyntheticEvent,\n} from 'react';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n Checkbox,\n Chip,\n FormControl,\n Autocomplete as MuiAutocomplete,\n Stack,\n TextField,\n} from '@mui/material';\nimport CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '@mui/icons-material/CheckBox';\nimport type {\n AutocompleteRenderInputParams,\n AutocompleteRenderOptionState,\n AutocompleteRenderValueGetItemProps,\n AutocompleteValue,\n FilterOptionsState,\n TextFieldVariants,\n} from '@mui/material';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nimport type {\n AutoCompleteOption,\n AutocompleteSelectAllContextData,\n} from '../../../models/form';\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nimport { AutocompleteSelectAllPaper } from './AutocompleteSelectAllPaper';\nimport { AutocompleteSelectAllContext } from './AutocompleteSelectAllContext';\n\n\n// A multi-select field's own value is already the array, so it must not be re-wrapped by `AutocompleteValue`'s `Multiple` handling.\nexport type AutocompleteChangeValue<TFieldValues extends FieldValues, TName extends Path<TFieldValues>, TMultiple extends boolean> = TMultiple extends true ? TFieldValues[TName] : AutocompleteValue<TFieldValues[TName], false, false, false>;\n\nexport type AutocompleteProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues>, TMultiple extends boolean> = {\n readonly disabled?: boolean;\n readonly groupValues?: boolean;\n readonly hideSelectAll?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly multiple?: TMultiple;\n readonly name: TName;\n readonly onChange?: (value: AutocompleteChangeValue<TFieldValues, TName, TMultiple>) => void;\n readonly options: AutoCompleteOption[];\n readonly required?: boolean;\n readonly shouldSortOptions?: boolean;\n readonly textFieldVariant?: TextFieldVariants;\n readonly warningMessage?: string;\n};\ntype MultipleRenderValueItemProps = ReturnType<AutocompleteRenderValueGetItemProps<true>>;\n\ntype Value = number | string;\n\nexport const Autocomplete = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>, TMultiple extends boolean = false>({\n disabled = false,\n groupValues = false,\n hideSelectAll = false,\n infoMessage,\n label,\n loading = false,\n multiple,\n name,\n onChange: onChangeProp,\n options,\n required = false,\n shouldSortOptions,\n textFieldVariant = 'outlined',\n warningMessage,\n}: AutocompleteProps<TFieldValues, TName, TMultiple>): ReactElement => {\n const { t } = useTranslation();\n const { control, formState: { errors }, setValue, watch } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const inputRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState('');\n\n const onChangePropRef = useRef(onChangeProp);\n useEffect(() => {\n onChangePropRef.current = onChangeProp;\n }, [onChangeProp]);\n\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n\n const sortedOptions = useMemo(() => {\n if (!shouldSortOptions) {\n return options;\n }\n return structuredClone(options).sort((a, b) => a.label.localeCompare(b.label));\n }, [options, shouldSortOptions]);\n\n const { mappedOptions, optionValues }: { mappedOptions: Map<Value, AutoCompleteOption>; optionValues: Array<Value> } = useMemo(() => {\n const values: Array<Value> = [];\n const mapped = new Map<Value, AutoCompleteOption>();\n sortedOptions.forEach(option => {\n values.push(option.value);\n mapped.set(option.value, option);\n });\n return {\n mappedOptions: mapped,\n optionValues: values,\n };\n }, [sortedOptions]);\n\n const getOptionLabel = useCallback((value: AutoCompleteOption['value']) => loading ? t`Loading...` : mappedOptions.get(value)?.label, [loading, mappedOptions, t]);\n const getIsOptionEqualToValue = useCallback((optionValue: AutoCompleteOption['value'], value: AutoCompleteOption['value']) => optionValue === value, []);\n const getIsOptionDisabled = useCallback((value: AutoCompleteOption['value']): boolean => mappedOptions.get(value)?.disabled, [mappedOptions]);\n const groupBy = useCallback((value: AutoCompleteOption['value']): string => mappedOptions.get(value)?.groupByValue, [mappedOptions]);\n const getOptionKey = useCallback((value: AutoCompleteOption['value']): string => String(mappedOptions.get(value)?.value), [mappedOptions]);\n\n const renderOption = useCallback((props: HTMLAttributes<HTMLLIElement>, option: TFieldValues[TName], state: AutocompleteRenderOptionState): ReactNode => {\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n <li\n aria-disabled={props['aria-disabled']}\n aria-selected={props['aria-selected']}\n className={props.className}\n data-option-index={(props as { 'data-option-index': string })['data-option-index']}\n id={props.id}\n key={getOptionKey(option)}\n onClick={props.onClick}\n onMouseMove={props.onMouseMove}\n onTouchStart={props.onTouchStart}\n role={props.role}\n style={{\n margin: 0,\n padding: 0,\n }}\n tabIndex={props.tabIndex}\n >\n <Checkbox\n checked={state.selected}\n checkedIcon={<CheckBoxIcon />}\n icon={<CheckBoxOutlineBlankIcon />}\n style={{ marginRight: 8 }}\n />\n {getOptionLabel(option)}\n </li>\n );\n }, [getOptionKey, getOptionLabel]);\n\n const onMuiAutocompleteInputChange = useCallback((_event: SyntheticEvent, value: string) => {\n setInputValue(value);\n }, []);\n\n const renderInput = useCallback((params: AutocompleteRenderInputParams) => {\n const helperText = (\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n warningMessage={warningMessage}\n />\n );\n\n return (\n <TextField\n disabled={disabled || loading}\n error={hasError}\n fullWidth={params.fullWidth}\n helperText={helperText}\n id={params.id}\n inputRef={inputRef}\n label={label}\n size={params.size}\n slotProps={{\n formHelperText: { className: classnames({ 'Mui-warning': hasWarning }) },\n htmlInput: {\n ...params.slotProps.htmlInput,\n },\n input: {\n ...params.slotProps.input,\n className: classnames(params.slotProps.input.className, {\n 'Mui-warning': hasWarning,\n }),\n },\n inputLabel: {\n ...params.slotProps.inputLabel,\n className: classnames({ 'Mui-warning': hasWarning }),\n required: required && !disabled,\n },\n }}\n variant={textFieldVariant}\n />\n );\n }, [disabled, errorMessage, hasError, hasWarning, infoMessage, label, loading, required, textFieldVariant, warningMessage]);\n\n const renderValue = useCallback((values: AutocompleteValue<TFieldValues[TName], TMultiple, false, false>, getItemProps: AutocompleteRenderValueGetItemProps<TMultiple>) => {\n const selectedValues = (Array.isArray(values) ? values : [values]) as Value[];\n\n return (\n <Stack\n direction={'row'}\n sx={{\n flexWrap: 'wrap',\n }}\n >\n {selectedValues.map((value: Value, index: number) => {\n const props = getItemProps({ index }) as MultipleRenderValueItemProps;\n const option = mappedOptions.get(value);\n\n return (\n <Chip\n {...props}\n // eslint-disable-next-line @eslint-react/jsx-no-key-after-spread\n key={String(value)}\n label={getOptionLabel(value)}\n onDelete={option?.disabled ? undefined : props.onDelete}\n size={'small'}\n />\n );\n })}\n </Stack>\n );\n }, [getOptionLabel, mappedOptions]);\n\n const onMuiAutocompleteChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: SyntheticEvent, value: AutocompleteValue<TFieldValues[TName], TMultiple, false, false>) => {\n if (onChangeProp) {\n onChangeProp(value as unknown as AutocompleteChangeValue<TFieldValues, TName, TMultiple>);\n }\n onChange(value);\n }\n , [onChangeProp]);\n\n const filterOptions = useCallback((_filterableOptions: TFieldValues[TName][], filterState: FilterOptionsState<TFieldValues[TName]>): TFieldValues[TName][] => {\n if (filterState.inputValue) {\n return sortedOptions.filter(option => option.label.toLowerCase().includes(filterState.inputValue.toLowerCase())).map((option) => option.value) as TFieldValues[TName][];\n }\n return sortedOptions.map((option) => option.value) as TFieldValues[TName][];\n }, [sortedOptions]);\n\n const enabledOptionValues = useMemo(() =>\n optionValues.filter(v => !mappedOptions.get(v)?.disabled)\n , [optionValues, mappedOptions]);\n\n const watchedValue = watch(name);\n const currentValues = useMemo(() =>\n multiple && Array.isArray(watchedValue) ? watchedValue as Value[] : []\n , [multiple, watchedValue]);\n\n const handleSelectAll = useCallback((isCurrentlyAll: boolean, curValues: Value[]) => {\n const newValue = isCurrentlyAll\n ? curValues.filter(v => mappedOptions.get(v)?.disabled)\n : [...new Set([...curValues, ...enabledOptionValues])];\n onChangePropRef.current?.(newValue as unknown as AutocompleteChangeValue<TFieldValues, TName, TMultiple>);\n setValue(name, newValue as TFieldValues[TName], { shouldDirty: true, shouldTouch: true, shouldValidate: true });\n }, [enabledOptionValues, mappedOptions, name, setValue]);\n\n const selectAllContextValue = useMemo<AutocompleteSelectAllContextData>(() => ({\n currentValues,\n enabledOptionValues,\n handleSelectAll,\n selectAllLabel: t`Select all`,\n }), [currentValues, enabledOptionValues, handleSelectAll, t]);\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n return (\n <MuiAutocomplete<TFieldValues[TName], TMultiple>\n autoComplete\n autoHighlight\n disableClearable={required as undefined}\n disableCloseOnSelect={multiple}\n disabled={disabled || loading}\n filterOptions={filterOptions}\n getOptionDisabled={getIsOptionDisabled}\n getOptionKey={getOptionKey}\n getOptionLabel={getOptionLabel}\n groupBy={groupValues ? groupBy : undefined}\n inputValue={multiple ? inputValue : undefined}\n isOptionEqualToValue={getIsOptionEqualToValue}\n multiple={multiple}\n noOptionsText={t`No results`}\n onBlur={onBlur}\n onChange={onMuiAutocompleteChange(onChange)}\n onInputChange={multiple ? onMuiAutocompleteInputChange : undefined}\n options={optionValues as TFieldValues[TName]}\n renderInput={renderInput}\n renderOption={multiple ? renderOption : undefined}\n renderValue={multiple ? renderValue : undefined}\n slots={(multiple && !hideSelectAll) ? { paper: AutocompleteSelectAllPaper } : undefined}\n value={value}\n />\n );\n }, [required, multiple, hideSelectAll, disabled, loading, filterOptions, getIsOptionDisabled, getOptionKey, getOptionLabel, groupValues, groupBy, inputValue, getIsOptionEqualToValue, t, onMuiAutocompleteChange, onMuiAutocompleteInputChange, optionValues, renderInput, renderOption, renderValue]);\n\n return (\n <AutocompleteSelectAllContext value={multiple ? selectAllContextValue : null}>\n <FormControl\n {...TestIdUtil.createAttributes('Autocomplete', { label, name })}\n fullWidth\n >\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n {!!loading && <FormFieldLoadingIndicator />}\n </FormControl>\n </AutocompleteSelectAllContext>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Autocomplete.js","names":["_Fragment","Autocomplete","classnames","MuiAutocomplete","__toESM","require_classnames","Fragment$1","CheckBoxOutlineBlankIcon","CheckBoxIcon","IndeterminateCheckBoxIcon","import_classnames","AutocompleteSelectAllContext","createContext","AutocompleteSelectAllPaper","props","ctx","use","onClickSelectAll","useCallback","selCount","currentValues","enabledOptionValues","v","onMouseDownSelectAll","selectedEnabledCount","isAll","isSome","Paper","Box","Checkbox","Divider","children","Autocomplete$1","onChangeProp","useTranslation","useFormContext","errorMessage","FormUtil","errors","name","inputRef","useRef","inputValue","setInputValue","useState","onChangePropRef","hasError","hasWarning","warningMessage","sortedOptions","useMemo","shouldSortOptions","options","a","b","values","mapped","option","getOptionLabel","loading","mappedOptions","value","t","getIsOptionEqualToValue","optionValue","getIsOptionDisabled","groupBy","getOptionKey","renderOption","state","onMuiAutocompleteInputChange","renderInput","helperText","FormFieldHelperText","TextField","disabled","params","required","textFieldVariant","infoMessage","label","renderValue","Stack","getItemProps","Chip","onMuiAutocompleteChange","onChange","filterOptions","filterState","optionValues","watchedValue","watch","multiple","handleSelectAll","newValue","isCurrentlyAll","curValues","setValue","selectAllContextValue","renderController","ref","Autocomplete","groupValues","hideSelectAll","FormControl","TestIdUtil","Controller","FormFieldLoadingIndicator"],"sources":["../../src/components/fields/Autocomplete/AutocompleteSelectAllContext.tsx","../../src/components/fields/Autocomplete/AutocompleteSelectAllPaper.tsx","../../src/components/fields/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { AutocompleteSelectAllContextData } from '../../../models/form.models';\n\nexport const AutocompleteSelectAllContext = createContext<AutocompleteSelectAllContextData | null>(null);\n","import type { MouseEvent } from 'react';\nimport {\n use,\n useCallback,\n} from 'react';\nimport {\n Box,\n Checkbox,\n Divider,\n Paper,\n} from '@mui/material';\nimport type { PaperProps } from '@mui/material';\nimport CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '@mui/icons-material/CheckBox';\nimport IndeterminateCheckBoxIcon from '@mui/icons-material/IndeterminateCheckBox';\n\nimport { AutocompleteSelectAllContext } from './AutocompleteSelectAllContext';\n\nexport const AutocompleteSelectAllPaper = ({ children, ...props }: PaperProps) => {\n const ctx = use(AutocompleteSelectAllContext);\n\n const onClickSelectAll = useCallback(() => {\n if (!ctx) {\n return;\n }\n const { currentValues, enabledOptionValues, handleSelectAll } = ctx;\n const selCount = currentValues.filter(v => enabledOptionValues.includes(v)).length;\n const curIsAll = enabledOptionValues.length > 0 && selCount === enabledOptionValues.length;\n handleSelectAll(curIsAll, currentValues);\n }, [ctx]);\n\n const onMouseDownSelectAll = useCallback((e: MouseEvent<HTMLElement>) => {\n e.preventDefault();\n }, []);\n\n const currentValues = ctx?.currentValues ?? [];\n const enabledOptionValues = ctx?.enabledOptionValues ?? [];\n const selectedEnabledCount = currentValues.filter(v => enabledOptionValues.includes(v)).length;\n const isAll = enabledOptionValues.length > 0 && selectedEnabledCount === enabledOptionValues.length;\n const isSome = selectedEnabledCount > 0 && !isAll;\n\n return (\n <Paper {...props}>\n {!!ctx && (\n <>\n <Box\n onClick={onClickSelectAll}\n onMouseDown={onMouseDownSelectAll}\n sx={{ '&:hover': { bgcolor: 'action.hover' }, alignItems: 'center', cursor: 'pointer', display: 'flex' }}\n >\n <Checkbox\n checked={isAll}\n checkedIcon={<CheckBoxIcon />}\n icon={<CheckBoxOutlineBlankIcon />}\n indeterminate={isSome}\n indeterminateIcon={<IndeterminateCheckBoxIcon />}\n style={{ marginRight: 8 }}\n />\n {ctx.selectAllLabel}\n </Box>\n <Divider />\n </>\n )}\n {children}\n </Paper>\n );\n};\n","import type {\n HTMLAttributes,\n ReactElement,\n ReactNode,\n SyntheticEvent,\n} from 'react';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n Checkbox,\n Chip,\n FormControl,\n Autocomplete as MuiAutocomplete,\n Stack,\n TextField,\n} from '@mui/material';\nimport CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '@mui/icons-material/CheckBox';\nimport type {\n AutocompleteRenderInputParams,\n AutocompleteRenderOptionState,\n AutocompleteRenderValueGetItemProps,\n AutocompleteValue,\n FilterOptionsState,\n TextFieldVariants,\n} from '@mui/material';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport classnames from 'classnames';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nimport type {\n AutoCompleteOption,\n AutocompleteSelectAllContextData,\n} from '../../../models/form.models';\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nimport { AutocompleteSelectAllPaper } from './AutocompleteSelectAllPaper';\nimport { AutocompleteSelectAllContext } from './AutocompleteSelectAllContext';\n\n\n// A multi-select field's own value is already the array, so it must not be re-wrapped by `AutocompleteValue`'s `Multiple` handling.\nexport type AutocompleteChangeValue<TFieldValues extends FieldValues, TName extends Path<TFieldValues>, TMultiple extends boolean> = TMultiple extends true ? TFieldValues[TName] : AutocompleteValue<TFieldValues[TName], false, false, false>;\n\nexport type AutocompleteProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues>, TMultiple extends boolean> = {\n readonly disabled?: boolean;\n readonly groupValues?: boolean;\n readonly hideSelectAll?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly multiple?: TMultiple;\n readonly name: TName;\n readonly onChange?: (value: AutocompleteChangeValue<TFieldValues, TName, TMultiple>) => void;\n readonly options: AutoCompleteOption[];\n readonly required?: boolean;\n readonly shouldSortOptions?: boolean;\n readonly textFieldVariant?: TextFieldVariants;\n readonly warningMessage?: string;\n};\ntype MultipleRenderValueItemProps = ReturnType<AutocompleteRenderValueGetItemProps<true>>;\n\ntype Value = number | string;\n\nexport const Autocomplete = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>, TMultiple extends boolean = false>({\n disabled = false,\n groupValues = false,\n hideSelectAll = false,\n infoMessage,\n label,\n loading = false,\n multiple,\n name,\n onChange: onChangeProp,\n options,\n required = false,\n shouldSortOptions,\n textFieldVariant = 'outlined',\n warningMessage,\n}: AutocompleteProps<TFieldValues, TName, TMultiple>): ReactElement => {\n const { t } = useTranslation();\n const { control, formState: { errors }, setValue, watch } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const inputRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState('');\n\n const onChangePropRef = useRef(onChangeProp);\n useEffect(() => {\n onChangePropRef.current = onChangeProp;\n }, [onChangeProp]);\n\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n\n const sortedOptions = useMemo(() => {\n if (!shouldSortOptions) {\n return options;\n }\n return structuredClone(options).sort((a, b) => a.label.localeCompare(b.label));\n }, [options, shouldSortOptions]);\n\n const { mappedOptions, optionValues }: { mappedOptions: Map<Value, AutoCompleteOption>; optionValues: Array<Value> } = useMemo(() => {\n const values: Array<Value> = [];\n const mapped = new Map<Value, AutoCompleteOption>();\n sortedOptions.forEach(option => {\n values.push(option.value);\n mapped.set(option.value, option);\n });\n return {\n mappedOptions: mapped,\n optionValues: values,\n };\n }, [sortedOptions]);\n\n const getOptionLabel = useCallback((value: AutoCompleteOption['value']) => loading ? t`Loading...` : mappedOptions.get(value)?.label, [loading, mappedOptions, t]);\n const getIsOptionEqualToValue = useCallback((optionValue: AutoCompleteOption['value'], value: AutoCompleteOption['value']) => optionValue === value, []);\n const getIsOptionDisabled = useCallback((value: AutoCompleteOption['value']): boolean => mappedOptions.get(value)?.disabled, [mappedOptions]);\n const groupBy = useCallback((value: AutoCompleteOption['value']): string => mappedOptions.get(value)?.groupByValue, [mappedOptions]);\n const getOptionKey = useCallback((value: AutoCompleteOption['value']): string => String(mappedOptions.get(value)?.value), [mappedOptions]);\n\n const renderOption = useCallback((props: HTMLAttributes<HTMLLIElement>, option: TFieldValues[TName], state: AutocompleteRenderOptionState): ReactNode => {\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n <li\n aria-disabled={props['aria-disabled']}\n aria-selected={props['aria-selected']}\n className={props.className}\n data-option-index={(props as { 'data-option-index': string })['data-option-index']}\n id={props.id}\n key={getOptionKey(option)}\n onClick={props.onClick}\n onMouseMove={props.onMouseMove}\n onTouchStart={props.onTouchStart}\n role={props.role}\n style={{\n margin: 0,\n padding: 0,\n }}\n tabIndex={props.tabIndex}\n >\n <Checkbox\n checked={state.selected}\n checkedIcon={<CheckBoxIcon />}\n icon={<CheckBoxOutlineBlankIcon />}\n style={{ marginRight: 8 }}\n />\n {getOptionLabel(option)}\n </li>\n );\n }, [getOptionKey, getOptionLabel]);\n\n const onMuiAutocompleteInputChange = useCallback((_event: SyntheticEvent, value: string) => {\n setInputValue(value);\n }, []);\n\n const renderInput = useCallback((params: AutocompleteRenderInputParams) => {\n const helperText = (\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n warningMessage={warningMessage}\n />\n );\n\n return (\n <TextField\n disabled={disabled || loading}\n error={hasError}\n fullWidth={params.fullWidth}\n helperText={helperText}\n id={params.id}\n inputRef={inputRef}\n label={label}\n size={params.size}\n slotProps={{\n formHelperText: { className: classnames({ 'Mui-warning': hasWarning }) },\n htmlInput: {\n ...params.slotProps.htmlInput,\n },\n input: {\n ...params.slotProps.input,\n className: classnames(params.slotProps.input.className, {\n 'Mui-warning': hasWarning,\n }),\n },\n inputLabel: {\n ...params.slotProps.inputLabel,\n className: classnames({ 'Mui-warning': hasWarning }),\n required: required && !disabled,\n },\n }}\n variant={textFieldVariant}\n />\n );\n }, [disabled, errorMessage, hasError, hasWarning, infoMessage, label, loading, required, textFieldVariant, warningMessage]);\n\n const renderValue = useCallback((values: AutocompleteValue<TFieldValues[TName], TMultiple, false, false>, getItemProps: AutocompleteRenderValueGetItemProps<TMultiple>) => {\n const selectedValues = (Array.isArray(values) ? values : [values]) as Value[];\n\n return (\n <Stack\n direction={'row'}\n sx={{\n flexWrap: 'wrap',\n }}\n >\n {selectedValues.map((value: Value, index: number) => {\n const props = getItemProps({ index }) as MultipleRenderValueItemProps;\n const option = mappedOptions.get(value);\n\n return (\n <Chip\n {...props}\n // eslint-disable-next-line @eslint-react/jsx-no-key-after-spread\n key={String(value)}\n label={getOptionLabel(value)}\n onDelete={option?.disabled ? undefined : props.onDelete}\n size={'small'}\n />\n );\n })}\n </Stack>\n );\n }, [getOptionLabel, mappedOptions]);\n\n const onMuiAutocompleteChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (_event: SyntheticEvent, value: AutocompleteValue<TFieldValues[TName], TMultiple, false, false>) => {\n if (onChangeProp) {\n onChangeProp(value as unknown as AutocompleteChangeValue<TFieldValues, TName, TMultiple>);\n }\n onChange(value);\n }\n , [onChangeProp]);\n\n const filterOptions = useCallback((_filterableOptions: TFieldValues[TName][], filterState: FilterOptionsState<TFieldValues[TName]>): TFieldValues[TName][] => {\n if (filterState.inputValue) {\n return sortedOptions.filter(option => option.label.toLowerCase().includes(filterState.inputValue.toLowerCase())).map((option) => option.value) as TFieldValues[TName][];\n }\n return sortedOptions.map((option) => option.value) as TFieldValues[TName][];\n }, [sortedOptions]);\n\n const enabledOptionValues = useMemo(() =>\n optionValues.filter(v => !mappedOptions.get(v)?.disabled)\n , [optionValues, mappedOptions]);\n\n const watchedValue = watch(name);\n const currentValues = useMemo(() =>\n multiple && Array.isArray(watchedValue) ? watchedValue as Value[] : []\n , [multiple, watchedValue]);\n\n const handleSelectAll = useCallback((isCurrentlyAll: boolean, curValues: Value[]) => {\n const newValue = isCurrentlyAll\n ? curValues.filter(v => mappedOptions.get(v)?.disabled)\n : [...new Set([...curValues, ...enabledOptionValues])];\n onChangePropRef.current?.(newValue as unknown as AutocompleteChangeValue<TFieldValues, TName, TMultiple>);\n setValue(name, newValue as TFieldValues[TName], { shouldDirty: true, shouldTouch: true, shouldValidate: true });\n }, [enabledOptionValues, mappedOptions, name, setValue]);\n\n const selectAllContextValue = useMemo<AutocompleteSelectAllContextData>(() => ({\n currentValues,\n enabledOptionValues,\n handleSelectAll,\n selectAllLabel: t`Select all`,\n }), [currentValues, enabledOptionValues, handleSelectAll, t]);\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n return (\n <MuiAutocomplete<TFieldValues[TName], TMultiple>\n autoComplete\n autoHighlight\n disableClearable={required as undefined}\n disableCloseOnSelect={multiple}\n disabled={disabled || loading}\n filterOptions={filterOptions}\n getOptionDisabled={getIsOptionDisabled}\n getOptionKey={getOptionKey}\n getOptionLabel={getOptionLabel}\n groupBy={groupValues ? groupBy : undefined}\n inputValue={multiple ? inputValue : undefined}\n isOptionEqualToValue={getIsOptionEqualToValue}\n multiple={multiple}\n noOptionsText={t`No results`}\n onBlur={onBlur}\n onChange={onMuiAutocompleteChange(onChange)}\n onInputChange={multiple ? onMuiAutocompleteInputChange : undefined}\n options={optionValues as TFieldValues[TName]}\n renderInput={renderInput}\n renderOption={multiple ? renderOption : undefined}\n renderValue={multiple ? renderValue : undefined}\n slots={(multiple && !hideSelectAll) ? { paper: AutocompleteSelectAllPaper } : undefined}\n value={value}\n />\n );\n }, [required, multiple, hideSelectAll, disabled, loading, filterOptions, getIsOptionDisabled, getOptionKey, getOptionLabel, groupValues, groupBy, inputValue, getIsOptionEqualToValue, t, onMuiAutocompleteChange, onMuiAutocompleteInputChange, optionValues, renderInput, renderOption, renderValue]);\n\n return (\n <AutocompleteSelectAllContext value={multiple ? selectAllContextValue : null}>\n <FormControl\n {...TestIdUtil.createAttributes('Autocomplete', { label, name })}\n fullWidth\n >\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n {!!loading && <FormFieldLoadingIndicator />}\n </FormControl>\n </AutocompleteSelectAllContext>\n );\n};\n"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { FormFieldHelperText as r } from "../components/helpers/FormFieldHelperT
|
|
|
4
4
|
import { FormFieldLoadingIndicator as i } from "../components/helpers/FormFieldLoadingIndicator/index.js";
|
|
5
5
|
import { t as a } from "./classnames.js";
|
|
6
6
|
import { t as o } from "./sv.js";
|
|
7
|
-
import { DATE_FORMAT as s } from "@gen-epix/ui-core/constants/date";
|
|
7
|
+
import { DATE_FORMAT as s } from "@gen-epix/ui-core/constants/date.constants";
|
|
8
8
|
import { useCallback as c, useMemo as l, useRef as u } from "react";
|
|
9
9
|
import { Controller as d, useFormContext as f } from "react-hook-form";
|
|
10
10
|
import { useTranslation as p } from "react-i18next";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","names":[],"sources":["../../src/components/fields/DatePicker/DatePickerInputAdornment.tsx","../../src/components/fields/DatePicker/DatePicker.tsx"],"sourcesContent":["import type { RefObject } from 'react';\nimport type { InputAdornmentProps } from '@mui/material';\nimport {\n IconButton,\n InputAdornment,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nexport type DatePickerInputAdornmentProps = {\n readonly disabled: boolean;\n readonly loading: boolean;\n readonly onResetButtonClickRef: RefObject<() => void>;\n} & InputAdornmentProps;\n\nexport const DatePickerInputAdornment = ({\n children,\n disabled,\n loading,\n onResetButtonClickRef,\n ...props\n}: DatePickerInputAdornmentProps) => {\n const { t } = useTranslation();\n return (\n <InputAdornment {...props}>\n {!disabled && !loading && (\n <IconButton\n {...TestIdUtil.createAttributes('DatePicker-reset')}\n aria-label={t`Clear date field`}\n className={'DatePicker-resetButton'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => onResetButtonClickRef.current()}\n sx={{\n '& svg': {\n fontSize: '16px',\n },\n }}\n tabIndex={-1}\n >\n <ClearIcon />\n </IconButton>\n )}\n {children}\n </InputAdornment>\n );\n};\n","import type { ReactElement } from 'react';\nimport {\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormHelperText,\n} from '@mui/material';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n PathValue,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport type {\n DatePickerProps as MuiDatePickerProps,\n DateTimePickerProps as MuiDateTimePickerProps,\n} from '@mui/x-date-pickers';\nimport {\n LocalizationProvider,\n DatePicker as MuiDatePicker,\n DateTimePicker as MuiDateTimePicker,\n} from '@mui/x-date-pickers';\nimport classNames from 'classnames';\nimport type { Locale } from 'date-fns';\nimport {\n enUS,\n sv,\n} from 'date-fns/locale';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nimport { DatePickerInputAdornment } from './DatePickerInputAdornment';\n\n\nexport type DatePickerProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly dateFormat?: typeof DATE_FORMAT[keyof typeof DATE_FORMAT];\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly name: TName;\n readonly onChange?: (value: Date) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const DatePicker = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n dateFormat = DATE_FORMAT.DATE,\n disabled = false,\n infoMessage,\n label,\n loading = false,\n name,\n onChange: onChangeProp,\n required = false,\n warningMessage,\n}: DatePickerProps<TFieldValues, TName>): ReactElement => {\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n const inputRef = useRef<HTMLInputElement>(null);\n const onResetButtonClickRef = useRef<() => void>(() => undefined);\n\n const onMuiDatePickerChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (newValue: Date) => {\n if (onChangeProp) {\n onChangeProp(newValue);\n }\n onChange(newValue);\n }\n , [onChangeProp]);\n\n const customLocale = useMemo<Locale>(() => {\n /**\n * Use everything from enUS, but format dates the Swedish way (ISO 8601)\n */\n return {\n ...enUS,\n formatLong: sv.formatLong,\n };\n }, []);\n\n const views = useMemo<MuiDateTimePickerProps['views']>(() => {\n switch (dateFormat) {\n case DATE_FORMAT.DATE:\n case DATE_FORMAT.DATE_TIME:\n return undefined;\n case DATE_FORMAT.YEAR:\n return ['year'];\n case DATE_FORMAT.YEAR_MONTH:\n return ['year', 'month'];\n default:\n throw new Error(`Unsupported date format: ${dateFormat}`);\n }\n }, [dateFormat]);\n\n const MuiComponent = dateFormat === DATE_FORMAT.DATE_TIME ? MuiDateTimePicker : MuiDatePicker;\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n\n onResetButtonClickRef.current = () => {\n onChange(null);\n };\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('DatePicker', { label, name })}\n fullWidth\n sx={{\n '&:hover .DatePicker-resetButton, &:focus-within .DatePicker-resetButton': {\n display: 'initial',\n },\n '& .DatePicker-resetButton': {\n display: 'none',\n },\n }}\n >\n <LocalizationProvider\n adapterLocale={customLocale}\n dateAdapter={AdapterDateFns}\n >\n <MuiComponent\n disabled={disabled || loading}\n inputRef={inputRef}\n label={label}\n loading={loading}\n onChange={onMuiDatePickerChange(onChange)}\n openTo={dateFormat === DATE_FORMAT.DATE_TIME ? undefined : 'year'}\n slotProps={{\n textField: {\n className: classNames({ 'Mui-warning': hasWarning }),\n error: hasError,\n onBlur,\n slotProps: {\n inputLabel: {\n required,\n },\n },\n variant: 'outlined',\n },\n }}\n slots={{\n inputAdornment: (props) => (\n <DatePickerInputAdornment\n {...props}\n disabled={disabled}\n loading={loading}\n onResetButtonClickRef={onResetButtonClickRef}\n />\n ),\n }}\n value={value}\n views={views as MuiDatePickerProps['views']}\n />\n </LocalizationProvider>\n {!!loading && <FormFieldLoadingIndicator />}\n <FormHelperText sx={{ ml: 0 }}>\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n }, [MuiComponent, customLocale, dateFormat, disabled, errorMessage, hasError, hasWarning, infoMessage, label, loading, name, onMuiDatePickerChange, required, views, warningMessage]);\n\n return (\n <Controller\n control={control}\n defaultValue={'' as PathValue<TFieldValues, TName>}\n name={name}\n render={renderController}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;mCAgBa,KAA4B,EACvC,aACA,aACA,YACA,0BACA,GAAG,QACgC;CACnC,IAAM,EAAE,SAAM,EAAe;CAC7B,OACE,kBAAC,GAAD;EAAgB,GAAI;EAApB,UAAA,CACG,CAAC,KAAY,CAAC,KACb,kBAAC,GAAD;GACE,GAAI,EAAW,iBAAiB,kBAAkB;GAClD,cAAY,CAAC;GACb,WAAW;GAEX,eAAe,EAAsB,QAAQ;GAC7C,IAAI,EACF,SAAS,EACP,UAAU,OACZ,EACF;GACA,UAAU;GAEV,UAAA,kBAAC,GAAD,CAAY,CAAA;EACF,CAAA,GAEb,CACa;;AAEpB,GCaa,KAAuG,EAClH,gBAAa,EAAY,MACzB,cAAW,IACX,gBACA,UACA,aAAU,IACV,SACA,UAAU,GACV,cAAW,IACX,wBACwD;CACxD,IAAM,EAAE,YAAS,WAAW,EAAE,gBAAa,EAA6B,GAClE,IAAe,EAAS,qBAAqB,GAAQ,CAAI,GACzD,IAAW,CAAC,CAAC,GACb,IAAa,CAAC,CAAC,KAAkB,CAAC,GAClC,IAAW,EAAyB,IAAI,GACxC,IAAwB,QAAyB,KAAA,CAAS,GAE1D,IAAwB,GAAa,OACxC,MAAmB;EAIlB,AAHI,KACF,EAAa,CAAQ,GAEvB,EAAS,CAAQ;CACnB,GACA,CAAC,CAAY,CAAC,GAEV,IAAe,SAIZ;EACL,GAAG;EACH,YAAY,EAAG;CACjB,IACC,CAAC,CAAC,GAEC,IAAQ,QAA+C;EAC3D,QAAQ,GAAR;GACE,KAAK,EAAY;GACjB,KAAK,EAAY,WACf;GACF,KAAK,EAAY,MACf,OAAO,CAAC,MAAM;GAChB,KAAK,EAAY,YACf,OAAO,CAAC,QAAQ,OAAO;GACzB,SACE,MAAU,MAAM,4BAA4B,GAAY;EAC5D;CACF,GAAG,CAAC,CAAU,CAAC,GAET,IAAe,MAAe,EAAY,YAAY,IAAoB,GAE1E,IAAmB,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,kBACtE,EAAI,EACF,aAAa;EACX,GAAU,SAAS,MAAM;CAC3B,EACF,CAAC,GAED,EAAsB,gBAAgB;EACpC,EAAS,IAAI;CACf,GAGE,kBAAC,GAAD;EACE,GAAI,EAAW,iBAAiB,cAAc;GAAE;GAAO;EAAK,CAAC;EAC7D,WAAA;EACA,IAAI;GACF,2EAA2E,EACzE,SAAS,UACX;GACA,6BAA6B,EAC3B,SAAS,OACX;EACF;EAVF,UAAA;GAYE,kBAAC,GAAD;IACE,eAAe;IACf,aAAa;IAEb,UAAA,kBAAC,GAAD;KACE,UAAU,KAAY;KACZ;KACH;KACE;KACT,UAAU,EAAsB,CAAQ;KACxC,QAAQ,MAAe,EAAY,YAAY,KAAA,IAAY;KAC3D,WAAW,EACT,WAAW;MACT,YAAA,GAAW,EAAA,QAAA,CAAW,EAAE,eAAe,EAAW,CAAC;MACnD,OAAO;MACP;MACA,WAAW,EACT,YAAY,EACV,YACF,EACF;MACA,SAAS;KACX,EACF;KACA,OAAO,EACL,iBAAiB,MACf,kBAAC,GAAD;MACE,GAAI;MACM;MACD;MACc;KACxB,CAAA,EAEL;KACO;KACA;IACR,CAAA;GACmB,CAAA;GACrB,CAAC,CAAC,KAAW,kBAAC,GAAD,CAA4B,CAAA;GAC1C,kBAAC,GAAD;IAAgB,IAAI,EAAE,IAAI,EAAE;IAC1B,UAAA,kBAAC,GAAD;KACgB;KACD;KACb,UAAA;KACgB;IACjB,CAAA;GACa,CAAA;EACL;MAEd;EAAC;EAAc;EAAc;EAAY;EAAU;EAAc;EAAU;EAAY;EAAa;EAAO;EAAS;EAAM;EAAuB;EAAU;EAAO;CAAc,CAAC;CAEpL,OACE,kBAAC,GAAD;EACW;EACT,cAAc;EACR;EACN,QAAQ;CACT,CAAA;AAEL"}
|
|
1
|
+
{"version":3,"file":"DatePicker.js","names":["DatePicker","MuiDateTimePicker","MuiDatePicker","classNames","__toESM","enUS","require_classnames","sv","ClearIcon","import_classnames","DatePickerInputAdornment","props","useTranslation","InputAdornment","disabled","loading","IconButton","TestIdUtil","onResetButtonClickRef","children","DatePicker$1","DATE_FORMAT","onChangeProp","useFormContext","errorMessage","FormUtil","errors","name","hasError","hasWarning","warningMessage","inputRef","useRef","onMuiDatePickerChange","useCallback","newValue","onChange","customLocale","useMemo","views","dateFormat","MuiComponent","DateTimePicker","DatePicker","renderController","ref","FormControl","LocalizationProvider","AdapterDateFns","FormFieldLoadingIndicator","FormHelperText","FormFieldHelperText","infoMessage","label","required","Controller"],"sources":["../../src/components/fields/DatePicker/DatePickerInputAdornment.tsx","../../src/components/fields/DatePicker/DatePicker.tsx"],"sourcesContent":["import type { RefObject } from 'react';\nimport type { InputAdornmentProps } from '@mui/material';\nimport {\n IconButton,\n InputAdornment,\n} from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport { useTranslation } from 'react-i18next';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\n\nexport type DatePickerInputAdornmentProps = {\n readonly disabled: boolean;\n readonly loading: boolean;\n readonly onResetButtonClickRef: RefObject<() => void>;\n} & InputAdornmentProps;\n\nexport const DatePickerInputAdornment = ({\n children,\n disabled,\n loading,\n onResetButtonClickRef,\n ...props\n}: DatePickerInputAdornmentProps) => {\n const { t } = useTranslation();\n return (\n <InputAdornment {...props}>\n {!disabled && !loading && (\n <IconButton\n {...TestIdUtil.createAttributes('DatePicker-reset')}\n aria-label={t`Clear date field`}\n className={'DatePicker-resetButton'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => onResetButtonClickRef.current()}\n sx={{\n '& svg': {\n fontSize: '16px',\n },\n }}\n tabIndex={-1}\n >\n <ClearIcon />\n </IconButton>\n )}\n {children}\n </InputAdornment>\n );\n};\n","import type { ReactElement } from 'react';\nimport {\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormHelperText,\n} from '@mui/material';\nimport type {\n ControllerRenderProps,\n FieldValues,\n Path,\n PathValue,\n UseControllerReturn,\n} from 'react-hook-form';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport type {\n DatePickerProps as MuiDatePickerProps,\n DateTimePickerProps as MuiDateTimePickerProps,\n} from '@mui/x-date-pickers';\nimport {\n LocalizationProvider,\n DatePicker as MuiDatePicker,\n DateTimePicker as MuiDateTimePicker,\n} from '@mui/x-date-pickers';\nimport classNames from 'classnames';\nimport type { Locale } from 'date-fns';\nimport {\n enUS,\n sv,\n} from 'date-fns/locale';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { DATE_FORMAT } from '@gen-epix/ui-core/constants/date.constants';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\nimport { FormFieldLoadingIndicator } from '../../helpers/FormFieldLoadingIndicator';\n\nimport { DatePickerInputAdornment } from './DatePickerInputAdornment';\n\n\nexport type DatePickerProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly dateFormat?: typeof DATE_FORMAT[keyof typeof DATE_FORMAT];\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean;\n readonly name: TName;\n readonly onChange?: (value: Date) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const DatePicker = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n dateFormat = DATE_FORMAT.DATE,\n disabled = false,\n infoMessage,\n label,\n loading = false,\n name,\n onChange: onChangeProp,\n required = false,\n warningMessage,\n}: DatePickerProps<TFieldValues, TName>): ReactElement => {\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n const hasError = !!errorMessage;\n const hasWarning = !!warningMessage && !hasError;\n const inputRef = useRef<HTMLInputElement>(null);\n const onResetButtonClickRef = useRef<() => void>(() => undefined);\n\n const onMuiDatePickerChange = useCallback((onChange: ControllerRenderProps<TFieldValues, TName>['onChange']) =>\n (newValue: Date) => {\n if (onChangeProp) {\n onChangeProp(newValue);\n }\n onChange(newValue);\n }\n , [onChangeProp]);\n\n const customLocale = useMemo<Locale>(() => {\n /**\n * Use everything from enUS, but format dates the Swedish way (ISO 8601)\n */\n return {\n ...enUS,\n formatLong: sv.formatLong,\n };\n }, []);\n\n const views = useMemo<MuiDateTimePickerProps['views']>(() => {\n switch (dateFormat) {\n case DATE_FORMAT.DATE:\n case DATE_FORMAT.DATE_TIME:\n return undefined;\n case DATE_FORMAT.YEAR:\n return ['year'];\n case DATE_FORMAT.YEAR_MONTH:\n return ['year', 'month'];\n default:\n throw new Error(`Unsupported date format: ${dateFormat}`);\n }\n }, [dateFormat]);\n\n const MuiComponent = dateFormat === DATE_FORMAT.DATE_TIME ? MuiDateTimePicker : MuiDatePicker;\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n inputRef?.current?.focus();\n },\n });\n\n onResetButtonClickRef.current = () => {\n onChange(null);\n };\n\n return (\n <FormControl\n {...TestIdUtil.createAttributes('DatePicker', { label, name })}\n fullWidth\n sx={{\n '&:hover .DatePicker-resetButton, &:focus-within .DatePicker-resetButton': {\n display: 'initial',\n },\n '& .DatePicker-resetButton': {\n display: 'none',\n },\n }}\n >\n <LocalizationProvider\n adapterLocale={customLocale}\n dateAdapter={AdapterDateFns}\n >\n <MuiComponent\n disabled={disabled || loading}\n inputRef={inputRef}\n label={label}\n loading={loading}\n onChange={onMuiDatePickerChange(onChange)}\n openTo={dateFormat === DATE_FORMAT.DATE_TIME ? undefined : 'year'}\n slotProps={{\n textField: {\n className: classNames({ 'Mui-warning': hasWarning }),\n error: hasError,\n onBlur,\n slotProps: {\n inputLabel: {\n required,\n },\n },\n variant: 'outlined',\n },\n }}\n slots={{\n inputAdornment: (props) => (\n <DatePickerInputAdornment\n {...props}\n disabled={disabled}\n loading={loading}\n onResetButtonClickRef={onResetButtonClickRef}\n />\n ),\n }}\n value={value}\n views={views as MuiDatePickerProps['views']}\n />\n </LocalizationProvider>\n {!!loading && <FormFieldLoadingIndicator />}\n <FormHelperText sx={{ ml: 0 }}>\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n }, [MuiComponent, customLocale, dateFormat, disabled, errorMessage, hasError, hasWarning, infoMessage, label, loading, name, onMuiDatePickerChange, required, views, warningMessage]);\n\n return (\n <Controller\n control={control}\n defaultValue={'' as PathValue<TFieldValues, TName>}\n name={name}\n render={renderController}\n />\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUpload.js","names":[],"sources":["../../src/components/fields/FileUpload/FileUpload.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport {\n useCallback,\n useId,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormHelperText,\n FormLabel,\n} from '@mui/material';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport type {\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { FileDropZone } from '@gen-epix/ui-core-components/components/FileDropZone';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\n\nexport type FileUploadProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly accept: string;\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean; // NOT implemented\n readonly multiple?: boolean;\n readonly name: TName;\n readonly onChange?: (value: FileList) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const FileUpload = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n accept,\n disabled,\n infoMessage,\n label,\n multiple = false,\n name,\n onChange: onChangeProp,\n required,\n warningMessage,\n}: FileUploadProps<TFieldValues, TName>): ReactElement => {\n const labelId = useId();\n const helperTextId = useId();\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n\n const dropZoneRef = useRef<HTMLDivElement>(null);\n const hasError = !!errorMessage;\n\n const onFilesSelected = useCallback((onChange: UseControllerReturn<TFieldValues, TName>['field']['onChange']) =>\n (files: FileList) => {\n if (onChangeProp) {\n onChangeProp(files);\n }\n onChange(files);\n }\n , [onChangeProp]);\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n dropZoneRef?.current?.focus();\n },\n });\n return (\n <FileDropZone\n accept={accept}\n ariaDescribedBy={helperTextId}\n disabled={disabled}\n error={hasError}\n files={value ?? null}\n label={label}\n labelledById={labelId}\n multiple={multiple}\n onBlur={onBlur}\n onFilesSelected={onFilesSelected(onChange)}\n ref={dropZoneRef}\n />\n );\n }, [accept, helperTextId, disabled, hasError, label, labelId, multiple, onFilesSelected]);\n\n return (\n <FormControl\n error={hasError}\n {...TestIdUtil.createAttributes('UploadButton', { label, name })}\n fullWidth\n >\n <FormLabel\n component={'legend'}\n id={labelId}\n required={required}\n >\n {label}\n </FormLabel>\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n <FormHelperText\n id={helperTextId}\n sx={{ ml: 0 }}\n >\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n};\n"],"mappings":";;;;;;;;;AAuCA,
|
|
1
|
+
{"version":3,"file":"FileUpload.js","names":["FormUtil","FileUpload","onChangeProp","labelId","useId","helperTextId","useFormContext","errorMessage","errors","name","dropZoneRef","useRef","hasError","onFilesSelected","useCallback","files","onChange","renderController","ref","FileDropZone","value","accept","disabled","label","multiple","FormControl","TestIdUtil","FormLabel","Controller","FormHelperText","FormFieldHelperText"],"sources":["../../src/components/fields/FileUpload/FileUpload.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport {\n useCallback,\n useId,\n useRef,\n} from 'react';\nimport {\n FormControl,\n FormHelperText,\n FormLabel,\n} from '@mui/material';\nimport {\n Controller,\n useFormContext,\n} from 'react-hook-form';\nimport type {\n FieldValues,\n Path,\n UseControllerReturn,\n} from 'react-hook-form';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { FileDropZone } from '@gen-epix/ui-core-components/components/FileDropZone';\n\nimport { FormUtil } from '../../../utils/FormUtil';\nimport { FormFieldHelperText } from '../../helpers/FormFieldHelperText';\n\nexport type FileUploadProps<TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>> = {\n readonly accept: string;\n readonly disabled?: boolean;\n readonly infoMessage?: string;\n readonly label: string;\n readonly loading?: boolean; // NOT implemented\n readonly multiple?: boolean;\n readonly name: TName;\n readonly onChange?: (value: FileList) => void;\n readonly required?: boolean;\n readonly warningMessage?: string;\n};\n\nexport const FileUpload = <TFieldValues extends FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>({\n accept,\n disabled,\n infoMessage,\n label,\n multiple = false,\n name,\n onChange: onChangeProp,\n required,\n warningMessage,\n}: FileUploadProps<TFieldValues, TName>): ReactElement => {\n const labelId = useId();\n const helperTextId = useId();\n const { control, formState: { errors } } = useFormContext<TFieldValues>();\n const errorMessage = FormUtil.getFieldErrorMessage(errors, name);\n\n const dropZoneRef = useRef<HTMLDivElement>(null);\n const hasError = !!errorMessage;\n\n const onFilesSelected = useCallback((onChange: UseControllerReturn<TFieldValues, TName>['field']['onChange']) =>\n (files: FileList) => {\n if (onChangeProp) {\n onChangeProp(files);\n }\n onChange(files);\n }\n , [onChangeProp]);\n\n const renderController = useCallback(({ field: { onBlur, onChange, ref, value } }: UseControllerReturn<TFieldValues, TName>) => {\n ref({\n focus: () => {\n dropZoneRef?.current?.focus();\n },\n });\n return (\n <FileDropZone\n accept={accept}\n ariaDescribedBy={helperTextId}\n disabled={disabled}\n error={hasError}\n files={value ?? null}\n label={label}\n labelledById={labelId}\n multiple={multiple}\n onBlur={onBlur}\n onFilesSelected={onFilesSelected(onChange)}\n ref={dropZoneRef}\n />\n );\n }, [accept, helperTextId, disabled, hasError, label, labelId, multiple, onFilesSelected]);\n\n return (\n <FormControl\n error={hasError}\n {...TestIdUtil.createAttributes('UploadButton', { label, name })}\n fullWidth\n >\n <FormLabel\n component={'legend'}\n id={labelId}\n required={required}\n >\n {label}\n </FormLabel>\n <Controller\n control={control}\n defaultValue={null}\n name={name}\n render={renderController}\n />\n <FormHelperText\n id={helperTextId}\n sx={{ ml: 0 }}\n >\n <FormFieldHelperText\n errorMessage={errorMessage}\n infoMessage={infoMessage}\n noIndent\n warningMessage={warningMessage}\n />\n </FormHelperText>\n </FormControl>\n );\n};\n"],"mappings":";;;;;;;;;AAuCA,IAAaC,KAAuG,EAClH,WACA,aACA,gBACA,UACA,cAAW,IACX,SACA,UAAUC,GACV,aACA,wBACwD;CACxD,IAAMC,IAAUC,EAAM,GAChBC,IAAeD,EAAM,GACrB,EAAE,YAAS,WAAW,EAAE,gBAAaE,EAA6B,GAClEC,IAAeP,EAAS,qBAAqBQ,GAAQC,CAAI,GAEzDC,IAAcC,EAAuB,IAAI,GACzCC,IAAW,CAAC,CAACL,GAEbM,IAAkBC,GAAa,OAClC,MAAoB;EAInB,AAHIZ,KACFA,EAAaa,CAAK,GAEpBC,EAASD,CAAK;CAChB,GACA,CAACb,CAAY,CAAC,GAEVe,IAAmBH,GAAa,EAAE,OAAO,EAAE,WAAQ,aAAU,QAAK,kBACtEI,EAAI,EACF,aAAa;EACX,GAAa,SAAS,MAAM;CAC9B,EACF,CAAC,GAEC,kBAACC,GAAD;EACU;EACR,iBAAiBd;EACP;EACV,OAAOO;EACP,OAAOQ,KAAS;EACT;EACP,cAAcjB;EACJ;EACF;EACR,iBAAiBU,EAAgBG,CAAQ;EACzC,KAAKN;CACN,CAAA,IAEF;EAACW;EAAQhB;EAAciB;EAAUV;EAAUW;EAAOpB;EAASqB;EAAUX;CAAe,CAAC;CAExF,OACE,kBAACY,GAAD;EACE,OAAOb;EACP,GAAIc,EAAW,iBAAiB,gBAAgB;GAAE;GAAO;EAAK,CAAC;EAC/D,WAAA;EAHF,UAAA;GAKE,kBAACC,GAAD;IACE,WAAW;IACX,IAAIxB;IACM;IAET,UAAAoB;GACQ,CAAA;GACX,kBAACK,GAAD;IACW;IACT,cAAc;IACR;IACN,QAAQX;GACT,CAAA;GACD,kBAACY,GAAD;IACE,IAAIxB;IACJ,IAAI,EAAE,IAAI,EAAE;IAEZ,UAAA,kBAACyB,GAAD;KACgB;KACD;KACb,UAAA;KACgB;IACjB,CAAA;GACa,CAAA;EACL;;AAEjB"}
|
package/dist/_chunks/FormUtil.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as e, c as t, i as n, n as r, o as i, r as a, t as o } from "./isValid.js";
|
|
2
|
-
import { FORM_FIELD_DEFINITION_TYPE as s } from "../models/form.js";
|
|
2
|
+
import { FORM_FIELD_DEFINITION_TYPE as s } from "../models/form.models.js";
|
|
3
3
|
import { array as c, boolean as l, number as u, object as d, string as f } from "yup";
|
|
4
4
|
import { ObjectUtil as p } from "@gen-epix/ui-core/utils/ObjectUtil";
|
|
5
|
-
import { DATE_FORMAT as ee } from "@gen-epix/ui-core/constants/date";
|
|
5
|
+
import { DATE_FORMAT as ee } from "@gen-epix/ui-core/constants/date.constants";
|
|
6
6
|
//#region ../../node_modules/.pnpm/date-fns@4.4.0/node_modules/date-fns/_lib/defaultOptions.js
|
|
7
7
|
var m = {};
|
|
8
8
|
function h() {
|