biblio-react 2.0.0-alpha15 → 2.0.0-alpha151
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/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +2 -1
- package/dist/index.modern.js.map +1 -1
- package/package.json +67 -92
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/layout/AppBar.js","../node_modules/react-hook-form/dist/index.esm.mjs","../src/utils/useNuevo.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/useDeleteRowEtrGrid.js","../src/layout/contenidos/EtrGrid/useSaveRowEtrGrid.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/layout/ProgressContext.js","../src/utils/actions.js","../src/utils/hooks.js","../src/utils/useGetJson.js","../src/utils/useAjax.js","../src/utils/useUtils.js","../src/layout/GrillaEtriek.js","../src/utils/useInitGrilla.js","../src/utils/useInitFicha.js","../src/utils/utils.js","../src/layout/FichaContext.js","../src/layout/CreateEtriek.js","../node_modules/clsx/dist/clsx.m.js","../src/layout/DeleteButtonNoWarning.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/TabbedFormEtriek.js","../src/layout/themes.js","../node_modules/ra-language-english/dist/esm/index.js","../src/utils/i18n/en.js","../node_modules/@blackbox-vision/ra-language-spanish/dist-web/index.js","../src/utils/i18n/es.js","../src/layout/contenidos/useFieldController.js","../src/layout/contenidos/useContenidoController.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/EditEtriek.js","../src/layout/contenidos/ImageField.js","../src/layout/Layout.js","../src/layout/ListActionEtriek.js","../src/layout/contenidos/ListCheck.js","../src/layout/MultiTextField.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.js","../src/layout/ShowEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/layout/contenidos/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/TextField.js","../src/utils/useReferenceLabel.js"],"sourcesContent":["import LockIcon from '@mui/icons-material/Lock';\nimport VpnLockIcon from '@mui/icons-material/VpnLock';\nimport {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Typography,\n useMediaQuery,\n} from '@mui/material';\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport {\n AppBar,\n Logout,\n useResourceDefinitions,\n UserMenu,\n useTranslate,\n useUserMenu,\n} from 'react-admin';\nimport { Link } from 'react-router-dom';\n\nconst ConfigurationMenu = forwardRef((props, ref) => {\n const translate = useTranslate();\n const { onClose } = useUserMenu();\n const resourcesDefinitions = useResourceDefinitions();\n const existeCP = resourcesDefinitions['form_275'];\n const existePassword = resourcesDefinitions['form_59'];\n\n return [\n existeCP ? (\n <MenuItem\n component={Link}\n ref={ref}\n {...props}\n key=\"/form_275\"\n to=\"/form_275\"\n onClick={onClose}\n >\n <ListItemIcon>\n <LockIcon />\n </ListItemIcon>\n <ListItemText>{translate('pos.change_pin')}</ListItemText>\n </MenuItem>\n ) : null,\n existePassword ? (\n <MenuItem\n component={Link}\n ref={ref}\n {...props}\n key=\"/form_59\"\n to=\"/form_59\"\n onClick={onClose}\n >\n <ListItemIcon>\n <VpnLockIcon />\n </ListItemIcon>\n <ListItemText>{translate('pos.change_password')}</ListItemText>\n </MenuItem>\n ) : null,\n ];\n});\n\nconst CustomUserMenu = () => (\n <UserMenu>\n <ConfigurationMenu />\n <Logout />\n </UserMenu>\n);\n\nconst CustomAppBar = props => {\n const isLargeEnough = useMediaQuery(theme => theme.breakpoints.up('sm'));\n return (\n <AppBar {...props} color=\"secondary\" userMenu={<CustomUserMenu />}>\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n sx={{\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n }}\n id=\"react-admin-title\"\n />\n {isLargeEnough && <Box component=\"span\" sx={{ flex: 1 }} />}\n </AppBar>\n );\n};\n\nexport default CustomAppBar;\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\r\nvar isObject = (value) => !isNullOrUndefined(value) &&\r\n !Array.isArray(value) &&\r\n isObjectType(value) &&\r\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\r\n ? isCheckBoxInput(event.target)\r\n ? event.target.checked\r\n : event.target.value\r\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar isUndefined = (val) => val === undefined;\n\nvar get = (obj, path, defaultValue) => {\r\n if (!path || !isObject(obj)) {\r\n return defaultValue;\r\n }\r\n const result = compact(path.split(/[,[\\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], obj);\r\n return isUndefined(result) || result === obj\r\n ? isUndefined(obj[path])\r\n ? defaultValue\r\n : obj[path]\r\n : result;\r\n};\n\nconst EVENTS = {\r\n BLUR: 'blur',\r\n FOCUS_OUT: 'focusout',\r\n CHANGE: 'change',\r\n};\r\nconst VALIDATION_MODE = {\r\n onBlur: 'onBlur',\r\n onChange: 'onChange',\r\n onSubmit: 'onSubmit',\r\n onTouched: 'onTouched',\r\n all: 'all',\r\n};\r\nconst INPUT_VALIDATION_RULES = {\r\n max: 'max',\r\n min: 'min',\r\n maxLength: 'maxLength',\r\n minLength: 'minLength',\r\n pattern: 'pattern',\r\n required: 'required',\r\n validate: 'validate',\r\n};\n\nconst HookFormContext = React.createContext(null);\r\n/**\r\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\r\n *\r\n * @returns return all useForm methods\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const methods = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * return (\r\n * <FormProvider {...methods} >\r\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\r\n * <NestedInput />\r\n * <input type=\"submit\" />\r\n * </form>\r\n * </FormProvider>\r\n * );\r\n * }\r\n *\r\n * function NestedInput() {\r\n * const { register } = useFormContext(); // retrieve all hook methods\r\n * return <input {...register(\"test\")} />;\r\n * }\r\n * ```\r\n */\r\nconst useFormContext = () => React.useContext(HookFormContext);\r\n/**\r\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\r\n *\r\n * @param props - all useFrom methods\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const methods = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * return (\r\n * <FormProvider {...methods} >\r\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\r\n * <NestedInput />\r\n * <input type=\"submit\" />\r\n * </form>\r\n * </FormProvider>\r\n * );\r\n * }\r\n *\r\n * function NestedInput() {\r\n * const { register } = useFormContext(); // retrieve all hook methods\r\n * return <input {...register(\"test\")} />;\r\n * }\r\n * ```\r\n */\r\nconst FormProvider = (props) => {\r\n const { children, ...data } = props;\r\n return (React.createElement(HookFormContext.Provider, { value: data }, children));\r\n};\n\nvar getProxyFormState = (formState, _proxyFormState, localProxyFormState, isRoot = true) => {\r\n const result = {};\r\n for (const key in formState) {\r\n Object.defineProperty(result, key, {\r\n get: () => {\r\n const _key = key;\r\n if (_proxyFormState[_key] !== VALIDATION_MODE.all) {\r\n _proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\r\n }\r\n localProxyFormState && (localProxyFormState[_key] = true);\r\n return formState[_key];\r\n },\r\n });\r\n }\r\n return result;\r\n};\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, isRoot) => {\r\n const { name, ...formState } = formStateData;\r\n return (isEmptyObject(formState) ||\r\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\r\n Object.keys(formState).find((key) => _proxyFormState[key] ===\r\n (!isRoot || VALIDATION_MODE.all)));\r\n};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar shouldSubscribeByName = (name, signalName, exact) => exact && signalName\r\n ? name === signalName\r\n : !name ||\r\n !signalName ||\r\n name === signalName ||\r\n convertToArrayPayload(name).some((currentName) => currentName &&\r\n (currentName.startsWith(signalName) ||\r\n signalName.startsWith(currentName)));\n\nfunction useSubscribe(props) {\r\n const _props = React.useRef(props);\r\n _props.current = props;\r\n React.useEffect(() => {\r\n const tearDown = (subscription) => {\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n }\r\n };\r\n const subscription = !props.disabled &&\r\n _props.current.subject.subscribe({\r\n next: _props.current.callback,\r\n });\r\n return () => tearDown(subscription);\r\n }, [props.disabled]);\r\n}\n\n/**\r\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\r\n *\r\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, handleSubmit, control } = useForm({\r\n * defaultValues: {\r\n * firstName: \"firstName\"\r\n * }});\r\n * const { dirtyFields } = useFormState({\r\n * control\r\n * });\r\n * const onSubmit = (data) => console.log(data);\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\r\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\r\n * <input type=\"submit\" />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useFormState(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, disabled, name, exact } = props || {};\r\n const [formState, updateFormState] = React.useState(control._formState);\r\n const _localProxyFormState = React.useRef({\r\n isDirty: false,\r\n dirtyFields: false,\r\n touchedFields: false,\r\n isValidating: false,\r\n isValid: false,\r\n errors: false,\r\n });\r\n const _name = React.useRef(name);\r\n const _mounted = React.useRef(true);\r\n _name.current = name;\r\n const callback = React.useCallback((value) => _mounted.current &&\r\n shouldSubscribeByName(_name.current, value.name, exact) &&\r\n shouldRenderFormState(value, _localProxyFormState.current) &&\r\n updateFormState({\r\n ...control._formState,\r\n ...value,\r\n }), [control, exact]);\r\n useSubscribe({\r\n disabled,\r\n callback,\r\n subject: control._subjects.state,\r\n });\r\n React.useEffect(() => {\r\n _mounted.current = true;\r\n return () => {\r\n _mounted.current = false;\r\n };\r\n }, []);\r\n return getProxyFormState(formState, control._proxyFormState, _localProxyFormState.current, false);\r\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal) => {\r\n const isArray = Array.isArray(names);\r\n if (isString(names)) {\r\n isGlobal && _names.watch.add(names);\r\n return get(formValues, names);\r\n }\r\n if (isArray) {\r\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\r\n get(formValues, fieldName)));\r\n }\r\n isGlobal && (_names.watchAll = true);\r\n return formValues;\r\n};\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar objectHasFunction = (data) => {\r\n for (const key in data) {\r\n if (isFunction(data[key])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\n/**\r\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\r\n *\r\n * @remarks\r\n *\r\n * [API](https://react-hook-form.com/api/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\r\n *\r\n * @example\r\n * ```tsx\r\n * const { watch } = useForm();\r\n * const values = useWatch({\r\n * name: \"fieldName\"\r\n * control,\r\n * })\r\n * ```\r\n */\r\nfunction useWatch(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};\r\n const _name = React.useRef(name);\r\n _name.current = name;\r\n const callback = React.useCallback((formState) => {\r\n if (shouldSubscribeByName(_name.current, formState.name, exact)) {\r\n const fieldValues = generateWatchOutput(_name.current, control._names, formState.values || control._formValues);\r\n updateValue(isUndefined(_name.current) ||\r\n (isObject(fieldValues) && !objectHasFunction(fieldValues))\r\n ? { ...fieldValues }\r\n : Array.isArray(fieldValues)\r\n ? [...fieldValues]\r\n : isUndefined(fieldValues)\r\n ? defaultValue\r\n : fieldValues);\r\n }\r\n }, [control, exact, defaultValue]);\r\n useSubscribe({\r\n disabled,\r\n subject: control._subjects.watch,\r\n callback,\r\n });\r\n const [value, updateValue] = React.useState(isUndefined(defaultValue)\r\n ? control._getWatch(name)\r\n : defaultValue);\r\n React.useEffect(() => {\r\n control._removeUnmounted();\r\n });\r\n return value;\r\n}\n\n/**\r\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\r\n *\r\n * @param props - the path name to the form field value, and validation rules.\r\n *\r\n * @returns field properties, field and form state. {@link UseControllerReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function Input(props) {\r\n * const { field, fieldState, formState } = useController(props);\r\n * return (\r\n * <div>\r\n * <input {...field} placeholder={props.name} />\r\n * <p>{fieldState.isTouched && \"Touched\"}</p>\r\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useController(props) {\r\n const methods = useFormContext();\r\n const { name, control = methods.control, shouldUnregister } = props;\r\n const isArrayField = isNameInFieldArray(control._names.array, name);\r\n const value = useWatch({\r\n control,\r\n name,\r\n defaultValue: get(control._formValues, name, get(control._defaultValues, name, props.defaultValue)),\r\n exact: true,\r\n });\r\n const formState = useFormState({\r\n control,\r\n name,\r\n });\r\n const _registerProps = React.useRef(control.register(name, {\r\n ...props.rules,\r\n value,\r\n }));\r\n React.useEffect(() => {\r\n const updateMounted = (name, value) => {\r\n const field = get(control._fields, name);\r\n if (field) {\r\n field._f.mount = value;\r\n }\r\n };\r\n updateMounted(name, true);\r\n return () => {\r\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\r\n (isArrayField\r\n ? _shouldUnregisterField && !control._stateFlags.action\r\n : _shouldUnregisterField)\r\n ? control.unregister(name)\r\n : updateMounted(name, false);\r\n };\r\n }, [name, control, isArrayField, shouldUnregister]);\r\n return {\r\n field: {\r\n name,\r\n value,\r\n onChange: React.useCallback((event) => {\r\n _registerProps.current.onChange({\r\n target: {\r\n value: getEventValue(event),\r\n name: name,\r\n },\r\n type: EVENTS.CHANGE,\r\n });\r\n }, [name]),\r\n onBlur: React.useCallback(() => {\r\n _registerProps.current.onBlur({\r\n target: {\r\n value: get(control._formValues, name),\r\n name: name,\r\n },\r\n type: EVENTS.BLUR,\r\n });\r\n }, [name, control]),\r\n ref: React.useCallback((elm) => {\r\n const field = get(control._fields, name);\r\n if (elm && field && elm.focus) {\r\n field._f.ref = {\r\n focus: () => elm.focus(),\r\n select: () => elm.select(),\r\n setCustomValidity: (message) => elm.setCustomValidity(message),\r\n reportValidity: () => elm.reportValidity(),\r\n };\r\n }\r\n }, [name, control._fields]),\r\n },\r\n formState,\r\n fieldState: Object.defineProperties({}, {\r\n invalid: {\r\n get: () => !!get(formState.errors, name),\r\n },\r\n isDirty: {\r\n get: () => !!get(formState.dirtyFields, name),\r\n },\r\n isTouched: {\r\n get: () => !!get(formState.touchedFields, name),\r\n },\r\n error: {\r\n get: () => get(formState.errors, name),\r\n },\r\n }),\r\n };\r\n}\n\n/**\r\n * Component based on `useController` hook to work with controlled component.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\r\n *\r\n * @param props - the path name to the form field value, and validation rules.\r\n *\r\n * @returns provide field handler functions, field and form state.\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { control } = useForm<FormValues>({\r\n * defaultValues: {\r\n * test: \"\"\r\n * }\r\n * });\r\n *\r\n * return (\r\n * <form>\r\n * <Controller\r\n * control={control}\r\n * name=\"test\"\r\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\r\n * <>\r\n * <input\r\n * onChange={onChange} // send value to hook form\r\n * onBlur={onBlur} // notify when input is touched\r\n * value={value} // return updated value\r\n * ref={ref} // set ref for focus management\r\n * />\r\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\r\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\r\n * </>\r\n * )}\r\n * />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nconst Controller = (props) => props.render(useController(props));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\r\n ? {\r\n ...errors[name],\r\n types: {\r\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\r\n [type]: message || true,\r\n },\r\n }\r\n : {};\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nfunction set(object, path, value) {\r\n let index = -1;\r\n const tempPath = isKey(path) ? [path] : stringToPath(path);\r\n const length = tempPath.length;\r\n const lastIndex = length - 1;\r\n while (++index < length) {\r\n const key = tempPath[index];\r\n let newValue = value;\r\n if (index !== lastIndex) {\r\n const objValue = object[key];\r\n newValue =\r\n isObject(objValue) || Array.isArray(objValue)\r\n ? objValue\r\n : !isNaN(+tempPath[index + 1])\r\n ? []\r\n : {};\r\n }\r\n object[key] = newValue;\r\n object = object[key];\r\n }\r\n return object;\r\n}\n\nconst focusFieldBy = (fields, callback, fieldsNames) => {\r\n for (const key of fieldsNames || Object.keys(fields)) {\r\n const field = get(fields, key);\r\n if (field) {\r\n const { _f, ...currentField } = field;\r\n if (_f && callback(_f.name)) {\r\n if (_f.ref.focus && isUndefined(_f.ref.focus())) {\r\n break;\r\n }\r\n else if (_f.refs) {\r\n _f.refs[0].focus();\r\n break;\r\n }\r\n }\r\n else if (isObject(currentField)) {\r\n focusFieldBy(currentField, callback);\r\n }\r\n }\r\n }\r\n};\n\nvar generateId = () => {\r\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16 + d) % 16 | 0;\r\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\r\n });\r\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\r\n ? options.focusName ||\r\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\r\n : '';\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\r\n (_names.watchAll ||\r\n _names.watch.has(name) ||\r\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\r\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nvar updateFieldArrayRootError = (errors, error, name) => {\r\n const fieldArrayErrors = compact(get(errors, name));\r\n set(fieldArrayErrors, 'root', error[name]);\r\n set(errors, name, fieldArrayErrors);\r\n return errors;\r\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isMessage = (value) => isString(value) || React.isValidElement(value);\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRegex = (value) => value instanceof RegExp;\n\nconst defaultResult = {\r\n value: false,\r\n isValid: false,\r\n};\r\nconst validResult = { value: true, isValid: true };\r\nvar getCheckboxValue = (options) => {\r\n if (Array.isArray(options)) {\r\n if (options.length > 1) {\r\n const values = options\r\n .filter((option) => option && option.checked && !option.disabled)\r\n .map((option) => option.value);\r\n return { value: values, isValid: !!values.length };\r\n }\r\n return options[0].checked && !options[0].disabled\r\n ? // @ts-expect-error expected to work in the browser\r\n options[0].attributes && !isUndefined(options[0].attributes.value)\r\n ? isUndefined(options[0].value) || options[0].value === ''\r\n ? validResult\r\n : { value: options[0].value, isValid: true }\r\n : validResult\r\n : defaultResult;\r\n }\r\n return defaultResult;\r\n};\n\nconst defaultReturn = {\r\n isValid: false,\r\n value: null,\r\n};\r\nvar getRadioValue = (options) => Array.isArray(options)\r\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\r\n ? {\r\n isValid: true,\r\n value: option.value,\r\n }\r\n : previous, defaultReturn)\r\n : defaultReturn;\n\nfunction getValidateError(result, ref, type = 'validate') {\r\n if (isMessage(result) ||\r\n (Array.isArray(result) && result.every(isMessage)) ||\r\n (isBoolean(result) && !result)) {\r\n return {\r\n type,\r\n message: isMessage(result) ? result : '',\r\n ref,\r\n };\r\n }\r\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\r\n ? validationData\r\n : {\r\n value: validationData,\r\n message: '',\r\n };\n\nvar validateField = async (field, inputValue, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\r\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, disabled, } = field._f;\r\n if (!mount || disabled) {\r\n return {};\r\n }\r\n const inputRef = refs ? refs[0] : ref;\r\n const setCustomValidity = (message) => {\r\n if (shouldUseNativeValidation && inputRef.reportValidity) {\r\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || ' ');\r\n inputRef.reportValidity();\r\n }\r\n };\r\n const error = {};\r\n const isRadio = isRadioInput(ref);\r\n const isCheckBox = isCheckBoxInput(ref);\r\n const isRadioOrCheckbox = isRadio || isCheckBox;\r\n const isEmpty = ((valueAsNumber || isFileInput(ref)) && !ref.value) ||\r\n inputValue === '' ||\r\n (Array.isArray(inputValue) && !inputValue.length);\r\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\r\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\r\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\r\n error[name] = {\r\n type: exceedMax ? maxType : minType,\r\n message,\r\n ref,\r\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\r\n };\r\n };\r\n if (isFieldArray\r\n ? !Array.isArray(inputValue) || !inputValue.length\r\n : required &&\r\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\r\n (isBoolean(inputValue) && !inputValue) ||\r\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\r\n (isRadio && !getRadioValue(refs).isValid))) {\r\n const { value, message } = isMessage(required)\r\n ? { value: !!required, message: required }\r\n : getValueAndMessage(required);\r\n if (value) {\r\n error[name] = {\r\n type: INPUT_VALIDATION_RULES.required,\r\n message,\r\n ref: inputRef,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\r\n let exceedMax;\r\n let exceedMin;\r\n const maxOutput = getValueAndMessage(max);\r\n const minOutput = getValueAndMessage(min);\r\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\r\n const valueNumber = ref.valueAsNumber || +inputValue;\r\n if (!isNullOrUndefined(maxOutput.value)) {\r\n exceedMax = valueNumber > maxOutput.value;\r\n }\r\n if (!isNullOrUndefined(minOutput.value)) {\r\n exceedMin = valueNumber < minOutput.value;\r\n }\r\n }\r\n else {\r\n const valueDate = ref.valueAsDate || new Date(inputValue);\r\n if (isString(maxOutput.value)) {\r\n exceedMax = valueDate > new Date(maxOutput.value);\r\n }\r\n if (isString(minOutput.value)) {\r\n exceedMin = valueDate < new Date(minOutput.value);\r\n }\r\n }\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(error[name].message);\r\n return error;\r\n }\r\n }\r\n }\r\n if ((maxLength || minLength) &&\r\n !isEmpty &&\r\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\r\n const maxLengthOutput = getValueAndMessage(maxLength);\r\n const minLengthOutput = getValueAndMessage(minLength);\r\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\r\n inputValue.length > maxLengthOutput.value;\r\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\r\n inputValue.length < minLengthOutput.value;\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(error[name].message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (pattern && !isEmpty && isString(inputValue)) {\r\n const { value: patternValue, message } = getValueAndMessage(pattern);\r\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\r\n error[name] = {\r\n type: INPUT_VALIDATION_RULES.pattern,\r\n message,\r\n ref,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (validate) {\r\n if (isFunction(validate)) {\r\n const result = await validate(inputValue);\r\n const validateError = getValidateError(result, inputRef);\r\n if (validateError) {\r\n error[name] = {\r\n ...validateError,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(validateError.message);\r\n return error;\r\n }\r\n }\r\n }\r\n else if (isObject(validate)) {\r\n let validationResult = {};\r\n for (const key in validate) {\r\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\r\n break;\r\n }\r\n const validateError = getValidateError(await validate[key](inputValue), inputRef, key);\r\n if (validateError) {\r\n validationResult = {\r\n ...validateError,\r\n ...appendErrorsCurry(key, validateError.message),\r\n };\r\n setCustomValidity(validateError.message);\r\n if (validateAllFieldCriteria) {\r\n error[name] = validationResult;\r\n }\r\n }\r\n }\r\n if (!isEmptyObject(validationResult)) {\r\n error[name] = {\r\n ref: inputRef,\r\n ...validationResult,\r\n };\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n }\r\n setCustomValidity(true);\r\n return error;\r\n};\n\nfunction append(data, value) {\r\n return [...data, ...convertToArrayPayload(value)];\r\n}\n\nvar isWeb = typeof window !== 'undefined' &&\r\n typeof window.HTMLElement !== 'undefined' &&\r\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\r\n let copy;\r\n const isArray = Array.isArray(data);\r\n if (data instanceof Date) {\r\n copy = new Date(data);\r\n }\r\n else if (data instanceof Set) {\r\n copy = new Set(data);\r\n }\r\n else if (!(isWeb && (data instanceof Blob || data instanceof FileList)) &&\r\n (isArray || isObject(data))) {\r\n copy = isArray ? [] : {};\r\n for (const key in data) {\r\n if (isFunction(data[key])) {\r\n copy = data;\r\n break;\r\n }\r\n copy[key] = cloneObject(data[key]);\r\n }\r\n }\r\n else {\r\n return data;\r\n }\r\n return copy;\r\n}\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nvar getValidationModes = (mode) => ({\r\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\r\n isOnBlur: mode === VALIDATION_MODE.onBlur,\r\n isOnChange: mode === VALIDATION_MODE.onChange,\r\n isOnAll: mode === VALIDATION_MODE.all,\r\n isOnTouch: mode === VALIDATION_MODE.onTouched,\r\n});\n\nfunction insert(data, index, value) {\r\n return [\r\n ...data.slice(0, index),\r\n ...convertToArrayPayload(value),\r\n ...data.slice(index),\r\n ];\r\n}\n\nvar moveArrayAt = (data, from, to) => {\r\n if (!Array.isArray(data)) {\r\n return [];\r\n }\r\n if (isUndefined(data[to])) {\r\n data[to] = undefined;\r\n }\r\n data.splice(to, 0, data.splice(from, 1)[0]);\r\n return data;\r\n};\n\nfunction prepend(data, value) {\r\n return [...convertToArrayPayload(value), ...convertToArrayPayload(data)];\r\n}\n\nfunction removeAtIndexes(data, indexes) {\r\n let i = 0;\r\n const temp = [...data];\r\n for (const index of indexes) {\r\n temp.splice(index - i, 1);\r\n i++;\r\n }\r\n return compact(temp).length ? temp : [];\r\n}\r\nvar removeArrayAt = (data, index) => isUndefined(index)\r\n ? []\r\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\r\n data[indexA] = [data[indexB], (data[indexB] = data[indexA])][0];\r\n};\n\nfunction baseGet(object, updatePath) {\r\n const length = updatePath.slice(0, -1).length;\r\n let index = 0;\r\n while (index < length) {\r\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\r\n }\r\n return object;\r\n}\r\nfunction isEmptyArray(obj) {\r\n for (const key in obj) {\r\n if (!isUndefined(obj[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction unset(object, path) {\r\n const updatePath = isKey(path) ? [path] : stringToPath(path);\r\n const childObject = updatePath.length == 1 ? object : baseGet(object, updatePath);\r\n const key = updatePath[updatePath.length - 1];\r\n let previousObjRef;\r\n if (childObject) {\r\n delete childObject[key];\r\n }\r\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\r\n let index = -1;\r\n let objectRef;\r\n const currentPaths = updatePath.slice(0, -(k + 1));\r\n const currentPathsLength = currentPaths.length - 1;\r\n if (k > 0) {\r\n previousObjRef = object;\r\n }\r\n while (++index < currentPaths.length) {\r\n const item = currentPaths[index];\r\n objectRef = objectRef ? objectRef[item] : object[item];\r\n if (currentPathsLength === index &&\r\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\r\n (Array.isArray(objectRef) && isEmptyArray(objectRef)))) {\r\n previousObjRef ? delete previousObjRef[item] : delete object[item];\r\n }\r\n previousObjRef = objectRef;\r\n }\r\n }\r\n return object;\r\n}\n\nvar updateAt = (fieldValues, index, value) => {\r\n fieldValues[index] = value;\r\n return fieldValues;\r\n};\n\n/**\r\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\r\n *\r\n * @param props - useFieldArray props\r\n *\r\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\r\n * defaultValues: {\r\n * test: []\r\n * }\r\n * });\r\n * const { fields, append } = useFieldArray({\r\n * control,\r\n * name: \"test\"\r\n * });\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(data => console.log(data))}>\r\n * {fields.map((item, index) => (\r\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\r\n * ))}\r\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\r\n * append\r\n * </button>\r\n * <input type=\"submit\" />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useFieldArray(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;\r\n const [fields, setFields] = React.useState(control._getFieldArray(name));\r\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\r\n const _fieldIds = React.useRef(fields);\r\n const _name = React.useRef(name);\r\n const _actioned = React.useRef(false);\r\n _name.current = name;\r\n _fieldIds.current = fields;\r\n control._names.array.add(name);\r\n props.rules &&\r\n control.register(name, props.rules);\r\n const callback = React.useCallback(({ values, name: fieldArrayName, }) => {\r\n if (fieldArrayName === _name.current || !fieldArrayName) {\r\n const fieldValues = get(values, _name.current, []);\r\n setFields(fieldValues);\r\n ids.current = fieldValues.map(generateId);\r\n }\r\n }, []);\r\n useSubscribe({\r\n callback,\r\n subject: control._subjects.array,\r\n });\r\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\r\n _actioned.current = true;\r\n control._updateFieldArray(name, updatedFieldArrayValues);\r\n }, [control, name]);\r\n const append$1 = (value, options) => {\r\n const appendValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = append(control._getFieldArray(name), appendValue);\r\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\r\n ids.current = append(ids.current, appendValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, append, {\r\n argA: fillEmptyArray(value),\r\n });\r\n };\r\n const prepend$1 = (value, options) => {\r\n const prependValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = prepend(control._getFieldArray(name), prependValue);\r\n control._names.focus = getFocusFieldName(name, 0, options);\r\n ids.current = prepend(ids.current, prependValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, prepend, {\r\n argA: fillEmptyArray(value),\r\n });\r\n };\r\n const remove = (index) => {\r\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\r\n ids.current = removeArrayAt(ids.current, index);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\r\n argA: index,\r\n });\r\n };\r\n const insert$1 = (index, value, options) => {\r\n const insertValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\r\n control._names.focus = getFocusFieldName(name, index, options);\r\n ids.current = insert(ids.current, index, insertValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, insert, {\r\n argA: index,\r\n argB: fillEmptyArray(value),\r\n });\r\n };\r\n const swap = (indexA, indexB) => {\r\n const updatedFieldArrayValues = control._getFieldArray(name);\r\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\r\n swapArrayAt(ids.current, indexA, indexB);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\r\n argA: indexA,\r\n argB: indexB,\r\n }, false);\r\n };\r\n const move = (from, to) => {\r\n const updatedFieldArrayValues = control._getFieldArray(name);\r\n moveArrayAt(updatedFieldArrayValues, from, to);\r\n moveArrayAt(ids.current, from, to);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\r\n argA: from,\r\n argB: to,\r\n }, false);\r\n };\r\n const update = (index, value) => {\r\n const updateValue = cloneObject(value);\r\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\r\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\r\n updateValues(updatedFieldArrayValues);\r\n setFields([...updatedFieldArrayValues]);\r\n control._updateFieldArray(name, updatedFieldArrayValues, updateAt, {\r\n argA: index,\r\n argB: updateValue,\r\n }, true, false);\r\n };\r\n const replace = (value) => {\r\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\r\n ids.current = updatedFieldArrayValues.map(generateId);\r\n updateValues([...updatedFieldArrayValues]);\r\n setFields([...updatedFieldArrayValues]);\r\n control._updateFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\r\n };\r\n React.useEffect(() => {\r\n control._stateFlags.action = false;\r\n isWatched(name, control._names) && control._subjects.state.next({});\r\n if (_actioned.current) {\r\n if (control._options.resolver) {\r\n control._executeSchema([name]).then((result) => {\r\n const error = get(result.errors, name);\r\n const existingError = get(control._formState.errors, name);\r\n if (existingError ? !error && existingError.type : error && error.type) {\r\n error\r\n ? set(control._formState.errors, name, error)\r\n : unset(control._formState.errors, name);\r\n control._subjects.state.next({\r\n errors: control._formState.errors,\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n const field = get(control._fields, name);\r\n const validationModeBeforeSubmit = getValidationModes(control._options.mode);\r\n if ((!validationModeBeforeSubmit.isOnSubmit ||\r\n control._formState.isSubmitted) &&\r\n field &&\r\n field._f) {\r\n validateField(field, get(control._formValues, name), control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\r\n control._subjects.state.next({\r\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\r\n }));\r\n }\r\n }\r\n }\r\n control._subjects.watch.next({\r\n name,\r\n values: control._formValues,\r\n });\r\n control._names.focus &&\r\n focusFieldBy(control._fields, (key) => key.startsWith(control._names.focus));\r\n control._names.focus = '';\r\n control._proxyFormState.isValid && control._updateValid();\r\n }, [fields, name, control]);\r\n React.useEffect(() => {\r\n !get(control._formValues, name) && control._updateFieldArray(name);\r\n return () => {\r\n (control._options.shouldUnregister || shouldUnregister) &&\r\n control.unregister(name);\r\n };\r\n }, [name, control, keyName, shouldUnregister]);\r\n return {\r\n swap: React.useCallback(swap, [updateValues, name, control]),\r\n move: React.useCallback(move, [updateValues, name, control]),\r\n prepend: React.useCallback(prepend$1, [updateValues, name, control]),\r\n append: React.useCallback(append$1, [updateValues, name, control]),\r\n remove: React.useCallback(remove, [updateValues, name, control]),\r\n insert: React.useCallback(insert$1, [updateValues, name, control]),\r\n update: React.useCallback(update, [updateValues, name, control]),\r\n replace: React.useCallback(replace, [updateValues, name, control]),\r\n fields: React.useMemo(() => fields.map((field, index) => ({\r\n ...field,\r\n [keyName]: ids.current[index] || generateId(),\r\n })), [fields, keyName]),\r\n };\r\n}\n\nfunction createSubject() {\r\n let _observers = [];\r\n const next = (value) => {\r\n for (const observer of _observers) {\r\n observer.next(value);\r\n }\r\n };\r\n const subscribe = (observer) => {\r\n _observers.push(observer);\r\n return {\r\n unsubscribe: () => {\r\n _observers = _observers.filter((o) => o !== observer);\r\n },\r\n };\r\n };\r\n const unsubscribe = () => {\r\n _observers = [];\r\n };\r\n return {\r\n get observers() {\r\n return _observers;\r\n },\r\n next,\r\n subscribe,\r\n unsubscribe,\r\n };\r\n}\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2) {\r\n if (isPrimitive(object1) || isPrimitive(object2)) {\r\n return object1 === object2;\r\n }\r\n if (isDateObject(object1) && isDateObject(object2)) {\r\n return object1.getTime() === object2.getTime();\r\n }\r\n const keys1 = Object.keys(object1);\r\n const keys2 = Object.keys(object2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n for (const key of keys1) {\r\n const val1 = object1[key];\r\n if (!keys2.includes(key)) {\r\n return false;\r\n }\r\n if (key !== 'ref') {\r\n const val2 = object2[key];\r\n if ((isDateObject(val1) && isDateObject(val2)) ||\r\n (isObject(val1) && isObject(val2)) ||\r\n (Array.isArray(val1) && Array.isArray(val2))\r\n ? !deepEqual(val1, val2)\r\n : val1 !== val2) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\n\nvar isHTMLElement = (value) => {\r\n const owner = value ? value.ownerDocument : 0;\r\n const ElementClass = owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement;\r\n return value instanceof ElementClass;\r\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction markFieldsDirty(data, fields = {}) {\r\n const isParentNodeArray = Array.isArray(data);\r\n if (isObject(data) || isParentNodeArray) {\r\n for (const key in data) {\r\n if (Array.isArray(data[key]) ||\r\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\r\n fields[key] = Array.isArray(data[key]) ? [] : {};\r\n markFieldsDirty(data[key], fields[key]);\r\n }\r\n else if (!isNullOrUndefined(data[key])) {\r\n fields[key] = true;\r\n }\r\n }\r\n }\r\n return fields;\r\n}\r\nfunction getDirtyFieldsFromDefaultValues(data, formValues, dirtyFieldsFromValues) {\r\n const isParentNodeArray = Array.isArray(data);\r\n if (isObject(data) || isParentNodeArray) {\r\n for (const key in data) {\r\n if (Array.isArray(data[key]) ||\r\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\r\n if (isUndefined(formValues) ||\r\n isPrimitive(dirtyFieldsFromValues[key])) {\r\n dirtyFieldsFromValues[key] = Array.isArray(data[key])\r\n ? markFieldsDirty(data[key], [])\r\n : { ...markFieldsDirty(data[key]) };\r\n }\r\n else {\r\n getDirtyFieldsFromDefaultValues(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\r\n }\r\n }\r\n else {\r\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\r\n }\r\n }\r\n }\r\n return dirtyFieldsFromValues;\r\n}\r\nvar getDirtyFields = (defaultValues, formValues) => getDirtyFieldsFromDefaultValues(defaultValues, formValues, markFieldsDirty(formValues));\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\r\n ? value\r\n : valueAsNumber\r\n ? value === '' || isNullOrUndefined(value)\r\n ? NaN\r\n : +value\r\n : valueAsDate && isString(value)\r\n ? new Date(value)\r\n : setValueAs\r\n ? setValueAs(value)\r\n : value;\n\nfunction getFieldValue(_f) {\r\n const ref = _f.ref;\r\n if (_f.refs ? _f.refs.every((ref) => ref.disabled) : ref.disabled) {\r\n return;\r\n }\r\n if (isFileInput(ref)) {\r\n return ref.files;\r\n }\r\n if (isRadioInput(ref)) {\r\n return getRadioValue(_f.refs).value;\r\n }\r\n if (isMultipleSelect(ref)) {\r\n return [...ref.selectedOptions].map(({ value }) => value);\r\n }\r\n if (isCheckBoxInput(ref)) {\r\n return getCheckboxValue(_f.refs).value;\r\n }\r\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\r\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\r\n const fields = {};\r\n for (const name of fieldsNames) {\r\n const field = get(_fields, name);\r\n field && set(fields, name, field._f);\r\n }\r\n return {\r\n criteriaMode,\r\n names: [...fieldsNames],\r\n fields,\r\n shouldUseNativeValidation,\r\n };\r\n};\n\nvar getRuleValue = (rule) => isUndefined(rule)\r\n ? undefined\r\n : isRegex(rule)\r\n ? rule.source\r\n : isObject(rule)\r\n ? isRegex(rule.value)\r\n ? rule.value.source\r\n : rule.value\r\n : rule;\n\nvar hasValidation = (options) => options.mount &&\r\n (options.required ||\r\n options.min ||\r\n options.max ||\r\n options.maxLength ||\r\n options.minLength ||\r\n options.pattern ||\r\n options.validate);\n\nfunction schemaErrorLookup(errors, _fields, name) {\r\n const error = get(errors, name);\r\n if (error || isKey(name)) {\r\n return {\r\n error,\r\n name,\r\n };\r\n }\r\n const names = name.split('.');\r\n while (names.length) {\r\n const fieldName = names.join('.');\r\n const field = get(_fields, fieldName);\r\n const foundError = get(errors, fieldName);\r\n if (field && !Array.isArray(field) && name !== fieldName) {\r\n return { name };\r\n }\r\n if (foundError && foundError.type) {\r\n return {\r\n name: fieldName,\r\n error: foundError,\r\n };\r\n }\r\n names.pop();\r\n }\r\n return {\r\n name,\r\n };\r\n}\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\r\n if (mode.isOnAll) {\r\n return false;\r\n }\r\n else if (!isSubmitted && mode.isOnTouch) {\r\n return !(isTouched || isBlurEvent);\r\n }\r\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\r\n return !isBlurEvent;\r\n }\r\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\r\n return isBlurEvent;\r\n }\r\n return true;\r\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nconst defaultOptions = {\r\n mode: VALIDATION_MODE.onSubmit,\r\n reValidateMode: VALIDATION_MODE.onChange,\r\n shouldFocusError: true,\r\n};\r\nfunction createFormControl(props = {}) {\r\n let _options = {\r\n ...defaultOptions,\r\n ...props,\r\n };\r\n let _formState = {\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touchedFields: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: false,\r\n errors: {},\r\n };\r\n let _fields = {};\r\n let _defaultValues = cloneObject(_options.defaultValues) || {};\r\n let _formValues = _options.shouldUnregister\r\n ? {}\r\n : cloneObject(_defaultValues);\r\n let _stateFlags = {\r\n action: false,\r\n mount: false,\r\n watch: false,\r\n };\r\n let _names = {\r\n mount: new Set(),\r\n unMount: new Set(),\r\n array: new Set(),\r\n watch: new Set(),\r\n };\r\n let delayErrorCallback;\r\n let timer = 0;\r\n let validateFields = {};\r\n const _proxyFormState = {\r\n isDirty: false,\r\n dirtyFields: false,\r\n touchedFields: false,\r\n isValidating: false,\r\n isValid: false,\r\n errors: false,\r\n };\r\n const _subjects = {\r\n watch: createSubject(),\r\n array: createSubject(),\r\n state: createSubject(),\r\n };\r\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\r\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\r\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\r\n const debounce = (callback) => (wait) => {\r\n clearTimeout(timer);\r\n timer = window.setTimeout(callback, wait);\r\n };\r\n const _updateValid = async (shouldSkipRender) => {\r\n let isValid = false;\r\n if (_proxyFormState.isValid) {\r\n isValid = _options.resolver\r\n ? isEmptyObject((await _executeSchema()).errors)\r\n : await executeBuiltInValidation(_fields, true);\r\n if (!shouldSkipRender && isValid !== _formState.isValid) {\r\n _formState.isValid = isValid;\r\n _subjects.state.next({\r\n isValid,\r\n });\r\n }\r\n }\r\n return isValid;\r\n };\r\n const _updateFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\r\n if (args && method) {\r\n _stateFlags.action = true;\r\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\r\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\r\n shouldSetValues && set(_fields, name, fieldValues);\r\n }\r\n if (_proxyFormState.errors &&\r\n shouldUpdateFieldsAndState &&\r\n Array.isArray(get(_formState.errors, name))) {\r\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\r\n shouldSetValues && set(_formState.errors, name, errors);\r\n unsetEmptyArray(_formState.errors, name);\r\n }\r\n if (_proxyFormState.touchedFields &&\r\n shouldUpdateFieldsAndState &&\r\n Array.isArray(get(_formState.touchedFields, name))) {\r\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\r\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\r\n }\r\n if (_proxyFormState.dirtyFields) {\r\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\r\n }\r\n _subjects.state.next({\r\n isDirty: _getDirty(name, values),\r\n dirtyFields: _formState.dirtyFields,\r\n errors: _formState.errors,\r\n isValid: _formState.isValid,\r\n });\r\n }\r\n else {\r\n set(_formValues, name, values);\r\n }\r\n };\r\n const updateErrors = (name, error) => {\r\n set(_formState.errors, name, error);\r\n _subjects.state.next({\r\n errors: _formState.errors,\r\n });\r\n };\r\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\r\n const field = get(_fields, name);\r\n if (field) {\r\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\r\n isUndefined(defaultValue) ||\r\n (ref && ref.defaultChecked) ||\r\n shouldSkipSetValueAs\r\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\r\n : setFieldValue(name, defaultValue);\r\n _stateFlags.mount && _updateValid();\r\n }\r\n };\r\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\r\n let isFieldDirty = false;\r\n const output = {\r\n name,\r\n };\r\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\r\n if (_proxyFormState.isDirty) {\r\n const isPreviousFormDirty = _formState.isDirty;\r\n _formState.isDirty = output.isDirty = _getDirty();\r\n isFieldDirty = isPreviousFormDirty !== output.isDirty;\r\n }\r\n if (_proxyFormState.dirtyFields && (!isBlurEvent || shouldDirty)) {\r\n const isPreviousFieldDirty = get(_formState.dirtyFields, name);\r\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\r\n isCurrentFieldPristine\r\n ? unset(_formState.dirtyFields, name)\r\n : set(_formState.dirtyFields, name, true);\r\n output.dirtyFields = _formState.dirtyFields;\r\n isFieldDirty =\r\n isFieldDirty ||\r\n isPreviousFieldDirty !== get(_formState.dirtyFields, name);\r\n }\r\n if (isBlurEvent && !isPreviousFieldTouched) {\r\n set(_formState.touchedFields, name, isBlurEvent);\r\n output.touchedFields = _formState.touchedFields;\r\n isFieldDirty =\r\n isFieldDirty ||\r\n (_proxyFormState.touchedFields &&\r\n isPreviousFieldTouched !== isBlurEvent);\r\n }\r\n isFieldDirty && shouldRender && _subjects.state.next(output);\r\n return isFieldDirty ? output : {};\r\n };\r\n const shouldRenderByError = async (name, isValid, error, fieldState) => {\r\n const previousFieldError = get(_formState.errors, name);\r\n const shouldUpdateValid = _proxyFormState.isValid && _formState.isValid !== isValid;\r\n if (props.delayError && error) {\r\n delayErrorCallback = debounce(() => updateErrors(name, error));\r\n delayErrorCallback(props.delayError);\r\n }\r\n else {\r\n clearTimeout(timer);\r\n delayErrorCallback = null;\r\n error\r\n ? set(_formState.errors, name, error)\r\n : unset(_formState.errors, name);\r\n }\r\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\r\n !isEmptyObject(fieldState) ||\r\n shouldUpdateValid) {\r\n const updatedFormState = {\r\n ...fieldState,\r\n ...(shouldUpdateValid ? { isValid } : {}),\r\n errors: _formState.errors,\r\n name,\r\n };\r\n _formState = {\r\n ..._formState,\r\n ...updatedFormState,\r\n };\r\n _subjects.state.next(updatedFormState);\r\n }\r\n validateFields[name]--;\r\n if (_proxyFormState.isValidating &&\r\n !Object.values(validateFields).some((v) => v)) {\r\n _subjects.state.next({\r\n isValidating: false,\r\n });\r\n validateFields = {};\r\n }\r\n };\r\n const _executeSchema = async (name) => _options.resolver\r\n ? await _options.resolver({ ..._formValues }, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation))\r\n : {};\r\n const executeSchemaAndUpdateState = async (names) => {\r\n const { errors } = await _executeSchema();\r\n if (names) {\r\n for (const name of names) {\r\n const error = get(errors, name);\r\n error\r\n ? set(_formState.errors, name, error)\r\n : unset(_formState.errors, name);\r\n }\r\n }\r\n else {\r\n _formState.errors = errors;\r\n }\r\n return errors;\r\n };\r\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\r\n valid: true,\r\n }) => {\r\n for (const name in fields) {\r\n const field = fields[name];\r\n if (field) {\r\n const { _f, ...fieldValue } = field;\r\n if (_f) {\r\n const isFieldArrayRoot = _names.array.has(_f.name);\r\n const fieldError = await validateField(field, get(_formValues, _f.name), shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation, isFieldArrayRoot);\r\n if (fieldError[_f.name]) {\r\n context.valid = false;\r\n if (shouldOnlyCheckValid) {\r\n break;\r\n }\r\n }\r\n !shouldOnlyCheckValid &&\r\n (get(fieldError, _f.name)\r\n ? isFieldArrayRoot\r\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\r\n : set(_formState.errors, _f.name, fieldError[_f.name])\r\n : unset(_formState.errors, _f.name));\r\n }\r\n fieldValue &&\r\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\r\n }\r\n }\r\n return context.valid;\r\n };\r\n const _removeUnmounted = () => {\r\n for (const name of _names.unMount) {\r\n const field = get(_fields, name);\r\n field &&\r\n (field._f.refs\r\n ? field._f.refs.every((ref) => !live(ref))\r\n : !live(field._f.ref)) &&\r\n unregister(name);\r\n }\r\n _names.unMount = new Set();\r\n };\r\n const _getDirty = (name, data) => (name && data && set(_formValues, name, data),\r\n !deepEqual(getValues(), _defaultValues));\r\n const _getWatch = (names, defaultValue, isGlobal) => {\r\n const fieldValues = {\r\n ...(_stateFlags.mount\r\n ? _formValues\r\n : isUndefined(defaultValue)\r\n ? _defaultValues\r\n : isString(names)\r\n ? { [names]: defaultValue }\r\n : defaultValue),\r\n };\r\n return generateWatchOutput(names, _names, fieldValues, isGlobal);\r\n };\r\n const _getFieldArray = (name) => compact(get(_stateFlags.mount ? _formValues : _defaultValues, name, props.shouldUnregister ? get(_defaultValues, name, []) : []));\r\n const setFieldValue = (name, value, options = {}) => {\r\n const field = get(_fields, name);\r\n let fieldValue = value;\r\n if (field) {\r\n const fieldReference = field._f;\r\n if (fieldReference) {\r\n !fieldReference.disabled &&\r\n set(_formValues, name, getFieldValueAs(value, fieldReference));\r\n fieldValue =\r\n isWeb && isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\r\n ? ''\r\n : value;\r\n if (isMultipleSelect(fieldReference.ref)) {\r\n [...fieldReference.ref.options].forEach((selectRef) => (selectRef.selected = fieldValue.includes(selectRef.value)));\r\n }\r\n else if (fieldReference.refs) {\r\n if (isCheckBoxInput(fieldReference.ref)) {\r\n fieldReference.refs.length > 1\r\n ? fieldReference.refs.forEach((checkboxRef) => !checkboxRef.disabled &&\r\n (checkboxRef.checked = Array.isArray(fieldValue)\r\n ? !!fieldValue.find((data) => data === checkboxRef.value)\r\n : fieldValue === checkboxRef.value))\r\n : fieldReference.refs[0] &&\r\n (fieldReference.refs[0].checked = !!fieldValue);\r\n }\r\n else {\r\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\r\n }\r\n }\r\n else if (isFileInput(fieldReference.ref)) {\r\n fieldReference.ref.value = '';\r\n }\r\n else {\r\n fieldReference.ref.value = fieldValue;\r\n if (!fieldReference.ref.type) {\r\n _subjects.watch.next({\r\n name,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n (options.shouldDirty || options.shouldTouch) &&\r\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\r\n options.shouldValidate && trigger(name);\r\n };\r\n const setValues = (name, value, options) => {\r\n for (const fieldKey in value) {\r\n const fieldValue = value[fieldKey];\r\n const fieldName = `${name}.${fieldKey}`;\r\n const field = get(_fields, fieldName);\r\n (_names.array.has(name) ||\r\n !isPrimitive(fieldValue) ||\r\n (field && !field._f)) &&\r\n !isDateObject(fieldValue)\r\n ? setValues(fieldName, fieldValue, options)\r\n : setFieldValue(fieldName, fieldValue, options);\r\n }\r\n };\r\n const setValue = (name, value, options = {}) => {\r\n const field = get(_fields, name);\r\n const isFieldArray = _names.array.has(name);\r\n const cloneValue = cloneObject(value);\r\n set(_formValues, name, cloneValue);\r\n if (isFieldArray) {\r\n _subjects.array.next({\r\n name,\r\n values: _formValues,\r\n });\r\n if ((_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\r\n options.shouldDirty) {\r\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\r\n _subjects.state.next({\r\n name,\r\n dirtyFields: _formState.dirtyFields,\r\n isDirty: _getDirty(name, cloneValue),\r\n });\r\n }\r\n }\r\n else {\r\n field && !field._f && !isNullOrUndefined(cloneValue)\r\n ? setValues(name, cloneValue, options)\r\n : setFieldValue(name, cloneValue, options);\r\n }\r\n isWatched(name, _names) && _subjects.state.next({});\r\n _subjects.watch.next({\r\n name,\r\n });\r\n };\r\n const onChange = async (event) => {\r\n const target = event.target;\r\n let name = target.name;\r\n const field = get(_fields, name);\r\n if (field) {\r\n let error;\r\n let isValid;\r\n const fieldValue = target.type\r\n ? getFieldValue(field._f)\r\n : getEventValue(event);\r\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\r\n const shouldSkipValidation = (!hasValidation(field._f) &&\r\n !_options.resolver &&\r\n !get(_formState.errors, name) &&\r\n !field._f.deps) ||\r\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\r\n const watched = isWatched(name, _names, isBlurEvent);\r\n set(_formValues, name, fieldValue);\r\n if (isBlurEvent) {\r\n field._f.onBlur && field._f.onBlur(event);\r\n delayErrorCallback && delayErrorCallback(0);\r\n }\r\n else if (field._f.onChange) {\r\n field._f.onChange(event);\r\n }\r\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent, false);\r\n const shouldRender = !isEmptyObject(fieldState) || watched;\r\n !isBlurEvent &&\r\n _subjects.watch.next({\r\n name,\r\n type: event.type,\r\n });\r\n if (shouldSkipValidation) {\r\n return (shouldRender &&\r\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\r\n }\r\n !isBlurEvent && watched && _subjects.state.next({});\r\n validateFields[name] = validateFields[name] ? +1 : 1;\r\n _subjects.state.next({\r\n isValidating: true,\r\n });\r\n if (_options.resolver) {\r\n const { errors } = await _executeSchema([name]);\r\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\r\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\r\n error = errorLookupResult.error;\r\n name = errorLookupResult.name;\r\n isValid = isEmptyObject(errors);\r\n }\r\n else {\r\n error = (await validateField(field, get(_formValues, name), shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\r\n isValid = await _updateValid(true);\r\n }\r\n field._f.deps &&\r\n trigger(field._f.deps);\r\n shouldRenderByError(name, isValid, error, fieldState);\r\n }\r\n };\r\n const trigger = async (name, options = {}) => {\r\n let isValid;\r\n let validationResult;\r\n const fieldNames = convertToArrayPayload(name);\r\n _subjects.state.next({\r\n isValidating: true,\r\n });\r\n if (_options.resolver) {\r\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\r\n isValid = isEmptyObject(errors);\r\n validationResult = name\r\n ? !fieldNames.some((name) => get(errors, name))\r\n : isValid;\r\n }\r\n else if (name) {\r\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\r\n const field = get(_fields, fieldName);\r\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\r\n }))).every(Boolean);\r\n !(!validationResult && !_formState.isValid) && _updateValid();\r\n }\r\n else {\r\n validationResult = isValid = await executeBuiltInValidation(_fields);\r\n }\r\n _subjects.state.next({\r\n ...(!isString(name) ||\r\n (_proxyFormState.isValid && isValid !== _formState.isValid)\r\n ? {}\r\n : { name }),\r\n ...(_options.resolver ? { isValid } : {}),\r\n errors: _formState.errors,\r\n isValidating: false,\r\n });\r\n options.shouldFocus &&\r\n !validationResult &&\r\n focusFieldBy(_fields, (key) => get(_formState.errors, key), name ? fieldNames : _names.mount);\r\n return validationResult;\r\n };\r\n const getValues = (fieldNames) => {\r\n const values = {\r\n ..._defaultValues,\r\n ...(_stateFlags.mount ? _formValues : {}),\r\n };\r\n return isUndefined(fieldNames)\r\n ? values\r\n : isString(fieldNames)\r\n ? get(values, fieldNames)\r\n : fieldNames.map((name) => get(values, name));\r\n };\r\n const getFieldState = (name, formState) => ({\r\n invalid: !!get((formState || _formState).errors, name),\r\n isDirty: !!get((formState || _formState).dirtyFields, name),\r\n isTouched: !!get((formState || _formState).touchedFields, name),\r\n error: get((formState || _formState).errors, name),\r\n });\r\n const clearErrors = (name) => {\r\n name\r\n ? convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName))\r\n : (_formState.errors = {});\r\n _subjects.state.next({\r\n errors: _formState.errors,\r\n });\r\n };\r\n const setError = (name, error, options) => {\r\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\r\n set(_formState.errors, name, {\r\n ...error,\r\n ref,\r\n });\r\n _subjects.state.next({\r\n name,\r\n errors: _formState.errors,\r\n isValid: false,\r\n });\r\n options && options.shouldFocus && ref && ref.focus && ref.focus();\r\n };\r\n const watch = (name, defaultValue) => isFunction(name)\r\n ? _subjects.watch.subscribe({\r\n next: (info) => name(_getWatch(undefined, defaultValue), info),\r\n })\r\n : _getWatch(name, defaultValue, true);\r\n const unregister = (name, options = {}) => {\r\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\r\n _names.mount.delete(fieldName);\r\n _names.array.delete(fieldName);\r\n if (get(_fields, fieldName)) {\r\n if (!options.keepValue) {\r\n unset(_fields, fieldName);\r\n unset(_formValues, fieldName);\r\n }\r\n !options.keepError && unset(_formState.errors, fieldName);\r\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\r\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\r\n !_options.shouldUnregister &&\r\n !options.keepDefaultValue &&\r\n unset(_defaultValues, fieldName);\r\n }\r\n }\r\n _subjects.watch.next({});\r\n _subjects.state.next({\r\n ..._formState,\r\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\r\n });\r\n !options.keepIsValid && _updateValid();\r\n };\r\n const register = (name, options = {}) => {\r\n let field = get(_fields, name);\r\n const disabledIsDefined = isBoolean(options.disabled);\r\n set(_fields, name, {\r\n _f: {\r\n ...(field && field._f ? field._f : { ref: { name } }),\r\n name,\r\n mount: true,\r\n ...options,\r\n },\r\n });\r\n _names.mount.add(name);\r\n field\r\n ? disabledIsDefined &&\r\n set(_formValues, name, options.disabled\r\n ? undefined\r\n : get(_formValues, name, getFieldValue(field._f)))\r\n : updateValidAndValue(name, true, options.value);\r\n return {\r\n ...(disabledIsDefined ? { disabled: options.disabled } : {}),\r\n ...(_options.shouldUseNativeValidation\r\n ? {\r\n required: !!options.required,\r\n min: getRuleValue(options.min),\r\n max: getRuleValue(options.max),\r\n minLength: getRuleValue(options.minLength),\r\n maxLength: getRuleValue(options.maxLength),\r\n pattern: getRuleValue(options.pattern),\r\n }\r\n : {}),\r\n name,\r\n onChange,\r\n onBlur: onChange,\r\n ref: (ref) => {\r\n if (ref) {\r\n register(name, options);\r\n field = get(_fields, name);\r\n const fieldRef = isUndefined(ref.value)\r\n ? ref.querySelectorAll\r\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\r\n : ref\r\n : ref;\r\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\r\n const refs = field._f.refs || [];\r\n if (radioOrCheckbox\r\n ? refs.find((option) => option === fieldRef)\r\n : fieldRef === field._f.ref) {\r\n return;\r\n }\r\n set(_fields, name, {\r\n _f: {\r\n ...field._f,\r\n ...(radioOrCheckbox\r\n ? {\r\n refs: [\r\n ...refs.filter(live),\r\n fieldRef,\r\n ...(!!Array.isArray(get(_defaultValues, name))\r\n ? [{}]\r\n : []),\r\n ],\r\n ref: { type: fieldRef.type, name },\r\n }\r\n : { ref: fieldRef }),\r\n },\r\n });\r\n updateValidAndValue(name, false, undefined, fieldRef);\r\n }\r\n else {\r\n field = get(_fields, name, {});\r\n if (field._f) {\r\n field._f.mount = false;\r\n }\r\n (_options.shouldUnregister || options.shouldUnregister) &&\r\n !(isNameInFieldArray(_names.array, name) && _stateFlags.action) &&\r\n _names.unMount.add(name);\r\n }\r\n },\r\n };\r\n };\r\n const handleSubmit = (onValid, onInvalid) => async (e) => {\r\n if (e) {\r\n e.preventDefault && e.preventDefault();\r\n e.persist && e.persist();\r\n }\r\n let hasNoPromiseError = true;\r\n let fieldValues = cloneObject(_formValues);\r\n _subjects.state.next({\r\n isSubmitting: true,\r\n });\r\n try {\r\n if (_options.resolver) {\r\n const { errors, values } = await _executeSchema();\r\n _formState.errors = errors;\r\n fieldValues = values;\r\n }\r\n else {\r\n await executeBuiltInValidation(_fields);\r\n }\r\n if (isEmptyObject(_formState.errors)) {\r\n _subjects.state.next({\r\n errors: {},\r\n isSubmitting: true,\r\n });\r\n await onValid(fieldValues, e);\r\n }\r\n else {\r\n if (onInvalid) {\r\n await onInvalid({ ..._formState.errors }, e);\r\n }\r\n _options.shouldFocusError &&\r\n focusFieldBy(_fields, (key) => get(_formState.errors, key), _names.mount);\r\n }\r\n }\r\n catch (err) {\r\n hasNoPromiseError = false;\r\n throw err;\r\n }\r\n finally {\r\n _formState.isSubmitted = true;\r\n _subjects.state.next({\r\n isSubmitted: true,\r\n isSubmitting: false,\r\n isSubmitSuccessful: isEmptyObject(_formState.errors) && hasNoPromiseError,\r\n submitCount: _formState.submitCount + 1,\r\n errors: _formState.errors,\r\n });\r\n }\r\n };\r\n const resetField = (name, options = {}) => {\r\n if (get(_fields, name)) {\r\n if (isUndefined(options.defaultValue)) {\r\n setValue(name, get(_defaultValues, name));\r\n }\r\n else {\r\n setValue(name, options.defaultValue);\r\n set(_defaultValues, name, options.defaultValue);\r\n }\r\n if (!options.keepTouched) {\r\n unset(_formState.touchedFields, name);\r\n }\r\n if (!options.keepDirty) {\r\n unset(_formState.dirtyFields, name);\r\n _formState.isDirty = options.defaultValue\r\n ? _getDirty(name, get(_defaultValues, name))\r\n : _getDirty();\r\n }\r\n if (!options.keepError) {\r\n unset(_formState.errors, name);\r\n _proxyFormState.isValid && _updateValid();\r\n }\r\n _subjects.state.next({ ..._formState });\r\n }\r\n };\r\n const reset = (formValues, keepStateOptions = {}) => {\r\n const updatedValues = formValues || _defaultValues;\r\n const cloneUpdatedValues = cloneObject(updatedValues);\r\n const values = formValues && !isEmptyObject(formValues)\r\n ? cloneUpdatedValues\r\n : _defaultValues;\r\n if (!keepStateOptions.keepDefaultValues) {\r\n _defaultValues = updatedValues;\r\n }\r\n if (!keepStateOptions.keepValues) {\r\n if (keepStateOptions.keepDirtyValues) {\r\n for (const fieldName of _names.mount) {\r\n get(_formState.dirtyFields, fieldName)\r\n ? set(values, fieldName, get(_formValues, fieldName))\r\n : setValue(fieldName, get(values, fieldName));\r\n }\r\n }\r\n else {\r\n if (isWeb && isUndefined(formValues)) {\r\n for (const name of _names.mount) {\r\n const field = get(_fields, name);\r\n if (field && field._f) {\r\n const fieldReference = Array.isArray(field._f.refs)\r\n ? field._f.refs[0]\r\n : field._f.ref;\r\n try {\r\n if (isHTMLElement(fieldReference)) {\r\n fieldReference.closest('form').reset();\r\n break;\r\n }\r\n }\r\n catch (_a) { }\r\n }\r\n }\r\n }\r\n _fields = {};\r\n }\r\n _formValues = props.shouldUnregister\r\n ? keepStateOptions.keepDefaultValues\r\n ? cloneObject(_defaultValues)\r\n : {}\r\n : cloneUpdatedValues;\r\n _subjects.array.next({\r\n values,\r\n });\r\n _subjects.watch.next({\r\n values,\r\n });\r\n }\r\n _names = {\r\n mount: new Set(),\r\n unMount: new Set(),\r\n array: new Set(),\r\n watch: new Set(),\r\n watchAll: false,\r\n focus: '',\r\n };\r\n _stateFlags.mount =\r\n !_proxyFormState.isValid || !!keepStateOptions.keepIsValid;\r\n _stateFlags.watch = !!props.shouldUnregister;\r\n _subjects.state.next({\r\n submitCount: keepStateOptions.keepSubmitCount\r\n ? _formState.submitCount\r\n : 0,\r\n isDirty: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues\r\n ? _formState.isDirty\r\n : !!(keepStateOptions.keepDefaultValues &&\r\n !deepEqual(formValues, _defaultValues)),\r\n isSubmitted: keepStateOptions.keepIsSubmitted\r\n ? _formState.isSubmitted\r\n : false,\r\n dirtyFields: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues\r\n ? _formState.dirtyFields\r\n : keepStateOptions.keepDefaultValues && formValues\r\n ? getDirtyFields(_defaultValues, formValues)\r\n : {},\r\n touchedFields: keepStateOptions.keepTouched\r\n ? _formState.touchedFields\r\n : {},\r\n errors: keepStateOptions.keepErrors\r\n ? _formState.errors\r\n : {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n });\r\n };\r\n const setFocus = (name, options = {}) => {\r\n const field = get(_fields, name)._f;\r\n const fieldRef = field.refs ? field.refs[0] : field.ref;\r\n fieldRef.focus();\r\n options.shouldSelect && fieldRef.select();\r\n };\r\n return {\r\n control: {\r\n register,\r\n unregister,\r\n getFieldState,\r\n _executeSchema,\r\n _getWatch,\r\n _getDirty,\r\n _updateValid,\r\n _removeUnmounted,\r\n _updateFieldArray,\r\n _getFieldArray,\r\n _subjects,\r\n _proxyFormState,\r\n get _fields() {\r\n return _fields;\r\n },\r\n get _formValues() {\r\n return _formValues;\r\n },\r\n get _stateFlags() {\r\n return _stateFlags;\r\n },\r\n set _stateFlags(value) {\r\n _stateFlags = value;\r\n },\r\n get _defaultValues() {\r\n return _defaultValues;\r\n },\r\n get _names() {\r\n return _names;\r\n },\r\n set _names(value) {\r\n _names = value;\r\n },\r\n get _formState() {\r\n return _formState;\r\n },\r\n set _formState(value) {\r\n _formState = value;\r\n },\r\n get _options() {\r\n return _options;\r\n },\r\n set _options(value) {\r\n _options = {\r\n ..._options,\r\n ...value,\r\n };\r\n },\r\n },\r\n trigger,\r\n register,\r\n handleSubmit,\r\n watch,\r\n setValue,\r\n getValues,\r\n reset,\r\n resetField,\r\n clearErrors,\r\n unregister,\r\n setError,\r\n setFocus,\r\n getFieldState,\r\n };\r\n}\n\n/**\r\n * Custom hook to manage the entire form.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\r\n *\r\n * @param props - form configuration and validation parameters.\r\n *\r\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * console.log(watch(\"example\"));\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <input defaultValue=\"test\" {...register(\"example\")} />\r\n * <input {...register(\"exampleRequired\", { required: true })} />\r\n * {errors.exampleRequired && <span>This field is required</span>}\r\n * <input type=\"submit\" />\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useForm(props = {}) {\r\n const _formControl = React.useRef();\r\n const [formState, updateFormState] = React.useState({\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touchedFields: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: false,\r\n errors: {},\r\n });\r\n if (_formControl.current) {\r\n _formControl.current.control._options = props;\r\n }\r\n else {\r\n _formControl.current = {\r\n ...createFormControl(props),\r\n formState,\r\n };\r\n }\r\n const control = _formControl.current.control;\r\n const callback = React.useCallback((value) => {\r\n if (shouldRenderFormState(value, control._proxyFormState, true)) {\r\n control._formState = {\r\n ...control._formState,\r\n ...value,\r\n };\r\n updateFormState({ ...control._formState });\r\n }\r\n }, [control]);\r\n useSubscribe({\r\n subject: control._subjects.state,\r\n callback,\r\n });\r\n React.useEffect(() => {\r\n if (!control._stateFlags.mount) {\r\n control._proxyFormState.isValid && control._updateValid();\r\n control._stateFlags.mount = true;\r\n }\r\n if (control._stateFlags.watch) {\r\n control._stateFlags.watch = false;\r\n control._subjects.state.next({});\r\n }\r\n control._removeUnmounted();\r\n });\r\n _formControl.current.formState = getProxyFormState(formState, control._proxyFormState);\r\n return _formControl.current;\r\n}\n\nexport { Controller, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","import { useGetOne } from 'react-admin';\r\n\r\nconst useNuevo = (resource, options) =>\r\n useGetOne(resource, { id: '-1' }, options);\r\n\r\nexport default useNuevo;\r\n","import { alpha } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { GridOverlay } from '@mui/x-data-grid';\r\nimport * as React from 'react';\r\n\r\nexport const useStyles = makeStyles(\r\n theme => ({\r\n /*shadow: {\r\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\r\n },*/\r\n root: {\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor:\r\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n },\r\n header: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n rootPaper: {\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: theme.spacing(1),\r\n },\r\n rootOverlay: {\r\n flexDirection: 'column',\r\n '& .ant-empty-img-1': {\r\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\r\n },\r\n '& .ant-empty-img-2': {\r\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\r\n },\r\n '& .ant-empty-img-3': {\r\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\r\n },\r\n '& .ant-empty-img-4': {\r\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\r\n },\r\n '& .ant-empty-img-5': {\r\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\r\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\r\n },\r\n },\r\n label: {\r\n marginTop: theme.spacing(1),\r\n },\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n }),\r\n { name: 'GE' }\r\n);\r\nexport const CustomNoRowsOverlay = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <GridOverlay className={classes.rootOverlay}>\r\n <svg\r\n width=\"120\"\r\n height=\"100\"\r\n viewBox=\"0 0 184 152\"\r\n aria-hidden\r\n focusable=\"false\"\r\n >\r\n <g fill=\"none\" fillRule=\"evenodd\">\r\n <g transform=\"translate(24 31.67)\">\r\n <ellipse\r\n className=\"ant-empty-img-5\"\r\n cx=\"67.797\"\r\n cy=\"106.89\"\r\n rx=\"67.797\"\r\n ry=\"12.668\"\r\n />\r\n <path\r\n className=\"ant-empty-img-1\"\r\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-2\"\r\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\r\n />\r\n </g>\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\r\n />\r\n <g\r\n className=\"ant-empty-img-4\"\r\n transform=\"translate(149.65 15.383)\"\r\n >\r\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\r\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n <div className={classes.label}>No hay registros</div>\r\n </GridOverlay>\r\n );\r\n};\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useDeleteRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useDeleteRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useDeleteRowEtrGrid = (resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider.deleteEtrRow(resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useDeleteRowEtrGrid;\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useSaveRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useSaveRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useSaveRowEtrGrid = (type, resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider[type](resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useSaveRowEtrGrid;\r\n","import AddIcon from '@mui/icons-material/Add';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport ActionDelete from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { alpha, createTheme, StyledEngineProvider } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Paper from '@mui/material/Paper';\nimport { adaptV4Theme, ThemeProvider } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n Loading,\n SaveButton,\n SaveContextProvider,\n useDeleteWithConfirmController,\n useGetList,\n useNotify,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormState } from 'react-hook-form';\nimport useNuevo from '../../../utils/useNuevo';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\nimport useDeleteRowEtrGrid from './useDeleteRowEtrGrid';\nimport useSaveRowEtrGrid from './useSaveRowEtrGrid';\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor:\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n },\n header: {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.light,\n },\n rootPaper: {\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: theme.spacing(1),\n },\n rootOverlay: {\n flexDirection: 'column',\n '& .ant-empty-img-1': {\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\n },\n },\n label: {\n marginTop: theme.spacing(1),\n },\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n }),\n { name: 'EtrGrid' }\n);\n\nconst styleMargin = { marginLeft: '1.6rem', fontWeight: 'bold' };\n\nconst defaultIcon = <ActionDelete />;\n\nconst EtrDeleteWithConfirmButton = props => {\n const {\n api,\n classes: classesOverride,\n className,\n confirmTitle = 'ra.message.delete_title',\n confirmContent = 'ra.message.delete_content',\n icon = defaultIcon,\n record,\n redirect = false,\n onSuccess,\n onError,\n source,\n camposClaveFila,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const notify = useNotify();\n\n const { open, isLoading, handleDialogOpen, handleDialogClose } =\n useDeleteWithConfirmController({\n record,\n redirect,\n mutationOptions: {\n onSuccess,\n onError,\n },\n });\n //const resource = useResourceContext(props);\n const resource = props.resource;\n\n const { mutate: requestFn } = useDeleteRowEtrGrid(\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n notify('ra.notification.deleted', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'warning' });\n },\n }\n );\n\n const clavesFila = Object.keys(record)\n .filter(key => camposClaveFila.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = record[key];\n return obj;\n }, {});\n\n const handleDelete = useCallback(\n event => {\n requestFn({\n payload: {\n ge: source,\n clavesFila,\n },\n });\n },\n [record]\n );\n\n return (\n <Fragment>\n <Button\n key=\"button\"\n onClick={handleDialogOpen}\n className={classes.deleteButton}\n {...rest}\n >\n {icon}\n </Button>\n <Confirm\n isOpen={open}\n loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n};\n\nconst EtrDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText>\n <Typography\n component=\"span\"\n display=\"block\"\n variant=\"subtitle1\"\n style={{ ...styleMargin }}\n >\n {props.msgTitle}\n </Typography>\n {props.msgDesc}\n </DialogContentText>\n <Form\n resource={props.resource}\n onSubmit={props.onSubmit}\n //validate={customValidation}\n defaultValues={props.defaultValues}\n >\n {props.children}\n </Form>\n </Dialog>\n);\n\nEtrDialog.propTypes = {\n label: PropTypes.string,\n onClick: PropTypes.func,\n icon: PropTypes.any,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n labelEstado: PropTypes.string,\n msgTitle: PropTypes.any,\n msgDesc: PropTypes.any,\n resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDeleteButton = props => {\n const { api, camposClaveFila, resource, source, row } = props;\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n\n return (\n <EtrDeleteWithConfirmButton\n api\n confirmTitle=\"ra.action.delete\"\n source={source}\n record={row}\n resource={resource}\n camposClaveFila={camposClaveFila}\n />\n );\n};\n\nconst EtrDialogChild = props => {\n const {\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n isLoading,\n } = props;\n const { isDirty, isValid } = useFormState();\n\n return (\n <>\n <DialogContent>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n initialValue: recordPadre[child.props.source],\n fullWidth: true,\n disabled:\n child.props.disabled !== undefined\n ? child.props.disabled\n : estado !== 'N' &&\n camposClaveFila.indexOf(\n child.props.source\n ) !== -1,\n InputLabelProps: {\n shrink: true,\n },\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton disabled={!isDirty || !isValid} />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={isLoading}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n api,\n editors,\n record: recordPadre,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n etrResource,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const { data: initialValues } = useNuevo(etrResource, { enabled: open });\n const estado = 'N';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'createEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.created', { type: 'info' });\n }\n },\n onError: e => {\n notify(e.message, { type: 'warning' });\n },\n }\n );\n const notify = useNotify();\n const translate = useTranslate();\n const etiqueta = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...values, ...clavesFila },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n const saveContext = useMemo(\n () => ({\n save: handleSubmit,\n setOnFailure: e => console.log(e),\n }),\n [handleSubmit]\n );\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <SaveContextProvider value={saveContext}>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={etiqueta}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n defaultValues={initialValues}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </SaveContextProvider>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n api,\n editors,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n } = props;\n const notify = useNotify();\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const estado = 'M';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'updateEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.updated', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'warning' });\n },\n }\n );\n const etiqueta = translate('ra.action.edit');\n const labelEstado = etiqueta;\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...clavesFila, ...values },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </>\n );\n};\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n etrResource,\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n //const parentLoaded = useRef(false);\n const classes = useStyles(props);\n //const version = useVersion();\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n /*\n useEffect(() => {\n parentLoaded.current = true;\n }, [version]);\n */\n\n const clavesFila = Object.keys(recordPadre)\n .filter(key => claves.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = recordPadre[key];\n return obj;\n }, {});\n\n let filter = {};\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n\n const { data, isLoading } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n filter,\n //{ enabled: enableLoad && parentLoaded.current }\n { enabled: enableLoad }\n );\n\n const rows = useMemo(() => data.map(record => record.id), [data]);\n\n const columns = [\n allowAdd\n ? {\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n etrResource={etrResource}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n />\n ),\n }\n : {},\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrEditButton\n {...rest}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n row={params.row}\n />\n ),\n },\n allowRemove\n ? {\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrDeleteButton\n {...rest}\n camposClaveFila={claves}\n api={params.api}\n row={params.row}\n />\n ),\n }\n : {},\n ];\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n if (isLoading) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //isLoading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n sortModel={sortModel}\n rows={rows}\n columns={finalColumns}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport { adaptV4Theme } from '@mui/material/styles';\nimport { ThemeProvider } from '@mui/material/styles';\nimport Paper from '@mui/material/Paper';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as React from 'react';\nimport { useMemo, useState } from 'react';\nimport { Loading, useGetList } from 'react-admin';\nimport { CustomNoRowsOverlay, useStyles } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n filter = [],\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n const classes = useStyles(props);\n //const parentLoaded = useRef(false);\n //const version = useVersion();\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const columns = useMemo(\n () => [...defColumns],\n [JSON.stringify(defColumns)]\n );\n\n /*useEffect(() => {\n parentLoaded.current = true;\n }, [version]);*/\n\n let filterGe = [];\n\n filterBy.split(',').forEach(field => {\n if (field) {\n filterGe.push({\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n });\n }\n });\n\n const finalFilter = { ...filterGe.concat(filter) };\n\n const { data, isLoading } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n finalFilter,\n //{ enabled: enableLoad && parentLoaded.current }\n { enabled: enableLoad }\n );\n\n const rows = useMemo(() => data.map(record => record.id), [data]);\n\n if (isLoading) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //loading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n rows={rows}\n columns={columns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\n","import * as React from 'react';\r\nimport { createContext, useContext, useMemo, useState } from 'react';\r\n\r\nexport const ProgressContext = createContext();\r\n\r\nexport const ProgressProvider = ({ children }) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n const context = useMemo(\r\n () => ({\r\n open,\r\n show: () => setOpen(true),\r\n hide: () => setOpen(false),\r\n }),\r\n [open]\r\n );\r\n\r\n return (\r\n <ProgressContext.Provider value={context}>\r\n {children}\r\n </ProgressContext.Provider>\r\n );\r\n};\r\n\r\nconst useFormProgress = () => useContext(ProgressContext);\r\n\r\nexport default useFormProgress;\r\n","// ACTION `RELOAD_CB`\r\nexport const recargarComboBox = (id, method, params, callback) => ({\r\n type: 'RELOAD_CB',\r\n payload: {\r\n id,\r\n method,\r\n params,\r\n callback,\r\n },\r\n});\r\n\r\n// ACTION `RELOAD_CB_SUCCESS`\r\nexport const deleteRecargarComboBox = (id, callback) => ({\r\n type: 'RELOAD_CB_SUCCESS',\r\n payload: { id, callback },\r\n});\r\n\r\nexport const setHiddenAction = (id, hidden) => ({\r\n type: 'HIDE_INPUT',\r\n payload: {\r\n id,\r\n hidden,\r\n },\r\n});\r\n\r\nexport const setDisableAction = (id, disabled) => ({\r\n type: 'DISABLE_INPUT',\r\n payload: {\r\n id,\r\n disabled,\r\n },\r\n});\r\n\r\nexport const setRequireAction = (id, required) => ({\r\n type: 'REQUIRE_INPUT',\r\n payload: {\r\n id,\r\n required,\r\n },\r\n});\r\n","import { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport {\r\n recargarComboBox,\r\n setDisableAction,\r\n setHiddenAction,\r\n setRequireAction,\r\n} from './actions';\r\n\r\nexport const useRecargarComboBox = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, method, params, callback) => {\r\n dispatch(recargarComboBox(id, method, params, callback));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetHidden = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, hidden) => {\r\n dispatch(setHiddenAction(id, hidden));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetDisable = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, disable) => {\r\n dispatch(setDisableAction(id, disable));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetRequire = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, required) => {\r\n dispatch(setRequireAction(id, required));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.getJson() method, the result\r\n * of the call, and the isLoading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { isLoading: true }]\r\n * - success: [callback, { data: [data from response], loading: false, isLoading: false }]\r\n * - error: [callback, { error: [error from response], loading: false, isLoading: false }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param method string El método del formulario a llamar en el servidor\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useGetJson } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const {mutate, isLoading } = useGetJson('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (isError) { return <p>ERROR</p>; }\r\n * return <button disabled={isLoading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useGetJson = (resource, method, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider.getJson(resource, { method, params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useGetJson;\r\n","import { useCallback } from 'react';\r\nimport useGetJson from './useGetJson';\r\n\r\nconst useAjax = resource => {\r\n const { mutate: requestFn, isLoading } = useGetJson(resource);\r\n\r\n const ajax = useCallback(\r\n (method, params, callback) =>\r\n requestFn(\r\n { payload: { params, method } },\r\n {\r\n returnPromise: true,\r\n onSuccess: callback,\r\n onError: callback,\r\n }\r\n ),\r\n []\r\n );\r\n\r\n return [ajax, isLoading];\r\n};\r\n\r\nexport default useAjax;\r\n","import {\r\n useListContext,\r\n useNotify,\r\n useRedirect,\r\n useRefresh,\r\n useUnselectAll,\r\n} from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useFormProgress from '../layout/ProgressContext';\r\nimport {\r\n useRecargarComboBox,\r\n useSetDisable,\r\n useSetHidden,\r\n useSetRequire,\r\n} from './hooks';\r\nimport useAjax from './useAjax';\r\n\r\nexport const useDefaultHook = props => ({});\r\n\r\nexport const useUtilsGrilla = props => {\r\n const data = useListContext(props);\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const refresh = useRefresh();\r\n const unselectAll = useUnselectAll(props.resource);\r\n const [ajax] = useAjax(props.resource);\r\n\r\n return { ajax, data, notify, redirect, refresh, unselectAll };\r\n};\r\n\r\nexport const useUtilsSubmit = props => {\r\n const recargarComboBox = useRecargarComboBox();\r\n const setHidden = useSetHidden();\r\n const setDisable = useSetDisable();\r\n const setRequire = useSetRequire();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const [ajax] = useAjax(props.resource);\r\n\r\n return {\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n setHidden,\r\n setDisable,\r\n setRequire,\r\n };\r\n};\r\n\r\nconst useUtilsFicha = props => {\r\n const recargarComboBox = useRecargarComboBox();\r\n const setHidden = useSetHidden();\r\n const setDisable = useSetDisable();\r\n const setRequire = useSetRequire();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const form = useFormContext();\r\n const [ajax] = useAjax(props.resource);\r\n\r\n return {\r\n form,\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n setHidden,\r\n setDisable,\r\n setRequire,\r\n };\r\n};\r\n\r\nexport default useUtilsFicha;\r\n","import { useMediaQuery } from '@mui/material';\nimport * as React from 'react';\nimport {\n Datagrid,\n EditButton,\n SimpleList,\n useResourceDefinition,\n} from 'react-admin';\nimport useInitGrilla from '../utils/useInitGrilla';\n\nconst esEditable = (record, isRowEditable) =>\n isRowEditable === undefined ||\n (typeof isRowEditable === 'function' && isRowEditable(record));\n\nconst EditButtonGrilla = props => {\n const { isRowEditable, ...rest } = props;\n\n return esEditable(props.record, isRowEditable) ? (\n <EditButton {...rest} />\n ) : null;\n};\n\nconst GrillaEtriek = props => {\n useInitGrilla(props);\n\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\n const {\n hasEdit,\n options: { borra },\n } = useResourceDefinition(props);\n const {\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n desktopSize = false,\n onRenderGrilla,\n onLoadGrilla,\n hasEdit: hasEditProps,\n ...rest\n } = props;\n const children = props.children;\n const count = React.Children.count(props.children);\n let primaryText = pt;\n let secondaryText = st;\n\n if (!pt) {\n if (count >= 4) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count >= 3) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count >= 2) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count === 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n if (!st) {\n if (count >= 4) {\n secondaryText = record =>\n `${record[children[2].props.source]} - ${\n record[children[3].props.source]\n }`;\n } else if (count >= 3) {\n secondaryText = record => record[children[2].props.source];\n } else if (count >= 2) {\n primaryText = record =>\n `${record[children[0].props.source]} - ${\n record[children[1].props.source]\n }`;\n } else if (count === 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n return isSmall && desktopSize === false ? (\n <SimpleList\n linkType={record =>\n hasEdit && esEditable(record, isRowEditable) ? 'edit' : false\n }\n primaryText={primaryText}\n secondaryText={secondaryText}\n />\n ) : (\n <Datagrid\n //classes={{rowOdd: classes.rowOdd}}\n {...rest}\n >\n {React.Children.map(children, child =>\n !child.props.hidden ? child : null\n )}\n {hasEdit && <EditButtonGrilla isRowEditable={isRowEditable} />}\n {/*{borra === '1' && <DeleteButton confirmTitle=\"ra.action.delete\" mutationMode=\"pessimistic\"/>}*/}\n </Datagrid>\n );\n};\n\nexport default GrillaEtriek;\n","import { useEffect } from 'react';\r\nimport { useListContext } from 'react-admin';\r\nimport { useUtilsGrilla } from './useUtils';\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const { isLoading } = useListContext();\r\n const utils = useUtilsGrilla(props);\r\n\r\n useEffect(() => {\r\n onRenderGrilla && onRenderGrilla(utils);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n onLoadGrilla && onLoadGrilla(utils);\r\n }\r\n }, [isLoading]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from './useUtils';\r\n\r\nconst useInitFicha = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const fichaProps = useFormulario(rest);\r\n\r\n return { fichaProps };\r\n};\r\n\r\nexport default useInitFicha;\r\n","import { makeStyles } from '@mui/styles';\nimport Typography from '@mui/material/Typography';\nimport ChevronLeft from '@mui/icons-material/ChevronLeft';\nimport { isAfter } from 'date-fns';\nimport enLocale from 'date-fns/locale/en-US';\nimport esLocale from 'date-fns/locale/es';\nimport * as React from 'react';\nimport {\n ListButton,\n minValue,\n required,\n ShowButton,\n TopToolbar,\n} from 'react-admin';\n\nexport const getFormcodFromResource = resource => resource.split('_')[1];\n\nexport const useStylesContenidos = makeStyles(theme => ({\n form: {\n maxHeight: '70vh',\n overflow: 'auto',\n },\n tab: {\n display: 'block',\n maxHeight: '65vh',\n overflow: 'auto',\n },\n contenido: {\n [theme.breakpoints.up('md')]: {\n width: '20vw', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n },\n },\n}));\n\n//parse(): input -> record\n//format(): record -> input\n\nexport const dateFormat = (v, source) => {\n // v is a `Date` object\n if (!v) {\n return '';\n }\n\n if (v instanceof Date) {\n // v is a `Date` object\n return v.toString();\n } else if (v.indexOf('/') !== -1) {\n const match = v.split('/');\n const d = new Date(\n parseInt(match[2], 10),\n parseInt(match[1], 10) - 1,\n parseInt(match[0], 10)\n );\n return d.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{4})-(\\d{2})-(\\d{2})/.exec(v);\n if (match === null) {\n return;\n }\n const d = new Date(\n parseInt(match[1], 10),\n parseInt(match[2], 10) - 1,\n parseInt(match[3], 10)\n );\n if (isNaN(d)) {\n return;\n }\n return d.toString();\n }\n};\n\nexport const dateParser = (v, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!v) {\n return '';\n }\n\n const match = v.split(' ');\n let mes = '';\n switch (match[1]) {\n case 'Jan':\n mes = '01';\n break;\n case 'Feb':\n mes = '02';\n break;\n case 'Mar':\n mes = '03';\n break;\n case 'Apr':\n mes = '04';\n break;\n case 'May':\n mes = '05';\n break;\n case 'Jun':\n mes = '06';\n break;\n case 'Jul':\n mes = '07';\n break;\n case 'Aug':\n mes = '08';\n break;\n case 'Sep':\n mes = '09';\n break;\n case 'Oct':\n mes = '10';\n break;\n case 'Nov':\n mes = '11';\n break;\n case 'Dec':\n mes = '12';\n break;\n }\n\n return match[2] + '/' + mes + '/' + match[3];\n};\n\nexport const dateTimeFormat = v => {\n // v is a `Date` object\n if (!v) {\n return '';\n }\n\n if (v instanceof Date) {\n // v is a `Date` object\n return v.toString();\n } else if (v.indexOf('/') !== -1) {\n const match = v.split('/');\n const d = new Date(\n parseInt(match[2].substr(0, 4), 10),\n parseInt(match[1], 10) - 1,\n parseInt(match[0], 10),\n match[2].substr(5, 2),\n match[2].substr(8, 2)\n );\n return d.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{4})-(\\d{2})-(\\d{2})\\s(\\d{2}):(\\d{2})/.exec(v);\n if (match === null) {\n return;\n }\n const d = new Date(\n parseInt(match[1], 10),\n parseInt(match[2], 10) - 1,\n parseInt(match[3], 10),\n match[4],\n match[5]\n );\n if (isNaN(d)) {\n return;\n }\n return d.toString();\n }\n};\n\nexport const dateTimeParser = (v, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!v) {\n return '';\n }\n\n const match = v.split(' ');\n let mes = '';\n switch (match[1]) {\n case 'Jan':\n mes = '01';\n break;\n case 'Feb':\n mes = '02';\n break;\n case 'Mar':\n mes = '03';\n break;\n case 'Apr':\n mes = '04';\n break;\n case 'May':\n mes = '05';\n break;\n case 'Jun':\n mes = '06';\n break;\n case 'Jul':\n mes = '07';\n break;\n case 'Aug':\n mes = '08';\n break;\n case 'Sep':\n mes = '09';\n break;\n case 'Oct':\n mes = '10';\n break;\n case 'Nov':\n mes = '11';\n break;\n case 'Dec':\n mes = '12';\n break;\n }\n\n return match[2] + '/' + mes + '/' + match[3] + ' ' + match[4].substr(0, 5);\n};\n\nexport const timeFormat = v => {\n // v is a `Date` object\n if (!v) {\n return '';\n }\n\n if (v instanceof Date) {\n // v is a `Date` object\n return v.toString();\n } else if (v.indexOf(':') !== -1) {\n const match = v.split(':');\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{2}):(\\d{2})/.exec(v);\n if (match === null) {\n return;\n }\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n }\n};\n\nexport const timeParser = (v, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!v) {\n return '';\n }\n\n return v.split(' ')[4].substring(0, 5);\n};\n\nconst sanitizeRestProps = ({\n className,\n record,\n hasEdit,\n hasShow,\n hasList,\n resource,\n totalPages,\n showFilter,\n setSort,\n setPerPage,\n perPage,\n defaultTitle,\n setPage,\n setFilters,\n selectedIds,\n onUnselectItems,\n onToggleItem,\n isLoading,\n exporter,\n hideFilter,\n hasCreate,\n filterValues,\n displayedFilters,\n currentSort,\n ...rest\n}) => rest;\n\nexport const Separador = props => (\n <Typography variant=\"h6\" gutterBottom>\n {props.children}\n </Typography>\n);\n\nexport const FichaActions = ({\n children,\n className,\n data,\n hasShow,\n hasList = true,\n ...rest\n}) => (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {children}\n {hasList && (\n <ListButton label=\"ra.action.back\" icon={<ChevronLeft />} />\n )}\n {hasShow && <ShowButton record={data} />}\n </TopToolbar>\n);\n\nexport const etrRequerido = required();\nexport const etrRequeridoNumerico = [etrRequerido, minValue(1)];\nexport const dateFormatOptions = { format: 'dd/MM/yyyy' };\nexport const etrFechaMayorQue = sourceFechaInicio => (value, allValues) => {\n const inicio = allValues[sourceFechaInicio];\n\n if (value && inicio) {\n const iniDate = new Date(inicio);\n const finDate = new Date(value);\n\n if (isAfter(iniDate, finDate)) {\n return {\n message: 'validation.greater_or_equal',\n args: { menor: inicio },\n };\n }\n }\n\n return undefined;\n};\n\nexport const localeOptions = (idi = 'es') => ({\n locale: idi === 'en' ? enLocale : esLocale,\n});\nexport const choicesEstado = [\n { id: '1', name: 'Aprobado' },\n { id: '2', name: 'Rechazado' },\n { id: '3', name: 'Pendiente' },\n];\nexport const descargarLink = (ruta, nombre) => {\n const fakeLink = document.createElement('a');\n fakeLink.style.display = 'none';\n document.body.appendChild(fakeLink);\n fakeLink.setAttribute('href', ruta);\n fakeLink.setAttribute('download', nombre);\n fakeLink.click();\n};\n","import { createContext } from 'react';\r\n\r\nexport const FichaContext = createContext({});\r\n","import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Create, useResourceContext } from 'react-admin';\r\nimport { useInitFicha, useNuevo } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nconst CreateEtriek = props => {\r\n const {\r\n useFormulario = useDefaultHook,\r\n enableLoad = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n\r\n const { data: initialValues, isLoading } = useNuevo(resource, {\r\n enabled: enableLoad,\r\n });\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'N', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Create {...rest} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n\r\nCreateEtriek.propTypes = {\r\n useFormulario: PropTypes.func,\r\n};\r\n\r\nexport { CreateEtriek };\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ActionDelete from '@mui/icons-material/Delete';\nimport IconButton from '@mui/material/IconButton';\nimport { alpha } from '@mui/material/styles';\nimport Tooltip from '@mui/material/Tooltip';\nimport { makeStyles } from '@mui/styles';\nimport classnames from 'clsx';\nimport * as React from 'react';\nimport { useDelete, useRecordContext, useTranslate } from 'react-admin';\n\nconst sanitizeRestProps = ({\n classes,\n filterValues,\n handleSubmit,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n redirect,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst DeleteButtonNoWarning = props => {\n const classes = useStyles(props);\n const translate = useTranslate();\n const {\n resource,\n redirect,\n className,\n icon,\n label = 'ra.action.delete',\n ...rest\n } = props;\n\n const record = useRecordContext();\n const [deleteOne, { isLoading }] = useDelete(resource, { id: record.id });\n\n return (\n <Tooltip title={translate('ra.action.delete')}>\n <IconButton\n disabled={isLoading}\n onClick={() => deleteOne()}\n label={label}\n className={classnames(\n 'ra-delete-button',\n classes.deleteButton,\n className\n )}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n size=\"large\"\n >\n {icon}\n </IconButton>\n </Tooltip>\n );\n};\n\nDeleteButtonNoWarning.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete />,\n};\n\nexport default DeleteButtonNoWarning;\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n margin: theme.spacing(1),\n },\n input: {\n display: 'none',\n },\n}));\n\nconst FormDialog = React.forwardRef((props, ref) => {\n const {\n isOpen,\n onConfirm,\n onClose,\n title,\n dialogText,\n children,\n hasAccept = true,\n hasCancel = true,\n isLoading = false,\n } = props;\n const classes = useStyles(props);\n\n const handleConfirm = e => {\n onConfirm && onConfirm(e);\n };\n\n const handleClose = e => {\n onClose && onClose(e);\n };\n\n return (\n <Dialog\n ref={ref}\n open={isOpen}\n fullWidth\n onClose={handleClose}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">{title}</DialogTitle>\n <DialogContent>\n <DialogContentText>{dialogText}</DialogContentText>\n {children}\n </DialogContent>\n {(hasAccept || hasCancel) && (\n <DialogActions>\n {hasCancel && (\n <Button\n onClick={handleClose}\n variant=\"contained\"\n color=\"secondary\"\n className={classes.button}\n disabled={isLoading}\n >\n Cancelar\n </Button>\n )}\n {hasAccept && (\n <Button\n onClick={handleConfirm}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n disabled={isLoading}\n >\n Ok\n </Button>\n )}\n </DialogActions>\n )}\n </Dialog>\n );\n});\n\nexport default FormDialog;\n","import { CircularProgress } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useContext, useEffect } from 'react';\nimport { useResourceContext } from 'react-admin';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\nimport useFormProgress from './ProgressContext';\nimport { Stack, CardContent } from '@mui/material';\n\nconst useStyles = makeStyles(theme => ({\n block: {\n pointerEvents: 'none',\n backgroundColor: '#ffffff',\n opacity: 0.6,\n position: 'relative',\n },\n progress: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n },\n}));\n\nconst sanitizeRestProps = ({\n children,\n className,\n component,\n defaultValues,\n onSubmit,\n record,\n resource,\n reValidateMode,\n sx,\n toolbar,\n validate,\n resolver,\n warnWhenUnsavedChanges,\n ...props\n}) => props;\n\nconst FormContainer = props => {\n const cls = useStyles(props);\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, isLoading, initialValues, fichaProps } =\n useContext(FichaContext);\n const utils = useUtilsFicha({ resource });\n\n useEffect(() => {\n fichaProps.onRenderFicha && fichaProps.onRenderFicha(utils, estado);\n }, []);\n\n useEffect(() => {\n if (!isLoading) {\n fichaProps.onLoadFicha &&\n fichaProps.onLoadFicha(utils, estado, initialValues);\n }\n }, [isLoading]);\n\n return <div>Hola Mundo!</div>;\n};\n\nexport default FormContainer;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport { Form, SimpleForm, useNotify } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\n//import ToolbarFicha from \"./ToolbarFicha\";\n\nconst defaultSave = () => {};\n\nconst FormEtriek = props => {\n const { children, ...rest } = props;\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config = {} } = fichaProps;\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n\n const finalSave = useCallback(\n values => {\n const valid =\n onBeforeSubmitFicha &&\n onBeforeSubmitFicha({ form: { values }, ...utils }, 'N');\n if (typeof valid === 'string') {\n notify(valid, { type: 'warning' });\n return defaultSave();\n } else {\n return valid === undefined || valid\n ? props.onSubmit(values)\n : defaultSave();\n }\n },\n [onBeforeSubmitFicha, utils]\n );\n\n return (\n <Form\n {...rest}\n {...config}\n onSubmit={finalSave}\n defaultValues={initialValues}\n /*toolbar={<ToolbarFicha />}*/\n >\n <FormContainer>{children}</FormContainer>\n </Form>\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes,\n};\n\nexport { FormEtriek };\n","import ExpandMore from '@mui/icons-material/ExpandMore';\nimport {\n Collapse,\n List,\n ListItemIcon,\n MenuItem,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport * as React from 'react';\nimport { useSidebarState, useTranslate } from 'react-admin';\n\nconst SubMenu = props => {\n const { handleToggle, isOpen, name, icon, children, dense } = props;\n const translate = useTranslate();\n\n const [sidebarIsOpen] = useSidebarState();\n\n const header = (\n <MenuItem dense={dense} onClick={handleToggle}>\n <ListItemIcon sx={{ minWidth: 5 }}>\n {isOpen ? <ExpandMore /> : icon}\n </ListItemIcon>\n <Typography variant=\"inherit\" color=\"textSecondary\">\n {translate(name)}\n </Typography>\n </MenuItem>\n );\n\n return (\n <div>\n {sidebarIsOpen || isOpen ? (\n header\n ) : (\n <Tooltip title={translate(name)} placement=\"right\">\n {header}\n </Tooltip>\n )}\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\n <List\n dense={dense}\n component=\"div\"\n disablePadding\n sx={{\n '& a': {\n transition:\n 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\n paddingLeft: sidebarIsOpen ? 4 : 2,\n },\n }}\n >\n {children}\n </List>\n </Collapse>\n </div>\n );\n};\n\nexport default SubMenu;\n","import SettingsIcon from '@mui/icons-material/Settings';\nimport { Box, useMediaQuery } from '@mui/material';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport {\n DashboardMenuItem,\n Menu as RaMenu,\n MenuItemLink,\n useSidebarState,\n useTranslate,\n} from 'react-admin';\nimport SubMenu from './SubMenu';\n\nconst renderMenu = props => {\n const { items: menus, translate, ...rest } = props;\n const { state, handleToggle, dense } = rest;\n\n return (\n menus && (\n <div>\n {menus.map(item => {\n const { name, menu, label, icon = 'settings' } = item;\n\n return menu ? (\n <SubMenu\n key={name}\n name={label}\n handleToggle={() => handleToggle(name)}\n isOpen={state[name]}\n icon={<SettingsIcon />}\n dense={dense}\n >\n {renderMenu({ items: menu, translate, ...rest })}\n </SubMenu>\n ) : (\n <MenuItemLink\n key={name}\n to={`/${name}`}\n //TODO: Cambiar junto con 'es.js'\n //primaryText={translate(`resources.${resource}.name`, {smart_count: 2})}\n primaryText={translate(`resources.${name}.name`, {\n _: label,\n })}\n dense={dense}\n leftIcon={<SettingsIcon />}\n //classes={{active: activeClassName, icon: iconClass}}\n //className={className}\n />\n );\n })}\n </div>\n )\n );\n};\n\nconst Menu = ({ dense = false }) => {\n const translate = useTranslate();\n const [state, setState] = useState({ mnuPrueba: false });\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const [open] = useSidebarState();\n\n const menus = JSON.parse(localStorage.getItem('menus'));\n\n const className = ''; //classes.itemLink;\n const iconClass = ''; //classes.itemIcon;\n const activeClassName = ''; //classes.secondary;\n\n const handleToggle = menu => {\n setState(state => ({ ...state, [menu]: !state[menu] }));\n };\n\n const itemsFn = renderMenu({\n items: menus,\n handleToggle,\n state,\n activeClassName,\n iconClass,\n className,\n open,\n dense,\n translate,\n });\n\n return (\n <Box\n sx={{\n width: open ? 230 : 50,\n marginTop: 1,\n marginBottom: 1,\n transition: theme =>\n theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n }}\n >\n <RaMenu>\n <DashboardMenuItem\n primaryText={translate('ra.page.dashboard')}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n {itemsFn}\n {isXSmall && (\n <MenuItemLink\n to=\"/configuration\"\n primaryText={translate('pos.configuration')}\n leftIcon={<SettingsIcon />}\n dense={dense}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n )}\n </RaMenu>\n </Box>\n );\n};\n\nexport default Menu;\n","import LockIcon from '@mui/icons-material/Lock';\nimport Avatar from '@mui/material/Avatar';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardActions from '@mui/material/CardActions';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport {\n Form,\n TextInput,\n PasswordInput,\n useLogin,\n useNotify,\n useTranslate,\n} from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\nconst useStyles = makeStyles(theme => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n alignItems: 'center',\n justifyContent: 'flex-start',\n backgroundImage: ({ loginBackgroundImage }) => loginBackgroundImage,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n avatarIcon: {\n backgroundColor: theme.palette.secondary.main,\n },\n icon: ({ textLength }) => ({\n position: 'absolute',\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1),\n }),\n hint: {\n marginTop: '1em',\n display: 'flex',\n justifyContent: 'center',\n color: theme.palette.grey[500],\n },\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n actions: {\n padding: '0 1em 1em 1em',\n },\n}));\n\nconst Login = props => {\n const {\n loginBackgroundImage,\n nameSource = 'username',\n passwordSource = 'password',\n } = props;\n const [loading, setLoading] = useState(false);\n const translate = useTranslate();\n const loginButtonText = translate('ra.auth.sign_in');\n const classes = useStyles({\n loginBackgroundImage,\n textLength: loginButtonText.length,\n });\n const notify = useNotify();\n const login = useLogin();\n const location = useLocation();\n\n const handleSubmit = values => {\n setLoading(true);\n login(values, location.state ? location.state.nextPathname : '/').catch(\n error => {\n setLoading(false);\n notify(\n typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? 'ra.auth.sign_in_error'\n : error.message,\n {\n type: 'warning',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n },\n }\n );\n }\n );\n };\n\n const validate = values => {\n const errors = {};\n if (!values[nameSource]) {\n errors[nameSource] = translate('ra.validation.required');\n }\n if (!values[passwordSource]) {\n errors[passwordSource] = translate('ra.validation.required');\n }\n return errors;\n };\n\n return (\n <Form onSubmit={handleSubmit} validate={validate}>\n <div className={classes.main}>\n <Card className={classes.card}>\n <div className={classes.avatar}>\n <Avatar className={classes.avatarIcon}>\n <LockIcon />\n </Avatar>\n </div>\n <div className={classes.hint}>Inicio de Sesión</div>\n <div className={classes.form}>\n <div className={classes.input}>\n <TextInput\n autoFocus\n name={nameSource}\n label={translate('ra.auth.username')}\n disabled={loading}\n />\n </div>\n <div className={classes.input}>\n <PasswordInput\n name={passwordSource}\n label={translate('ra.auth.password')}\n type=\"password\"\n disabled={loading}\n />\n </div>\n </div>\n <CardActions className={classes.actions}>\n <Button\n variant=\"contained\"\n type=\"submit\"\n color=\"primary\"\n disabled={loading}\n fullWidth\n >\n {loading && (\n <CircularProgress\n className={classes.icon}\n size={18}\n thickness={2}\n />\n )}\n {loginButtonText}\n </Button>\n </CardActions>\n </Card>\n </div>\n </Form>\n );\n};\n\nexport default Login;\n","import Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\r\nimport * as React from 'react';\r\nimport { useRef, useState } from 'react';\r\nimport { Button, FieldTitle, useResourceContext } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n displayedFilters,\r\n filterValues,\r\n showFilter,\r\n ...rest\r\n}) => rest;\r\n\r\nconst useStyles = makeStyles({\r\n root: { display: 'inline-block' },\r\n paddingRight: { paddingRight: 4 },\r\n});\r\n\r\nconst MenuButton = props => {\r\n const {\r\n className,\r\n options = [],\r\n icon: Icon,\r\n label,\r\n disabled,\r\n ...rest\r\n } = props;\r\n const [open, setOpen] = useState(false);\r\n const anchorEl = useRef();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const classes = useStyles(props);\r\n const resource = useResourceContext(props);\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setOpen(false);\r\n return true;\r\n };\r\n\r\n const handleToggle = e => {\r\n // This prevents ghost click.\r\n e.preventDefault();\r\n setOpen(true);\r\n anchorEl.current = e.currentTarget;\r\n };\r\n\r\n const handleClose = event => {\r\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n className={classnames(classes.root, className)}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n <Button\r\n className=\"add-filter\"\r\n //label={options[selectedIndex].label}\r\n label={label}\r\n onClick={handleToggle}\r\n title={options[selectedIndex].label}\r\n disabled={disabled}\r\n >\r\n {options[selectedIndex]?.icon || Icon}\r\n </Button>\r\n <Menu open={open} anchorEl={anchorEl.current} onClose={handleClose}>\r\n {options.map((option, index) => (\r\n <MenuItem\r\n key={option.label}\r\n disabled={option.disabled}\r\n selected={index === selectedIndex}\r\n onClick={event => {\r\n handleMenuItemClick(event, index);\r\n option.onClick && option.onClick(event, index);\r\n }}\r\n resource={resource}\r\n title={option.label}\r\n >\r\n {option.icon}\r\n <span className={classes.paddingRight}></span>\r\n <FieldTitle label={option.label} resource={resource} />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MenuButton;\r\n","import * as React from 'react';\r\nimport { useCallback, useContext } from 'react';\r\nimport { Form, TabbedFormView, useNotify } from 'react-admin';\r\nimport { useUtilsSubmit } from '../utils';\r\nimport { FichaContext } from './FichaContext';\r\nimport FormContainer from './FormContainer';\r\n\r\nconst defaultSave = () => {};\r\n\r\nexport const TabbedFormEtriek = props => {\r\n const { initialValues, fichaProps } = useContext(FichaContext);\r\n const { onBeforeSubmitFicha } = fichaProps;\r\n const { config = {} } = fichaProps;\r\n const utils = useUtilsSubmit(props);\r\n const notify = useNotify();\r\n\r\n const finalSave = useCallback(\r\n values => {\r\n const valid =\r\n onBeforeSubmitFicha &&\r\n onBeforeSubmitFicha({ form: { values }, ...utils }, 'N');\r\n if (typeof valid === 'string') {\r\n notify(valid, { type: 'warning' });\r\n return defaultSave();\r\n } else {\r\n return valid === undefined || valid\r\n ? props.onSubmit(values)\r\n : defaultSave();\r\n }\r\n },\r\n [onBeforeSubmitFicha, utils]\r\n );\r\n\r\n return (\r\n <Form\r\n {...props}\r\n {...config}\r\n onSubmit={finalSave}\r\n defaultValues={initialValues}\r\n /*toolbar={<ToolbarFicha/>}*/\r\n >\r\n <TabbedFormView component={FormContainer} />\r\n </Form>\r\n );\r\n};\r\n\r\nTabbedFormEtriek.defaultProps = {\r\n syncWithLocation: false,\r\n};\r\n","import { defaultTheme } from 'react-admin';\n\n// TODO: Probablemente no sea necesario sobreescribir nada de los temas\n\nconst darkTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'dark',\n },\n components: {\n ...defaultTheme.components,\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nconst lightTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'light',\n },\n components: {\n ...defaultTheme.components,\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nexport { lightTheme, darkTheme };\n","var englishMessages = {\n ra: {\n action: {\n add_filter: 'Add filter',\n add: 'Add',\n back: 'Go Back',\n bulk_actions: '1 item selected |||| %{smart_count} items selected',\n cancel: 'Cancel',\n clear_input_value: 'Clear value',\n clone: 'Clone',\n confirm: 'Confirm',\n create: 'Create',\n create_item: 'Create %{item}',\n delete: 'Delete',\n edit: 'Edit',\n export: 'Export',\n list: 'List',\n refresh: 'Refresh',\n remove_filter: 'Remove this filter',\n remove: 'Remove',\n save: 'Save',\n search: 'Search',\n select_all: 'Select all',\n select_row: 'Select this row',\n show: 'Show',\n sort: 'Sort',\n undo: 'Undo',\n unselect: 'Unselect',\n expand: 'Expand',\n close: 'Close',\n open_menu: 'Open menu',\n close_menu: 'Close menu',\n update: 'Update',\n move_up: 'Move up',\n move_down: 'Move down',\n open: 'Open',\n toggle_theme: 'Toggle Theme',\n },\n boolean: {\n true: 'Yes',\n false: 'No',\n null: ' ',\n },\n page: {\n create: 'Create %{name}',\n dashboard: 'Dashboard',\n edit: '%{name} #%{id}',\n error: 'Something went wrong',\n list: '%{name}',\n loading: 'Loading',\n not_found: 'Not Found',\n show: '%{name} #%{id}',\n empty: 'No %{name} yet.',\n invite: 'Do you want to add one?',\n },\n input: {\n file: {\n upload_several: 'Drop some files to upload, or click to select one.',\n upload_single: 'Drop a file to upload, or click to select it.',\n },\n image: {\n upload_several: 'Drop some pictures to upload, or click to select one.',\n upload_single: 'Drop a picture to upload, or click to select it.',\n },\n references: {\n all_missing: 'Unable to find references data.',\n many_missing: 'At least one of the associated references no longer appears to be available.',\n single_missing: 'Associated reference no longer appears to be available.',\n },\n password: {\n toggle_visible: 'Hide password',\n toggle_hidden: 'Show password',\n },\n },\n message: {\n about: 'About',\n are_you_sure: 'Are you sure?',\n bulk_delete_content: 'Are you sure you want to delete this %{name}? |||| Are you sure you want to delete these %{smart_count} items?',\n bulk_delete_title: 'Delete %{name} |||| Delete %{smart_count} %{name}',\n bulk_update_content: 'Are you sure you want to update this %{name}? |||| Are you sure you want to update these %{smart_count} items?',\n bulk_update_title: 'Update %{name} |||| Update %{smart_count} %{name}',\n delete_content: 'Are you sure you want to delete this item?',\n delete_title: 'Delete %{name} #%{id}',\n details: 'Details',\n error: \"A client error occurred and your request couldn't be completed.\",\n invalid_form: 'The form is not valid. Please check for errors',\n loading: 'The page is loading, just a moment please',\n no: 'No',\n not_found: 'Either you typed a wrong URL, or you followed a bad link.',\n yes: 'Yes',\n unsaved_changes: \"Some of your changes weren't saved. Are you sure you want to ignore them?\",\n },\n navigation: {\n no_results: 'No results found',\n no_more_results: 'The page number %{page} is out of boundaries. Try the previous page.',\n page_out_of_boundaries: 'Page number %{page} out of boundaries',\n page_out_from_end: 'Cannot go after last page',\n page_out_from_begin: 'Cannot go before page 1',\n page_range_info: '%{offsetBegin}-%{offsetEnd} of %{total}',\n partial_page_range_info: '%{offsetBegin}-%{offsetEnd} of more than %{offsetEnd}',\n current_page: 'Page %{page}',\n page: 'Go to page %{page}',\n first: 'Go to first page',\n last: 'Go to last page',\n next: 'Go to next page',\n previous: 'Go to previous page',\n page_rows_per_page: 'Rows per page:',\n skip_nav: 'Skip to content',\n },\n sort: {\n sort_by: 'Sort by %{field} %{order}',\n ASC: 'ascending',\n DESC: 'descending',\n },\n auth: {\n auth_check_error: 'Please login to continue',\n user_menu: 'Profile',\n username: 'Username',\n password: 'Password',\n sign_in: 'Sign in',\n sign_in_error: 'Authentication failed, please retry',\n logout: 'Logout',\n },\n notification: {\n updated: 'Element updated |||| %{smart_count} elements updated',\n created: 'Element created',\n deleted: 'Element deleted |||| %{smart_count} elements deleted',\n bad_item: 'Incorrect element',\n item_doesnt_exist: 'Element does not exist',\n http_error: 'Server communication error',\n data_provider_error: 'dataProvider error. Check the console for details.',\n i18n_error: 'Cannot load the translations for the specified language',\n canceled: 'Action cancelled',\n logged_out: 'Your session has ended, please reconnect.',\n not_authorized: \"You're not authorized to access this resource.\",\n },\n validation: {\n required: 'Required',\n minLength: 'Must be %{min} characters at least',\n maxLength: 'Must be %{max} characters or less',\n minValue: 'Must be at least %{min}',\n maxValue: 'Must be %{max} or less',\n number: 'Must be a number',\n email: 'Must be a valid email',\n oneOf: 'Must be one of: %{options}',\n regex: 'Must match a specific format (regexp): %{pattern}',\n },\n saved_queries: {\n label: 'Saved queries',\n query_name: 'Query name',\n new_label: 'Save current query...',\n new_dialog_title: 'Save current query as',\n remove_label: 'Remove saved query',\n remove_label_with_name: 'Remove query \"%{name}\"',\n remove_dialog_title: 'Remove saved query?',\n remove_message: 'Are you sure you want to remove that item from your list of saved queries?',\n help: 'Filter the list and save this query for later',\n },\n },\n};\nexport default englishMessages;\n","import englishMessages from 'ra-language-english';\r\n//import resources from './en-fides';\r\n\r\nenglishMessages.ra.page.empty = 'No records yet';\r\n\r\nconst enMessages = {\r\n ...englishMessages,\r\n login: {\r\n id: 'ID',\r\n hint: 'Login',\r\n required: 'Insert Username or ID',\r\n send: 'Send',\r\n email: 'Enter your email address',\r\n check_email:\r\n 'Check your email inbox, we just send you a verification code!',\r\n must_enter_credentials: 'You must first enter Username or ID',\r\n restore_password: 'Restore Password',\r\n punch_in: 'Punch In',\r\n },\r\n pos: {\r\n search: 'Search',\r\n change_pin: 'Change Pin',\r\n change_password: 'Change Password',\r\n configuration: 'Configuration',\r\n language: 'Language',\r\n theme: {\r\n name: 'Theme',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Welcome',\r\n subtitle: 'Employee Management',\r\n aor_button: 'Metiri WebSite',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Must be greater than or equal to %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default enMessages;\r\n","const spanishMessages = {\n ra: {\n action: {\n add: \"Añadir\",\n add_filter: \"Añadir filtro\",\n back: \"Ir atrás\",\n bulk_actions: \"1 item seleccionado |||| %{smart_count} items seleccionados\",\n cancel: \"Cancelar\",\n clear_input_value: \"Limpiar valor\",\n clone: \"Clonar\",\n close: \"Cerrar\",\n close_menu: \"Cerrar menú\",\n confirm: \"Confirmar\",\n create: \"Crear\",\n create_item: \"Crear %{item}\",\n delete: \"Eliminar\",\n edit: \"Editar\",\n expand: \"Expandir\",\n export: \"Exportar\",\n list: \"Listar\",\n move_up: \"Mover arriba\",\n move_down: \"Mover abajo\",\n open_menu: \"Abrir menú\",\n refresh: \"Refrescar\",\n remove: \"Borrar\",\n remove_filter: \"Borrar filtro\",\n save: \"Guardar\",\n search: \"Buscar\",\n select_all: \"Seleccionar todo\",\n select_row: \"Seleccionar esta fila\",\n show: \"Mostrar\",\n sort: \"Ordenar\",\n undo: \"Deshacer\",\n unselect: \"Deseleccionar\",\n update: \"Actualizar\"\n },\n auth: {\n auth_check_error: \"Por favor inicie sesión para continuar\",\n logout: \"Cerrar Sesión\",\n password: \"Contraseña\",\n sign_in: \"Acceder\",\n sign_in_error: \"La autenticación falló, por favor, vuelva a intentarlo\",\n user_menu: \"Perfil\",\n username: \"Usuario\"\n },\n boolean: {\n true: \"Sí\",\n false: \"No\",\n null: \" \"\n },\n input: {\n file: {\n upload_several: \"Arrastre algunos archivos para subir o haga clic para seleccionarlos.\",\n upload_single: \"Arrastre un archivo para subir o haga clic para seleccionarlo.\"\n },\n image: {\n upload_several: \"Arrastre algunas imagénes para subir o haga clic para seleccionarlas.\",\n upload_single: \"Arrastre alguna imagen para subir o haga clic para seleccionarla.\"\n },\n references: {\n all_missing: \"No se pueden encontrar datos de referencias.\",\n many_missing: \"Al menos una de las referencias asociadas parece no estar disponible.\",\n single_missing: \"La referencia asociada no parece estar disponible.\"\n },\n password: {\n toggle_visible: \"Ocultar contraseña\",\n toggle_hidden: \"Mostrar contraseña\"\n }\n },\n message: {\n about: \"Acerca de\",\n are_you_sure: \"¿Está seguro?\",\n bulk_delete_content: \"¿Seguro que quiere eliminar este %{name}? |||| ¿Seguro que quiere eliminar estos %{smart_count} items?\",\n bulk_delete_title: \"Eliminar %{name} |||| Eliminar %{smart_count} %{name} items\",\n bulk_update_content: \"¿Seguro que quiere actualizar este %{name}? |||| ¿Seguro que quiere actualizar estos %{smart_count} items?\",\n bulk_update_title: \"Actualizar %{name} |||| Actualizar %{smart_count} %{name} items\",\n delete_content: \"¿Seguro que quiere eliminar este item?\",\n delete_title: \"Eliminar %{name} #%{id}\",\n details: \"Detalles\",\n error: \"Se produjo un error en el cliente y su solicitud no se pudo completar\",\n invalid_form: \"El formulario no es válido. Por favor verifique si hay errores\",\n loading: \"La página se está cargando, espere un momento por favor\",\n no: \"No\",\n not_found: \"O bien escribió una URL incorrecta o siguió un enlace incorrecto.\",\n yes: \"Sí\",\n unsaved_changes: \"Algunos de sus cambios no se guardaron. ¿Está seguro que quiere ignorarlos?\"\n },\n navigation: {\n next: \"Siguiente\",\n no_more_results: \"El número de página %{page} está fuera de los límites. Pruebe la página anterior.\",\n no_results: \"No se han encontrado resultados\",\n page_out_from_begin: \"No puede ir antes de la página 1\",\n page_out_from_end: \"No puede ir después de la última página\",\n page_out_of_boundaries: \"Número de página %{page} fuera de los límites\",\n page_range_info: \"%{offsetBegin} - %{offsetEnd} de %{total}\",\n page_rows_per_page: \"Filas por página:\",\n prev: \"Anterior\",\n skip_nav: \"Saltar al contenido\"\n },\n sort: {\n sort_by: \"Ordenar por %{field} %{order}\",\n ASC: \"ascendente\",\n DESC: \"descendente\"\n },\n notification: {\n bad_item: \"Elemento incorrecto\",\n canceled: \"Acción cancelada\",\n created: \"Elemento creado\",\n data_provider_error: \"Error del proveedor de datos. Consulte la consola para más detalles.\",\n deleted: \"Elemento borrado |||| %{smart_count} elementos borrados.\",\n http_error: \"Error de comunicación con el servidor\",\n item_doesnt_exist: \"El elemento no existe\",\n logged_out: \"Su sesión ha finalizado, vuelva a conectarse.\",\n updated: \"Elemento actualizado |||| %{smart_count} elementos actualizados\",\n i18n_error: \"No se pudieron cargar las traducciones para el idioma especificado\",\n not_authorized: \"No tiene autorización para acceder a este recurso.\"\n },\n page: {\n create: \"Crear %{name}\",\n dashboard: \"Tablero\",\n edit: \"%{name} #%{id}\",\n empty: \"Sin %{name} todavía.\",\n error: \"Algo salió mal\",\n invite: \"¿Quiere agregar una?\",\n list: \"Lista de %{name}\",\n loading: \"Cargando\",\n not_found: \"No encontrado\",\n show: \"%{name} #%{id}\"\n },\n validation: {\n email: \"Debe ser un correo electrónico válido\",\n maxLength: \"Debe contener %{max} caracteres o menos\",\n maxValue: \"Debe ser %{max} o menos\",\n minLength: \"Debe contener %{min} caracteres al menos\",\n minValue: \"Debe ser al menos %{min}\",\n number: \"Debe ser un número\",\n oneOf: \"Debe ser uno de: %{options}\",\n regex: \"Debe coincidir con un formato específico (regexp): %{pattern}\",\n required: \"Requerido\"\n }\n }\n};\n\nexport default spanishMessages;\n//# sourceMappingURL=index.js.map\n","import spanishMessages from '@blackbox-vision/ra-language-spanish';\r\n//import resources from './es-fides';\r\n\r\nspanishMessages.ra.notification.created = 'Datos guardados correctamente';\r\nspanishMessages.ra.action.bulk_actions =\r\n '1 seleccionado |||| %{smart_count} seleccionados';\r\nspanishMessages.ra.page.dashboard = 'Inicio';\r\nspanishMessages.ra.page.empty = 'Sin registros todavía';\r\nspanishMessages.ra.page.invite = '¿Quiere agregar uno?';\r\nspanishMessages.ra.page.list = '%{name}';\r\nspanishMessages.ra.page.edit = 'Editar %{name}';\r\nspanishMessages.ra.action.back = 'Volver';\r\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n login: {\r\n id: 'Cédula',\r\n hint: 'Inicio de Sesión',\r\n required: 'Ingrese Usuario o Cédula',\r\n email: 'Ingrese su email aquí',\r\n send: 'Enviar',\r\n check_email:\r\n 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\r\n must_enter_credentials:\r\n 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\r\n restore_password: 'Restablecer Contraseña',\r\n punch_in: 'Generar Marcas',\r\n },\r\n pos: {\r\n search: 'Búsqueda',\r\n change_pin: 'Cambiar Pin',\r\n change_password: 'Cambiar Contraseña',\r\n configuration: 'Configuración',\r\n language: 'Lenguaje',\r\n theme: {\r\n name: 'Tema Visual',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Bienvenid@',\r\n subtitle: 'Gestión de Funcionarios',\r\n aor_button: 'Sitio de Metiri',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Debe ser mayor o igual a %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default esMessages;\r\n","import { useContext } from 'react';\r\nimport { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst useFieldController = props => {\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { hidden: hiddenProps = false, ...rest } = props;\r\n const {\r\n hidden: hiddenInitial,\r\n useContenido = useDefaultHook,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n ...restInitialProps,\r\n });\r\n const { hidden: oculto, ...dynamicPropsRest } = dynamicProps;\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${props.source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n return {\r\n propsContenido: {\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n },\r\n hidden: oculto !== undefined ? oculto : hidden,\r\n };\r\n};\r\n\r\nexport default useFieldController;\r\n","import { useContext, useRef } from 'react';\r\nimport { useInput } from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\nimport { etrRequerido } from '../../utils';\r\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst validateInput = (value, allVallues, meta) =>\r\n typeof meta?.data === 'string' ? meta.data : undefined;\r\n\r\nconst useContenidoController = props => {\r\n const { source } = props;\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const configInput = useSelector(state => {\r\n const configInputs = state.configInputs\r\n ? state.configInputs.filter(item => item.id === source)\r\n : [];\r\n return configInputs[0] ? configInputs[0] : null;\r\n });\r\n const {\r\n disabled: reduxDisabled,\r\n hidden: reduxHidden,\r\n required: reduxRequired,\r\n } = configInput || {};\r\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\r\n\r\n const { [source]: initialProps = {} } = fichaProps;\r\n const {\r\n onFocus: onFocusProps,\r\n onChange: onChangeProps,\r\n onBlur: onBlurProps,\r\n hidden: hiddenProps = false,\r\n disabled: disabledProps = false,\r\n validate: propValidate,\r\n ...rest\r\n } = props;\r\n const { field } = useInput(props);\r\n const {\r\n onFocus: onFocusInitial,\r\n onBlur: onBlurInitial,\r\n onChange: onChangeInitial,\r\n hidden: hiddenInitial,\r\n disabled: disabledInitial,\r\n useContenido = useDefaultHook,\r\n validate: initValidate,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const disabled =\r\n disabledInitial !== undefined ? disabledInitial : disabledProps;\r\n const onFocus =\r\n onFocusInitial !== undefined ? onFocusInitial : onFocusProps;\r\n const onBlur = onBlurInitial !== undefined ? onBlurInitial : onBlurProps;\r\n const onChange =\r\n onChangeInitial !== undefined ? onChangeInitial : onChangeProps;\r\n const utils = useUtilsFicha(props);\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n utils,\r\n ...restInitialProps,\r\n });\r\n const previousValue = useRef(field.value);\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n const {\r\n hidden: hiddenDinamico,\r\n disabled: disabledDinamico,\r\n onFocus: onFocusDinamico,\r\n onChnage: onChangeDinamico,\r\n onBlur: onBlurDinamico,\r\n validate: dynamicValidate,\r\n ...dynamicPropsRest\r\n } = dynamicProps;\r\n const onFocusFinal = onFocusDinamico || onFocus;\r\n const onBlurFinal = onBlurDinamico || onBlur;\r\n const onChangeFinal = onChangeDinamico || onChange;\r\n\r\n const argCero = { ...utils, prev: previousValue.current };\r\n const finalPropsValidate = Array.isArray(propValidate)\r\n ? propValidate\r\n : [propValidate];\r\n const finalInitValidate = Array.isArray(initValidate)\r\n ? initValidate\r\n : [initValidate];\r\n const finalDynamicValidate = Array.isArray(dynamicValidate)\r\n ? dynamicValidate\r\n : [dynamicValidate];\r\n const finalValidate = [\r\n ...finalPropsValidate,\r\n ...finalInitValidate,\r\n ...finalDynamicValidate,\r\n validateInput,\r\n reduxValidate,\r\n ].filter(i => i !== undefined);\r\n\r\n return {\r\n propsContenido: {\r\n onFocus: e => {\r\n onFocusFinal && onFocus(utils, estado, e);\r\n previousValue.current = e.target.value;\r\n },\r\n onBlur: e => onBlurFinal && onBlurFinal(argCero, estado, e),\r\n onChange: e => onChangeFinal && onChangeFinal(argCero, estado, e),\r\n helperText: false,\r\n validate: finalValidate,\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n disabled:\r\n reduxDisabled !== undefined\r\n ? reduxDisabled\r\n : disabledDinamico !== undefined\r\n ? disabledDinamico\r\n : disabled,\r\n },\r\n hidden:\r\n reduxHidden !== undefined\r\n ? reduxHidden\r\n : hiddenDinamico !== undefined\r\n ? hiddenDinamico\r\n : hidden,\r\n };\r\n};\r\n\r\nexport default useContenidoController;\r\n","import * as React from 'react';\r\nimport { useEffect, useRef } from 'react';\r\nimport { ReferenceInput, SelectInput, useChoicesContext } from 'react-admin';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { deleteRecargarComboBox } from '../../utils';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nexport const SelectInputEtriek = props => {\r\n const { callback, ...rest } = props;\r\n const { isLoading, allChoices } = useChoicesContext();\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n // Llamo al callback de recargarComboBox pasándole los nuevos items\r\n if (typeof callback === 'function') {\r\n callback(Object.values([allChoices]));\r\n }\r\n }\r\n //TODO: Siempre entra al useEffect porque callback siempre cambia, aunque no siempre llama por ajax, porque no cambiaron los parámetros de la acción de redux\r\n // Sacar `callback` del array de dependencias y probar si entra al useEffect al cambiarlos parámetros de recargarComboBox\r\n }, [allChoices, callback, isLoading]);\r\n\r\n return <SelectInput {...rest} />;\r\n};\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const dispatch = useDispatch();\r\n const { helperText, source, reference, ...rest } = props;\r\n const recarga_cb = useSelector(state => {\r\n const rcb = state.reload_cb\r\n ? state.reload_cb.filter(item => item.id === source)\r\n : [];\r\n return rcb[0] ? rcb[0] : null;\r\n });\r\n const respaldoFiltro = useRef(recarga_cb);\r\n const filter =\r\n recarga_cb === null && respaldoFiltro.current\r\n ? respaldoFiltro.current\r\n : recarga_cb;\r\n\r\n let callback, finalFilter;\r\n if (filter) {\r\n const { callback: tempCallback, ...restFilter } = filter;\r\n callback = tempCallback;\r\n finalFilter = restFilter;\r\n }\r\n\r\n useEffect(() => {\r\n if (recarga_cb !== null) {\r\n respaldoFiltro.current = recarga_cb;\r\n dispatch(deleteRecargarComboBox(source));\r\n }\r\n }, [JSON.stringify(recarga_cb)]);\r\n\r\n return !hidden ? (\r\n <ReferenceInput\r\n reference={reference}\r\n source={source}\r\n perPage={250}\r\n filter={finalFilter}\r\n >\r\n <SelectInputEtriek\r\n {...rest}\r\n callback={callback}\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\nexport default ComboBox;\r\n","import { Paper } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { alpha } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport classnames from 'clsx';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { useRecordSelection, useTranslate } from 'react-admin';\nimport Draggable from 'react-draggable';\nimport { useSelector } from 'react-redux';\n//import TreeWithDetails from \"../tree-ts/TreeWithDetails\";\n\nconst useStyles = makeStyles(\n theme => ({\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n }),\n { name: 'RaConfirm' }\n);\n\nconst PaperComponent = props => (\n <Draggable\n handle=\"#draggable-dialog-title\"\n cancel={'[class*=\"MuiDialogContent-root\"]'}\n >\n <Paper {...props} />\n </Draggable>\n);\n\nconst cursorStyle = { cursor: 'move' };\n\nconst FiltroAsig = props => {\n const {\n isOpen,\n isLoading,\n title,\n content,\n cancel,\n confirmColor,\n ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n contentResource,\n translateOptions = {},\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n const [selectedIds] = useRecordSelection(contentResource);\n\n const handleConfirm = useCallback(\n (e, button) => {\n e.stopPropagation();\n onConfirm(e, selectedIds);\n },\n [selectedIds, onConfirm]\n );\n\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"lg\"\n PaperComponent={PaperComponent}\n aria-labelledby=\"draggable-dialog-title\"\n >\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent dividers={true}>{content}</DialogContent>\n <DialogActions>\n <Button disabled={isLoading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={isLoading}\n onClick={e => handleConfirm(e, 'yes')}\n className={classnames('ra-confirm', {\n [classes.confirmWarning]: confirmColor === 'warning',\n [classes.confirmPrimary]: confirmColor === 'primary',\n })}\n autoFocus\n >\n <ConfirmIcon className={classes.iconPaddingStyle} />\n {translate('ra.action.confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nFiltroAsig.propTypes = {\n cancel: PropTypes.string,\n classes: PropTypes.object,\n confirm: PropTypes.string,\n confirmColor: PropTypes.string,\n ConfirmIcon: PropTypes.elementType,\n CancelIcon: PropTypes.elementType,\n content: PropTypes.node.isRequired,\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nFiltroAsig.defaultProps = {\n cancel: 'ra.action.cancel',\n classes: {},\n confirmColor: 'primary',\n ConfirmIcon: ActionCheck,\n CancelIcon: AlertError,\n isOpen: false,\n};\n\nexport default FiltroAsig;\n","import IconButton from '@mui/material/IconButton';\r\nimport CheckIcon from '@mui/icons-material/Check';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport * as React from 'react';\r\nimport { Fragment, useCallback, useState } from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport FiltroAsis from './FiltroAsis';\r\n\r\nconst BulkActions = () => <Fragment />;\r\nconst defaultValue = {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n};\r\n\r\nconst format = v => {\r\n //console.log({ format: v });\r\n if (!v || v?.all) {\r\n return 'Todos';\r\n } else if (v?.none || v.seleccion.length === 0) {\r\n return 'Ninguno';\r\n }\r\n\r\n return `Selección (${v.seleccion.length})`;\r\n};\r\n\r\nconst parse = v => {\r\n //console.log({ parse: v });\r\n return v;\r\n};\r\n\r\nconst TextBoxSelection = props => {\r\n const { disabled, asistant, asistantResource, label, source, ...rest } =\r\n props;\r\n const [open, setOpen] = useState(false);\r\n const form = useFormContext();\r\n\r\n const handleClose = useCallback(() => {\r\n setOpen(false);\r\n }, [setOpen]);\r\n\r\n const handleConfirm = (e, selectedIds) => {\r\n setOpen(false);\r\n form.setValue(source, {\r\n seleccion: selectedIds,\r\n all: false,\r\n none: false,\r\n });\r\n };\r\n\r\n const handleNinguno = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: false,\r\n none: true,\r\n });\r\n };\r\n\r\n const handleTodos = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n <div style={{ display: 'flex', alignItems: 'center' }}>\r\n <TextInput\r\n initialValue={defaultValue}\r\n {...rest}\r\n source={source}\r\n label={label}\r\n disabled\r\n parse={parse}\r\n format={format}\r\n helperText={false}\r\n InputProps={{\r\n endAdornment: (\r\n <>\r\n <IconButton\r\n onClick={handleNinguno}\r\n disabled={disabled}\r\n aria-label=\"Ninguno\"\r\n size=\"small\"\r\n title=\"Ninguno\"\r\n >\r\n <RemoveCircleOutlineIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={handleTodos}\r\n disabled={disabled}\r\n aria-label=\"Todos\"\r\n size=\"small\"\r\n title=\"Todos\"\r\n >\r\n <CheckIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => setOpen(true)}\r\n disabled={disabled}\r\n aria-label=\"Selección\"\r\n size=\"small\"\r\n title=\"Selección\"\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </>\r\n ),\r\n }}\r\n />\r\n </div>\r\n <FiltroAsis\r\n isOpen={open}\r\n title={`Selección de ${label}`}\r\n contentResource={asistantResource}\r\n content={React.createElement(asistant, {\r\n bulkActionButtons: <BulkActions />,\r\n hasCreate: false,\r\n exporter: false,\r\n resource: asistantResource,\r\n })}\r\n onConfirm={handleConfirm}\r\n onClose={handleClose}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default TextBoxSelection;\r\n","import { Box, Paper } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { alpha } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport classnames from 'clsx';\nimport { TreeView } from 'devextreme-react';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n Datagrid,\n List,\n TextField,\n useDataProvider,\n useTranslate,\n} from 'react-admin';\nimport Draggable from 'react-draggable';\n\nconst PostList = props => (\n <List\n {...props}\n hasCreate={false}\n exporter={false}\n perPage={25}\n title=\" \"\n bulkActionButtons={<span />}\n >\n <Datagrid>\n <TextField source=\"funced\" sortable label=\"Cédula\" />\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\n </Datagrid>\n </List>\n);\n\nconst filtroInicial = { fillista: 'empcod=-1' };\n\nconst TreeWithList = props => {\n const [filtro, setFiltro] = React.useState(filtroInicial);\n const dataProvider = useDataProvider();\n\n const onClick = useCallback(\n e => {\n setFiltro({ fillista: e.node.key });\n },\n [setFiltro]\n );\n\n const createChildren = useCallback(\n parent => {\n const parentId = parent ? parent.itemData.id : '';\n\n return dataProvider\n .getChildNodes('form_224', { parentId: parentId })\n .then(response => response.data)\n .catch(() => {\n throw new Error('Data Loading Error');\n });\n },\n [dataProvider]\n );\n\n return (\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\n <Box flexGrow={1}>\n <TreeView\n id=\"funcionarios-treeview\"\n dataStructure=\"plain\"\n rootValue=\"\"\n onItemClick={onClick}\n createChildren={createChildren}\n />\n </Box>\n <Box flexGrow={2}>\n <PostList resource=\"form_224\" filter={filtro} />\n </Box>\n </Box>\n );\n};\n\nconst useStyles = makeStyles(\n theme => ({\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n }),\n { name: 'RaConfirm' }\n);\n\nconst PaperComponent = props => (\n <Draggable\n handle=\"#draggable-dialog-title\"\n cancel={'[class*=\"MuiDialogContent-root\"]'}\n >\n <Paper {...props} />\n </Draggable>\n);\n\nconst cursorStyle = { cursor: 'move' };\n\nconst FiltroFuncionarios = props => {\n const {\n isOpen,\n isLoading,\n title,\n cancel,\n confirmColor,\n ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n translateOptions = {},\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const handleConfirm = useCallback(\n (e, button) => {\n e.stopPropagation();\n onConfirm(e, button);\n },\n [onConfirm]\n );\n\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"lg\"\n PaperComponent={PaperComponent}\n aria-labelledby=\"draggable-dialog-title\"\n >\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent dividers={true}>\n <TreeWithList />\n </DialogContent>\n <DialogActions>\n <Button disabled={isLoading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={isLoading}\n onClick={e => handleConfirm(e, 'yes')}\n className={classnames('ra-confirm', {\n [classes.confirmWarning]: confirmColor === 'warning',\n [classes.confirmPrimary]: confirmColor === 'primary',\n })}\n autoFocus\n >\n <ConfirmIcon className={classes.iconPaddingStyle} />\n {translate('ra.action.confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nFiltroFuncionarios.propTypes = {\n cancel: PropTypes.string,\n classes: PropTypes.object,\n confirm: PropTypes.string,\n confirmColor: PropTypes.string,\n ConfirmIcon: PropTypes.elementType,\n CancelIcon: PropTypes.elementType,\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nFiltroFuncionarios.defaultProps = {\n cancel: 'ra.action.cancel',\n classes: {},\n confirmColor: 'primary',\n ConfirmIcon: ActionCheck,\n CancelIcon: AlertError,\n isOpen: false,\n};\n\nexport default FiltroFuncionarios;\n","import IconButton from '@mui/material/IconButton';\r\nimport CheckIcon from '@mui/icons-material/Check';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport * as React from 'react';\r\nimport { Fragment, useCallback, useState } from 'react';\r\nimport { TextInput, useRecordSelection } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport FiltroFuncionarios from './FiltroFuncionarios';\r\n\r\nconst defaultValue = {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n};\r\n\r\nconst format = v => {\r\n if (!v || v?.all) {\r\n return 'Todos';\r\n } else if (v?.none || v.seleccion.length === 0) {\r\n return 'Ninguno';\r\n }\r\n\r\n return `Selección (${v.seleccion.length})`;\r\n};\r\n\r\nconst parse = v => {\r\n //console.log({ parse: v })\r\n return v;\r\n};\r\n\r\nconst TBSF = props => {\r\n const {\r\n disabled,\r\n asistant,\r\n asistantResource,\r\n label = 'Funcionarios',\r\n source,\r\n ...rest\r\n } = props;\r\n const [selectedIds] = useRecordSelection('form_224');\r\n\r\n const [open, setOpen] = useState(false);\r\n const form = useFormContext();\r\n\r\n const handleClose = useCallback(() => {\r\n setOpen(false);\r\n }, [setOpen]);\r\n\r\n const handleConfirm = (e, button) => {\r\n setOpen(false);\r\n form.setValue(source, {\r\n seleccion: selectedIds,\r\n all: false,\r\n none: false,\r\n });\r\n };\r\n\r\n const handleNinguno = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: false,\r\n none: true,\r\n });\r\n };\r\n\r\n const handleTodos = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <div style={{ display: 'flex', alignItems: 'center' }}>\r\n <TextInput\r\n initialValue={defaultValue}\r\n {...rest}\r\n source={source}\r\n label={label}\r\n disabled\r\n parse={parse}\r\n format={format}\r\n helperText={false}\r\n InputProps={{\r\n endAdornment: (\r\n <>\r\n <IconButton\r\n onClick={handleNinguno}\r\n disabled={disabled}\r\n aria-label=\"Ninguno\"\r\n size=\"small\"\r\n title=\"Ninguno\"\r\n >\r\n <RemoveCircleOutlineIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={handleTodos}\r\n disabled={disabled}\r\n aria-label=\"Todos\"\r\n size=\"small\"\r\n title=\"Todos\"\r\n >\r\n <CheckIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => setOpen(true)}\r\n disabled={disabled}\r\n aria-label=\"Selección\"\r\n size=\"small\"\r\n title=\"Selección\"\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </>\r\n ),\r\n }}\r\n />\r\n </div>\r\n <FiltroFuncionarios\r\n isOpen={open}\r\n title={`Selección de ${label}`}\r\n onConfirm={handleConfirm}\r\n onClose={handleClose}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default TBSF;\r\n","import * as React from 'react';\nimport { BooleanField as RaBooleanField, useRecordContext } from 'react-admin';\nimport useFieldController from './useFieldController';\n\nconst BooleanField = props => {\n const { propsContenido, hidden } = useFieldController(props);\n const record = useRecordContext();\n const boolRecord = JSON.parse(JSON.stringify(record));\n const value = boolRecord[props.source];\n boolRecord[props.source] = value != '' && value != '0';\n\n return (\n !hidden && <RaBooleanField {...propsContenido} record={boolRecord} />\n );\n};\n\nexport default BooleanField;\n","import * as React from 'react';\r\nimport { FileInput, ImageField } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst Camino = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return (\r\n !hidden && (\r\n <FileInput accept=\"\" maxSize={5000000} {...propsContenido}>\r\n <ImageField source=\"src\" />\r\n </FileInput>\r\n )\r\n );\r\n};\r\n\r\nexport default Camino;\r\n","import * as React from 'react';\r\nimport { BooleanInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst CheckBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <BooleanInput {...propsContenido} />;\r\n};\r\n\r\nexport default CheckBox;\r\n","import * as React from 'react';\r\nimport { SelectInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ComboBoxManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <SelectInput {...propsContenido} />;\r\n};\r\n\r\nexport default ComboBoxManual;\r\n","import * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Edit, useEditController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nexport const EditEtriek = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const controllerProps = useEditController(rest);\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Edit {...rest} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n","import Avatar from '@mui/material/Avatar';\r\nimport * as React from 'react';\r\nimport { useRecordContext } from 'react-admin';\r\n\r\nconst ImageField = props => {\r\n const { title, source, src } = props;\r\n const record = useRecordContext(props);\r\n const rutaImg = `${src}/${record[source]}`;\r\n\r\n return <Avatar title={title} src={rutaImg} />;\r\n};\r\n\r\nexport default ImageField;\r\n","import * as React from 'react';\r\nimport { Layout } from 'react-admin';\r\nimport AppBar from './AppBar';\r\nimport Menu from './Menu';\r\n\r\nexport default props => <Layout {...props} appBar={AppBar} menu={Menu} />;\r\n","import * as React from 'react';\r\nimport { Children, cloneElement, useMemo } from 'react';\r\nimport {\r\n CreateButton,\r\n ExportButton,\r\n sanitizeListRestProps,\r\n TopToolbar,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition,\r\n} from 'react-admin';\r\nimport { useUtilsGrilla } from '../utils';\r\n\r\nconst ListActionsEtriek = props => {\r\n const { className, exporter, filters, children, jsBotonGrilla, ...rest } =\r\n props;\r\n const { utils } = useUtilsGrilla(props);\r\n const listContext = useListContext(props);\r\n const resource = useResourceContext(rest);\r\n const { hasCreate } = useResourceDefinition(rest);\r\n\r\n const {\r\n currentSort,\r\n displayedFilters,\r\n filterValues,\r\n selectedIds,\r\n showFilter,\r\n total,\r\n } = listContext;\r\n\r\n const utilsGrilla = { ...utils, ...listContext };\r\n\r\n return useMemo(\r\n () => (\r\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\r\n {filters &&\r\n cloneElement(filters, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })}\r\n {hasCreate && <CreateButton />}\r\n {exporter !== false && (\r\n <ExportButton\r\n disabled={total === 0}\r\n resource={resource}\r\n sort={currentSort}\r\n filterValues={filterValues}\r\n />\r\n )}\r\n {Children.map(children, (child, index) =>\r\n cloneElement(child, {\r\n onClick: !child.props.options\r\n ? e => jsBotonGrilla(utilsGrilla, child.key)\r\n : null,\r\n options: child.props.options\r\n ? child.props.options.map(option => ({\r\n ...option,\r\n onClick: e =>\r\n jsBotonGrilla(utilsGrilla, option.key),\r\n }))\r\n : null,\r\n })\r\n )}\r\n </TopToolbar>\r\n ),\r\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\r\n );\r\n};\r\n\r\nexport default ListActionsEtriek;\r\n","import * as React from 'react';\r\nimport { ReferenceArrayInput, SelectArrayInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ListCheck = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n //const parentLoaded = useRef(false);\r\n //const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n /*useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n */\r\n\r\n return !hidden ? (\r\n <ReferenceArrayInput {...rest}>\r\n <SelectArrayInput\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceArrayInput>\r\n ) : null;\r\n};\r\nexport default ListCheck;\r\n","import Typography from '@mui/material/Typography';\nimport * as React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nconst MultiTextField = props => {\n const { fields, className, textAlign, sortable, ...rest } = props;\n const { campos, separador = '', secundario = [], hasSecundario } = fields;\n const record = useRecordContext();\n const principal = campos\n .map(item => (record[item] !== undefined ? record[item] : item))\n .join(`${separador}`);\n\n return (\n <Typography noWrap variant=\"inherit\" className={className} {...rest}>\n {principal}\n {hasSecundario && (\n <Typography\n component=\"span\"\n display=\"block\"\n color=\"textSecondary\"\n variant=\"caption\"\n >\n {secundario\n .map(\n item =>\n `${item.etiqueta || '---'}: ${\n record[item.campo] || '---'\n }`\n )\n .join(' ')}\n </Typography>\n )}\n </Typography>\n );\n};\n\nexport default MultiTextField;\n","import * as React from 'react';\r\nimport { PasswordInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst Password = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <PasswordInput {...propsContenido} />;\r\n};\r\n\r\nexport default Password;\r\n","import * as React from 'react';\r\nimport { useRef } from 'react';\r\nimport { RadioButtonGroupInput, ReferenceInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n //const parentLoaded = useRef(false);\r\n //const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n /* useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);*/\r\n\r\n return !hidden ? (\r\n <ReferenceInput {...rest}>\r\n <RadioButtonGroupInput\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\n\r\nexport default ComboBox;\r\n","import * as React from 'react';\r\nimport { RadioButtonGroupInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst RadioButtonManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <RadioButtonGroupInput {...propsContenido} />;\r\n};\r\n\r\nexport default RadioButtonManual;\r\n","import * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Show, useShowController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nexport const ShowEtriek = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const controllerProps = useShowController(rest);\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Show {...rest} {...controllerProps} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n","import Divider from '@mui/material/Divider';\r\nimport Tab from '@mui/material/Tab';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport GrillaEtriek from './GrillaEtriek';\r\n\r\nconst TabbedGrillaEtriek = props => {\r\n const {\r\n filterValues,\r\n setFilters,\r\n tabs: { ids, ...tabs },\r\n GridComponent = GrillaEtriek,\r\n ...rest\r\n } = props;\r\n const tabActual = filterValues.id;\r\n\r\n const handleChange = (event, value) => {\r\n setFilters({ ...filterValues, id: value });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Tabs\r\n value={tabActual}\r\n indicatorColor=\"primary\"\r\n onChange={handleChange}\r\n >\r\n {ids.map(id => (\r\n <Tab\r\n key={id}\r\n label={id.charAt(0).toUpperCase() + id.slice(1)}\r\n value={id}\r\n />\r\n ))}\r\n </Tabs>\r\n <Divider />\r\n <GridComponent {...rest} {...tabs[tabActual]} />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default TabbedGrillaEtriek;\r\n","import * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextArea = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <TextInput multiline {...propsContenido} />;\r\n};\r\n\r\nexport default TextArea;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport {\r\n DateInput,\r\n DateTimeInput,\r\n NumberInput,\r\n TextInput,\r\n useInput,\r\n} from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextBox = props => {\r\n const { tipo, ...rest } = props;\r\n const { propsContenido, hidden } = useContenidoController(rest);\r\n const form = useFormContext();\r\n const { field, fieldState } = useInput(props);\r\n const esFechaHora = tipo === 'F' || tipo === 'Z';\r\n\r\n useEffect(() => {\r\n if (propsContenido.value) {\r\n form.setValue(props.source, propsContenido.value);\r\n //TODO: Es necesaria la siguiente línea con react-hook-form?\r\n //if (props.disabled) {\r\n // field.onBlur();\r\n //}\r\n }\r\n });\r\n\r\n //TODO: Es necesaria la siguiente línea con react-hook-form?\r\n useEffect(() => {\r\n // Para que ejecute el onBlur al cambiar el valor desde el asistente\r\n if (\r\n esFechaHora &&\r\n field.value != '' &&\r\n !fieldState.error &&\r\n fieldState.isTouched\r\n //TODO: Es necesaria la siguiente línea con react-hook-form?\r\n //&& !fieldState.active\r\n ) {\r\n propsContenido.onBlur();\r\n }\r\n }, [field.value]);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'N' || tipo === 'D' ? (\r\n <NumberInput {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateInput {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateTimeInput {...txtProps} />\r\n ) : tipo === 'H' ? (\r\n <TextInput {...txtProps} type=\"time\" />\r\n ) : (\r\n <TextInput {...txtProps} />\r\n ))\r\n );\r\n};\r\n\r\nexport default TextBox;\r\n","import * as React from 'react';\r\nimport { DateField, NumberField, TextField as RaTextField } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst TextField = props => {\r\n const { tipo, value, ...rest } = props;\r\n const { propsContenido, hidden } = useFieldController(rest);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'N' || tipo === 'D' ? (\r\n <NumberField {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateField {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateField {...txtProps} showTime />\r\n ) : (\r\n <RaTextField {...txtProps} />\r\n ))\r\n );\r\n};\r\n\r\nexport default TextField;\r\n","import { useResourceContext, useGetOne } from 'react-admin';\r\nimport { getFormcodFromResource } from './utils';\r\n\r\nconst useReferenceLabel = (source, id) => {\r\n const resource = useResourceContext();\r\n\r\n const { data, isLoading, error } = useGetOne(\r\n 'cb_' + getFormcodFromResource(resource) + '_' + source,\r\n { id }\r\n );\r\n\r\n if (isLoading || error) {\r\n return '';\r\n }\r\n\r\n return data?.etiqueta || '';\r\n};\r\n\r\nexport default useReferenceLabel;\r\n"],"names":["forwardRef","props","ref","useTranslate","onClose","useUserMenu","useResourceDefinitions","resourcesDefinitions","React.createElement","MenuItem","component","Link","key","to","onClick","ListItemIcon","LockIcon","ListItemText","translate","existePassword","VpnLockIcon","UserMenu","ConfigurationMenu","Logout","useMediaQuery","theme","breakpoints","up","AppBar","color","userMenu","CustomUserMenu","Typography","variant","sx","flex","textOverflow","whiteSpace","overflow","id","isLargeEnough","Box","HookFormContext","React","createContext","useFormContext","useContext","resource","options","makeStyles","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","mode","& .MuiDataGrid-iconSeparator","display","header","secondary","contrastText","light","rootPaper","width","height","borderRadius","marginTop","spacing","rootOverlay","flexDirection","& .ant-empty-img-1","fill","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","label","deleteButton","error","main","&:hover","alpha","@media (hover: none)","name","useStyles","GridOverlay","className","classes","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","params","useDataProvider","useMutation","deleteEtrRow","mutate","isLoading","type","marginLeft","fontWeight","ActionDelete","confirmTitle","confirmContent","icon","defaultIcon","record","redirect","onSuccess","onError","source","camposClaveFila","rest","useNotify","useDeleteWithConfirmController","mutationOptions","open","handleDialogOpen","handleDialogClose","requestFn","useDeleteRowEtrGrid","refresh","json","notify","messageArgs","smart_count","e","message","Object","keys","filter","split","includes","reduce","obj","useCallback","event","payload","ge","clavesFila","Fragment","Button","Confirm","isOpen","loading","title","content","onConfirm","handleDelete","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","style","styleMargin","msgTitle","msgDesc","Form","onSubmit","defaultValues","children","EtrDialog","propTypes","PropTypes","save","render","EtrDeleteWithConfirmButton","api","row","estado","editors","recordPadre","setOpen","methods","control","disabled","exact","formState","updateFormState","useState","_formState","_localProxyFormState","useRef","isDirty","dirtyFields","touchedFields","isValidating","isValid","errors","_name","_mounted","current","_props","useEffect","subscription","subject","subscribe","next","callback","unsubscribe","tearDown","useSubscribe","value","signalName","Array","isArray","some","currentName","startsWith","shouldSubscribeByName","formStateData","_proxyFormState","isRoot","isNullOrUndefined","isObjectType","Date","isDateObject","isObject","length","find","shouldRenderFormState","_subjects","state","localProxyFormState","result","defineProperty","get","_key","getProxyFormState","useFormState","DialogContent","Children","map","child","index","initialValue","undefined","indexOf","InputLabelProps","shrink","DialogActions","SaveButton","stopPropagation","IconCancel","etrResource","useSafeSetState","initialValues","useNuevo","enabled","data","useSaveRowEtrGrid","values","useMemo","handleSubmit","setOnFailure","log","AddIcon","SaveContextProvider","saveContext","etiqueta","EtrDialogChild","EditIcon","createTheme","adaptV4Theme","esES","show","hide","ProgressContext","Provider","context","method","hidden","required","useDispatch","dispatch","recargarComboBox","setHiddenAction","disable","setDisableAction","setRequireAction","getJson","useGetJson","returnPromise","useListContext","useRedirect","useRefresh","useUnselectAll","ajax","useAjax","unselectAll","useRecargarComboBox","useSetHidden","useSetDisable","useSetRequire","useFormProgress","progress","setHidden","setDisable","setRequire","form","isRowEditable","EditButton","onRenderGrilla","onLoadGrilla","useUtilsGrilla","utils","useInitGrilla","down","hasEdit","useResourceDefinition","pt","primaryText","st","secondaryText","desktopSize","count","SimpleList","linkType","esEditable","Datagrid","EditButtonGrilla","useFormulario","fichaProps","useDefaultHook","maxHeight","tab","contenido","etrRequerido","minValue","enableLoad","useResourceContext","useInitFicha","ProgressProvider","FichaContext","Create","panel","r","t","f","n","clsx","arguments","CreateEtriek","func","useRecordContext","useDelete","deleteOne","Tooltip","IconButton","classnames","size","DeleteButtonNoWarning","defaultProps","button","margin","input","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","useUtilsFicha","onRenderFicha","onLoadFicha","onBeforeSubmitFicha","config","useUtilsSubmit","valid","defaultSave","finalSave","FormContainer","FormEtriek","SimpleForm","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","& a","transition","paddingLeft","mnuPrueba","setState","items","menus","item","menu","SubMenu","SettingsIcon","renderMenu","MenuItemLink","_","leftIcon","JSON","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","paddingRight","TabbedFormView","TabbedFormEtriek","syncWithLocation","defaultTheme","components","RaSidebar","drawerPaper","RaRichTextInput","@global",".ra-rich-text-input","& .ql-editor","& p:not(:last-child)","englishMessages","ra","action","add_filter","add","back","bulk_actions","cancel","clear_input_value","clone","confirm","create_item","delete","edit","export","list","remove_filter","remove","search","select_all","select_row","sort","undo","unselect","expand","close","open_menu","close_menu","update","move_up","move_down","toggle_theme","boolean","true","false","null","page","dashboard","not_found","empty","invite","file","upload_several","upload_single","image","references","all_missing","many_missing","single_missing","password","toggle_visible","toggle_hidden","about","are_you_sure","bulk_delete_content","bulk_delete_title","bulk_update_content","bulk_update_title","delete_content","delete_title","details","invalid_form","no","yes","unsaved_changes","navigation","no_results","no_more_results","page_out_of_boundaries","page_out_from_end","page_out_from_begin","page_range_info","partial_page_range_info","current_page","first","last","previous","page_rows_per_page","skip_nav","sort_by","ASC","DESC","auth","auth_check_error","user_menu","username","sign_in","sign_in_error","logout","notification","updated","created","deleted","bad_item","item_doesnt_exist","http_error","data_provider_error","i18n_error","canceled","logged_out","not_authorized","validation","minLength","maxLength","maxValue","number","email","oneOf","regex","saved_queries","query_name","new_label","new_dialog_title","remove_label","remove_label_with_name","remove_dialog_title","remove_message","help","login","send","check_email","must_enter_credentials","restore_password","punch_in","pos","change_pin","change_password","configuration","language","dark","welcome","subtitle","aor_button","greater_or_equal","spanishMessages","prev","initialProps","hiddenProps","useContenido","restInitialProps","hiddenInitial","dynamicProps","dynamicPropsRest","propsContenido","oculto","allVallues","meta","useSelector","configInputs","reduxDisabled","reduxHidden","onFocus","onChangeProps","onChange","onBlurProps","onBlur","disabledProps","propValidate","validate","field","useInput","onBlurInitial","onChangeInitial","disabledInitial","initValidate","onFocusInitial","onFocusProps","disabledDinamico","onFocusDinamico","onChangeDinamico","onChnage","onBlurDinamico","dynamicValidate","previousValue","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","finalPropsValidate","finalInitValidate","finalDynamicValidate","validateInput","reduxValidate","i","hiddenDinamico","useChoicesContext","allChoices","SelectInput","confirmPrimary","primary","confirmWarning","iconPaddingStyle","Draggable","handle","Paper","cursor","confirmColor","ConfirmIcon","CancelIcon","contentResource","translateOptions","selectedIds","useRecordSelection","handleClick","maxWidth","PaperComponent","cursorStyle","dividers","autoFocus","FiltroAsig","string","object","elementType","node","isRequired","bool","ActionCheck","AlertError","seleccion","all","none","v","hasCreate","exporter","perPage","bulkActionButtons","TextField","sortable","fillista","filtroInicial","filtro","setFiltro","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","PostList","TreeWithList","FiltroFuncionarios","useFieldController","stringify","boolRecord","RaBooleanField","useContenidoController","FileInput","accept","maxSize","ImageField","BooleanInput","finalFilter","reference","reload_cb","rcb","recarga_cb","respaldoFiltro","deleteRecargarComboBox","ReferenceInput","SelectInputEtriek","optionText","optionValue","useEditController","controllerProps","Edit","filterBy","claves","sortModel","defColumns","columns","allowAdd","allowRemove","setSort","sortField","sortDir","forEach","comparison","useGetList","order","headerName","renderHeader","EtrCreateButton","headerAlign","disableClickEventBubbling","renderCell","EtrEditButton","EtrDeleteButton","Loading","StyledEngineProvider","injectFirst","ThemeProvider","DataGrid","disableSelectionOnClick","pageSize","hideFooter","rows","finalColumns","onSortModelChange","model","NoRowsOverlay","CustomNoRowsOverlay","hasShow","hasList","TopToolbar","ListButton","ChevronLeft","ShowButton","filterGe","push","concat","src","Avatar","Layout","appBar","Menu","filters","jsBotonGrilla","listContext","currentSort","displayedFilters","filterValues","showFilter","total","sanitizeListRestProps","cloneElement","CreateButton","ExportButton","utilsGrilla","option","ReferenceArrayInput","SelectArrayInput","nameSource","passwordSource","setLoading","loginButtonText","useLogin","useLocation","location","nextPathname","Card","TextInput","PasswordInput","CardActions","CircularProgress","thickness","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","FieldTitle","fields","campos","separador","secundario","hasSecundario","join","noWrap","principal","campo","RadioButtonGroupInput","gutterBottom","useShowController","Show","defaultValue","format","InputProps","endAdornment","setValue","aria-label","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","setFilters","tabs","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","Tab","charAt","toUpperCase","slice","Divider","multiline","tipo","fieldState","esFechaHora","isTouched","NumberInput","txtProps","DateInput","DateTimeInput","asistant","asistantResource","FiltroAsis","BulkActions","NumberField","DateField","showTime","RaTextField","toString","parseInt","match","exec","isNaN","mes","substr","ruta","nombre","document","createElement","fakeLink","body","appendChild","setAttribute","click","sourceFechaInicio","allValues","inicio","isAfter","iniDate","finDate","args","menor","idi","locale","enLocale","esLocale","now","setHours","setMinutes","substring","useGetOne","getFormcodFromResource"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/layout/AppBar.js","../src/layout/AsistenteContext.js","../src/layout/ProgressContext.js","../src/utils/actions.js","../src/utils/hooks.js","../src/utils/useGetJson.js","../src/utils/useAjax.js","../src/utils/useUtils.js","../src/layout/FichaContext.js","../src/layout/contenidos/useFieldController.js","../src/layout/contenidos/TextField.js","../src/layout/contenidos/EtrGrid/actions.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/layout/Asistente.js","../src/layout/GridButton.js","../src/layout/CreateGridButton.js","../src/layout/EditGridButton.js","../src/layout/GrillaEtriek.js","../src/utils/useInitGrilla.js","../src/utils/useInitFicha.js","../src/utils/useNuevo.js","../src/utils/utils.js","../src/layout/utilsForm.js","../src/layout/CreateEtriek.js","../node_modules/clsx/dist/clsx.mjs","../src/layout/DeleteButtonNoWarning.js","../src/layout/EditEtriek.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/ListActionEtriek.js","../src/layout/ShowEtriek.js","../src/layout/ShowGridButton.js","../src/layout/TabbedForm.js","../src/layout/TabbedFormEtriek.js","../src/layout/themes.js","../src/utils/i18n/en.js","../src/utils/i18n/es.js","../node_modules/babel-plugin-transform-async-to-promises/helpers.mjs","../src/layout/contenidos/FotoButton.js","../src/layout/contenidos/useContenidoController.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/contenidos/ImageField.js","../src/layout/Layout.js","../src/layout/contenidos/ListCheck.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/MultiTextField.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.js","../src/layout/TabbedGrillaEtriek.js","../src/layout/contenidos/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/TextCombo.js","../src/utils/useReferenceLabel.js"],"sourcesContent":["import LockIcon from '@mui/icons-material/Lock';\r\nimport VpnLockIcon from '@mui/icons-material/VpnLock';\r\nimport {\r\n Box,\r\n ListItemIcon,\r\n ListItemText,\r\n MenuItem,\r\n Typography,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport * as React from 'react';\r\nimport { forwardRef } from 'react';\r\nimport {\r\n AppBar,\r\n Logout,\r\n useResourceDefinitions,\r\n UserMenu,\r\n useTranslate,\r\n useUserMenu,\r\n} from 'react-admin';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst ConfigurationMenu = forwardRef((props, ref) => {\r\n const translate = useTranslate();\r\n const { onClose } = useUserMenu();\r\n const resourcesDefinitions = useResourceDefinitions();\r\n const existeCP = resourcesDefinitions['form_275'];\r\n const existePassword = resourcesDefinitions['form_59'];\r\n\r\n return [\r\n existeCP ? (\r\n <MenuItem\r\n component={Link}\r\n ref={ref}\r\n {...props}\r\n key=\"/form_275\"\r\n to=\"/form_275\"\r\n onClick={onClose}\r\n >\r\n <ListItemIcon>\r\n <LockIcon />\r\n </ListItemIcon>\r\n <ListItemText>{translate('pos.change_pin')}</ListItemText>\r\n </MenuItem>\r\n ) : null,\r\n existePassword ? (\r\n <MenuItem\r\n component={Link}\r\n ref={ref}\r\n {...props}\r\n key=\"/form_59\"\r\n to=\"/form_59\"\r\n onClick={onClose}\r\n >\r\n <ListItemIcon>\r\n <VpnLockIcon />\r\n </ListItemIcon>\r\n <ListItemText>{translate('pos.change_password')}</ListItemText>\r\n </MenuItem>\r\n ) : null,\r\n ];\r\n});\r\n\r\nconst CustomUserMenu = () => (\r\n <UserMenu>\r\n <ConfigurationMenu />\r\n <Logout />\r\n </UserMenu>\r\n);\r\n\r\nconst CustomAppBar = props => {\r\n const isLargeEnough = useMediaQuery(theme => theme.breakpoints.up('sm'));\r\n return (\r\n <AppBar {...props} color=\"secondary\" userMenu={<CustomUserMenu />}>\r\n <Typography\r\n variant=\"h6\"\r\n color=\"inherit\"\r\n sx={{\r\n flex: 1,\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n }}\r\n id=\"react-admin-title\"\r\n />\r\n {isLargeEnough && <Box component=\"span\" sx={{ flex: 1 }} />}\r\n </AppBar>\r\n );\r\n};\r\n\r\nexport default CustomAppBar;\r\n","import * as React from 'react';\r\nimport { createContext, useContext, useMemo, useState } from 'react';\r\n\r\nexport const AsistenteContext = createContext();\r\n\r\nexport const AsistenteProvider = ({ children }) => {\r\n const [open, setOpen] = useState(false);\r\n const [props, setProps] = useState({});\r\n\r\n const context = useMemo(\r\n () => ({\r\n open,\r\n props,\r\n show: props => {\r\n setProps(props);\r\n setOpen(true);\r\n },\r\n hide: () => setOpen(false),\r\n }),\r\n [open, props]\r\n );\r\n\r\n return (\r\n <AsistenteContext.Provider value={context}>\r\n {children}\r\n </AsistenteContext.Provider>\r\n );\r\n};\r\n\r\nconst useAsistente = () => useContext(AsistenteContext);\r\n\r\nexport default useAsistente;\r\n","import * as React from 'react';\r\nimport { createContext, useContext, useMemo, useState } from 'react';\r\n\r\nexport const ProgressContext = createContext();\r\n\r\nexport const ProgressProvider = ({ children }) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n const context = useMemo(\r\n () => ({\r\n open,\r\n show: () => setOpen(true),\r\n hide: () => setOpen(false),\r\n }),\r\n [open]\r\n );\r\n\r\n return (\r\n <ProgressContext.Provider value={context}>\r\n {children}\r\n </ProgressContext.Provider>\r\n );\r\n};\r\n\r\nconst useFormProgress = () => useContext(ProgressContext);\r\n\r\nexport default useFormProgress;\r\n","// ACTION `RELOAD_CB`\r\nexport const recargarComboBox = (id, method, params, callback) => ({\r\n type: 'RELOAD_CB',\r\n payload: {\r\n id,\r\n method,\r\n params,\r\n callback,\r\n },\r\n});\r\n\r\n// ACTION `RELOAD_CB_SUCCESS`\r\nexport const deleteRecargarComboBox = (id, callback) => ({\r\n type: 'RELOAD_CB_SUCCESS',\r\n payload: { id, callback },\r\n});\r\n\r\nexport const setHiddenAction = (id, hidden) => ({\r\n type: 'HIDE_INPUT',\r\n payload: {\r\n id,\r\n hidden,\r\n },\r\n});\r\n\r\nexport const setDisableAction = (id, disabled) => ({\r\n type: 'DISABLE_INPUT',\r\n payload: {\r\n id,\r\n disabled,\r\n },\r\n});\r\n\r\nexport const setRequireAction = (id, required) => ({\r\n type: 'REQUIRE_INPUT',\r\n payload: {\r\n id,\r\n required,\r\n },\r\n});\r\n\r\nexport const setErrorAction = (id, error) => ({\r\n type: 'ERROR_INPUT',\r\n payload: {\r\n id,\r\n error,\r\n },\r\n});\r\n","import { useCallback } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport {\r\n recargarComboBox,\r\n setDisableAction,\r\n setHiddenAction,\r\n setRequireAction,\r\n setErrorAction,\r\n} from './actions';\r\n\r\nexport const useRecargarComboBox = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, method, params, callback) => {\r\n dispatch(recargarComboBox(id, method, params, callback));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetHidden = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, hidden) => {\r\n dispatch(setHiddenAction(id, hidden));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetDisable = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, disable) => {\r\n dispatch(setDisableAction(id, disable));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetRequire = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, required) => {\r\n dispatch(setRequireAction(id, required));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n\r\nexport const useSetError = () => {\r\n const dispatch = useDispatch();\r\n return useCallback(\r\n (id, error) => {\r\n dispatch(setErrorAction(id, error));\r\n },\r\n [dispatch]\r\n );\r\n};\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.getJson() method, the result\r\n * of the call, and the isLoading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { isLoading: true }]\r\n * - success: [callback, { data: [data from response], loading: false, isLoading: false }]\r\n * - error: [callback, { error: [error from response], loading: false, isLoading: false }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useGetJson } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const {mutate, isLoading } = useGetJson('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (isError) { return <p>ERROR</p>; }\r\n * return <button disabled={isLoading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useGetJson = (resource, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutateAsync, isLoading } = useMutation(params => {\r\n const { method, params: paramsDp } = params;\r\n return dataProvider.getJson(resource, { method, params: paramsDp });\r\n }, options);\r\n\r\n return { mutateAsync, isLoading };\r\n};\r\n\r\nexport default useGetJson;\r\n","import { useCallback } from 'react';\r\nimport useGetJson from './useGetJson';\r\n\r\nconst useAjax = resource => {\r\n const { mutateAsync, isLoading } = useGetJson(resource);\r\n\r\n const ajax = useCallback(\r\n (method, params, callback) =>\r\n mutateAsync(\r\n { method, params },\r\n { onSuccess: callback, onError: callback }\r\n ),\r\n []\r\n );\r\n\r\n return [ajax, isLoading];\r\n};\r\n\r\nexport default useAjax;\r\n","import { useCallback } from 'react';\r\nimport {\r\n useListContext,\r\n useNotify,\r\n useRedirect,\r\n useRefresh,\r\n useResourceContext,\r\n useTranslate,\r\n useUnselectAll,\r\n} from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useAsistente from '../layout/AsistenteContext';\r\nimport useFormProgress from '../layout/ProgressContext';\r\nimport {\r\n useRecargarComboBox,\r\n useSetDisable,\r\n useSetError,\r\n useSetHidden,\r\n useSetRequire,\r\n} from './hooks';\r\nimport useAjax from './useAjax';\r\n\r\nexport const useDefaultHook = props => ({});\r\n\r\nexport const useUtilsGrilla = props => {\r\n const data = useListContext(props);\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const refresh = useRefresh();\r\n const resource = useResourceContext(props);\r\n const unselectAll = useUnselectAll(resource);\r\n const asistente = useAsistente();\r\n const translate = useTranslate();\r\n const [ajax] = useAjax(resource);\r\n\r\n return {\r\n ajax,\r\n data,\r\n notify,\r\n redirect,\r\n refresh,\r\n refetch: data.refetch,\r\n unselectAll,\r\n asistente,\r\n translate,\r\n };\r\n};\r\n\r\nexport const useUtilsSubmit = props => {\r\n const recargarComboBox = useRecargarComboBox();\r\n const setHidden = useSetHidden();\r\n const setDisable = useSetDisable();\r\n const setRequire = useSetRequire();\r\n const setError = useSetError();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const resource = useResourceContext(props);\r\n const [ajax] = useAjax(resource);\r\n const etrs = props.etrs || {};\r\n\r\n return {\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n setHidden,\r\n setDisable,\r\n setRequire,\r\n setError,\r\n etrs,\r\n };\r\n};\r\n\r\nconst useUtilsFicha = props => {\r\n const recargarComboBox = useRecargarComboBox();\r\n const setHidden = useSetHidden();\r\n const setDisable = useSetDisable();\r\n const setRequire = useSetRequire();\r\n const setError = useSetError();\r\n const progress = useFormProgress();\r\n const notify = useNotify();\r\n const redirect = useRedirect();\r\n const form = useFormContext();\r\n const resource = useResourceContext(props);\r\n const [ajax] = useAjax(resource);\r\n const etrs = props.etrs || {};\r\n const asisEtr = props.asisEtr || {};\r\n const trigger = form?.trigger;\r\n\r\n return {\r\n form,\r\n ajax,\r\n notify,\r\n redirect,\r\n recargarComboBox,\r\n progress,\r\n setHidden: useCallback(\r\n (source, hidden) => {\r\n setHidden(source, hidden);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setHidden, trigger]\r\n ),\r\n setDisable: useCallback(\r\n (source, disabled) => {\r\n setDisable(source, disabled);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setDisable, trigger]\r\n ),\r\n setRequire: useCallback(\r\n (source, required) => {\r\n setRequire(source, required);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setRequire, trigger]\r\n ),\r\n setError: useCallback(\r\n (source, error) => {\r\n setError(source, error);\r\n setTimeout(() => {\r\n trigger(source);\r\n });\r\n },\r\n [setError, trigger]\r\n ),\r\n etrs,\r\n asisEtr,\r\n };\r\n};\r\n\r\nexport default useUtilsFicha;\r\n","import { createContext } from 'react';\r\n\r\nexport const FichaContext = createContext({});\r\nexport const FormEtrGridContext = createContext(undefined);\r\n","import { useContext } from 'react';\r\nimport { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst useFieldController = props => {\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { hidden: hiddenProps = false, ...rest } = props;\r\n const {\r\n hidden: hiddenInitial,\r\n useContenido = useDefaultHook,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n ...restInitialProps,\r\n });\r\n const { hidden: oculto, ...dynamicPropsRest } = dynamicProps;\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${props.source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n return {\r\n propsContenido: {\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n },\r\n hidden: oculto !== undefined ? oculto : hidden,\r\n };\r\n};\r\n\r\nexport default useFieldController;\r\n","import * as React from 'react';\r\nimport { DateField, NumberField, TextField as RaTextField } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst TextField = props => {\r\n const { tipo, value, ...rest } = props;\r\n const { propsContenido, hidden } = useFieldController(rest);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'N' || tipo === 'D' ? (\r\n <NumberField {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateField {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateField {...txtProps} showTime />\r\n ) : (\r\n <RaTextField {...txtProps} />\r\n ))\r\n );\r\n};\r\n\r\nexport default TextField;\r\n","import * as React from 'react';\r\nimport { useCallback } from 'react';\r\nimport TextField from '../TextField';\r\nimport { ReferenceField } from 'react-admin';\r\n\r\nexport const renderCellComboBox = (etrSource, source, reference) => params => {\r\n return (\r\n <ReferenceField\r\n reference={reference}\r\n source={source}\r\n queryOptions={{ meta: { etr: etrSource } }}\r\n record={{ [source]: params.row[source] }}\r\n >\r\n <TextField source=\"etiqueta\" />\r\n </ReferenceField>\r\n );\r\n};\r\n\r\nconst getSubmitValues = values => {\r\n const restValues = { ...values };\r\n delete restValues.id;\r\n\r\n return restValues;\r\n};\r\n\r\nexport const useAddRow = props => {\r\n const { apiRef, source, enviarTodo } = props;\r\n const estado = 'N';\r\n\r\n return useCallback(\r\n (values, form) => {\r\n const finalValues = getSubmitValues(values);\r\n const id = apiRef.current.getRowsCount() + 1;\r\n\r\n apiRef.current.updateRows([{ ...finalValues, id }]);\r\n\r\n const inputValues = enviarTodo\r\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\r\n ...item,\r\n claveFila: '',\r\n estado,\r\n })) || []\r\n : form.getValues()[source] || [];\r\n\r\n if (!enviarTodo) {\r\n inputValues.push({\r\n ...finalValues,\r\n claveFila: '',\r\n _id: id,\r\n estado,\r\n });\r\n }\r\n\r\n form.setValue(source, inputValues, { shouldDirty: true });\r\n },\r\n [apiRef, source]\r\n );\r\n};\r\n\r\nexport const useEditRow = props => {\r\n const { apiRef, source, enviarTodo } = props;\r\n const estado = 'M';\r\n\r\n return useCallback(\r\n (id, values, form) => {\r\n const _estado = typeof id === 'number' ? 'N' : estado;\r\n const finalValues = getSubmitValues(values);\r\n\r\n apiRef.current.updateRows([{ ...finalValues, id }]);\r\n\r\n const inputValues = enviarTodo\r\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\r\n ...item,\r\n estado: _estado,\r\n })) || []\r\n : form.getValues()[source] || [];\r\n\r\n let currentIndex = inputValues.findIndex(item =>\r\n typeof id === 'number' ? item._id === id : item.claveFila === id\r\n );\r\n\r\n // Si todavía no hay registros en el input oculto, comienzo en cero\r\n currentIndex = currentIndex === -1 ? 0 : currentIndex;\r\n\r\n inputValues[currentIndex] = {\r\n ...finalValues,\r\n claveFila: inputValues[currentIndex]?.estado === 'N' ? '' : id,\r\n _id: id,\r\n estado:\r\n inputValues[currentIndex]?.estado === 'N' ? 'N' : estado,\r\n };\r\n form.setValue(source, inputValues, { shouldDirty: true });\r\n },\r\n [apiRef, source]\r\n );\r\n};\r\n\r\nexport const useDeleteRow = props => {\r\n const { apiRef, source, enviarTodo } = props;\r\n const estado = 'B';\r\n\r\n return useCallback(\r\n (id, form) => {\r\n const fila = apiRef.current.getRowModels().get(id);\r\n\r\n apiRef.current.updateRows([{ id, _action: 'delete' }]);\r\n\r\n const inputValues = enviarTodo\r\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\r\n ...item,\r\n estado,\r\n })) || []\r\n : form.getValues()[source] || [];\r\n let currentIndex = inputValues.findIndex(\r\n item => item.claveFila === id\r\n );\r\n\r\n currentIndex =\r\n currentIndex === -1 ? inputValues.length : currentIndex;\r\n\r\n inputValues[currentIndex] = { ...fila, estado, claveFila: id };\r\n\r\n if (typeof id === 'number') {\r\n // Estoy borrando una fila nueva que no viene de la base de datos\r\n inputValues.splice(currentIndex, 1);\r\n }\r\n\r\n form.setValue(source, inputValues, { shouldDirty: true });\r\n },\r\n [apiRef, source]\r\n );\r\n};\r\n\r\nconst useEtrActions = props => {\r\n const { [props.source]: propsEtr } = props.useFormulario();\r\n\r\n const finalProps = { ...props, enviarTodo: !!propsEtr?.enviarTodo };\r\n const addRow = useAddRow(finalProps);\r\n const editRow = useEditRow(finalProps);\r\n const deleteRow = useDeleteRow(finalProps);\r\n const clear = form => {\r\n props.apiRef.current.setRows([]);\r\n form.setValue(props.source, '');\r\n };\r\n\r\n return {\r\n addRow,\r\n editRow,\r\n deleteRow,\r\n clear,\r\n api: props.apiRef,\r\n };\r\n};\r\n\r\nexport default useEtrActions;\r\n","import { Box } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\nimport * as React from 'react';\r\n\r\nconst StyledGridOverlay = styled('div')(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '100%',\r\n '& .ant-empty-img-1': {\r\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\r\n },\r\n '& .ant-empty-img-2': {\r\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\r\n },\r\n '& .ant-empty-img-3': {\r\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\r\n },\r\n '& .ant-empty-img-4': {\r\n fill: theme.palette.mode === 'light' ? '#fff' : '#1c1c1c',\r\n },\r\n '& .ant-empty-img-5': {\r\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\r\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#fff',\r\n },\r\n}));\r\n\r\nexport const CustomNoRowsOverlay = () => {\r\n return (\r\n <StyledGridOverlay>\r\n <svg\r\n width=\"120\"\r\n height=\"100\"\r\n viewBox=\"0 0 184 152\"\r\n aria-hidden\r\n focusable=\"false\"\r\n >\r\n <g fill=\"none\" fillRule=\"evenodd\">\r\n <g transform=\"translate(24 31.67)\">\r\n <ellipse\r\n className=\"ant-empty-img-5\"\r\n cx=\"67.797\"\r\n cy=\"106.89\"\r\n rx=\"67.797\"\r\n ry=\"12.668\"\r\n />\r\n <path\r\n className=\"ant-empty-img-1\"\r\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-2\"\r\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\r\n />\r\n </g>\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\r\n />\r\n <g\r\n className=\"ant-empty-img-4\"\r\n transform=\"translate(149.65 15.383)\"\r\n >\r\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\r\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n <Box sx={{ mt: 1 }}>No hay registros</Box>\r\n </StyledGridOverlay>\r\n );\r\n};\r\n","import AddIcon from '@mui/icons-material/Add';\r\nimport IconCancel from '@mui/icons-material/Cancel';\r\nimport ActionDelete from '@mui/icons-material/Delete';\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport { alpha, createTheme, Stack, StyledEngineProvider } from '@mui/material';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport Paper from '@mui/material/Paper';\r\nimport { styled, ThemeProvider } from '@mui/material/styles';\r\nimport {\r\n DataGridPremium,\r\n esES,\r\n useGridApiContext,\r\n} from '@mui/x-data-grid-premium';\r\nimport * as PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport {\r\n Children,\r\n cloneElement,\r\n Fragment,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\nimport {\r\n Button,\r\n Confirm,\r\n Form,\r\n SaveButton,\r\n useGetList,\r\n useInput,\r\n useRecordContext,\r\n useResourceContext,\r\n useSafeSetState,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport { useFormContext, useFormState } from 'react-hook-form';\r\nimport useUtilsFicha from '../../../utils/useUtils';\r\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\r\nimport { useAddRow, useDeleteRow, useEditRow } from './actions';\r\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\r\n\r\nconst StyledButton = styled(Button, {\r\n name: 'EtrDeleteButton',\r\n overridesResolver: (props, styles) => styles.root,\r\n})(({ theme }) => ({\r\n color: theme.palette.primary.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n}));\r\n\r\nconst dummyRecord = {};\r\n\r\nconst EtrChildrenWrapper = props => {\r\n const form = useFormContext();\r\n\r\n return (\r\n <FormEtrGridContext.Provider value={{ form }}>\r\n {props.children}\r\n </FormEtrGridContext.Provider>\r\n );\r\n};\r\n\r\nconst EtrFormDialog = props => (\r\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\r\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\r\n <DialogContentText component=\"span\">\r\n <Form\r\n mode=\"onBlur\"\r\n record={dummyRecord}\r\n resource={props.resource}\r\n onSubmit={props.onSubmit}\r\n >\r\n <EtrChildrenWrapper>{props.children}</EtrChildrenWrapper>\r\n </Form>\r\n </DialogContentText>\r\n </Dialog>\r\n);\r\n\r\nEtrFormDialog.propTypes = {\r\n label: PropTypes.string,\r\n onClick: PropTypes.func,\r\n icon: PropTypes.any,\r\n open: PropTypes.bool,\r\n onClose: PropTypes.func,\r\n labelEstado: PropTypes.string,\r\n resource: PropTypes.any,\r\n save: PropTypes.func,\r\n render: PropTypes.func,\r\n};\r\n\r\nconst EtrDialogChild = props => {\r\n const {\r\n form: formPadre,\r\n resource,\r\n estado,\r\n editors,\r\n recordPadre,\r\n camposClaveFila,\r\n setOpen,\r\n open,\r\n } = props;\r\n const { dirtyFields, isValid } = useFormState();\r\n const {\r\n fichaProps: { [props.source]: etrActualProps = {}, etrs },\r\n } = useContext(FichaContext);\r\n\r\n const formAsistente = useContext(FormEtrGridContext);\r\n const { onAfterRenderAsistente } = etrActualProps;\r\n const utils = useUtilsFicha({ resource, etrs, asisEtr: formAsistente });\r\n\r\n useEffect(() => {\r\n if (open) {\r\n typeof onAfterRenderAsistente === 'function' &&\r\n onAfterRenderAsistente({ ...utils, form: formPadre });\r\n }\r\n }, [open]);\r\n\r\n return (\r\n <>\r\n <DialogContent>\r\n <Stack spacing={4}>\r\n {Children.map(editors, (child, index) =>\r\n cloneElement(child, {\r\n resource,\r\n estado,\r\n defaultValue: recordPadre[child.props.source] || '',\r\n fullWidth: true,\r\n sx: { margin: 0 },\r\n disabled:\r\n estado !== 'N' &&\r\n camposClaveFila.indexOf(child.props.source) !==\r\n -1,\r\n ...etrActualProps[child.props.source],\r\n /*InputLabelProps: { shrink: true },*/\r\n })\r\n )}\r\n </Stack>\r\n </DialogContent>\r\n <DialogActions>\r\n <SaveButton\r\n disabled={Object.keys(dirtyFields).length === 0 || !isValid}\r\n />\r\n <Button\r\n label=\"ra.action.cancel\"\r\n onClick={e => {\r\n setOpen(false);\r\n e.stopPropagation();\r\n }}\r\n >\r\n <IconCancel />\r\n </Button>\r\n </DialogActions>\r\n </>\r\n );\r\n};\r\n\r\nconst EtrCreateButton = props => {\r\n const {\r\n editors,\r\n record: recordPadre,\r\n camposClaveFila,\r\n label,\r\n source,\r\n enviarTodo,\r\n } = props;\r\n const [open, setOpen] = useSafeSetState(false);\r\n const resource = useResourceContext(props);\r\n const form = useFormContext();\r\n const apiRef = useGridApiContext();\r\n const addRow = useAddRow({ apiRef, source, enviarTodo });\r\n const estado = 'N';\r\n\r\n const translate = useTranslate();\r\n const labelEstado = translate('ra.action.create');\r\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\r\n\r\n const handleSubmit = (values, e) => {\r\n addRow(values, form);\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n <Button\r\n onClick={e => {\r\n setOpen(true);\r\n e.stopPropagation();\r\n }}\r\n >\r\n <AddIcon />\r\n </Button>\r\n <EtrFormDialog\r\n open={open}\r\n onClose={e => {\r\n setOpen(false);\r\n e.stopPropagation();\r\n }}\r\n labelEstado={labelEstado}\r\n label={label}\r\n resource={resource}\r\n onSubmit={handleSubmit}\r\n >\r\n <EtrDialogChild\r\n source={source}\r\n form={form}\r\n resource={resource}\r\n estado={estado}\r\n editors={editors}\r\n recordPadre={recordPadre || {}}\r\n camposClaveFila={camposClaveFila}\r\n //isLoading={isLoading}\r\n open={open}\r\n setOpen={() => {\r\n setOpen(false);\r\n }}\r\n />\r\n </EtrFormDialog>\r\n </>\r\n );\r\n};\r\n\r\nconst EtrEditButton = props => {\r\n const {\r\n editors,\r\n camposClaveFila,\r\n resource,\r\n label,\r\n source,\r\n row,\r\n enviarTodo,\r\n } = props;\r\n const translate = useTranslate();\r\n const [open, setOpen] = useSafeSetState(false);\r\n const apiRef = useGridApiContext();\r\n const form = useFormContext();\r\n const editRow = useEditRow({ apiRef, source, enviarTodo });\r\n const estado = 'M';\r\n\r\n const labelEstado = translate('ra.action.edit');\r\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\r\n\r\n const handleSubmit = (values, e) => {\r\n editRow(row.id, values, form);\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <>\r\n <Button\r\n onClick={e => {\r\n setOpen(true);\r\n e.stopPropagation();\r\n }}\r\n >\r\n <EditIcon />\r\n </Button>\r\n <EtrFormDialog\r\n open={open}\r\n onClose={e => {\r\n setOpen(false);\r\n e.stopPropagation();\r\n }}\r\n labelEstado={labelEstado}\r\n label={label}\r\n resource={resource}\r\n onSubmit={handleSubmit}\r\n >\r\n <EtrDialogChild\r\n source={source}\r\n form={form}\r\n resource={resource}\r\n estado={estado}\r\n editors={editors}\r\n recordPadre={row}\r\n camposClaveFila={camposClaveFila}\r\n //isLoading={isLoading}\r\n open={open}\r\n setOpen={() => {\r\n setOpen(false);\r\n }}\r\n />\r\n </EtrFormDialog>\r\n </>\r\n );\r\n};\r\n\r\nconst EtrDeleteButton = props => {\r\n const {\r\n confirmTitle = 'ra.message.delete_title', //'ra.action.delete'\r\n confirmContent = 'ra.message.delete_content',\r\n row,\r\n source,\r\n enviarTodo,\r\n } = props;\r\n\r\n const [open, setOpen] = useSafeSetState(false);\r\n const apiRef = useGridApiContext();\r\n const form = useFormContext();\r\n const deleteRow = useDeleteRow({ apiRef, source, enviarTodo });\r\n\r\n const handleDelete = e => {\r\n deleteRow(row.id, form);\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <StyledButton\r\n key=\"button\"\r\n onClick={e => {\r\n setOpen(true);\r\n e.stopPropagation();\r\n }}\r\n >\r\n <ActionDelete />\r\n </StyledButton>\r\n <Confirm\r\n isOpen={open}\r\n //loading={isLoading}\r\n title={confirmTitle}\r\n content={confirmContent}\r\n onConfirm={handleDelete}\r\n onClose={e => {\r\n setOpen(false);\r\n e.stopPropagation();\r\n }}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst theme = createTheme({}, esES);\r\n\r\nconst EtrGrid = props => {\r\n const {\r\n filterBy = '',\r\n claves,\r\n sortModel,\r\n columns: defColumns,\r\n reference,\r\n allowAdd = true,\r\n allowRemove = true,\r\n enableLoad = true,\r\n apiRef,\r\n ...rest\r\n } = props;\r\n const [rows, setRows] = useState([]);\r\n const recordPadre = useRecordContext(props);\r\n const form = useFormContext();\r\n const { field } = useInput({ defaultValue: '', ...props });\r\n const {\r\n isLoading: isLoadingParent,\r\n fichaProps: { [rest.source]: etrProps },\r\n } = useContext(FichaContext);\r\n\r\n const { enviarTodo = false } = etrProps || {};\r\n\r\n const [sort, setSort] = useState(sortModel);\r\n const [{ field: sortField, sort: sortDir }] = sortModel;\r\n\r\n let filter = {};\r\n if (recordPadre) {\r\n filterBy.split(',').forEach(field => {\r\n if (field) {\r\n filter[field] = [\r\n {\r\n type: 'string',\r\n comparison: 'eq',\r\n value: recordPadre[field],\r\n field: field,\r\n },\r\n ];\r\n }\r\n });\r\n }\r\n\r\n const { isLoading } = useGetList(\r\n reference,\r\n {\r\n pagination: { page: 1, perPage: 200 },\r\n sort: { field: sortField, order: sortDir },\r\n filter,\r\n },\r\n {\r\n enabled: enableLoad && !isLoadingParent,\r\n onSuccess: value => {\r\n form.setValue(rest.source, '');\r\n setRows(value?.data || []);\r\n },\r\n }\r\n );\r\n\r\n const columns = [\r\n ...defColumns,\r\n {\r\n field: ' ',\r\n width: 80,\r\n headerName: '',\r\n headerAlign: 'center',\r\n sortable: false,\r\n disableClickEventBubbling: true,\r\n renderCell: params => (\r\n <EtrEditButton\r\n {...rest}\r\n enviarTodo={enviarTodo}\r\n camposClaveFila={claves}\r\n row={params.row}\r\n />\r\n ),\r\n },\r\n ];\r\n\r\n if (allowAdd) {\r\n columns.unshift({\r\n field: 'BTN',\r\n headerName: '',\r\n sortable: false,\r\n renderHeader: params => (\r\n <EtrCreateButton\r\n {...rest}\r\n enviarTodo={enviarTodo}\r\n camposClaveFila={claves}\r\n />\r\n ),\r\n });\r\n }\r\n\r\n if (allowRemove) {\r\n columns.push({\r\n field: ' ',\r\n headerName: '',\r\n headerAlign: 'center',\r\n sortable: false,\r\n disableClickEventBubbling: true,\r\n renderCell: params => (\r\n <EtrDeleteButton\r\n {...rest}\r\n enviarTodo={enviarTodo}\r\n camposClaveFila={claves}\r\n row={params.row}\r\n />\r\n ),\r\n });\r\n }\r\n\r\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\r\n\r\n return (\r\n <Paper\r\n sx={{\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: 1,\r\n }}\r\n >\r\n <StyledEngineProvider injectFirst>\r\n <ThemeProvider theme={theme}>\r\n <Fragment>\r\n <DataGridPremium\r\n apiRef={apiRef}\r\n //autoHeight\r\n //rowHeight={25}\r\n loading={isLoading || isLoadingParent}\r\n sx={{\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor: theme =>\r\n theme.palette.mode === 'light'\r\n ? '#fafafa'\r\n : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n }}\r\n disableRowSelectionOnClick\r\n paginationModel={{ page: 1, pageSize: 50 }}\r\n hideFooter\r\n rows={rows}\r\n columns={finalColumns}\r\n sortModel={sort}\r\n onSortModelChange={model => setSort(model)}\r\n sortable={false}\r\n resizable={false}\r\n disableReorder\r\n disableExport\r\n filterable={false}\r\n disableColumnMenu\r\n //checkboxSelection\r\n slots={{\r\n //header: <div>This is my custom Toolbar!</div>,\r\n noRowsOverlay: CustomNoRowsOverlay,\r\n }}\r\n {...rest}\r\n />\r\n <input type=\"hidden\" {...field} />\r\n </Fragment>\r\n </ThemeProvider>\r\n </StyledEngineProvider>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default EtrGrid;\r\n","import { createTheme, StyledEngineProvider } from '@mui/material';\r\nimport Paper from '@mui/material/Paper';\r\nimport { ThemeProvider } from '@mui/material/styles';\r\nimport {\r\n DataGridPremium,\r\n esES,\r\n useGridApiRef,\r\n useKeepGroupedColumnsHidden,\r\n} from '@mui/x-data-grid-premium';\r\nimport * as React from 'react';\r\nimport { useContext, useMemo, useState } from 'react';\r\nimport { useGetList, useRecordContext } from 'react-admin';\r\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\nimport { CustomNoRowsOverlay } from './EtrGrid/NoRowsOverlay';\r\n\r\nconst theme = createTheme({}, esES);\r\n\r\nconst GE = props => {\r\n const {\r\n filterBy = '',\r\n sortModel,\r\n columns: defColumns,\r\n reference,\r\n enableLoad = true,\r\n initialState: initialStateProps,\r\n ...rest\r\n } = props;\r\n\r\n const { isLoading: isLoadingParent } = useContext(FichaContext);\r\n const recordPadre = useRecordContext();\r\n\r\n const [sort, setSort] = useState(sortModel);\r\n const [{ field: sortField, sort: sortDir }] = sortModel;\r\n\r\n const columns = useMemo(\r\n () => [...defColumns],\r\n [JSON.stringify(defColumns)]\r\n );\r\n\r\n let filter = {};\r\n if (recordPadre) {\r\n filterBy.split(',').forEach(field => {\r\n if (field) {\r\n filter[field] = [\r\n {\r\n type: 'string',\r\n comparison: 'eq',\r\n value: recordPadre[field],\r\n field: field,\r\n },\r\n ];\r\n }\r\n });\r\n }\r\n\r\n const {\r\n estado,\r\n isLoading: isLoadingFicha,\r\n fichaProps = {},\r\n } = useContext(FichaContext);\r\n const utils = useUtilsFicha(props);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { useContenido = useDefaultHook, restInitialProps } = initialProps;\r\n\r\n const {\r\n data = [],\r\n isLoading,\r\n refetch,\r\n } = useGetList(\r\n reference,\r\n {\r\n pagination: { page: 1, perPage: 200 },\r\n sort: { field: sortField, order: sortDir },\r\n filter,\r\n },\r\n { enabled: enableLoad && !isLoadingParent }\r\n );\r\n\r\n const apiRef = useGridApiRef();\r\n const initialState = useKeepGroupedColumnsHidden({\r\n apiRef,\r\n initialState: initialStateProps,\r\n });\r\n\r\n useContenido({\r\n ...rest,\r\n estado,\r\n hidden: props.hidden,\r\n isLoading: isLoadingFicha,\r\n utils,\r\n ...restInitialProps,\r\n refetch,\r\n apiRef,\r\n });\r\n\r\n const rows = data;\r\n\r\n return (\r\n <Paper\r\n sx={{\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: 1,\r\n }}\r\n >\r\n <StyledEngineProvider injectFirst>\r\n <ThemeProvider theme={theme}>\r\n <DataGridPremium\r\n //autoHeight\r\n //rowHeight={25}\r\n apiRef={apiRef}\r\n rows={rows}\r\n columns={columns}\r\n loading={isLoading || isLoadingParent}\r\n sx={{\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor: theme =>\r\n theme.palette.mode === 'light'\r\n ? '#fafafa'\r\n : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n }}\r\n disableRowSelectionOnClick\r\n paginationModel={{ page: 1, pageSize: 50 }}\r\n hideFooter\r\n sortModel={sort}\r\n onSortModelChange={model => setSort(model)}\r\n //checkboxSelection\r\n slots={{\r\n //header: <div>This is my custom Toolbar!</div>,\r\n noRowsOverlay: CustomNoRowsOverlay,\r\n }}\r\n initialState={initialState}\r\n {...rest}\r\n />\r\n </ThemeProvider>\r\n </StyledEngineProvider>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default GE;\r\n","import CancelIcon from '@mui/icons-material/Cancel';\r\nimport {\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Stack,\r\n} from '@mui/material';\r\nimport AppBar from '@mui/material/AppBar';\r\nimport Slide from '@mui/material/Slide';\r\nimport Toolbar from '@mui/material/Toolbar';\r\nimport Typography from '@mui/material/Typography';\r\nimport * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport {\r\n Button,\r\n Confirm,\r\n Form,\r\n SaveButton,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport useAsistente from './AsistenteContext';\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return <Slide direction=\"up\" ref={ref} {...props} />;\r\n});\r\n\r\nconst Asistente = props => {\r\n const { isLoading } = props;\r\n const resource = useResourceContext(props);\r\n const asistente = useAsistente();\r\n\r\n const {\r\n open,\r\n hide,\r\n props: { title, controles, aceptar, tipo = 'form' },\r\n } = asistente;\r\n\r\n const getDialogVista = () => (\r\n <Fragment>\r\n <AppBar sx={{ position: 'relative' }}>\r\n <Toolbar disableGutters variant={'dense'}>\r\n <Typography\r\n sx={{ ml: 2, flex: 1 }}\r\n variant=\"h6\"\r\n component=\"div\"\r\n >\r\n {title}\r\n </Typography>\r\n <Button\r\n label=\"ra.action.cancel\"\r\n disabled={isLoading}\r\n onClick={() => hide()}\r\n color=\"inherit\"\r\n >\r\n <CancelIcon />\r\n </Button>\r\n </Toolbar>\r\n </AppBar>\r\n {controles}\r\n </Fragment>\r\n );\r\n\r\n const getDialogForm = () => (\r\n <Fragment>\r\n <DialogTitle id=\"draggable-dialog-title\">{title}</DialogTitle>\r\n <Form resource={resource} onSubmit={aceptar}>\r\n <DialogContent dividers={true}>\r\n <Stack spacing={2}>{controles}</Stack>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n label=\"ra.action.cancel\"\r\n disabled={isLoading}\r\n onClick={() => hide()}\r\n >\r\n <CancelIcon />\r\n </Button>\r\n <SaveButton disabled={isLoading} />\r\n </DialogActions>\r\n </Form>\r\n </Fragment>\r\n );\r\n\r\n const getConfirm = () => (\r\n <Confirm\r\n isOpen={open}\r\n title=\"Atención\"\r\n content={controles}\r\n onConfirm={aceptar}\r\n onClose={() => hide()}\r\n />\r\n );\r\n\r\n return tipo === 'confirm' ? (\r\n getConfirm()\r\n ) : (\r\n <Dialog\r\n open={open}\r\n onClose={() => hide()}\r\n fullWidth\r\n fullScreen={tipo === 'vista'}\r\n maxWidth={tipo === 'vista' ? 'lg' : 'sm'}\r\n TransitionComponent={Transition}\r\n >\r\n {tipo === 'form' ? getDialogForm() : getDialogVista()}\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default Asistente;\r\n","import { IconButton, Tooltip } from '@mui/material';\r\nimport PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useTranslate } from 'react-admin';\r\n\r\nconst GridButton = props => {\r\n const {\r\n alignIcon = 'left',\r\n children,\r\n className,\r\n disabled,\r\n label,\r\n color = 'primary',\r\n size = 'small',\r\n to: locationDescriptor,\r\n ...rest\r\n } = props;\r\n const translate = useTranslate();\r\n const translatedLabel = label ? translate(label, { _: label }) : undefined;\r\n const linkParams = getLinkParams(locationDescriptor);\r\n\r\n return label && !disabled ? (\r\n <Tooltip title={translatedLabel}>\r\n <IconButton\r\n aria-label={translatedLabel}\r\n className={className}\r\n color={color}\r\n size=\"large\"\r\n {...rest}\r\n {...linkParams}\r\n >\r\n {children}\r\n </IconButton>\r\n </Tooltip>\r\n ) : (\r\n <IconButton\r\n className={className}\r\n color={color}\r\n disabled={disabled}\r\n size=\"large\"\r\n {...rest}\r\n {...linkParams}\r\n >\r\n {children}\r\n </IconButton>\r\n );\r\n};\r\n\r\nGridButton.propTypes = {\r\n alignIcon: PropTypes.oneOf(['left', 'right']),\r\n children: PropTypes.element,\r\n className: PropTypes.string,\r\n color: PropTypes.oneOfType([\r\n PropTypes.oneOf([\r\n 'inherit',\r\n 'default',\r\n 'primary',\r\n 'secondary',\r\n 'error',\r\n 'info',\r\n 'success',\r\n 'warning',\r\n ]),\r\n PropTypes.string,\r\n ]),\r\n disabled: PropTypes.bool,\r\n label: PropTypes.string,\r\n size: PropTypes.oneOf(['small', 'medium', 'large']),\r\n};\r\n\r\nconst getLinkParams = locationDescriptor => {\r\n // eslint-disable-next-line eqeqeq\r\n if (locationDescriptor == undefined) {\r\n return undefined;\r\n }\r\n\r\n if (typeof locationDescriptor === 'string') {\r\n return { to: locationDescriptor };\r\n }\r\n\r\n const { redirect, replace, state, ...to } = locationDescriptor;\r\n return {\r\n to,\r\n redirect,\r\n replace,\r\n state,\r\n };\r\n};\r\n\r\nexport default GridButton;\r\n","import AddIcon from '@mui/icons-material/Add';\r\nimport {\r\n useCreatePath,\r\n useRecordContext,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GridButton from './GridButton';\r\n\r\nconst stopPropagation = e => e.stopPropagation();\r\n\r\n// avoids using useMemo to get a constant value for the link state\r\nconst scrollStates = {\r\n true: { _scrollToTop: true },\r\n false: {},\r\n};\r\n\r\nconst defaultIcon = <AddIcon />;\r\n\r\nconst CreateGridButton = props => {\r\n const {\r\n icon = defaultIcon,\r\n label = 'ra.action.create',\r\n scrollToTop = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n const record = useRecordContext(props);\r\n const createPath = useCreatePath();\r\n\r\n return (\r\n <GridButton\r\n component={Link}\r\n to={createPath({ type: 'create', resource })}\r\n state={{\r\n record,\r\n ...scrollStates[String(scrollToTop)],\r\n }}\r\n label={label}\r\n onClick={stopPropagation}\r\n {...rest}\r\n >\r\n {icon}\r\n </GridButton>\r\n );\r\n};\r\nexport default CreateGridButton;\r\n","import ContentCreate from '@mui/icons-material/Create';\r\nimport {\r\n useCreatePath,\r\n useRecordContext,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GridButton from './GridButton';\r\n\r\nconst stopPropagation = e => e.stopPropagation();\r\n\r\n// avoids using useMemo to get a constant value for the link state\r\nconst scrollStates = {\r\n true: { _scrollToTop: true },\r\n false: {},\r\n};\r\n\r\nconst defaultIcon = <ContentCreate />;\r\n\r\nconst EditGridButton = props => {\r\n const {\r\n icon = defaultIcon,\r\n label = 'ra.action.edit',\r\n scrollToTop = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n const record = useRecordContext(props);\r\n const createPath = useCreatePath();\r\n if (!record) {\r\n return null;\r\n }\r\n return (\r\n <GridButton\r\n component={Link}\r\n to={createPath({ type: 'edit', resource, id: record.id })}\r\n state={scrollStates[String(scrollToTop)]}\r\n label={label}\r\n onClick={stopPropagation}\r\n {...rest}\r\n >\r\n {icon}\r\n </GridButton>\r\n );\r\n};\r\nexport default EditGridButton;\r\n","import SettingsIcon from '@mui/icons-material/Settings';\r\nimport {\r\n Box,\r\n createTheme,\r\n Paper,\r\n ThemeProvider,\r\n useMediaQuery,\r\n} from '@mui/material';\r\nimport { GridActionsCellItem } from '@mui/x-data-grid';\r\nimport {\r\n DataGridPremium,\r\n esES,\r\n useGridApiRef,\r\n useKeepGroupedColumnsHidden,\r\n} from '@mui/x-data-grid-premium';\r\nimport * as React from 'react';\r\nimport { Fragment, isValidElement } from 'react';\r\nimport {\r\n BulkActionsToolbar,\r\n Button,\r\n DatagridClasses,\r\n DatagridRoot,\r\n SimpleList,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport useInitGrilla from '../utils/useInitGrilla';\r\nimport { useUtilsGrilla } from '../utils/useUtils';\r\nimport Asistente from './Asistente';\r\nimport { AsistenteProvider } from './AsistenteContext';\r\nimport { CustomNoRowsOverlay } from './contenidos/EtrGrid/NoRowsOverlay';\r\nimport CreateGridButton from './CreateGridButton';\r\nimport EditGridButton from './EditGridButton';\r\n\r\nconst esEditable = (record, isRowEditable) =>\r\n isRowEditable === undefined ||\r\n (typeof isRowEditable === 'function' && isRowEditable(record));\r\n\r\nconst theme = createTheme({}, esES);\r\n\r\nconst operatorParamsToModel = new Map([\r\n // boolean operators\r\n ['is', 'is'],\r\n ['not', 'not'],\r\n // date operators\r\n ['after', 'after'],\r\n ['onOrAfter', 'onOrAfter'],\r\n ['before', 'before'],\r\n ['onOrBefore', 'onOrBefore'],\r\n // numeric operators\r\n ['eq', '='],\r\n ['neq', '!='],\r\n ['gt', '>'],\r\n ['gte', '>='],\r\n ['lt', '<'],\r\n ['lte', '<='],\r\n // string operators\r\n ['contains', 'contains'],\r\n ['equals', 'equals'], // default operator\r\n ['sw', 'startsWith'],\r\n ['ew', 'endsWith'],\r\n ['isEmpty', 'isEmpty'],\r\n ['isNotEmpty', 'isNotEmpty'],\r\n ['isAnyOf', 'isAnyOf'],\r\n]);\r\n\r\nconst operatorModelToParams = new Map(\r\n Array.from(operatorParamsToModel, entry => [entry[1], entry[0]])\r\n);\r\n\r\nconst defaultConvertFilterModelToFilterValues = filterModel =>\r\n filterModel.items.reduce((acc, item) => {\r\n if (typeof item.field !== 'undefined' && item.operator) {\r\n if (operatorModelToParams.has(item.operator)) {\r\n acc[\r\n `${item.field}_${operatorModelToParams.get(item.operator)}`\r\n ] = item.value;\r\n } else {\r\n acc[item.field] = item.value;\r\n }\r\n }\r\n return acc;\r\n }, {});\r\n\r\nconst GrillaLg = props => {\r\n const {\r\n actionButtons = [],\r\n bulkActionButtons,\r\n sx,\r\n columns,\r\n isRowEditable,\r\n primaryText: pt,\r\n secondaryText: st,\r\n desktopSize = false,\r\n onRenderGrilla,\r\n onLoadGrilla,\r\n hasEdit,\r\n initialState: initialStateProps,\r\n convertFilterModelToFilterValues = defaultConvertFilterModelToFilterValues,\r\n claveNuevo,\r\n mobileColumns = '',\r\n ...rest\r\n } = props;\r\n\r\n const utils = useUtilsGrilla(props);\r\n const translate = useTranslate();\r\n const resource = useResourceContext(props);\r\n const {\r\n data = [],\r\n isLoading,\r\n selectedIds,\r\n onSelect,\r\n displayedFilters,\r\n setFilters,\r\n } = useListContext();\r\n\r\n const apiRef = useGridApiRef();\r\n const initialState = useKeepGroupedColumnsHidden({\r\n apiRef,\r\n initialState: {\r\n ...initialStateProps,\r\n pinnedColumns: { right: ['actions'] },\r\n //filter: {\r\n // filterModel: {\r\n // items: [],\r\n // quickFilterExcludeHiddenColumns: true,\r\n // },\r\n //},\r\n },\r\n });\r\n\r\n const translatedColumns = columns.map((column, index) => ({\r\n ...column,\r\n headerName:\r\n column.headerName !== ''\r\n ? translate(`resources.${resource}.fields.${column.field}`, {\r\n _: column.headerName,\r\n })\r\n : column.headerName,\r\n }));\r\n\r\n const finalColumns =\r\n actionButtons.length > 0 || hasEdit\r\n ? translatedColumns.concat([\r\n {\r\n field: 'actions',\r\n type: 'actions',\r\n width: 100,\r\n hideable: false,\r\n getActions: params => {\r\n const fila = apiRef.current.getRowNode(params.id);\r\n\r\n return params.row.id\r\n ? [\r\n ...(hasEdit\r\n ? [\r\n <EditGridButton\r\n record={params.row}\r\n disabled={\r\n !esEditable(\r\n params.row,\r\n isRowEditable\r\n )\r\n }\r\n />,\r\n ]\r\n : []),\r\n ...actionButtons\r\n .filter(button => !!button)\r\n .map(button => {\r\n const { handler, ...rest } = button;\r\n return (\r\n <GridActionsCellItem\r\n showInMenu\r\n onClick={e =>\r\n typeof handler ===\r\n 'function'\r\n ? handler(\r\n {\r\n ...utils,\r\n record: params.row,\r\n },\r\n rest.key\r\n )\r\n : false\r\n }\r\n {...rest}\r\n />\r\n );\r\n }),\r\n ]\r\n : fila.children[0].indexOf(`${claveNuevo}=`) !==\r\n -1\r\n ? [\r\n <CreateGridButton\r\n record={\r\n claveNuevo\r\n ? {\r\n [claveNuevo]:\r\n fila.children[0]\r\n .split(\r\n `${claveNuevo}=`\r\n )[1]\r\n .replaceAll(\r\n '[',\r\n ''\r\n )\r\n .trim()\r\n .split('AND')[0]\r\n .trim(),\r\n }\r\n : undefined\r\n }\r\n />,\r\n ]\r\n : [];\r\n },\r\n },\r\n ])\r\n : translatedColumns;\r\n\r\n const handleSelectionChange = rowSelectionModel => {\r\n if (!isLoading) {\r\n // Deselección sin checkboxes\r\n if (apiRef.current.isRowSelected(rowSelectionModel[0])) {\r\n onSelect([]);\r\n } else {\r\n onSelect(rowSelectionModel);\r\n }\r\n }\r\n };\r\n\r\n const handleFilterChange = params => {\r\n // TODO: El filtro no envía por ajax el operador entre multiples filtros OR/AND (params.logicOperator)\r\n setFilters(convertFilterModelToFilterValues(params), displayedFilters);\r\n };\r\n\r\n const hasBulkActionButtons = isValidElement(bulkActionButtons);\r\n\r\n return (\r\n <Fragment>\r\n <Asistente isLoading={isLoading} />\r\n <DatagridRoot sx={sx} className={DatagridClasses.root}>\r\n {hasBulkActionButtons ? (\r\n <BulkActionsToolbar selectedIds={selectedIds}>\r\n {bulkActionButtons}\r\n </BulkActionsToolbar>\r\n ) : null}\r\n <Box\r\n sx={{ height: '70vh', width: '100%' }}\r\n className={DatagridClasses.tableWrapper}\r\n >\r\n <ThemeProvider theme={theme}>\r\n <DataGridPremium\r\n sx={{\r\n display: 'grid',\r\n gridTemplateRows: '70vh 1fr auto',\r\n }}\r\n slots={{\r\n //toolbar: GridToolbar,\r\n noRowsOverlay: CustomNoRowsOverlay,\r\n }}\r\n columns={finalColumns}\r\n rows={data}\r\n apiRef={apiRef}\r\n loading={isLoading}\r\n /*groupingColDef={params => {\r\n const override = {};\r\n\r\n if (params.fields.includes('nombrecompleto')) {\r\n return {\r\n headerName: 'Funcionario',\r\n valueFormatter: valueFormatterParams => {\r\n const rowNode =\r\n apiRef.current.getRowNode(\r\n valueFormatterParams.id\r\n );\r\n console.log(rowNode);\r\n\r\n return `By ${\r\n rowNode.groupingKey ?? ''\r\n }`;\r\n },\r\n };\r\n }\r\n\r\n return override;\r\n }}*/\r\n //disableSelectionOnClick\r\n hideFooterSelectedRowCount\r\n hideFooter\r\n disableMultipleRowSelection\r\n checkboxSelection={hasBulkActionButtons}\r\n filterMode=\"server\"\r\n //filterModel={filterModel}\r\n onFilterModelChange={handleFilterChange}\r\n rowSelectionModel={selectedIds}\r\n onRowSelectionModelChange={handleSelectionChange}\r\n isRowSelectable={params => params.row.id}\r\n initialState={initialState}\r\n //experimentalFeatures={{ newEditingApi: true }}\r\n {...rest}\r\n />\r\n </ThemeProvider>\r\n </Box>\r\n </DatagridRoot>\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst GrillaSm = props => {\r\n const {\r\n sx,\r\n columns,\r\n actionButtons = [],\r\n hasEdit,\r\n isRowEditable,\r\n primaryText: pt,\r\n mobileColumns = '',\r\n } = props;\r\n\r\n let primaryText = pt;\r\n\r\n const utils = useUtilsGrilla(props);\r\n const { isLoading } = useListContext();\r\n\r\n if (!pt) {\r\n const finalColumns = !!mobileColumns\r\n ? mobileColumns\r\n .split(',')\r\n .map(name => columns.find(column => column.field === name))\r\n : columns;\r\n\r\n primaryText = record => (\r\n <Paper variant=\"outlined\" sx={{ pt: 2, pb: 2, pl: 2 }}>\r\n {finalColumns.map(column => {\r\n const {\r\n field,\r\n headerName,\r\n valueGetter,\r\n type = 'string',\r\n jsxMobile,\r\n } = column;\r\n return !!jsxMobile ? (\r\n <Box>{jsxMobile(record, column)}</Box>\r\n ) : type === 'boolean' ? (\r\n <Box>\r\n <Box\r\n component=\"span\"\r\n sx={{\r\n color: valueGetter({\r\n value: record[field],\r\n })\r\n ? 'green'\r\n : 'red',\r\n }}\r\n >\r\n {headerName}\r\n </Box>\r\n </Box>\r\n ) : (\r\n <Box>{record[field]}</Box>\r\n );\r\n })}\r\n <Box>\r\n {actionButtons\r\n .filter(button => !!button)\r\n .map(button => {\r\n const {\r\n key,\r\n handler,\r\n icon = <SettingsIcon />,\r\n ...rest\r\n } = button;\r\n return (\r\n <Button\r\n onClick={e =>\r\n typeof handler === 'function'\r\n ? handler({ ...utils, record }, key)\r\n : false\r\n }\r\n {...rest}\r\n >\r\n {icon}\r\n </Button>\r\n );\r\n })}\r\n </Box>\r\n </Paper>\r\n );\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Asistente isLoading={isLoading} />\r\n <SimpleList\r\n linkType={record =>\r\n hasEdit && esEditable(record, isRowEditable)\r\n ? 'edit'\r\n : false\r\n }\r\n primaryText={primaryText}\r\n sx={sx}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst GrillaEtriek = props => {\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\r\n const { hasEdit } = useResourceDefinition(props);\r\n useInitGrilla(props);\r\n const { desktopSize = false } = props;\r\n\r\n return (\r\n <AsistenteProvider>\r\n {isSmall && desktopSize === false ? (\r\n <GrillaSm {...props} hasEdit={hasEdit} />\r\n ) : (\r\n <GrillaLg {...props} hasEdit={hasEdit} />\r\n )}\r\n </AsistenteProvider>\r\n );\r\n};\r\n\r\nexport default GrillaEtriek;\r\n","import { useEffect } from 'react';\r\nimport { useListContext } from 'react-admin';\r\nimport { useUtilsGrilla } from './useUtils';\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const { isLoading } = useListContext();\r\n const utils = useUtilsGrilla(props);\r\n\r\n useEffect(() => {\r\n onRenderGrilla && onRenderGrilla(utils);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n onLoadGrilla && onLoadGrilla(utils);\r\n }\r\n }, [isLoading]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from './useUtils';\r\n\r\nconst useInitFicha = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const fichaProps = useFormulario(rest);\r\n\r\n return { fichaProps: { ...fichaProps, etrs: rest.etrs } };\r\n};\r\n\r\nexport default useInitFicha;\r\n","import { useGetOne } from 'react-admin';\r\n\r\nconst useNuevo = (resource, options) =>\r\n useGetOne(resource, { id: '-1' }, options);\r\n\r\nexport default useNuevo;\r\n","import ChevronLeft from '@mui/icons-material/ChevronLeft';\r\nimport Typography from '@mui/material/Typography';\r\nimport { isAfter } from 'date-fns';\r\nimport enLocale from 'date-fns/locale/en-US';\r\nimport esLocale from 'date-fns/locale/es';\r\nimport * as React from 'react';\r\nimport {\r\n ListButton,\r\n minValue,\r\n required,\r\n ShowButton,\r\n TopToolbar,\r\n} from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport const getFormcodFromResource = resource => resource.split('_')[1];\r\n\r\n//parse(): input -> record\r\n//format(): record -> input\r\n\r\nconst dateRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\r\n\r\nconst convertDateToString = value => {\r\n if (!(value instanceof Date) || isNaN(value.getDate())) return '';\r\n const pad = '00';\r\n const yyyy = value.getFullYear().toString();\r\n const MM = (value.getMonth() + 1).toString();\r\n const dd = value.getDate().toString();\r\n return `${yyyy}-${(pad + MM).slice(-2)}-${(pad + dd).slice(-2)}`;\r\n};\r\n\r\nexport const dateFormat = value => {\r\n // null, undefined and empty string values should not go through dateFormatter\r\n // otherwise, it returns undefined and will make the input an uncontrolled one.\r\n if (value == null || value === '') {\r\n return '';\r\n }\r\n\r\n if (value instanceof Date) {\r\n return convertDateToString(value);\r\n }\r\n\r\n // valid dates should not be converted\r\n if (dateRegex.test(value)) {\r\n const match = value.split('/');\r\n return match[2] + '-' + match[1] + '-' + match[0];\r\n }\r\n\r\n return convertDateToString(new Date(value));\r\n};\r\n\r\nexport const dateParser = value => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!value) {\r\n return '';\r\n }\r\n const match = value.split('-');\r\n return match[2] + '/' + match[1] + '/' + match[0];\r\n};\r\n\r\nconst dateTimeRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}\\s\\d{2}:\\d{2}$/;\r\n\r\nexport const dateTimeFormat = value => {\r\n // null, undefined and empty string values should not go through convertDateToString\r\n // otherwise, it returns undefined and will make the input an uncontrolled one.\r\n if (value == null || value === '') {\r\n return '';\r\n }\r\n\r\n if (value instanceof Date) {\r\n return convertDateToString(value);\r\n }\r\n\r\n // valid dates should not be converted\r\n if (dateTimeRegex.test(value)) {\r\n const tmpMatch = value.split(' ');\r\n const match = tmpMatch[0].split('/');\r\n\r\n return match[2] + '-' + match[1] + '-' + match[0] + ' ' + tmpMatch[1];\r\n }\r\n\r\n return convertDateToString(new Date(value));\r\n};\r\n\r\nexport const dateTimeParser = value => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n const tmpMatch = value.split('T');\r\n const match = tmpMatch[0].split('-');\r\n\r\n return match[2] + '/' + match[1] + '/' + match[0] + ' ' + tmpMatch[1];\r\n};\r\n\r\nexport const timeFormat = value => {\r\n // v is a `Date` object\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n if (value instanceof Date) {\r\n // v is a `Date` object\r\n return value.toString();\r\n } else if (value.indexOf(':') !== -1) {\r\n const match = value.split(':');\r\n let now = new Date();\r\n now.setHours(match[0]);\r\n now.setMinutes(match[1]);\r\n return now.toString();\r\n } else {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n const match = /(\\d{2}):(\\d{2})/.exec(value);\r\n if (match === null) {\r\n return;\r\n }\r\n let now = new Date();\r\n now.setHours(match[0]);\r\n now.setMinutes(match[1]);\r\n return now.toString();\r\n }\r\n};\r\n\r\nexport const timeParser = (value, source) => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n return value.split(' ')[4].substring(0, 5);\r\n};\r\n\r\nconst sanitizeRestProps = ({\r\n className,\r\n record,\r\n hasEdit,\r\n hasShow,\r\n hasList,\r\n resource,\r\n totalPages,\r\n showFilter,\r\n setSort,\r\n setPerPage,\r\n perPage,\r\n defaultTitle,\r\n setPage,\r\n setFilters,\r\n selectedIds,\r\n onUnselectItems,\r\n onToggleItem,\r\n isLoading,\r\n exporter,\r\n hideFilter,\r\n hasCreate,\r\n filterValues,\r\n displayedFilters,\r\n sort,\r\n ...rest\r\n}) => rest;\r\n\r\nexport const Separador = props => {\r\n const { source } = props;\r\n\r\n const configInput = useSelector(state => {\r\n const configInputs = state.configInputs\r\n ? state.configInputs.filter(item => item.id === source)\r\n : [];\r\n return configInputs[0] ? configInputs[0] : null;\r\n });\r\n\r\n const { hidden } = configInput || {};\r\n\r\n return (\r\n !hidden && (\r\n <Typography variant=\"h6\" gutterBottom id={props.source}>\r\n {props.children}\r\n </Typography>\r\n )\r\n );\r\n};\r\n\r\nexport const FichaActions = ({\r\n children,\r\n className,\r\n data,\r\n hasShow,\r\n hasList = true,\r\n ...rest\r\n}) => (\r\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\r\n {children}\r\n {hasList && (\r\n <ListButton label=\"ra.action.back\" icon={<ChevronLeft />} />\r\n )}\r\n {hasShow && <ShowButton record={data} />}\r\n </TopToolbar>\r\n);\r\n\r\nexport const etrRequerido = required();\r\nexport const etrRequeridoNumerico = [etrRequerido, minValue(1)];\r\nexport const dateFormatOptions = { inputFormat: 'dd/MM/yyyy' };\r\nexport const etrFechaMayorQue = sourceFechaInicio => (value, allValues) => {\r\n const inicio = allValues[sourceFechaInicio];\r\n\r\n if (value && inicio) {\r\n const iniDate = new Date(inicio.split('/').reverse().join('/'));\r\n const finDate = new Date(value.split('/').reverse().join('/'));\r\n\r\n if (isAfter(iniDate, finDate)) {\r\n return {\r\n message: 'validation.greater_or_equal',\r\n args: { menor: inicio },\r\n };\r\n }\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const localeOptions = (idi = 'es') => ({\r\n locale: idi === 'en' ? enLocale : esLocale,\r\n});\r\nexport const choicesEstado = [\r\n { id: '1', name: 'Aprobado' },\r\n { id: '2', name: 'Rechazado' },\r\n { id: '3', name: 'Pendiente' },\r\n];\r\nexport const descargarLink = (ruta, nombre) => {\r\n const fakeLink = document.createElement('a');\r\n fakeLink.style.display = 'none';\r\n document.body.appendChild(fakeLink);\r\n fakeLink.setAttribute('href', ruta);\r\n fakeLink.setAttribute('download', nombre);\r\n fakeLink.click();\r\n};\r\n\r\nexport const stringToDate = dateString => {\r\n if (!dateString) return '';\r\n const [day, month, year] = dateString.split('/').map(Number);\r\n return new Date(year, month - 1, day);\r\n};\r\n\r\nexport const stringToDateTime = dateTimeString => {\r\n if (!dateTimeString) return '';\r\n const [datePart, timePart] = dateTimeString.split(' ');\r\n const [day, month, year] = datePart.split('/').map(Number);\r\n const [hour, minute] = timePart.split(':').map(Number);\r\n return new Date(year, month - 1, day, hour, minute);\r\n};\r\n\r\nexport const dateToString = date => {\r\n if (!date) return '';\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = String(date.getFullYear());\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\nexport const dateTimeToString = date => {\r\n const options = {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n hour12: false,\r\n };\r\n\r\n return date.toLocaleString('es', options).replace(',', '');\r\n};\r\n","import * as React from 'react';\r\nimport { useCallback, useContext } from 'react';\r\nimport { Toolbar, useNotify, useSaveContext } from 'react-admin';\r\nimport { useUtilsSubmit } from '../utils';\r\nimport { FichaContext } from './FichaContext';\r\n\r\nconst classesPREFIX = 'FormEtriek';\r\n\r\nconst FormClasses = {\r\n form: `${classesPREFIX}-form`,\r\n tab: `${classesPREFIX}-tab`,\r\n contenido: `${classesPREFIX}-contenido`,\r\n};\r\n\r\nconst getClassesForm = theme => ({\r\n [`& .${FormClasses.form}`]: {\r\n maxHeight: '70vh',\r\n overflow: 'auto',\r\n },\r\n [`& .${FormClasses.tab}`]: {\r\n display: 'block',\r\n maxHeight: '65vh',\r\n overflow: 'auto',\r\n },\r\n [`& .${FormClasses.contenido}`]: {\r\n [theme.breakpoints.up('xs')]: {\r\n width: '100%', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n width: '12vw', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\r\n '&.MuiAutocomplete-root': {\r\n width: '16vw',\r\n },\r\n },\r\n },\r\n});\r\n\r\nconst ToolbarFicha = props => {\r\n const { record, ...rest } = props;\r\n return <Toolbar {...rest} record={false} />;\r\n};\r\n\r\nconst dontSave = () => {};\r\n\r\nconst useFormSubmit = props => {\r\n const {\r\n fichaProps: { onBeforeSubmitFicha },\r\n } = useContext(FichaContext);\r\n const utils = useUtilsSubmit(props);\r\n const notify = useNotify();\r\n const { save } = useSaveContext();\r\n\r\n const submit = useCallback(\r\n async values => {\r\n const valid =\r\n onBeforeSubmitFicha &&\r\n (await onBeforeSubmitFicha(\r\n { form: { getValues: () => values }, ...utils },\r\n 'N'\r\n ));\r\n if (typeof valid === 'string') {\r\n notify(valid, { type: 'error' });\r\n return dontSave();\r\n } else {\r\n return valid === undefined || valid ? save(values) : dontSave();\r\n }\r\n },\r\n [onBeforeSubmitFicha, notify, dontSave, save]\r\n );\r\n\r\n return typeof onBeforeSubmitFicha === 'function' ? submit : undefined;\r\n};\r\n\r\nexport {\r\n ToolbarFicha,\r\n useFormSubmit,\r\n FormClasses,\r\n getClassesForm,\r\n classesPREFIX,\r\n};\r\n","import { styled } from '@mui/material/styles';\r\nimport PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Create, useResourceContext } from 'react-admin';\r\nimport { useInitFicha, useNuevo } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\nimport { getClassesForm, classesPREFIX } from './utilsForm';\r\n\r\nconst CreateEtriek = props => {\r\n const {\r\n useFormulario = useDefaultHook,\r\n enableLoad = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n\r\n const { data: initialValues, isLoading } = useNuevo(resource, {\r\n enabled: enableLoad,\r\n });\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'N', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Create redirect=\"list\" {...rest} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n\r\nCreateEtriek.propTypes = {\r\n useFormulario: PropTypes.func,\r\n};\r\n\r\nconst StyledCreate = styled(CreateEtriek, {\r\n name: classesPREFIX,\r\n overridesResolver: (props, styles) => styles.root,\r\n})(({ theme }) => getClassesForm(theme));\r\n\r\nexport { StyledCreate as CreateEtriek };\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ActionDelete from '@mui/icons-material/Delete';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport clsx from 'clsx';\r\nimport * as React from 'react';\r\nimport { useDelete, useRecordContext, useTranslate } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n classes,\r\n filterValues,\r\n handleSubmit,\r\n invalid,\r\n label,\r\n pristine,\r\n resource,\r\n saving,\r\n selectedIds,\r\n redirect,\r\n ...rest\r\n}) => rest;\r\n\r\nconst DeleteButtonNoWarning = props => {\r\n const translate = useTranslate();\r\n const {\r\n resource,\r\n redirect,\r\n className,\r\n icon,\r\n label = 'ra.action.delete',\r\n ...rest\r\n } = props;\r\n\r\n const record = useRecordContext();\r\n const [deleteOne, { isLoading }] = useDelete(resource, { id: record.id });\r\n\r\n return (\r\n <Tooltip title={translate('ra.action.delete')}>\r\n <IconButton\r\n disabled={isLoading}\r\n onClick={() => deleteOne()}\r\n label={label}\r\n className={clsx('ra-delete-button', className)}\r\n key=\"button\"\r\n {...sanitizeRestProps(rest)}\r\n size=\"large\"\r\n >\r\n {icon}\r\n </IconButton>\r\n </Tooltip>\r\n );\r\n};\r\n\r\nDeleteButtonNoWarning.defaultProps = {\r\n redirect: 'list',\r\n icon: <ActionDelete />,\r\n};\r\n\r\nexport default DeleteButtonNoWarning;\r\n","import { styled } from '@mui/material/styles';\r\nimport * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Edit, useEditController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\nimport { getClassesForm, classesPREFIX } from './utilsForm';\r\n\r\n// https://marmelab.com/react-admin/Edit.html#transform\r\n// Al guardar un formulario, react-admin transforma valores vacíos en null, salvo que ya vinieran vacíos\r\n// Este transform por defecto evita que se envíen valores null\r\nconst defaultTransform = data => {\r\n const sanitizedData = {};\r\n for (const key in data) {\r\n if (typeof data[key] === 'string' && data[key].trim().length === 0)\r\n continue;\r\n\r\n if (data[key] == null) {\r\n data[key] = '';\r\n }\r\n sanitizedData[key] = data[key];\r\n }\r\n\r\n return sanitizedData;\r\n};\r\n\r\nconst EditEtriek = props => {\r\n const {\r\n useFormulario = useDefaultHook,\r\n mutationMode = 'pessimistic',\r\n ...rest\r\n } = props;\r\n const controllerProps = useEditController({ mutationMode, ...rest });\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Edit\r\n mutationMode={mutationMode}\r\n transform={defaultTransform}\r\n {...rest}\r\n {...fichaProps?.panel}\r\n />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n\r\nconst StyledEdit = styled(EditEtriek, {\r\n name: classesPREFIX,\r\n overridesResolver: (props, styles) => styles.root,\r\n})(({ theme }) => getClassesForm(theme));\r\n\r\nexport { StyledEdit as EditEtriek };\r\n","import CancelIcon from '@mui/icons-material/Cancel';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport Box from '@mui/material/Box';\r\nimport * as React from 'react';\r\nimport { Button, Form, SaveButton, useResourceContext } from 'react-admin';\r\n\r\nconst FormDialog = React.forwardRef((props, ref) => {\r\n const {\r\n isOpen,\r\n onSubmit,\r\n onClose,\r\n title,\r\n dialogText,\r\n children,\r\n hasAccept = true,\r\n hasCancel = true,\r\n isLoading = false,\r\n } = props;\r\n\r\n const resource = useResourceContext(props);\r\n\r\n const handleClose = e => {\r\n onClose && onClose(e);\r\n };\r\n\r\n return (\r\n <Dialog\r\n ref={ref}\r\n open={isOpen}\r\n fullWidth\r\n onClose={handleClose}\r\n aria-labelledby=\"form-dialog-title\"\r\n >\r\n <DialogTitle id=\"form-dialog-title\">{title}</DialogTitle>\r\n <Form resource={resource} onSubmit={onSubmit}>\r\n <DialogContent dividers>\r\n <DialogContentText>{dialogText}</DialogContentText>\r\n <Box sx={{ mt: 2 }}>{children}</Box>\r\n </DialogContent>\r\n {(hasAccept || hasCancel) && (\r\n <DialogActions>\r\n {hasCancel && (\r\n <Button\r\n label=\"ra.action.cancel\"\r\n disabled={isLoading}\r\n onClick={e => handleClose(e)}\r\n >\r\n <CancelIcon />\r\n </Button>\r\n )}\r\n {hasAccept && (\r\n <SaveButton\r\n alwaysEnable\r\n label=\"Ok\"\r\n disabled={isLoading}\r\n />\r\n )}\r\n </DialogActions>\r\n )}\r\n </Form>\r\n </Dialog>\r\n );\r\n});\r\n\r\nexport default FormDialog;\r\n","import { CardContent, CircularProgress } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { useContext, useEffect } from 'react';\r\nimport { useResourceContext } from 'react-admin';\r\nimport useUtilsFicha from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport useFormProgress from './ProgressContext';\r\n\r\nconst objVacio = {};\r\nconst blockSx = {\r\n pointerEvents: 'none',\r\n backgroundColor: '#ffffff',\r\n opacity: 0.6,\r\n position: 'relative',\r\n};\r\n\r\nconst FormContainer = props => {\r\n const context = useFormProgress();\r\n const resource = useResourceContext(props);\r\n const { estado, isLoading, initialValues, fichaProps } =\r\n useContext(FichaContext);\r\n const utils = useUtilsFicha({ resource, etrs: fichaProps.etrs });\r\n\r\n useEffect(() => {\r\n fichaProps.onRenderFicha && fichaProps.onRenderFicha(utils, estado);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n fichaProps.onLoadFicha &&\r\n fichaProps.onLoadFicha(utils, estado, initialValues);\r\n }\r\n }, [isLoading]);\r\n\r\n const block = context.open ? blockSx : objVacio;\r\n\r\n return (\r\n <CardContent\r\n sx={{\r\n ...props.sx,\r\n ...block,\r\n }}\r\n >\r\n {context.open && (\r\n <CircularProgress\r\n sx={{\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n }}\r\n thickness={4}\r\n size={50}\r\n />\r\n )}\r\n {props.children}\r\n </CardContent>\r\n );\r\n};\r\n\r\nexport default FormContainer;\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { SimpleForm } from 'react-admin';\r\nimport { FichaContext } from './FichaContext';\r\nimport FormContainer from './FormContainer';\r\nimport { useFormSubmit } from './utilsForm';\r\n\r\nconst FormEtriek = props => {\r\n const {\r\n initialValues,\r\n fichaProps: { config = {} },\r\n } = useContext(FichaContext);\r\n const submit = useFormSubmit(props);\r\n\r\n if (!initialValues) return null;\r\n\r\n return (\r\n <SimpleForm\r\n mode=\"onBlur\"\r\n {...props}\r\n onSubmit={submit}\r\n defaultValues={initialValues}\r\n component={FormContainer}\r\n {...config}\r\n />\r\n );\r\n};\r\n\r\nFormEtriek.propTypes = {\r\n ...SimpleForm.propTypes,\r\n};\r\n\r\nexport { FormEtriek };\r\n","import ExpandMore from '@mui/icons-material/ExpandMore';\r\nimport { alpha } from '@mui/material/styles';\r\nimport {\r\n Collapse,\r\n List,\r\n ListItemIcon,\r\n MenuItem,\r\n Tooltip,\r\n Typography,\r\n} from '@mui/material';\r\nimport * as React from 'react';\r\nimport { useSidebarState, useTranslate } from 'react-admin';\r\n\r\nconst SubMenu = props => {\r\n const { handleToggle, isOpen, name, icon, children, dense } = props;\r\n const translate = useTranslate();\r\n\r\n const [sidebarIsOpen] = useSidebarState();\r\n\r\n const header = (\r\n <MenuItem dense={dense} onClick={handleToggle}>\r\n <ListItemIcon sx={{ minWidth: 5 }}>\r\n {isOpen ? <ExpandMore /> : icon}\r\n </ListItemIcon>\r\n <Typography variant=\"inherit\" color=\"textSecondary\">\r\n {translate(name)}\r\n </Typography>\r\n </MenuItem>\r\n );\r\n\r\n return (\r\n <div>\r\n {sidebarIsOpen || isOpen ? (\r\n header\r\n ) : (\r\n <Tooltip title={translate(name)} placement=\"right\">\r\n {header}\r\n </Tooltip>\r\n )}\r\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\r\n <List\r\n dense={dense}\r\n component=\"div\"\r\n disablePadding\r\n sx={{\r\n paddingLeft: (props.children.props.children[0]\r\n ? props.children.props.children[0].key\r\n : ''\r\n ).startsWith('menu')\r\n ? 2\r\n : 0,\r\n backgroundColor: theme =>\r\n //alpha(theme.palette.grey['400'], 0.24),\r\n alpha(theme.palette.secondary.light, 0.24),\r\n '& a': {\r\n transition:\r\n 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\r\n paddingLeft: sidebarIsOpen ? 4 : 2,\r\n },\r\n }}\r\n >\r\n {children}\r\n </List>\r\n </Collapse>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SubMenu;\r\n","import SettingsIcon from '@mui/icons-material/Settings';\r\nimport { Box, useMediaQuery } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n DashboardMenuItem,\r\n Menu as RaMenu,\r\n MenuItemLink,\r\n useSidebarState,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport SubMenu from './SubMenu';\r\n\r\nconst renderMenu = props => {\r\n const { items: menus, translate, ...rest } = props;\r\n const { state, handleToggle, dense } = rest;\r\n\r\n return (\r\n menus && (\r\n <div>\r\n {menus.map(item => {\r\n const { name, menu, label, icon = 'settings' } = item;\r\n\r\n return menu ? (\r\n <SubMenu\r\n key={name}\r\n name={label}\r\n handleToggle={() => handleToggle(name)}\r\n isOpen={state[name]}\r\n icon={<SettingsIcon />}\r\n dense={dense}\r\n >\r\n {renderMenu({ items: menu, translate, ...rest })}\r\n </SubMenu>\r\n ) : (\r\n <MenuItemLink\r\n key={name}\r\n to={`/${name}`}\r\n //TODO: Cambiar junto con 'es.js'\r\n //primaryText={translate(`resources.${resource}.name`, {smart_count: 2})}\r\n primaryText={translate(`resources.${name}.name`, {\r\n _: label,\r\n })}\r\n dense={dense}\r\n leftIcon={<SettingsIcon />}\r\n //classes={{active: activeClassName, icon: iconClass}}\r\n //className={className}\r\n />\r\n );\r\n })}\r\n </div>\r\n )\r\n );\r\n};\r\n\r\nconst Menu = ({ dense = false }) => {\r\n const translate = useTranslate();\r\n const [state, setState] = useState({ mnuPrueba: false });\r\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const [open] = useSidebarState();\r\n\r\n const menus = JSON.parse(localStorage.getItem('menus'));\r\n\r\n const className = ''; //classes.itemLink;\r\n const iconClass = ''; //classes.itemIcon;\r\n const activeClassName = ''; //classes.secondary;\r\n\r\n const handleToggle = menu => {\r\n setState(state => ({ ...state, [menu]: !state[menu] }));\r\n };\r\n\r\n const itemsFn = renderMenu({\r\n items: menus,\r\n handleToggle,\r\n state,\r\n activeClassName,\r\n iconClass,\r\n className,\r\n open,\r\n dense,\r\n translate,\r\n });\r\n\r\n return (\r\n <Box\r\n sx={{\r\n width: open ? 230 : 50,\r\n marginTop: 1,\r\n marginBottom: 1,\r\n transition: theme =>\r\n theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n }}\r\n >\r\n <RaMenu>\r\n <DashboardMenuItem\r\n primaryText={translate('ra.page.dashboard')}\r\n //classes={{ active: activeClassName, icon: iconClass }}\r\n //className={className}\r\n />\r\n {itemsFn}\r\n {isXSmall && (\r\n <MenuItemLink\r\n to=\"/configuration\"\r\n primaryText={translate('pos.configuration')}\r\n leftIcon={<SettingsIcon />}\r\n dense={dense}\r\n //classes={{ active: activeClassName, icon: iconClass }}\r\n //className={className}\r\n />\r\n )}\r\n </RaMenu>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Menu;\r\n","import * as React from 'react';\r\nimport { Children, cloneElement, useContext, useMemo } from 'react';\r\nimport {\r\n CreateButton,\r\n ExportButton,\r\n FilterButton,\r\n FilterContext,\r\n sanitizeListRestProps,\r\n TopToolbar,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition,\r\n} from 'react-admin';\r\nimport { useUtilsGrilla } from '../utils';\r\n\r\nconst defaultJsBotonGrilla = (_, __) => {\r\n alert('Falta implementar la función jsBotonGrilla');\r\n};\r\n\r\nconst ListActionsEtriek = props => {\r\n const {\r\n className,\r\n filters: filtersProp,\r\n hasCreate,\r\n children,\r\n hideFilterButton = false,\r\n jsBotonGrilla = defaultJsBotonGrilla,\r\n ...rest\r\n } = props;\r\n const {\r\n sort,\r\n displayedFilters,\r\n filterValues,\r\n exporter,\r\n showFilter,\r\n total,\r\n } = useListContext(props);\r\n const resource = useResourceContext(props);\r\n const { hasCreate: hasCreateContext } = useResourceDefinition(props);\r\n const filters = useContext(FilterContext) || filtersProp;\r\n const listContext = useListContext(props);\r\n const utils = useUtilsGrilla(props);\r\n const utilsGrilla = { ...utils, ...listContext };\r\n\r\n delete rest.hasCreate;\r\n\r\n return useMemo(\r\n () => (\r\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\r\n {!hideFilterButton\r\n ? filtersProp\r\n ? cloneElement(filtersProp, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })\r\n : filters && <FilterButton />\r\n : null}\r\n {hasCreateContext && <CreateButton />}\r\n {exporter !== false && (\r\n <ExportButton\r\n disabled={total === 0}\r\n resource={resource}\r\n sort={sort}\r\n filterValues={filterValues}\r\n />\r\n )}\r\n {Children.map(children, (child, index) =>\r\n cloneElement(child, {\r\n onClick: !child.props.options\r\n ? e => {\r\n if (child.props.onClick) {\r\n child.props.onClick(e);\r\n }\r\n jsBotonGrilla(utilsGrilla, child.key);\r\n }\r\n : null,\r\n options: child.props.options\r\n ? child.props.options.map(option => ({\r\n ...option,\r\n onClick: e => {\r\n if (child.props.onClick) {\r\n child.props.onClick(e);\r\n }\r\n jsBotonGrilla(utilsGrilla, option.key);\r\n },\r\n }))\r\n : null,\r\n })\r\n )}\r\n </TopToolbar>\r\n ),\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n [\r\n resource,\r\n displayedFilters,\r\n filterValues,\r\n filtersProp,\r\n showFilter,\r\n filters,\r\n total,\r\n className,\r\n sort,\r\n hideFilterButton,\r\n exporter,\r\n hasCreateContext,\r\n ]\r\n );\r\n};\r\n\r\nexport default ListActionsEtriek;\r\n","import { styled } from '@mui/material/styles';\r\nimport * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Show, useShowController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\nimport { getClassesForm, classesPREFIX } from './utilsForm';\r\n\r\nconst ShowEtriek = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const controllerProps = useShowController(rest);\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Show {...rest} {...controllerProps} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n\r\nconst StyledShow = styled(ShowEtriek, {\r\n name: classesPREFIX,\r\n overridesResolver: (props, styles) => styles.root,\r\n})(({ theme }) => getClassesForm(theme));\r\n\r\nexport { StyledShow as ShowEtriek };\r\n","import ImageEye from '@mui/icons-material/RemoveRedEye';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n useCreatePath,\r\n useRecordContext,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport * as React from 'react';\r\nimport { memo } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport GridButton from './GridButton';\r\n\r\nconst ShowGridButton = props => {\r\n const {\r\n icon = defaultIcon,\r\n label = 'ra.action.show',\r\n record: recordProp,\r\n resource: resourceProp,\r\n scrollToTop = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n const record = useRecordContext(props);\r\n const createPath = useCreatePath();\r\n if (!record) return null;\r\n return (\r\n <GridButton\r\n component={Link}\r\n to={createPath({ type: 'show', resource, id: record.id })}\r\n state={scrollStates[String(scrollToTop)]}\r\n label={label}\r\n onClick={stopPropagation}\r\n {...rest}\r\n >\r\n {icon}\r\n </GridButton>\r\n );\r\n};\r\n\r\n// avoids using useMemo to get a constant value for the link state\r\nconst scrollStates = {\r\n true: { _scrollToTop: true },\r\n false: {},\r\n};\r\n\r\nconst defaultIcon = <ImageEye />;\r\n\r\n// useful to prevent click bubbling in a datagrid with rowClick\r\nconst stopPropagation = e => e.stopPropagation();\r\n\r\nShowGridButton.propTypes = {\r\n icon: PropTypes.element,\r\n label: PropTypes.string,\r\n record: PropTypes.any,\r\n scrollToTop: PropTypes.bool,\r\n};\r\n\r\nconst PureShowGridButton = memo(\r\n ShowGridButton,\r\n (props, nextProps) =>\r\n props.resource === nextProps.resource &&\r\n (props.record && nextProps.record\r\n ? props.record.id === nextProps.record.id\r\n : props.record == nextProps.record) && // eslint-disable-line eqeqeq\r\n props.label === nextProps.label &&\r\n props.disabled === nextProps.disabled\r\n);\r\n\r\nexport default PureShowGridButton;\r\n","import { CardContent, Divider } from '@mui/material';\r\nimport { styled } from '@mui/material/styles';\r\nimport clsx from 'clsx';\r\nimport * as React from 'react';\r\nimport {\r\n Children,\r\n cloneElement,\r\n isValidElement,\r\n useContext,\r\n useState,\r\n} from 'react';\r\nimport {\r\n Form,\r\n FormTab,\r\n getTabbedFormTabFullPath,\r\n TabbedFormTabs,\r\n Toolbar,\r\n useResourceContext,\r\n} from 'react-admin';\r\nimport {\r\n matchPath,\r\n Route,\r\n Routes,\r\n useLocation,\r\n useResolvedPath,\r\n} from 'react-router-dom';\r\nimport useUtilsFicha from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\n\r\nconst useFormRootPath = () => {\r\n const location = useLocation();\r\n const createMatch = matchPath(':resource/create/*', location.pathname);\r\n const editMatch = matchPath(':resource/:id/*', location.pathname);\r\n\r\n if (createMatch) {\r\n return createMatch.pathnameBase;\r\n }\r\n\r\n if (editMatch) {\r\n return editMatch.pathnameBase;\r\n }\r\n\r\n return '';\r\n};\r\n\r\nexport const TabbedFormView = props => {\r\n const {\r\n children,\r\n className,\r\n component: Component = DefaultComponent,\r\n formRootPathname,\r\n syncWithLocation = true,\r\n tabs = DefaultTabs,\r\n toolbar = DefaultToolbar,\r\n onChange,\r\n ...rest\r\n } = props;\r\n const location = useLocation();\r\n const resolvedPath = useResolvedPath('');\r\n const resource = useResourceContext(props);\r\n const [tabValue, setTabValue] = useState(0);\r\n const {\r\n fichaProps: { etrs },\r\n } = useContext(FichaContext);\r\n const utils = useUtilsFicha({ ...props, etrs });\r\n const { estado } = useContext(FichaContext);\r\n\r\n const handleTabChange = (event, value) => {\r\n if (!syncWithLocation) {\r\n setTabValue(value);\r\n if (onChange) {\r\n onChange(\r\n utils,\r\n estado,\r\n {\r\n newTab: value,\r\n prevTab: tabValue,\r\n setTab: setTabValue,\r\n },\r\n event\r\n );\r\n }\r\n }\r\n };\r\n\r\n const renderTabHeaders = () =>\r\n cloneElement(\r\n tabs,\r\n {\r\n onChange: handleTabChange,\r\n syncWithLocation,\r\n url: formRootPathname,\r\n value: tabValue,\r\n },\r\n children\r\n );\r\n\r\n return (\r\n <Root\r\n className={clsx('tabbed-form', className)}\r\n {...sanitizeRestPropsView(rest)}\r\n >\r\n {syncWithLocation ? (\r\n <Routes>\r\n <Route path=\"/*\" element={renderTabHeaders()} />\r\n </Routes>\r\n ) : (\r\n renderTabHeaders()\r\n )}\r\n <Divider />\r\n <Component>\r\n {/* All tabs are rendered (not only the one in focus), to allow validation\r\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\r\n use to hide the tab using CSS if it's not the one in focus.\r\n See https://github.com/marmelab/react-admin/issues/1866 */}\r\n {Children.map(children, (tab, index) => {\r\n if (!tab) {\r\n return null;\r\n }\r\n const tabPath = getTabbedFormTabFullPath(tab, index);\r\n const hidden = syncWithLocation\r\n ? !matchPath(\r\n `${resolvedPath.pathname}/${tabPath}`,\r\n location.pathname\r\n )\r\n : tabValue !== index;\r\n\r\n return isValidElement(tab)\r\n ? React.cloneElement(tab, {\r\n intent: 'content',\r\n resource,\r\n hidden,\r\n value: syncWithLocation ? tabPath : index,\r\n })\r\n : null;\r\n })}\r\n </Component>\r\n {toolbar !== false ? toolbar : null}\r\n </Root>\r\n );\r\n};\r\n\r\nconst DefaultTabs = <TabbedFormTabs />;\r\nconst DefaultComponent = ({ children }) => (\r\n <CardContent>{children}</CardContent>\r\n);\r\nconst DefaultToolbar = <Toolbar />;\r\n\r\nconst PREFIX = 'RaTabbedForm';\r\n\r\nexport const TabbedFormClasses = {\r\n errorTabButton: `${PREFIX}-errorTabButton`,\r\n};\r\n\r\nconst Root = styled('div', {\r\n name: PREFIX,\r\n overridesResolver: (props, styles) => styles.root,\r\n})(({ theme }) => ({\r\n [`& .MuiTab-root.${TabbedFormClasses.errorTabButton}`]: {\r\n color: theme.palette.error.main,\r\n },\r\n}));\r\n\r\nconst sanitizeRestPropsView = ({ record, resource, ...rest }) => rest;\r\n\r\nexport const TabbedForm = props => {\r\n const { onChange, ...formProps } = props;\r\n const formRootPathname = useFormRootPath();\r\n\r\n return (\r\n <Form formRootPathname={formRootPathname} {...formProps}>\r\n <TabbedFormView\r\n formRootPathname={formRootPathname}\r\n {...sanitizeRestProps(props)}\r\n />\r\n </Form>\r\n );\r\n};\r\n\r\nTabbedForm.Tab = FormTab;\r\n\r\nconst sanitizeRestProps = ({\r\n criteriaMode,\r\n defaultValues,\r\n delayError,\r\n formRootPathname,\r\n mode,\r\n noValidate,\r\n onSubmit,\r\n record,\r\n resolver,\r\n reValidateMode,\r\n sanitizeEmptyValues,\r\n shouldFocusError,\r\n shouldUnregister,\r\n shouldUseNativeValidation,\r\n validate,\r\n warnWhenUnsavedChanges,\r\n ...rest\r\n}) => rest;\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { FichaContext } from './FichaContext';\r\nimport FormContainer from './FormContainer';\r\nimport { TabbedForm } from './TabbedForm';\r\nimport { useFormSubmit } from './utilsForm';\r\n\r\nexport const TabbedFormEtriek = props => {\r\n const {\r\n initialValues,\r\n fichaProps: { config = {} },\r\n } = useContext(FichaContext);\r\n const submit = useFormSubmit(props);\r\n\r\n if (!initialValues) return null;\r\n\r\n return (\r\n <TabbedForm\r\n mode=\"onBlur\"\r\n {...props}\r\n onSubmit={submit}\r\n defaultValues={initialValues}\r\n component={FormContainer}\r\n {...config}\r\n /*toolbar={<ToolbarFicha/>}*/\r\n />\r\n );\r\n};\r\n\r\nTabbedFormEtriek.defaultProps = {\r\n syncWithLocation: false,\r\n};\r\n","import { defaultTheme } from 'react-admin';\r\n\r\n// TODO: Probablemente no sea necesario sobreescribir nada de los temas\r\n\r\nconst darkTheme = {\r\n ...defaultTheme,\r\n palette: {\r\n ...defaultTheme.palette,\r\n mode: 'dark',\r\n },\r\n components: {\r\n ...defaultTheme.components,\r\n MuiTextField: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n MuiFormControl: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n RaSidebar: {\r\n root: {\r\n drawerPaper: {\r\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\r\n },\r\n },\r\n },\r\n RaRichTextInput: {\r\n root: {\r\n '@global': {\r\n '.ra-rich-text-input': {\r\n '& .ql-editor': {\r\n '& p:not(:last-child)': {\r\n marginBottom: '0',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst lightTheme = {\r\n ...defaultTheme,\r\n palette: {\r\n ...defaultTheme.palette,\r\n mode: 'light',\r\n },\r\n components: {\r\n ...defaultTheme.components,\r\n MuiTextField: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n MuiFormControl: {\r\n defaultProps: {\r\n variant: 'outlined',\r\n },\r\n },\r\n RaSidebar: {\r\n root: {\r\n drawerPaper: {\r\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\r\n },\r\n },\r\n },\r\n RaRichTextInput: {\r\n root: {\r\n '@global': {\r\n '.ra-rich-text-input': {\r\n '& .ql-editor': {\r\n '& p:not(:last-child)': {\r\n marginBottom: '0',\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport { lightTheme, darkTheme };\r\n","import englishMessages from 'ra-language-english';\r\n//import resources from './en-fides';\r\n\r\nenglishMessages.ra.page.empty = 'No records yet';\r\n\r\nconst enMessages = {\r\n ...englishMessages,\r\n from_camera: 'From camera',\r\n take_foto: 'Take photo',\r\n login: {\r\n id: 'ID',\r\n hint: 'Login',\r\n required: 'Insert Username or ID',\r\n send: 'Send',\r\n email: 'Enter your email address',\r\n check_email:\r\n 'Check your email inbox, we just send you a verification code!',\r\n must_enter_credentials: 'You must first enter Username or ID',\r\n restore_password: 'Restore Password',\r\n punch_in: 'Punch In',\r\n },\r\n pos: {\r\n search: 'Search',\r\n change_pin: 'Change Pin',\r\n change_password: 'Change Password',\r\n configuration: 'Configuration',\r\n language: 'Language',\r\n theme: {\r\n name: 'Theme',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Welcome',\r\n subtitle: 'Employee Management',\r\n aor_button: 'Metiri WebSite',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Must be greater than or equal to %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default enMessages;\r\n","import spanishMessages from '@blackbox-vision/ra-language-spanish';\r\n//import resources from './es-fides';\r\n\r\nspanishMessages.ra.notification.created = 'Datos guardados correctamente';\r\nspanishMessages.ra.action.bulk_actions =\r\n '1 seleccionado |||| %{smart_count} seleccionados';\r\nspanishMessages.ra.page.dashboard = 'Inicio';\r\nspanishMessages.ra.page.empty = 'Sin registros todavía';\r\nspanishMessages.ra.page.invite = '¿Quiere agregar uno?';\r\nspanishMessages.ra.page.list = '%{name}';\r\nspanishMessages.ra.page.edit = 'Editar %{name}';\r\nspanishMessages.ra.action.back = 'Volver';\r\nspanishMessages.ra.message.delete_title = 'Eliminar';\r\nspanishMessages.ra.input.file.upload_single = 'Seleccione o arrastre archivo';\r\nspanishMessages.ra.input.image.upload_single = 'Seleccione o arrastre imagen';\r\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n from_camera: 'Desde camara',\r\n take_foto: 'Tomar foto',\r\n login: {\r\n id: 'Cédula',\r\n hint: 'Inicio de Sesión',\r\n required: 'Ingrese Usuario o Cédula',\r\n email: 'Ingrese su email aquí',\r\n send: 'Enviar',\r\n check_email:\r\n 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\r\n must_enter_credentials:\r\n 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\r\n restore_password: 'Restablecer Contraseña',\r\n punch_in: 'Generar Marcas',\r\n },\r\n pos: {\r\n search: 'Búsqueda',\r\n change_pin: 'Cambiar Pin',\r\n change_password: 'Cambiar Contraseña',\r\n configuration: 'Configuración',\r\n language: 'Lenguaje',\r\n theme: {\r\n name: 'Tema Visual',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Bienvenid@',\r\n subtitle: 'Gestión de Funcionarios',\r\n aor_button: 'Sitio de Metiri',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Debe ser mayor o igual a %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default esMessages;\r\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import { PhotoCamera } from '@mui/icons-material';\r\nimport { Box, Button } from '@mui/material';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport AddAPhotoIcon from '@mui/icons-material/AddAPhoto';\r\nimport React, { Fragment, useEffect, useState } from 'react';\r\nimport { Confirm, useNotify, useTranslate } from 'react-admin';\r\n\r\nconst FotoButton = props => {\r\n const [open, setOpen] = useState(false);\r\n const [fotoTomada, setFotoTomada] = useState(false);\r\n const notify = useNotify();\r\n const translate = useTranslate();\r\n const { field, sx } = props;\r\n\r\n useEffect(() => {\r\n if (open) {\r\n const openCamera = async () => {\r\n let stream = null;\r\n try {\r\n stream = await navigator.mediaDevices.getUserMedia({\r\n video: true,\r\n audio: false,\r\n });\r\n document.getElementById('video').srcObject = stream;\r\n } catch (error) {\r\n notify(error.message, { type: 'error' });\r\n setOpen(false);\r\n }\r\n };\r\n openCamera();\r\n }\r\n }, [open]);\r\n\r\n return (\r\n <Fragment>\r\n <Confirm\r\n isOpen={open}\r\n loading={!open}\r\n maxWidth=\"sm\"\r\n title=\"\"\r\n content={\r\n <Box display=\"flex\" flexDirection=\"column\">\r\n <Button\r\n variant=\"outlined\"\r\n disableElevation\r\n onClick={() => {\r\n const video = document.getElementById('video');\r\n const canvas =\r\n document.getElementById('canvas');\r\n canvas\r\n .getContext('2d')\r\n .drawImage(\r\n video,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height\r\n );\r\n setFotoTomada(true);\r\n }}\r\n startIcon={<PhotoCamera />}\r\n >\r\n {translate('take_foto')}\r\n </Button>\r\n <video\r\n id=\"video\"\r\n width=\"320\"\r\n height=\"240\"\r\n autoPlay\r\n style={{ border: 'solid 1px' }}\r\n />\r\n <div\r\n id=\"dataurl-container\"\r\n style={{\r\n border: 'dotted 1px',\r\n width: 320,\r\n height: 240,\r\n marginTop: 4,\r\n }}\r\n >\r\n <canvas id=\"canvas\" width=\"320\" height=\"240\" />\r\n </div>\r\n </Box>\r\n }\r\n onConfirm={e => {\r\n if (fotoTomada) {\r\n // Convertir la imagen capturada en un Blob\r\n document\r\n .getElementById('canvas')\r\n .toBlob(function (blob) {\r\n const video = document.getElementById('video');\r\n const fileInput =\r\n document.getElementById(field);\r\n const container = new DataTransfer();\r\n let file = new File(\r\n [blob],\r\n `${field}-img.jpg`,\r\n {\r\n type: 'image/jpeg',\r\n lastModified: new Date().getTime(),\r\n }\r\n );\r\n container.items.add(file);\r\n\r\n fileInput.files = container.files;\r\n fileInput.dispatchEvent(\r\n new Event('change', { bubbles: true })\r\n );\r\n // Detener el streaming de la cámara\r\n video.srcObject\r\n .getTracks()\r\n .forEach(track => track.stop());\r\n\r\n setFotoTomada(false);\r\n setOpen(false);\r\n }, 'image/jpeg');\r\n }\r\n }}\r\n onClose={() => {\r\n setFotoTomada(false);\r\n setOpen(false);\r\n }}\r\n />\r\n <Tooltip title={translate('from_camera')}>\r\n <Button\r\n sx={sx}\r\n onClick={() => {\r\n setOpen(true);\r\n }}\r\n >\r\n <AddAPhotoIcon />\r\n </Button>\r\n </Tooltip>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default FotoButton;\r\n","import { useContext, useRef } from 'react';\r\nimport { useInput } from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\nimport { etrRequerido } from '../../utils';\r\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext, FormEtrGridContext } from '../FichaContext';\r\n\r\nconst useContenidoController = props => {\r\n const { source } = props;\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const asisEtr = useContext(FormEtrGridContext);\r\n const inEtrGrid = asisEtr !== undefined;\r\n const configInput = useSelector(state => {\r\n const configInputs = state.configInputs\r\n ? state.configInputs.filter(item => item.id === source)\r\n : [];\r\n return configInputs[0] ? configInputs[0] : null;\r\n });\r\n const {\r\n disabled: reduxDisabled,\r\n hidden: reduxHidden,\r\n required: reduxRequired,\r\n error: reduxError,\r\n } = configInput || {};\r\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\r\n const reduxValidateError =\r\n typeof reduxError === 'function' ? reduxError : () => reduxError;\r\n\r\n const { [source]: initialProps = {}, etrs } = fichaProps;\r\n const {\r\n onFocus: onFocusProps,\r\n onChange: onChangeProps,\r\n onBlur: onBlurProps,\r\n hidden: hiddenProps = false,\r\n disabled: disabledProps = false,\r\n validate: propValidate,\r\n ...rest\r\n } = props;\r\n const { field } = useInput(props);\r\n const {\r\n onFocus: onFocusInitial,\r\n onBlur: onBlurInitial,\r\n onChange: onChangeInitial,\r\n hidden: hiddenInitial,\r\n disabled: disabledInitial,\r\n useContenido = useDefaultHook,\r\n validate: initValidate,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden =\r\n inEtrGrid || hiddenInitial === undefined ? hiddenProps : hiddenInitial;\r\n const disabled =\r\n inEtrGrid || disabledInitial === undefined\r\n ? disabledProps\r\n : disabledInitial;\r\n const onFocus =\r\n inEtrGrid || onFocusInitial === undefined\r\n ? onFocusProps\r\n : onFocusInitial;\r\n const onBlur =\r\n inEtrGrid || onBlurInitial === undefined ? onBlurProps : onBlurInitial;\r\n const onChange =\r\n inEtrGrid || onChangeInitial === undefined\r\n ? onChangeProps\r\n : onChangeInitial;\r\n const utils = useUtilsFicha({ ...props, etrs, asisEtr });\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n utils,\r\n ...restInitialProps,\r\n });\r\n const previousValue = useRef(field.value);\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n const {\r\n hidden: hiddenDinamico,\r\n disabled: disabledDinamico,\r\n onFocus: onFocusDinamico,\r\n onChange: onChangeDinamico,\r\n onBlur: onBlurDinamico,\r\n validate: dynamicValidate,\r\n ...dynamicPropsRest\r\n } = dynamicProps;\r\n const onFocusFinal = onFocusDinamico || onFocus;\r\n const onBlurFinal = onBlurDinamico || onBlur;\r\n const onChangeFinal = onChangeDinamico || onChange;\r\n\r\n const argCero = { ...utils, prev: previousValue.current };\r\n const finalPropsValidate = Array.isArray(propValidate)\r\n ? propValidate\r\n : [propValidate];\r\n const finalInitValidate = Array.isArray(initValidate)\r\n ? initValidate\r\n : [initValidate];\r\n const finalDynamicValidate = Array.isArray(dynamicValidate)\r\n ? dynamicValidate\r\n : [dynamicValidate];\r\n const finalValidate = [\r\n ...finalPropsValidate,\r\n ...finalInitValidate,\r\n ...finalDynamicValidate,\r\n reduxValidate,\r\n reduxValidateError,\r\n ].filter(i => i !== undefined);\r\n\r\n return {\r\n propsContenido: {\r\n sx: { mt: 1, mb: 1, ml: { xs: 0, md: 1 }, mr: { xs: 0, md: 1 } },\r\n onFocus: e => {\r\n onFocusFinal && onFocus(utils, estado, e);\r\n previousValue.current = e.target.value;\r\n },\r\n onBlur: e => onBlurFinal && onBlurFinal(argCero, estado, e),\r\n onChange: e => onChangeFinal && onChangeFinal(argCero, estado, e),\r\n helperText: false,\r\n validate: finalValidate,\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n disabled:\r\n reduxDisabled !== undefined\r\n ? reduxDisabled\r\n : disabledDinamico !== undefined\r\n ? disabledDinamico\r\n : disabled,\r\n },\r\n hidden:\r\n reduxHidden !== undefined\r\n ? reduxHidden\r\n : hiddenDinamico !== undefined\r\n ? hiddenDinamico\r\n : hidden,\r\n };\r\n};\r\n\r\nexport default useContenidoController;\r\n","import Divider from '@mui/material/Divider';\r\nimport Stack from '@mui/material/Stack';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { useMediaQuery } from '@mui/material';\r\nimport VisibilityIcon from '@mui/icons-material/Visibility';\r\nimport Box from '@mui/material/Box';\r\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport Link from '@mui/material/Link';\r\nimport * as React from 'react';\r\nimport {\r\n useRecordContext,\r\n FileInput,\r\n ImageField,\r\n ImageInput,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport FotoButton from './FotoButton';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst formatFile = (value, prefix) => {\r\n if (!value || value === '') {\r\n // Evito que se muestre el icono de remover en el preview\r\n return undefined;\r\n } else if (typeof value === 'string') {\r\n return { src: `${prefix}/${value}` };\r\n } else if (value instanceof Array) {\r\n return value.map(v => ({ src: `${prefix}/${v}` }));\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\nconst Camino = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const translate = useTranslate();\r\n const record = useRecordContext(props);\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const { getValues } = useFormContext();\r\n const {\r\n options = {},\r\n disabled = false,\r\n tipo = 'file',\r\n camera = true,\r\n prefix,\r\n accept = '',\r\n download = true,\r\n ...restProps\r\n } = propsContenido;\r\n\r\n const src = getValues()[restProps.source]?.src;\r\n const ruta = record ? `${prefix}/${record[restProps.source]}` : undefined;\r\n const href = src ?? ruta ?? '#';\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'image' ? (\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"flex-start\"\r\n justifyContent=\"flex-start\"\r\n divider={\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n }\r\n >\r\n <ImageInput\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n format={value => formatFile(value, prefix)}\r\n placeholder={translate('ra.input.image.upload_single')}\r\n accept=\"image/*\"\r\n inputProps={{\r\n capture: 'user',\r\n }}\r\n >\r\n <ImageField source=\"src\" title=\"\" />\r\n </ImageInput>\r\n {!isSmall && (\r\n <FotoButton sx={{ mt: 3 }} field={restProps.source} />\r\n )}\r\n </Stack>\r\n ) : (\r\n <Stack\r\n direction=\"row\"\r\n alignItems=\"flex-start\"\r\n justifyContent=\"flex-start\"\r\n divider={\r\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\r\n }\r\n >\r\n <FileInput\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n format={value => formatFile(value, prefix)}\r\n placeholder={translate('ra.input.file.upload_single')}\r\n accept={accept}\r\n >\r\n <Box sx={{ display: 'inline-block', ml: 1 }}>\r\n <IconButton\r\n component={Link}\r\n href={href}\r\n target=\"_blank\"\r\n size=\"small\"\r\n title=\"Ver adjunto\"\r\n >\r\n <VisibilityIcon color=\"primary\" />\r\n </IconButton>\r\n <IconButton\r\n sx={{ ml: 1 }}\r\n component={Link}\r\n href={href}\r\n download\r\n target=\"_blank\"\r\n size=\"small\"\r\n title=\"Descargar adjunto\"\r\n >\r\n <CloudDownloadIcon color=\"success\" />\r\n </IconButton>\r\n </Box>\r\n </FileInput>\r\n {camera && (\r\n <FotoButton sx={{ mt: 3 }} field={restProps.source} />\r\n )}\r\n </Stack>\r\n ))\r\n );\r\n};\r\n\r\nexport default Camino;\r\n","import { Box, Tooltip } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { forwardRef, useEffect, useRef } from 'react';\r\nimport {\r\n AutocompleteInput,\r\n ReferenceInput,\r\n useChoicesContext,\r\n} from 'react-admin';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { deleteRecargarComboBox } from '../../utils';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst RefTooltip = forwardRef((props, ref) => <Tooltip ref={ref} {...props} />);\r\n\r\nexport const SelectInputEtriek = props => {\r\n const { callback, sx, isTC, onChange, ...rest } = props;\r\n const { isLoading, allChoices } = useChoicesContext();\r\n const inputRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n // Llamo al callback de recargarComboBox pasándole los nuevos items\r\n if (typeof callback === 'function') {\r\n callback(Object.values([allChoices]));\r\n }\r\n }\r\n }, [allChoices, callback, isLoading]);\r\n\r\n return (\r\n <RefTooltip title={inputRef.current?.value || ''} placement=\"top\" arrow>\r\n <Box\r\n component=\"span\"\r\n sx={\r\n isTC\r\n ? { margin: 1, ...sx }\r\n : {\r\n display: { xs: 'inherit', md: 'inline-flex' },\r\n margin: 1,\r\n ...sx,\r\n }\r\n }\r\n width={isTC ? {} : { xs: '100%', md: 'auto' }}\r\n >\r\n <AutocompleteInput\r\n size=\"small\"\r\n sx={isTC ? { width: '100% !important' } : {}}\r\n {...rest}\r\n onChange={value => {\r\n onChange({ target: { value } });\r\n }}\r\n TextFieldProps={{ inputRef }}\r\n />\r\n </Box>\r\n </RefTooltip>\r\n );\r\n};\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const dispatch = useDispatch();\r\n const { queryOptions, ...restPropsContenido } = propsContenido;\r\n\r\n const { source, reference } = props;\r\n const recarga_cb = useSelector(state => {\r\n const rcb = state.reload_cb\r\n ? state.reload_cb.filter(item => item.id === source)\r\n : [];\r\n return rcb[0] ? rcb[0] : null;\r\n });\r\n const respaldoFiltro = useRef(recarga_cb);\r\n const filter =\r\n recarga_cb === null && respaldoFiltro.current\r\n ? respaldoFiltro.current\r\n : recarga_cb;\r\n\r\n let callback, finalFilter;\r\n if (filter) {\r\n const { callback: tempCallback, ...restFilter } = filter;\r\n callback = tempCallback;\r\n finalFilter = restFilter;\r\n }\r\n\r\n useEffect(() => {\r\n if (recarga_cb !== null) {\r\n respaldoFiltro.current = recarga_cb;\r\n dispatch(deleteRecargarComboBox(source));\r\n }\r\n }, [JSON.stringify(recarga_cb)]);\r\n\r\n return !hidden ? (\r\n <ReferenceInput\r\n reference={reference}\r\n source={source}\r\n perPage={500}\r\n filter={finalFilter}\r\n queryOptions={queryOptions}\r\n >\r\n <SelectInputEtriek\r\n {...restPropsContenido}\r\n callback={callback}\r\n optionText=\"etiqueta\"\r\n optionValue={source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\nexport default ComboBox;\r\n","import ActionCheck from '@mui/icons-material/CheckCircle';\r\nimport AlertError from '@mui/icons-material/ErrorOutline';\r\nimport { Paper } from '@mui/material';\r\nimport Button from '@mui/material/Button';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useCallback } from 'react';\r\nimport { useRecordSelection, useTranslate } from 'react-admin';\r\nimport Draggable from 'react-draggable';\r\n//import TreeWithDetails from \"../tree-ts/TreeWithDetails\";\r\n\r\n/*const useStyles = makeStyles(\r\n theme => ({\r\n confirmPrimary: {\r\n color: theme.palette.primary.main,\r\n },\r\n confirmWarning: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n }),\r\n { name: 'RaConfirm' }\r\n);*/\r\n\r\nconst PaperComponent = props => (\r\n <Draggable\r\n handle=\"#draggable-dialog-title\"\r\n cancel={'[class*=\"MuiDialogContent-root\"]'}\r\n >\r\n <Paper {...props} />\r\n </Draggable>\r\n);\r\n\r\nconst cursorStyle = { cursor: 'move' };\r\n\r\nconst FiltroAsig = props => {\r\n const {\r\n isOpen,\r\n isLoading,\r\n title,\r\n content,\r\n cancel,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n contentResource,\r\n translateOptions = {},\r\n } = props;\r\n const translate = useTranslate();\r\n const [selectedIds] = useRecordSelection(contentResource);\r\n\r\n const handleConfirm = useCallback(\r\n (e, button) => {\r\n e.stopPropagation();\r\n onConfirm(e, selectedIds);\r\n },\r\n [selectedIds, onConfirm]\r\n );\r\n\r\n const handleClick = useCallback(e => {\r\n e.stopPropagation();\r\n }, []);\r\n\r\n return (\r\n <Dialog\r\n open={isOpen}\r\n onClose={onClose}\r\n onClick={handleClick}\r\n fullWidth\r\n maxWidth=\"lg\"\r\n PaperComponent={PaperComponent}\r\n aria-labelledby=\"draggable-dialog-title\"\r\n >\r\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\r\n {translate(title, { _: title, ...translateOptions })}\r\n </DialogTitle>\r\n <DialogContent dividers={true}>{content}</DialogContent>\r\n <DialogActions>\r\n <Button disabled={isLoading} onClick={onClose}>\r\n <CancelIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate(cancel, { _: cancel })}\r\n </Button>\r\n <Button\r\n disabled={isLoading}\r\n onClick={e => handleConfirm(e, 'yes')}\r\n /*className={classnames('ra-confirm', {\r\n [classes.confirmWarning]: confirmColor === 'warning',\r\n [classes.confirmPrimary]: confirmColor === 'primary',\r\n })}*/\r\n autoFocus\r\n >\r\n <ConfirmIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate('ra.action.confirm')}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nFiltroAsig.propTypes = {\r\n cancel: PropTypes.string,\r\n classes: PropTypes.object,\r\n confirm: PropTypes.string,\r\n confirmColor: PropTypes.string,\r\n ConfirmIcon: PropTypes.elementType,\r\n CancelIcon: PropTypes.elementType,\r\n content: PropTypes.node.isRequired,\r\n isOpen: PropTypes.bool,\r\n isLoading: PropTypes.bool,\r\n onClose: PropTypes.func.isRequired,\r\n onConfirm: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n};\r\n\r\nFiltroAsig.defaultProps = {\r\n cancel: 'ra.action.cancel',\r\n classes: {},\r\n confirmColor: 'primary',\r\n ConfirmIcon: ActionCheck,\r\n CancelIcon: AlertError,\r\n isOpen: false,\r\n};\r\n\r\nexport default FiltroAsig;\r\n","import CheckIcon from '@mui/icons-material/Check';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport { Box } from '@mui/material';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport * as React from 'react';\r\nimport { Fragment, useCallback, useEffect, useState } from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport FiltroAsis from './FiltroAsis';\r\n\r\nconst BulkActions = () => <Fragment />;\r\nconst defaultValue = {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n};\r\n\r\nconst format = v => {\r\n if (!v || v?.all) {\r\n return 'Todos';\r\n } else if (v?.none || v.seleccion.length === 0) {\r\n return 'Ninguno';\r\n }\r\n\r\n return `Selección (${v.seleccion.length})`;\r\n};\r\n\r\nconst parse = v => {\r\n //console.log({ parse: v });\r\n return v;\r\n};\r\n\r\nconst TextBoxSelection = props => {\r\n const { disabled, asistant, asistantResource, label, source, sx, ...rest } =\r\n props;\r\n const [open, setOpen] = useState(false);\r\n const form = useFormContext();\r\n\r\n useEffect(() => {\r\n // No funciona el defaultValue\r\n handleTodos();\r\n }, []);\r\n\r\n const handleClose = useCallback(() => {\r\n setOpen(false);\r\n }, [setOpen]);\r\n\r\n const handleConfirm = (e, selectedIds) => {\r\n setOpen(false);\r\n form.setValue(source, {\r\n seleccion: selectedIds,\r\n all: false,\r\n none: false,\r\n });\r\n };\r\n\r\n const handleNinguno = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: false,\r\n none: true,\r\n });\r\n };\r\n\r\n const handleTodos = e => {\r\n form.setValue(source, {\r\n seleccion: [],\r\n all: true,\r\n none: false,\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n <Box\r\n display=\"flex\"\r\n alignItems=\"center\"\r\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\r\n >\r\n <TextInput\r\n defaultValue={defaultValue}\r\n {...rest}\r\n source={source}\r\n label={label}\r\n disabled\r\n parse={parse}\r\n format={format}\r\n helperText={false}\r\n InputProps={{\r\n endAdornment: (\r\n <>\r\n <IconButton\r\n onClick={handleNinguno}\r\n disabled={disabled}\r\n aria-label=\"Ninguno\"\r\n size=\"small\"\r\n title=\"Ninguno\"\r\n >\r\n <RemoveCircleOutlineIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={handleTodos}\r\n disabled={disabled}\r\n aria-label=\"Todos\"\r\n size=\"small\"\r\n title=\"Todos\"\r\n >\r\n <CheckIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => setOpen(true)}\r\n disabled={disabled}\r\n aria-label=\"Selección\"\r\n size=\"small\"\r\n title=\"Selección\"\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </>\r\n ),\r\n }}\r\n />\r\n </Box>\r\n <FiltroAsis\r\n isOpen={open}\r\n title={`Selección de ${label}`}\r\n contentResource={asistantResource}\r\n content={React.createElement(asistant, {\r\n bulkActionButtons: <BulkActions />,\r\n hasCreate: false,\r\n exporter: false,\r\n resource: asistantResource,\r\n })}\r\n onConfirm={handleConfirm}\r\n onClose={handleClose}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default TextBoxSelection;\r\n","import ActionCheck from '@mui/icons-material/CheckCircle';\r\nimport AlertError from '@mui/icons-material/ErrorOutline';\r\nimport { Box, Paper } from '@mui/material';\r\nimport Button from '@mui/material/Button';\r\nimport Dialog from '@mui/material/Dialog';\r\nimport DialogActions from '@mui/material/DialogActions';\r\nimport DialogContent from '@mui/material/DialogContent';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { TreeView } from 'devextreme-react';\r\nimport PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useCallback } from 'react';\r\nimport {\r\n Datagrid,\r\n List,\r\n TextField,\r\n useDataProvider,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport Draggable from 'react-draggable';\r\n\r\nconst AsistenteList = props => (\r\n <List\r\n {...props}\r\n hasCreate={false}\r\n exporter={false}\r\n perPage={50}\r\n empty={false}\r\n title=\" \"\r\n disableSyncWithLocation\r\n >\r\n <Datagrid bulkActionButtons={<span />}>\r\n <TextField source=\"funced\" sortable label=\"Cédula\" />\r\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\r\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\r\n </Datagrid>\r\n </List>\r\n);\r\n\r\nconst filtroInicial = { fillista: 'empcod=-1' };\r\n\r\nconst TreeWithList = props => {\r\n const [filtro, setFiltro] = React.useState(filtroInicial);\r\n const dataProvider = useDataProvider();\r\n\r\n const onClick = useCallback(\r\n e => {\r\n setFiltro({ fillista: e.node.key });\r\n },\r\n [setFiltro]\r\n );\r\n\r\n const createChildren = useCallback(\r\n parent => {\r\n const parentId = parent ? parent.itemData.id : '';\r\n\r\n return dataProvider\r\n .getChildNodes('form_224', { parentId: parentId })\r\n .then(response => response.data)\r\n .catch(() => {\r\n throw new Error('Data Loading Error');\r\n });\r\n },\r\n [dataProvider]\r\n );\r\n\r\n return (\r\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\r\n <Box flexGrow={1}>\r\n <TreeView\r\n id=\"funcionarios-treeview\"\r\n dataStructure=\"plain\"\r\n rootValue=\"\"\r\n onItemClick={onClick}\r\n createChildren={createChildren}\r\n />\r\n </Box>\r\n <Box flexGrow={2}>\r\n <AsistenteList resource=\"form_224\" filter={filtro} />\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\n/*const useStyles = makeStyles(\r\n theme => ({\r\n confirmPrimary: {\r\n color: theme.palette.primary.main,\r\n },\r\n confirmWarning: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n }\r\n }),\r\n { name: 'RaConfirm' }\r\n);*/\r\n\r\nconst PaperComponent = props => (\r\n <Draggable\r\n handle=\"#draggable-dialog-title\"\r\n cancel={'[class*=\"MuiDialogContent-root\"]'}\r\n >\r\n <Paper {...props} />\r\n </Draggable>\r\n);\r\n\r\nconst cursorStyle = { cursor: 'move' };\r\n\r\nconst FiltroFuncionarios = props => {\r\n const {\r\n isOpen,\r\n isLoading,\r\n title,\r\n cancel,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n translateOptions = {},\r\n } = props;\r\n const translate = useTranslate();\r\n\r\n const handleConfirm = useCallback(\r\n (e, button) => {\r\n e.stopPropagation();\r\n onConfirm(e, button);\r\n },\r\n [onConfirm]\r\n );\r\n\r\n const handleClick = useCallback(e => {\r\n e.stopPropagation();\r\n }, []);\r\n\r\n return (\r\n <Dialog\r\n open={isOpen}\r\n onClose={onClose}\r\n onClick={handleClick}\r\n fullWidth\r\n maxWidth=\"lg\"\r\n PaperComponent={PaperComponent}\r\n aria-labelledby=\"draggable-dialog-title\"\r\n >\r\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\r\n {translate(title, { _: title, ...translateOptions })}\r\n </DialogTitle>\r\n <DialogContent dividers={true}>\r\n <TreeWithList />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button disabled={isLoading} onClick={onClose}>\r\n <CancelIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate(cancel, { _: cancel })}\r\n </Button>\r\n <Button\r\n disabled={isLoading}\r\n onClick={e => handleConfirm(e, 'yes')}\r\n /*className={classnames('ra-confirm', {\r\n [classes.confirmWarning]: confirmColor === 'warning',\r\n [classes.confirmPrimary]: confirmColor === 'primary',\r\n })}*/\r\n autoFocus\r\n >\r\n <ConfirmIcon sx={{ paddingRight: '0.5em' }} />\r\n {translate('ra.action.confirm')}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nFiltroFuncionarios.propTypes = {\r\n cancel: PropTypes.string,\r\n classes: PropTypes.object,\r\n confirm: PropTypes.string,\r\n confirmColor: PropTypes.string,\r\n ConfirmIcon: PropTypes.elementType,\r\n CancelIcon: PropTypes.elementType,\r\n isOpen: PropTypes.bool,\r\n isLoading: PropTypes.bool,\r\n onClose: PropTypes.func.isRequired,\r\n onConfirm: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n};\r\n\r\nFiltroFuncionarios.defaultProps = {\r\n cancel: 'ra.action.cancel',\r\n classes: {},\r\n confirmColor: 'primary',\r\n ConfirmIcon: ActionCheck,\r\n CancelIcon: AlertError,\r\n isOpen: false,\r\n};\r\n\r\nexport default FiltroFuncionarios;\r\n","import CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport { Box } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport * as React from 'react';\nimport { Fragment, useCallback, useContext, useEffect, useState } from 'react';\nimport { TextInput, useRecordSelection } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport useUtilsFicha from '../../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\nimport FiltroFuncionarios from './FiltroFuncionarios';\n\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n if (String(v) === v) {\n return v === '' ? 'Ninguno' : 'Selección (1)';\n } else if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v })\n return v;\n};\n\nconst TBSF = props => {\n const {\n disabled,\n asistant,\n asistantResource,\n label = 'Funcionarios',\n allowNone = true,\n allowAll = true,\n source,\n sx,\n onChange: onChangeProps,\n ...rest\n } = props;\n const [selectedIds] = useRecordSelection('form_224');\n const [open, setOpen] = useState(false);\n const form = useFormContext();\n const { estado, fichaProps = {} } = useContext(FichaContext);\n const asisEtr = useContext(FormEtrGridContext);\n const { [source]: initialProps = {}, etrs } = fichaProps;\n const utils = useUtilsFicha({ ...props, etrs, asisEtr });\n const onChange =\n initialProps.onChange === undefined\n ? onChangeProps\n : initialProps.onChange;\n\n useEffect(() => {\n // No funciona el defaultValue\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, button) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n onChange && onChange(utils, estado, e);\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n onChange && onChange(utils, estado, e);\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n onChange && onChange(utils, estado, e);\n };\n\n return (\n <>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\n >\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n {allowNone && (\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n )}\n {allowAll && (\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n )}\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroFuncionarios\n isOpen={open}\n title={`Selección de ${label}`}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n );\n};\n\nexport default TBSF;\n","import * as React from 'react';\r\nimport { BooleanField as RaBooleanField, useRecordContext } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst BooleanField = props => {\r\n const { propsContenido, hidden } = useFieldController(props);\r\n const record = useRecordContext();\r\n const boolRecord = JSON.parse(JSON.stringify(record));\r\n const value = boolRecord[props.source];\r\n boolRecord[props.source] = value != '' && value != '0';\r\n\r\n return (\r\n !hidden && <RaBooleanField {...propsContenido} record={boolRecord} />\r\n );\r\n};\r\n\r\nexport default BooleanField;\r\n","import * as React from 'react';\r\nimport { BooleanInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst CheckBox = props => {\r\n const {\r\n propsContenido: { sx, ...rest },\r\n hidden,\r\n } = useContenidoController(props);\r\n\r\n return (\r\n !hidden && (\r\n <BooleanInput\r\n {...rest}\r\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\r\n />\r\n )\r\n );\r\n};\r\n\r\nexport default CheckBox;\r\n","import * as React from 'react';\r\nimport { SelectInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ComboBoxManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <SelectInput {...propsContenido} />;\r\n};\r\n\r\nexport default ComboBoxManual;\r\n","import Avatar from '@mui/material/Avatar';\r\nimport * as React from 'react';\r\nimport { useRecordContext } from 'react-admin';\r\n\r\nconst ImageField = props => {\r\n const { title, source, src } = props;\r\n const record = useRecordContext(props);\r\n const rutaImg = `${src}/${record[source]}`;\r\n\r\n return <Avatar title={title} src={rutaImg} />;\r\n};\r\n\r\nexport default ImageField;\r\n","import * as React from 'react';\r\nimport { Layout } from 'react-admin';\r\nimport AppBar from './AppBar';\r\nimport Menu from './Menu';\r\n\r\nexport default props => <Layout {...props} appBar={AppBar} menu={Menu} />;\r\n","import * as React from 'react';\r\nimport { ReferenceArrayInput, SelectArrayInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ListCheck = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const { source, reference } = props;\r\n\r\n return !hidden ? (\r\n <ReferenceArrayInput source={source} reference={reference}>\r\n <SelectArrayInput\r\n {...propsContenido}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceArrayInput>\r\n ) : null;\r\n};\r\nexport default ListCheck;\r\n","import LockIcon from '@mui/icons-material/Lock';\r\nimport { Box } from '@mui/material';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport Button from '@mui/material/Button';\r\nimport Card from '@mui/material/Card';\r\nimport CardActions from '@mui/material/CardActions';\r\nimport CircularProgress from '@mui/material/CircularProgress';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n Form,\r\n PasswordInput,\r\n TextInput,\r\n useLogin,\r\n useNotify,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nconst Login = props => {\r\n const {\r\n loginBackgroundImage,\r\n nameSource = 'username',\r\n passwordSource = 'password',\r\n } = props;\r\n const [loading, setLoading] = useState(false);\r\n const translate = useTranslate();\r\n const loginButtonText = translate('ra.auth.sign_in');\r\n const notify = useNotify();\r\n const login = useLogin();\r\n const location = useLocation();\r\n\r\n const handleSubmit = values => {\r\n setLoading(true);\r\n login(values, location.state ? location.state.nextPathname : '/').catch(\r\n error => {\r\n setLoading(false);\r\n notify(\r\n typeof error === 'string'\r\n ? error\r\n : typeof error === 'undefined' || !error.message\r\n ? 'ra.auth.sign_in_error'\r\n : error.message,\r\n {\r\n type: 'error',\r\n messageArgs: {\r\n _:\r\n typeof error === 'string'\r\n ? error\r\n : error && error.message\r\n ? error.message\r\n : undefined,\r\n },\r\n }\r\n );\r\n }\r\n );\r\n };\r\n\r\n const validate = values => {\r\n const errors = {};\r\n if (!values[nameSource]) {\r\n errors[nameSource] = translate('ra.validation.required');\r\n }\r\n if (!values[passwordSource]) {\r\n errors[passwordSource] = translate('ra.validation.required');\r\n }\r\n return errors;\r\n };\r\n\r\n return (\r\n <Form onSubmit={handleSubmit} validate={validate}>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n minHeight: '100vh',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n backgroundImage: loginBackgroundImage,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n }}\r\n >\r\n <Card sx={{ minWidth: 300, marginTop: '6em' }}>\r\n <Box\r\n sx={{\r\n margin: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <Avatar\r\n sx={{\r\n backgroundColor: 'secondary.main',\r\n }}\r\n >\r\n <LockIcon />\r\n </Avatar>\r\n </Box>\r\n <Box\r\n sx={{\r\n marginTop: '1em',\r\n marginBottom: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n color: 'grey.600',\r\n }}\r\n >\r\n Inicio de Sesión\r\n </Box>\r\n <Box sx={{ padding: '0 1em 1em 1em' }}>\r\n <Box sx={{ marginTop: 0 }}>\r\n <TextInput\r\n autoFocus\r\n fullWidth\r\n name={nameSource}\r\n label={translate('ra.auth.username')}\r\n disabled={loading}\r\n />\r\n </Box>\r\n <Box sx={{ marginTop: 0 }}>\r\n <PasswordInput\r\n name={passwordSource}\r\n label={translate('ra.auth.password')}\r\n type=\"password\"\r\n disabled={loading}\r\n />\r\n </Box>\r\n </Box>\r\n <CardActions sx={{ padding: '0 1em 1em 1em' }}>\r\n <Button\r\n variant=\"contained\"\r\n type=\"submit\"\r\n color=\"primary\"\r\n disabled={loading}\r\n fullWidth\r\n >\r\n {loading && (\r\n <CircularProgress\r\n sx={{ position: 'absolute' }}\r\n size={18}\r\n thickness={2}\r\n />\r\n )}\r\n {loginButtonText}\r\n </Button>\r\n </CardActions>\r\n </Card>\r\n </Box>\r\n </Form>\r\n );\r\n};\r\n\r\nexport default Login;\r\n","import { Box } from '@mui/material';\r\nimport Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport * as React from 'react';\r\nimport { useRef, useState } from 'react';\r\nimport { Button, FieldTitle, useResourceContext } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n displayedFilters,\r\n filterValues,\r\n showFilter,\r\n ...rest\r\n}) => rest;\r\n\r\nconst MenuButton = props => {\r\n const {\r\n className,\r\n options = [],\r\n icon: Icon,\r\n label,\r\n disabled,\r\n ...rest\r\n } = props;\r\n const [open, setOpen] = useState(false);\r\n const anchorEl = useRef();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const resource = useResourceContext(props);\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setOpen(false);\r\n return true;\r\n };\r\n\r\n const handleToggle = e => {\r\n // This prevents ghost click.\r\n e.preventDefault();\r\n setOpen(true);\r\n anchorEl.current = e.currentTarget;\r\n };\r\n\r\n const handleClose = event => {\r\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <Box sx={{ display: 'inline-block' }} {...sanitizeRestProps(rest)}>\r\n <Button\r\n size=\"large\"\r\n className=\"add-filter\"\r\n //label={options[selectedIndex].label}\r\n label={label}\r\n onClick={handleToggle}\r\n title={options[selectedIndex].label}\r\n disabled={disabled}\r\n >\r\n {options[selectedIndex]?.icon || Icon}\r\n </Button>\r\n <Menu open={open} anchorEl={anchorEl.current} onClose={handleClose}>\r\n {options.map((option, index) => (\r\n <MenuItem\r\n key={option.label}\r\n disabled={option.disabled}\r\n selected={index === selectedIndex}\r\n onClick={event => {\r\n handleMenuItemClick(event, index);\r\n option.onClick && option.onClick(event, index);\r\n }}\r\n resource={resource}\r\n title={option.label}\r\n >\r\n {option.icon}\r\n <Box\r\n component=\"span\"\r\n sx={{ paddingRight: '4px' }}\r\n ></Box>\r\n <FieldTitle label={option.label} resource={resource} />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default MenuButton;\r\n","import Typography from '@mui/material/Typography';\r\nimport * as React from 'react';\r\nimport { useRecordContext } from 'react-admin';\r\n\r\nconst MultiTextField = props => {\r\n const { fields, className, textAlign, sortable, ...rest } = props;\r\n const { campos, separador = '', secundario = [], hasSecundario } = fields;\r\n const record = useRecordContext();\r\n const principal = campos\r\n .map(item => (record[item] !== undefined ? record[item] : item))\r\n .join(`${separador}`);\r\n\r\n return (\r\n <Typography noWrap variant=\"inherit\" className={className} {...rest}>\r\n {principal}\r\n {hasSecundario && (\r\n <Typography\r\n component=\"span\"\r\n display=\"block\"\r\n color=\"textSecondary\"\r\n variant=\"caption\"\r\n >\r\n {secundario\r\n .map(\r\n item =>\r\n `${item.etiqueta || '---'}: ${\r\n record[item.campo] || '---'\r\n }`\r\n )\r\n .join(' ')}\r\n </Typography>\r\n )}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport default MultiTextField;\r\n","import * as React from 'react';\r\nimport { PasswordInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst Password = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <PasswordInput {...propsContenido} />;\r\n};\r\n\r\nexport default Password;\r\n","import * as React from 'react';\r\nimport { useContext } from 'react';\r\nimport { RadioButtonGroupInput, ReferenceInput } from 'react-admin';\r\nimport { FichaContext } from '../FichaContext';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst RadioButton = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const { isLoading } = useContext(FichaContext);\r\n const { source, reference } = props;\r\n\r\n return !isLoading && !hidden ? (\r\n <ReferenceInput source={source} reference={reference}>\r\n <RadioButtonGroupInput\r\n {...propsContenido}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceInput>\r\n ) : null;\r\n};\r\n\r\nexport default RadioButton;\r\n","import * as React from 'react';\r\nimport { RadioButtonGroupInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst RadioButtonManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <RadioButtonGroupInput {...propsContenido} />;\r\n};\r\n\r\nexport default RadioButtonManual;\r\n","import Divider from '@mui/material/Divider';\r\nimport Tab from '@mui/material/Tab';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport GrillaEtriek from './GrillaEtriek';\r\n\r\nconst TabbedGrillaEtriek = props => {\r\n const {\r\n filterValues,\r\n setFilters,\r\n tabs: { ids, ...tabs },\r\n GridComponent = GrillaEtriek,\r\n ...rest\r\n } = props;\r\n const tabActual = filterValues.id;\r\n\r\n const handleChange = (event, value) => {\r\n setFilters({ ...filterValues, id: value });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Tabs\r\n value={tabActual}\r\n indicatorColor=\"primary\"\r\n onChange={handleChange}\r\n >\r\n {ids.map(id => (\r\n <Tab\r\n key={id}\r\n label={id.charAt(0).toUpperCase() + id.slice(1)}\r\n value={id}\r\n />\r\n ))}\r\n </Tabs>\r\n <Divider />\r\n <GridComponent {...rest} {...tabs[tabActual]} />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default TabbedGrillaEtriek;\r\n","import * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextArea = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <TextInput multiline {...propsContenido} />;\r\n};\r\n\r\nexport default TextArea;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { DateInput, DateTimeInput, NumberInput, TextInput } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextBox = props => {\r\n const { tipo, ...rest } = props;\r\n const { propsContenido, hidden } = useContenidoController(rest);\r\n const form = useFormContext();\r\n\r\n useEffect(() => {\r\n if (propsContenido.value) {\r\n form.setValue(props.source, propsContenido.value);\r\n }\r\n });\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return !hidden ? (\r\n tipo === 'N' || tipo === 'D' ? (\r\n <NumberInput {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateInput {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateTimeInput {...txtProps} />\r\n ) : tipo === 'H' ? (\r\n <TextInput {...txtProps} type=\"time\" />\r\n ) : (\r\n <TextInput {...txtProps} />\r\n )\r\n ) : null;\r\n};\r\n\r\nexport default TextBox;\r\n","import { Box } from '@mui/material';\r\nimport * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport ComboBox from './ComboBox';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextCombo = props => {\r\n const { source, label, sx } = props;\r\n const { hidden } = useContenidoController(props);\r\n\r\n return !hidden ? (\r\n <Box\r\n sx={{\r\n ...sx,\r\n display: 'inline-flex',\r\n alignItems: 'flex-start',\r\n marginLeft: { md: 1 },\r\n marginBottom: -1,\r\n width: { xs: '100%', md: 'calc(24vw + 1em)' },\r\n }}\r\n >\r\n <TextInput\r\n {...props}\r\n label=\"\"\r\n source={source}\r\n sx={{ flex: 1, marginTop: 1 }}\r\n />\r\n <ComboBox\r\n {...props}\r\n source={source}\r\n label={label}\r\n isTC\r\n sx={{ flex: 3 }}\r\n />\r\n </Box>\r\n ) : null;\r\n};\r\nexport default TextCombo;\r\n","import { useResourceContext, useGetOne } from 'react-admin';\r\nimport { getFormcodFromResource } from './utils';\r\n\r\nconst useReferenceLabel = (source, id) => {\r\n const resource = useResourceContext();\r\n\r\n const { data, isLoading, error } = useGetOne(\r\n 'cb_' + getFormcodFromResource(resource) + '_' + source,\r\n { id }\r\n );\r\n\r\n if (isLoading || error) {\r\n return '';\r\n }\r\n\r\n return data?.etiqueta || '';\r\n};\r\n\r\nexport default useReferenceLabel;\r\n"],"names":["forwardRef","props","ref","useTranslate","onClose","useUserMenu","useResourceDefinitions","resourcesDefinitions","React.createElement","MenuItem","component","Link","key","to","onClick","ListItemIcon","LockIcon","ListItemText","translate","existePassword","VpnLockIcon","UserMenu","ConfigurationMenu","Logout","useMediaQuery","theme","breakpoints","up","AppBar","color","userMenu","CustomUserMenu","Typography","variant","sx","flex","textOverflow","whiteSpace","overflow","id","isLargeEnough","Box","createContext","children","useState","open","setOpen","setProps","useMemo","show","hide","AsistenteContext","Provider","value","context","ProgressContext","method","params","callback","type","payload","hidden","disabled","required","error","useDispatch","dispatch","recargarComboBox","setHiddenAction","disable","setDisableAction","setRequireAction","setErrorAction","resource","options","useDataProvider","useMutation","getJson","mutateAsync","isLoading","useGetJson","useCallback","onSuccess","onError","useListContext","useNotify","useRedirect","useRefresh","useResourceContext","useUnselectAll","useAsistente","ajax","useAjax","data","notify","redirect","refresh","refetch","unselectAll","asistente","useRecargarComboBox","useSetHidden","useSetDisable","useSetRequire","useSetError","useFormProgress","progress","setHidden","setDisable","setRequire","setError","etrs","useFormContext","asisEtr","form","trigger","source","setTimeout","undefined","useContext","FichaContext","estado","fichaProps","initialProps","hiddenProps","rest","useContenido","useDefaultHook","restInitialProps","hiddenInitial","dynamicProps","dynamicPropsRest","propsContenido","oculto","tipo","useFieldController","NumberField","txtProps","DateField","showTime","RaTextField","values","apiRef","enviarTodo","getSubmitValues","current","getRowsCount","updateRows","finalValues","Array","from","getRowModels","item","claveFila","getValues","inputValues","push","_id","setValue","shouldDirty","_estado","findIndex","currentIndex","get","_action","length","fila","splice","styled","display","flexDirection","alignItems","justifyContent","height","& .ant-empty-img-1","fill","palette","mode","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","StyledGridOverlay","width","viewBox","aria-hidden","focusable","fillRule","transform","className","cx","cy","rx","ry","d","mt","Button","name","overridesResolver","styles","root","primary","main","&:hover","backgroundColor","alpha","@media (hover: none)","FormEtrGridContext","Dialog","fullWidth","DialogTitle","labelEstado","label","DialogContentText","Form","record","dummyRecord","onSubmit","EtrChildrenWrapper","EtrFormDialog","propTypes","PropTypes","icon","save","render","editors","recordPadre","camposClaveFila","useFormState","dirtyFields","isValid","etrActualProps","onAfterRenderAsistente","useUtilsFicha","formAsistente","useEffect","utils","formPadre","DialogContent","Stack","spacing","Children","map","child","index","defaultValue","margin","indexOf","DialogActions","SaveButton","Object","keys","e","stopPropagation","IconCancel","useSafeSetState","useGridApiContext","useAddRow","AddIcon","addRow","EtrDialogChild","row","useEditRow","EditIcon","editRow","confirmTitle","confirmContent","useDeleteRow","Fragment","StyledButton","ActionDelete","Confirm","isOpen","title","content","onConfirm","deleteRow","createTheme","esES","React","Slide","direction","controles","aceptar","fullScreen","maxWidth","TransitionComponent","Transition","dividers","CancelIcon","position","Toolbar","disableGutters","ml","locationDescriptor","_","getLinkParams","Tooltip","translatedLabel","IconButton","aria-label","size","linkParams","GridButton","alignIcon","oneOf","element","string","oneOfType","bool","replace","state","true","_scrollToTop","false","defaultIcon","scrollToTop","useRecordContext","useCreatePath","createPath","scrollStates","String","ContentCreate","isRowEditable","operatorParamsToModel","entry","filterModel","items","reduce","acc","field","operator","operatorModelToParams","has","actionButtons","bulkActionButtons","columns","hasEdit","initialStateProps","initialState","convertFilterModelToFilterValues","defaultConvertFilterModelToFilterValues","claveNuevo","useUtilsGrilla","selectedIds","onSelect","displayedFilters","setFilters","useGridApiRef","useKeepGroupedColumnsHidden","pinnedColumns","right","column","headerName","translatedColumns","concat","hideable","getActions","getRowNode","EditGridButton","esEditable","filter","button","handler","GridActionsCellItem","showInMenu","CreateGridButton","split","replaceAll","trim","isValidElement","Asistente","DatagridRoot","DatagridClasses","hasBulkActionButtons","BulkActionsToolbar","tableWrapper","ThemeProvider","DataGridPremium","gridTemplateRows","slots","noRowsOverlay","CustomNoRowsOverlay","finalColumns","rows","loading","hideFooterSelectedRowCount","hideFooter","disableMultipleRowSelection","checkboxSelection","filterMode","onFilterModelChange","rowSelectionModel","onRowSelectionModelChange","isRowSelected","isRowSelectable","pt","primaryText","mobileColumns","find","Paper","pb","pl","valueGetter","jsxMobile","SettingsIcon","SimpleList","linkType","down","useResourceDefinition","onRenderGrilla","onLoadGrilla","useInitGrilla","desktopSize","AsistenteProvider","isSmall","GrillaSm","GrillaLg","useFormulario","isNaN","getDate","getFullYear","toString","getMonth","MM","slice","dd","etrRequerido","minValue","classesPREFIX","tab","contenido","FormClasses","maxHeight","&.MuiAutocomplete-root","onBeforeSubmitFicha","useUtilsSubmit","useSaveContext","valid","dontSave","submit","enableLoad","useNuevo","enabled","initialValues","useInitFicha","ProgressProvider","Create","panel","CreateEtriek","func","StyledCreate","r","t","f","n","isArray","clsx","arguments","useDelete","deleteOne","DeleteButtonNoWarning","defaultProps","sanitizedData","mutationMode","useEditController","controllerProps","Edit","defaultTransform","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","alwaysEnable","pointerEvents","opacity","onRenderFicha","onLoadFicha","CardContent","blockSx","objVacio","CircularProgress","left","top","thickness","config","useFormSubmit","SimpleForm","defaultValues","FormContainer","FormEtriek","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","header","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","paddingLeft","startsWith","secondary","light","& a","transition","mnuPrueba","setState","menus","menu","SubMenu","renderMenu","MenuItemLink","leftIcon","JSON","parse","localStorage","getItem","activeClassName","iconClass","marginTop","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","__","alert","useShowController","Show","ImageEye","ShowGridButton","any","memo","nextProps","Component","DefaultComponent","formRootPathname","syncWithLocation","tabs","DefaultTabs","toolbar","DefaultToolbar","onChange","useLocation","useResolvedPath","tabValue","setTabValue","event","newTab","prevTab","setTab","handleTabChange","url","Root","sanitizeRestPropsView","Routes","Route","path","renderTabHeaders","Divider","getTabbedFormTabFullPath","matchPath","resolvedPath","pathname","tabPath","location","intent","TabbedFormTabs","formProps","createMatch","pathnameBase","editMatch","TabbedFormView","sanitizeRestProps","TabbedForm","Tab","FormTab","TabbedFormEtriek","defaultTheme","components","MuiTextField","MuiFormControl","RaSidebar","drawerPaper","RaRichTextInput","@global",".ra-rich-text-input","& .ql-editor","& p:not(:last-child)","englishMessages","ra","page","empty","from_camera","take_foto","login","hint","send","email","check_email","must_enter_credentials","restore_password","punch_in","pos","search","change_pin","change_password","configuration","language","dark","dashboard","welcome","subtitle","aor_button","validation","greater_or_equal","spanishMessages","notification","created","action","bulk_actions","invite","list","edit","back","message","delete_title","input","file","upload_single","image","Symbol","iterator","asyncIterator","fotoTomada","setFotoTomada","body","recover","result","navigator","mediaDevices","getUserMedia","video","audio","stream","document","getElementById","srcObject","then","openCamera","disableElevation","canvas","getContext","drawImage","startIcon","PhotoCamera","autoPlay","style","border","toBlob","blob","lastModified","getTime","container","add","fileInput","files","dispatchEvent","bubbles","getTracks","forEach","track","stop","AddAPhotoIcon","useSelector","configInputs","reduxDisabled","reduxHidden","reduxError","onFocus","onChangeProps","onBlurProps","onBlur","disabledProps","propValidate","validate","useInput","onBlurInitial","onChangeInitial","disabledInitial","initValidate","inEtrGrid","onFocusInitial","onFocusProps","useRef","disabledDinamico","onFocusDinamico","onChangeDinamico","onBlurDinamico","dynamicValidate","prev","previousValue","mb","xs","md","mr","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","finalPropsValidate","finalInitValidate","finalDynamicValidate","reduxValidate","reduxValidateError","i","hiddenDinamico","prefix","src","v","isTC","useChoicesContext","allChoices","RefTooltip","inputRef","arrow","AutocompleteInput","TextFieldProps","finalFilter","useContenidoController","queryOptions","restPropsContenido","reference","reload_cb","rcb","recarga_cb","respaldoFiltro","deleteRecargarComboBox","stringify","ReferenceInput","perPage","SelectInputEtriek","optionText","optionValue","Draggable","handle","cancel","cursor","ConfirmIcon","contentResource","translateOptions","useRecordSelection","handleClick","PaperComponent","cursorStyle","paddingRight","autoFocus","FiltroAsig","classes","object","confirm","confirmColor","elementType","node","isRequired","ActionCheck","AlertError","seleccion","all","none","hasCreate","exporter","disableSyncWithLocation","Datagrid","TextField","sortable","fillista","filtroInicial","filtro","setFiltro","parent","getChildNodes","parentId","itemData","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","AsistenteList","TreeWithList","FiltroFuncionarios","boolRecord","RaBooleanField","camera","accept","restProps","_getValues$restProps$","divider","orientation","flexItem","ImageInput","maxSize","format","placeholder","inputProps","capture","ImageField","FotoButton","FileInput","href","VisibilityIcon","download","CloudDownloadIcon","BooleanInput","SelectInput","filterBy","claves","sortModel","defColumns","allowAdd","allowRemove","setRows","isLoadingParent","sort","setSort","sortField","sortDir","comparison","useGetList","pagination","order","headerAlign","disableClickEventBubbling","renderCell","EtrEditButton","unshift","renderHeader","EtrCreateButton","EtrDeleteButton","borderRadius","StyledEngineProvider","injectFirst","& .MuiDataGrid-columnsContainer","& .MuiDataGrid-iconSeparator","disableRowSelectionOnClick","paginationModel","pageSize","onSortModelChange","model","resizable","disableReorder","disableExport","filterable","disableColumnMenu","hasShow","hasList","TopToolbar","ListButton","ChevronLeft","ShowButton","isLoadingFicha","Avatar","Layout","appBar","Menu","filtersProp","filters","hideFilterButton","jsBotonGrilla","defaultJsBotonGrilla","filterValues","showFilter","total","hasCreateContext","FilterContext","listContext","sanitizeListRestProps","cloneElement","FilterButton","CreateButton","ExportButton","utilsGrilla","option","ReferenceArrayInput","SelectArrayInput","loginBackgroundImage","nameSource","passwordSource","setLoading","useLogin","nextPathname","messageArgs","errors","minHeight","backgroundImage","backgroundRepeat","backgroundSize","Card","padding","TextInput","PasswordInput","CardActions","loginButtonText","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","FieldTitle","fields","campos","separador","secundario","hasSecundario","join","noWrap","principal","etiqueta","campo","RadioButtonGroupInput","gutterBottom","allowNone","allowAll","InputProps","endAdornment","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","charAt","toUpperCase","multiline","NumberInput","DateInput","DateTimeInput","asistant","asistantResource","handleTodos","FiltroAsis","BulkActions","marginLeft","ComboBox","dateRegex","test","match","inputFormat","dateTimeRegex","tmpMatch","date","toLocaleString","day","month","year","hour","minute","hour12","padStart","ruta","nombre","createElement","fakeLink","appendChild","setAttribute","click","sourceFechaInicio","allValues","inicio","reverse","isAfter","iniDate","finDate","args","menor","idi","locale","enLocale","esLocale","etrSource","ReferenceField","meta","etr","dateString","Number","dateTimeString","timePart","now","setHours","setMinutes","exec","substring","propsEtr","finalProps","clear","api","useGetOne","getFormcodFromResource"],"mappings":"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"}
|