biblio-react 2.0.0-alpha141 → 2.0.0-alpha143

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.map CHANGED
@@ -1 +1 @@
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';\nimport {\n useListContext,\n useNotify,\n useRedirect,\n useRefresh,\n useResourceContext,\n useTranslate,\n useUnselectAll,\n} from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport useAsistente from '../layout/AsistenteContext';\nimport useFormProgress from '../layout/ProgressContext';\nimport {\n useRecargarComboBox,\n useSetDisable,\n useSetError,\n useSetHidden,\n useSetRequire,\n} from './hooks';\nimport useAjax from './useAjax';\n\nexport const useDefaultHook = props => ({});\n\nexport const useUtilsGrilla = props => {\n const data = useListContext(props);\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const resource = useResourceContext(props);\n const unselectAll = useUnselectAll(resource);\n const asistente = useAsistente();\n const translate = useTranslate();\n const [ajax] = useAjax(resource);\n\n return {\n ajax,\n data,\n notify,\n redirect,\n refresh,\n refetch: data.refetch,\n unselectAll,\n asistente,\n translate,\n };\n};\n\nexport const useUtilsSubmit = props => {\n const recargarComboBox = useRecargarComboBox();\n const setHidden = useSetHidden();\n const setDisable = useSetDisable();\n const setRequire = useSetRequire();\n const setError = useSetError();\n const progress = useFormProgress();\n const notify = useNotify();\n const redirect = useRedirect();\n const resource = useResourceContext(props);\n const [ajax] = useAjax(resource);\n const etrs = props.etrs || {};\n\n return {\n ajax,\n notify,\n redirect,\n recargarComboBox,\n progress,\n setHidden,\n setDisable,\n setRequire,\n setError,\n etrs,\n };\n};\n\nconst useUtilsFicha = props => {\n const recargarComboBox = useRecargarComboBox();\n const setHidden = useSetHidden();\n const setDisable = useSetDisable();\n const setRequire = useSetRequire();\n const setError = useSetError();\n const progress = useFormProgress();\n const notify = useNotify();\n const redirect = useRedirect();\n const form = useFormContext();\n const resource = useResourceContext(props);\n const [ajax] = useAjax(resource);\n const etrs = props.etrs || {};\n const asisEtr = props.asisEtr || {};\n const trigger = form?.trigger;\n\n return {\n form,\n ajax,\n notify,\n redirect,\n recargarComboBox,\n progress,\n setHidden: useCallback(\n (source, hidden) => {\n setHidden(source, hidden);\n setTimeout(() => {\n trigger(source);\n });\n },\n [setHidden, trigger]\n ),\n setDisable: useCallback(\n (source, disabled) => {\n setDisable(source, disabled);\n setTimeout(() => {\n trigger(source);\n });\n },\n [setDisable, trigger]\n ),\n setRequire: useCallback(\n (source, required) => {\n setRequire(source, required);\n setTimeout(() => {\n trigger(source);\n });\n },\n [setRequire, trigger]\n ),\n setError: useCallback(\n (source, error) => {\n setError(source, error);\n setTimeout(() => {\n trigger(source);\n });\n },\n [setError, trigger]\n ),\n etrs,\n asisEtr,\n };\n};\n\nexport default useUtilsFicha;\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 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 => item.id === id);\r\n currentIndex =\r\n currentIndex === -1 ? inputValues.length : currentIndex;\r\n\r\n inputValues[currentIndex] = {\r\n ...finalValues,\r\n claveFila: inputValues[currentIndex]?.estado === 'N' ? '' : 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 classes: classesOverride,\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 { 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 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';\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n} from '@mui/material';\nimport AppBar from '@mui/material/AppBar';\nimport Slide from '@mui/material/Slide';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport * as React from 'react';\nimport { Fragment } from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useResourceContext,\n} from 'react-admin';\nimport useAsistente from './AsistenteContext';\n\nconst Transition = React.forwardRef(function Transition(props, ref) {\n return <Slide direction=\"up\" ref={ref} {...props} />;\n});\n\nconst Asistente = props => {\n const { isLoading } = props;\n const resource = useResourceContext(props);\n const asistente = useAsistente();\n\n const {\n open,\n hide,\n props: { title, controles, aceptar, tipo = 'form' },\n } = asistente;\n\n const getDialogVista = () => (\n <Fragment>\n <AppBar sx={{ position: 'relative' }}>\n <Toolbar disableGutters variant={'dense'}>\n <Typography\n sx={{ ml: 2, flex: 1 }}\n variant=\"h6\"\n component=\"div\"\n >\n {title}\n </Typography>\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={() => hide()}\n color=\"inherit\"\n >\n <CancelIcon />\n </Button>\n </Toolbar>\n </AppBar>\n {controles}\n </Fragment>\n );\n\n const getDialogForm = () => (\n <Fragment>\n <DialogTitle id=\"draggable-dialog-title\">{title}</DialogTitle>\n <Form resource={resource} onSubmit={aceptar}>\n <DialogContent dividers={true}>\n <Stack spacing={2}>{controles}</Stack>\n </DialogContent>\n <DialogActions>\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={() => hide()}\n >\n <CancelIcon />\n </Button>\n <SaveButton disabled={isLoading} />\n </DialogActions>\n </Form>\n </Fragment>\n );\n\n const getConfirm = () => (\n <Confirm\n isOpen={open}\n title=\"Atención\"\n content={controles}\n onConfirm={aceptar}\n onClose={() => hide()}\n />\n );\n\n return tipo === 'confirm' ? (\n getConfirm()\n ) : (\n <Dialog\n open={open}\n onClose={() => hide()}\n fullWidth\n fullScreen={tipo === 'vista'}\n maxWidth={tipo === 'vista' ? 'lg' : 'sm'}\n TransitionComponent={Transition}\n >\n {tipo === 'form' ? getDialogForm() : getDialogVista()}\n </Dialog>\n );\n};\n\nexport default Asistente;\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 { useMediaQuery } from '@mui/material';\r\nimport * as React from 'react';\r\nimport {\r\n FileField,\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 isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const {\r\n options = {},\r\n disabled = false,\r\n tipo = 'file',\r\n camera = true,\r\n prefix,\r\n ...restProps\r\n } = propsContenido;\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 >\r\n <FileField\r\n download\r\n source=\"src\"\r\n title=\"Ver adjunto\"\r\n target=\"_blank\"\r\n />\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\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 >\r\n <SelectInputEtriek\r\n {...propsContenido}\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';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport * as React from 'react';\r\nimport { Fragment, useCallback, useEffect, useState } from 'react';\r\nimport { TextInput, useRecordSelection } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { Box } from '@mui/material';\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 (String(v) === v) {\r\n return 'Selección (1)';\r\n } else 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 allowNone = true,\r\n source,\r\n sx,\r\n ...rest\r\n } = props;\r\n const [selectedIds] = useRecordSelection('form_224');\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, 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 <>\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 {allowNone && (\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 )}\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 <FiltroFuncionarios\r\n isOpen={open}\r\n title={`Selección de ${label}`}\r\n onConfirm={handleConfirm}\r\n onClose={handleClose}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default TBSF;\r\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","setValue","shouldDirty","_estado","findIndex","currentIndex","length","get","_action","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","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","restProps","divider","orientation","flexItem","ImageInput","maxSize","format","placeholder","accept","inputProps","capture","ImageField","FotoButton","FileInput","FileField","download","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","handleTodos","InputProps","endAdornment","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","charAt","toUpperCase","multiline","NumberInput","DateInput","DateTimeInput","asistant","asistantResource","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","queryOptions","meta","etr","dateString","Number","dateTimeString","timePart","now","setHours","setMinutes","exec","substring","propsEtr","finalProps","clear","api","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 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 => item.id === id);\r\n currentIndex =\r\n currentIndex === -1 ? inputValues.length : currentIndex;\r\n\r\n inputValues[currentIndex] = {\r\n ...finalValues,\r\n claveFila: inputValues[currentIndex]?.estado === 'N' ? '' : 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 classes: classesOverride,\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 { 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 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';\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n} from '@mui/material';\nimport AppBar from '@mui/material/AppBar';\nimport Slide from '@mui/material/Slide';\nimport Toolbar from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport * as React from 'react';\nimport { Fragment } from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useResourceContext,\n} from 'react-admin';\nimport useAsistente from './AsistenteContext';\n\nconst Transition = React.forwardRef(function Transition(props, ref) {\n return <Slide direction=\"up\" ref={ref} {...props} />;\n});\n\nconst Asistente = props => {\n const { isLoading } = props;\n const resource = useResourceContext(props);\n const asistente = useAsistente();\n\n const {\n open,\n hide,\n props: { title, controles, aceptar, tipo = 'form' },\n } = asistente;\n\n const getDialogVista = () => (\n <Fragment>\n <AppBar sx={{ position: 'relative' }}>\n <Toolbar disableGutters variant={'dense'}>\n <Typography\n sx={{ ml: 2, flex: 1 }}\n variant=\"h6\"\n component=\"div\"\n >\n {title}\n </Typography>\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={() => hide()}\n color=\"inherit\"\n >\n <CancelIcon />\n </Button>\n </Toolbar>\n </AppBar>\n {controles}\n </Fragment>\n );\n\n const getDialogForm = () => (\n <Fragment>\n <DialogTitle id=\"draggable-dialog-title\">{title}</DialogTitle>\n <Form resource={resource} onSubmit={aceptar}>\n <DialogContent dividers={true}>\n <Stack spacing={2}>{controles}</Stack>\n </DialogContent>\n <DialogActions>\n <Button\n label=\"ra.action.cancel\"\n disabled={isLoading}\n onClick={() => hide()}\n >\n <CancelIcon />\n </Button>\n <SaveButton disabled={isLoading} />\n </DialogActions>\n </Form>\n </Fragment>\n );\n\n const getConfirm = () => (\n <Confirm\n isOpen={open}\n title=\"Atención\"\n content={controles}\n onConfirm={aceptar}\n onClose={() => hide()}\n />\n );\n\n return tipo === 'confirm' ? (\n getConfirm()\n ) : (\n <Dialog\n open={open}\n onClose={() => hide()}\n fullWidth\n fullScreen={tipo === 'vista'}\n maxWidth={tipo === 'vista' ? 'lg' : 'sm'}\n TransitionComponent={Transition}\n >\n {tipo === 'form' ? getDialogForm() : getDialogVista()}\n </Dialog>\n );\n};\n\nexport default Asistente;\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 { useMediaQuery } from '@mui/material';\r\nimport * as React from 'react';\r\nimport {\r\n FileField,\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 isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\r\n const {\r\n options = {},\r\n disabled = false,\r\n tipo = 'file',\r\n camera = true,\r\n prefix,\r\n ...restProps\r\n } = propsContenido;\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 >\r\n <FileField\r\n download\r\n source=\"src\"\r\n title=\"Ver adjunto\"\r\n target=\"_blank\"\r\n />\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\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 >\r\n <SelectInputEtriek\r\n {...propsContenido}\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';\r\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\r\nimport SearchIcon from '@mui/icons-material/Search';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport * as React from 'react';\r\nimport { Fragment, useCallback, useEffect, useState } from 'react';\r\nimport { TextInput, useRecordSelection } from 'react-admin';\r\nimport { useFormContext } from 'react-hook-form';\r\nimport { Box } from '@mui/material';\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 (String(v) === v) {\r\n return 'Selección (1)';\r\n } else 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 allowNone = true,\r\n source,\r\n sx,\r\n ...rest\r\n } = props;\r\n const [selectedIds] = useRecordSelection('form_224');\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, 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 <>\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 {allowNone && (\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 )}\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 <FiltroFuncionarios\r\n isOpen={open}\r\n title={`Selección de ${label}`}\r\n onConfirm={handleConfirm}\r\n onClose={handleClose}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default TBSF;\r\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","setValue","shouldDirty","_estado","findIndex","currentIndex","length","get","_action","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","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","restProps","divider","orientation","flexItem","ImageInput","maxSize","format","placeholder","accept","inputProps","capture","ImageField","FotoButton","FileInput","FileField","download","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","handleTodos","InputProps","endAdornment","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","charAt","toUpperCase","multiline","NumberInput","DateInput","DateTimeInput","asistant","asistantResource","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","queryOptions","meta","etr","dateString","Number","dateTimeString","timePart","now","setHours","setMinutes","exec","substring","propsEtr","finalProps","clear","api","useGetOne","getFormcodFromResource"],"mappings":"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"}