biblio-react 2.0.0-alpha92 → 2.0.0-alpha93

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/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/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/CreateEtriek.js","../node_modules/clsx/dist/clsx.m.js","../src/layout/DeleteButtonNoWarning.js","../src/layout/EditEtriek.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/utilsForm.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/ListActionEtriek.js","../src/layout/Login.js","../src/layout/MenuButton.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","../src/layout/contenidos/useContenidoController.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/contenidos/ImageField.js","../src/layout/Layout.js","../src/layout/contenidos/ListCheck.js","../src/layout/MultiTextField.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.js","../src/layout/ShowEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/layout/contenidos/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/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 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 useUnselectAll,\n} from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\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 [ajax] = useAjax(resource);\n\n return { ajax, data, notify, redirect, refresh, unselectAll };\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;\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';\n\nexport const FichaContext = createContext({});\nexport const FormEtrGridContext = createContext(undefined);\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';\nimport { memo, useCallback } from 'react';\n\nimport {\n ReferenceFieldView,\n ResourceContextProvider,\n useRecordContext,\n useReference,\n useTranslate,\n} from 'react-admin';\nimport TextField from '../TextField';\nimport { Typography } from '@mui/material';\n\n// TODO: Eliminar al instalar react-admin v4.11\nconst PureReferenceFieldView = memo(ReferenceFieldView);\nconst NonEmptyReferenceField = ({\n children,\n id,\n record,\n reference,\n link,\n queryOptions,\n ...props\n}) => {\n return (\n <ResourceContextProvider value={reference}>\n <PureReferenceFieldView\n reference={reference}\n {...props}\n {...useReference({\n reference,\n id,\n options: queryOptions,\n })}\n resourceLinkPath={false}\n >\n {children}\n </PureReferenceFieldView>\n </ResourceContextProvider>\n );\n};\nconst ReferenceFieldEtriek = props => {\n const { source, emptyText, ...rest } = props;\n const record = useRecordContext(props);\n const id = record[source];\n const translate = useTranslate();\n\n return id == null ? (\n emptyText ? (\n <Typography component=\"span\" variant=\"body2\">\n {emptyText && translate(emptyText, { _: emptyText })}\n </Typography>\n ) : null\n ) : (\n <NonEmptyReferenceField\n {...rest}\n emptyText={emptyText}\n record={record}\n id={id}\n />\n );\n};\n// FIN TODO: Eliminar al instalar react-admin v4.11\n\nexport const renderCellComboBox = (etrSource, source, reference) => params => {\n return (\n <ReferenceFieldEtriek\n reference={reference}\n source={source}\n queryOptions={{ meta: { etr: etrSource } }}\n record={{ [source]: params.row[source] }}\n >\n <TextField source=\"etiqueta\" />\n </ReferenceFieldEtriek>\n );\n};\n\nconst getSubmitValues = values => {\n const restValues = { ...values };\n delete restValues.id;\n\n return restValues;\n};\n\nexport const useAddRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'N';\n\n return useCallback(\n (values, form) => {\n const finalValues = getSubmitValues(values);\n const id = apiRef.current.getRowsCount() + 1;\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n claveFila: '',\n estado,\n })) || []\n : form.getValues()[source] || [];\n\n if (!enviarTodo) {\n inputValues.push({\n ...finalValues,\n claveFila: '',\n estado,\n });\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useEditRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'M';\n\n return useCallback(\n (id, values, form) => {\n const _estado = typeof id === 'number' ? 'N' : estado;\n const finalValues = getSubmitValues(values);\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado: _estado,\n })) || []\n : form.getValues()[source] || [];\n\n let currentIndex = inputValues.findIndex(item => item.id === id);\n currentIndex =\n currentIndex === -1 ? inputValues.length : currentIndex;\n\n inputValues[currentIndex] = {\n ...finalValues,\n claveFila: inputValues[currentIndex]?.estado === 'N' ? '' : id,\n estado:\n inputValues[currentIndex]?.estado === 'N' ? 'N' : estado,\n };\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useDeleteRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'B';\n\n return useCallback(\n (id, form) => {\n const fila = apiRef.current.getRowModels().get(id);\n\n apiRef.current.updateRows([{ id, _action: 'delete' }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado,\n })) || []\n : form.getValues()[source] || [];\n let currentIndex = inputValues.findIndex(\n item => item.claveFila === id\n );\n\n currentIndex =\n currentIndex === -1 ? inputValues.length : currentIndex;\n\n inputValues[currentIndex] = { ...fila, estado, claveFila: id };\n\n if (typeof id === 'number') {\n // Estoy borrando una fila nueva que no viene de la base de datos\n inputValues.splice(currentIndex, 1);\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nconst useEtrActions = props => {\n const { [props.source]: propsEtr } = props.useFormulario();\n\n const finalProps = { ...props, enviarTodo: propsEtr.enviarTodo };\n const addRow = useAddRow(finalProps);\n const editRow = useEditRow(finalProps);\n const deleteRow = useDeleteRow(finalProps);\n const clear = form => {\n props.apiRef.current.setRows([]);\n form.setValue(props.source, '');\n };\n\n return {\n addRow,\n editRow,\n deleteRow,\n clear,\n api: props.apiRef,\n };\n};\n\nexport default useEtrActions;\n","import { alpha } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { GridOverlay } from '@mui/x-data-grid';\r\nimport * as React from 'react';\r\n\r\nexport const useStyles = makeStyles(\r\n theme => ({\r\n /*shadow: {\r\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\r\n },*/\r\n root: {\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor:\r\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n },\r\n header: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n rootPaper: {\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: theme.spacing(1),\r\n },\r\n rootOverlay: {\r\n flexDirection: 'column',\r\n '& .ant-empty-img-1': {\r\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\r\n },\r\n '& .ant-empty-img-2': {\r\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\r\n },\r\n '& .ant-empty-img-3': {\r\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\r\n },\r\n '& .ant-empty-img-4': {\r\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\r\n },\r\n '& .ant-empty-img-5': {\r\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\r\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\r\n },\r\n },\r\n label: {\r\n marginTop: theme.spacing(1),\r\n },\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n }),\r\n { name: 'GE' }\r\n);\r\nexport const CustomNoRowsOverlay = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <GridOverlay className={classes.rootOverlay}>\r\n <svg\r\n width=\"120\"\r\n height=\"100\"\r\n viewBox=\"0 0 184 152\"\r\n aria-hidden\r\n focusable=\"false\"\r\n >\r\n <g fill=\"none\" fillRule=\"evenodd\">\r\n <g transform=\"translate(24 31.67)\">\r\n <ellipse\r\n className=\"ant-empty-img-5\"\r\n cx=\"67.797\"\r\n cy=\"106.89\"\r\n rx=\"67.797\"\r\n ry=\"12.668\"\r\n />\r\n <path\r\n className=\"ant-empty-img-1\"\r\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-2\"\r\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\r\n />\r\n </g>\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\r\n />\r\n <g\r\n className=\"ant-empty-img-4\"\r\n transform=\"translate(149.65 15.383)\"\r\n >\r\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\r\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n <div className={classes.label}>No hay registros</div>\r\n </GridOverlay>\r\n );\r\n};\r\n","import AddIcon from '@mui/icons-material/Add';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport ActionDelete from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { alpha, createTheme, Stack, StyledEngineProvider } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Paper from '@mui/material/Paper';\nimport { ThemeProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiContext,\n} from '@mui/x-data-grid-premium';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useGetList,\n useInput,\n useRecordContext,\n useResourceContext,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormContext, useFormState } from 'react-hook-form';\nimport useUtilsFicha from '../../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\nimport { useAddRow, useDeleteRow, useEditRow } from './actions';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor:\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n },\n header: {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.light,\n },\n rootPaper: {\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: theme.spacing(1),\n },\n rootOverlay: {\n flexDirection: 'column',\n '& .ant-empty-img-1': {\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\n },\n },\n label: {\n marginTop: theme.spacing(1),\n },\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n }),\n { name: 'EtrGrid' }\n);\n\nconst dummyRecord = {};\n\nconst EtrChildrenWrapper = props => {\n const form = useFormContext();\n\n return (\n <FormEtrGridContext.Provider value={{ form }}>\n {props.children}\n </FormEtrGridContext.Provider>\n );\n};\n\nconst EtrFormDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText component=\"span\">\n <Form\n mode=\"onBlur\"\n record={dummyRecord}\n resource={props.resource}\n onSubmit={props.onSubmit}\n >\n <EtrChildrenWrapper>{props.children}</EtrChildrenWrapper>\n </Form>\n </DialogContentText>\n </Dialog>\n);\n\nEtrFormDialog.propTypes = {\n label: PropTypes.string,\n onClick: PropTypes.func,\n icon: PropTypes.any,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n labelEstado: PropTypes.string,\n resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDialogChild = props => {\n const {\n form: formPadre,\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n open,\n } = props;\n const { dirtyFields, isValid } = useFormState();\n const {\n fichaProps: { [props.source]: etrActualProps, etrs },\n } = useContext(FichaContext);\n\n const formAsistente = useContext(FormEtrGridContext);\n const { onAfterRenderAsistente } = etrActualProps;\n const utils = useUtilsFicha({ resource, etrs, asisEtr: formAsistente });\n\n useEffect(() => {\n if (open) {\n typeof onAfterRenderAsistente === 'function' &&\n onAfterRenderAsistente({ ...utils, form: formPadre });\n }\n }, [open]);\n\n return (\n <>\n <DialogContent>\n <Stack spacing={4}>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n defaultValue: recordPadre[child.props.source] || '',\n fullWidth: true,\n sx: { margin: 0 },\n disabled:\n estado !== 'N' &&\n camposClaveFila.indexOf(child.props.source) !==\n -1,\n ...etrActualProps[child.props.source],\n /*InputLabelProps: { shrink: true },*/\n })\n )}\n </Stack>\n </DialogContent>\n <DialogActions>\n <SaveButton\n disabled={Object.keys(dirtyFields).length === 0 || !isValid}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n editors,\n record: recordPadre,\n camposClaveFila,\n label,\n source,\n enviarTodo,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const resource = useResourceContext(props);\n const form = useFormContext();\n const apiRef = useGridApiContext();\n const addRow = useAddRow({ apiRef, source, enviarTodo });\n const estado = 'N';\n\n const translate = useTranslate();\n const labelEstado = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n addRow(values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre || {}}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n editors,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n enviarTodo,\n } = props;\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const editRow = useEditRow({ apiRef, source, enviarTodo });\n const estado = 'M';\n\n const labelEstado = translate('ra.action.edit');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n editRow(row.id, values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrDeleteButton = props => {\n const {\n classes: classesOverride,\n confirmTitle = 'ra.message.delete_title', //'ra.action.delete'\n confirmContent = 'ra.message.delete_content',\n row,\n source,\n enviarTodo,\n } = props;\n\n const classes = useStyles(props);\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const deleteRow = useDeleteRow({ apiRef, source, enviarTodo });\n\n const handleDelete = e => {\n deleteRow(row.id, form);\n };\n\n return (\n <Fragment>\n <Button\n key=\"button\"\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n className={classes.deleteButton}\n >\n <ActionDelete />\n </Button>\n <Confirm\n isOpen={open}\n //loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n />\n </Fragment>\n );\n};\n\nconst theme = createTheme({}, esES);\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n enableLoad = true,\n apiRef,\n ...rest\n } = props;\n const [rows, setRows] = useState([]);\n const recordPadre = useRecordContext(props);\n const { field } = useInput({ defaultValue: '', ...props });\n const classes = useStyles(props);\n const {\n isLoading: isLoadingParent,\n fichaProps: { [rest.source]: etrProps },\n } = useContext(FichaContext);\n\n const { enviarTodo = false } = etrProps;\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n let filter = {};\n if (recordPadre) {\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n }\n\n const { data = [], isLoading } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n {\n enabled: enableLoad && !isLoadingParent,\n onSuccess: () => {\n setRows(data);\n },\n }\n );\n\n const columns = [\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrEditButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n ),\n },\n ];\n\n if (allowAdd) {\n columns.unshift({\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n />\n ),\n });\n }\n\n if (allowRemove) {\n columns.push({\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrDeleteButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n ),\n });\n }\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <Fragment>\n <DataGridPremium\n apiRef={apiRef}\n //autoHeight\n //rowHeight={25}\n loading={isLoading || isLoadingParent}\n className={classes.root}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n rows={rows}\n columns={finalColumns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n sortable={false}\n resizable={false}\n disableReorder\n disableExport\n filterable={false}\n disableColumnMenu\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n <input type=\"hidden\" {...field} />\n </Fragment>\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport { adaptV4Theme, ThemeProvider } from '@mui/material/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiRef,\n useKeepGroupedColumnsHidden,\n} from '@mui/x-data-grid-premium';\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport { useGetList, useRecordContext } from 'react-admin';\nimport { FichaContext } from '../FichaContext';\nimport { CustomNoRowsOverlay, useStyles } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme({}, esES);\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n enableLoad = true,\n initialState: initialStateProps,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const { isLoading: isLoadingParent } = useContext(FichaContext);\n const recordPadre = useRecordContext();\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const columns = useMemo(\n () => [...defColumns],\n [JSON.stringify(defColumns)]\n );\n\n let filter = {};\n if (recordPadre) {\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n }\n\n const { data = [], isLoading } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n { enabled: enableLoad && !isLoadingParent }\n );\n\n const apiRef = useGridApiRef();\n const initialState = useKeepGroupedColumnsHidden({\n apiRef,\n initialState: initialStateProps,\n });\n\n const rows = data;\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGridPremium\n //autoHeight\n //rowHeight={25}\n apiRef={apiRef}\n rows={rows}\n columns={columns}\n loading={isLoading || isLoadingParent}\n className={classes.root}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n initialState={initialState}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\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 { Box, createTheme, ThemeProvider, useMediaQuery } from '@mui/material';\nimport { GridActionsCellItem } from '@mui/x-data-grid';\nimport {\n DataGridPremium,\n esES,\n useGridApiRef,\n useKeepGroupedColumnsHidden,\n} from '@mui/x-data-grid-premium';\nimport * as React from 'react';\nimport { isValidElement } from 'react';\nimport {\n BulkActionsToolbar,\n DatagridClasses,\n DatagridRoot,\n SimpleList,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n useTranslate,\n} from 'react-admin';\nimport useInitGrilla from '../utils/useInitGrilla';\nimport { useUtilsGrilla } from '../utils/useUtils';\nimport CreateGridButton from './CreateGridButton';\nimport EditGridButton from './EditGridButton';\n\nconst esEditable = (record, isRowEditable) =>\n isRowEditable === undefined ||\n (typeof isRowEditable === 'function' && isRowEditable(record));\n\nconst theme = createTheme({}, esES);\n\nconst operatorParamsToModel = new Map([\n // boolean operators\n ['is', 'is'],\n ['not', 'not'],\n // date operators\n ['after', 'after'],\n ['onOrAfter', 'onOrAfter'],\n ['before', 'before'],\n ['onOrBefore', 'onOrBefore'],\n // numeric operators\n ['eq', '='],\n ['neq', '!='],\n ['gt', '>'],\n ['gte', '>='],\n ['lt', '<'],\n ['lte', '<='],\n // string operators\n ['contains', 'contains'],\n ['equals', 'equals'], // default operator\n ['sw', 'startsWith'],\n ['ew', 'endsWith'],\n ['isEmpty', 'isEmpty'],\n ['isNotEmpty', 'isNotEmpty'],\n ['isAnyOf', 'isAnyOf'],\n]);\n\nconst operatorModelToParams = new Map(\n Array.from(operatorParamsToModel, entry => [entry[1], entry[0]])\n);\n\nconst defaultConvertFilterModelToFilterValues = filterModel =>\n filterModel.items.reduce((acc, item) => {\n if (typeof item.field !== 'undefined' && item.operator) {\n if (operatorModelToParams.has(item.operator)) {\n acc[\n `${item.field}_${operatorModelToParams.get(item.operator)}`\n ] = item.value;\n } else {\n acc[item.field] = item.value;\n }\n }\n return acc;\n }, {});\n\nconst GrillaLg = props => {\n const {\n actionButtons = [],\n bulkActionButtons,\n sx,\n columns,\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n desktopSize = false,\n onRenderGrilla,\n onLoadGrilla,\n hasEdit,\n initialState: initialStateProps,\n convertFilterModelToFilterValues = defaultConvertFilterModelToFilterValues,\n claveNuevo,\n ...rest\n } = props;\n\n const utils = useUtilsGrilla(props);\n const translate = useTranslate();\n const resource = useResourceContext(props);\n const {\n data = [],\n isLoading,\n selectedIds,\n onSelect,\n filterValues,\n displayedFilters,\n setFilters,\n } = useListContext();\n\n const apiRef = useGridApiRef();\n const initialState = useKeepGroupedColumnsHidden({\n apiRef,\n initialState: {\n ...initialStateProps,\n pinnedColumns: { right: ['actions'] },\n },\n });\n\n const translatedColumns = columns.map((column, index) => ({\n ...column,\n headerName:\n column.headerName !== ''\n ? translate(`resources.${resource}.fields.${column.field}`, {\n _: column.headerName,\n })\n : column.headerName,\n }));\n\n const finalColumns =\n actionButtons.length > 0 || hasEdit\n ? translatedColumns.concat([\n {\n field: 'actions',\n type: 'actions',\n width: 100,\n hideable: false,\n getActions: params => {\n const fila = apiRef.current.getRowNode(params.id);\n\n return params.row.id\n ? [\n hasEdit ? (\n <EditGridButton\n record={params.row}\n disabled={\n !esEditable(\n params.row,\n isRowEditable\n )\n }\n />\n ) : null,\n ...actionButtons.map(button => {\n const { handler, ...rest } = button;\n return (\n <GridActionsCellItem\n showInMenu\n onClick={e =>\n typeof handler ===\n 'function'\n ? handler(\n utils,\n rest.key\n )\n : false\n }\n {...rest}\n />\n );\n }),\n ]\n : fila.children[0].indexOf(`${claveNuevo}=`) !==\n -1\n ? [\n <CreateGridButton\n record={\n claveNuevo\n ? {\n [claveNuevo]:\n fila.children[0]\n .split(\n `${claveNuevo}=`\n )[1]\n .replaceAll(\n '[',\n ''\n )\n .trim()\n .split('AND')[0]\n .trim(),\n }\n : undefined\n }\n />,\n ]\n : [];\n },\n },\n ])\n : translatedColumns;\n\n const handleSelectionChange = rowSelectionModel => {\n if (!isLoading) {\n // Deselección sin checkboxes\n if (apiRef.current.isRowSelected(rowSelectionModel[0])) {\n onSelect([]);\n } else {\n onSelect(rowSelectionModel);\n }\n }\n };\n\n const handleFilterChange = params => {\n setFilters(\n { ...filterValues, ...convertFilterModelToFilterValues(params) },\n displayedFilters\n );\n };\n\n const hasBulkActionButtons = isValidElement(bulkActionButtons);\n\n return (\n <DatagridRoot sx={sx} className={DatagridClasses.root}>\n {hasBulkActionButtons ? (\n <BulkActionsToolbar selectedIds={selectedIds}>\n {bulkActionButtons}\n </BulkActionsToolbar>\n ) : null}\n <Box\n sx={{ height: '70vh', width: '100%' }}\n className={DatagridClasses.tableWrapper}\n >\n <ThemeProvider theme={theme}>\n <DataGridPremium\n columns={finalColumns}\n rows={data}\n apiRef={apiRef}\n loading={isLoading}\n /*groupingColDef={params => {\n const override = {};\n\n if (params.fields.includes('nombrecompleto')) {\n return {\n headerName: 'Funcionario',\n valueFormatter: valueFormatterParams => {\n const rowNode =\n apiRef.current.getRowNode(\n valueFormatterParams.id\n );\n console.log(rowNode);\n\n return `By ${\n rowNode.groupingKey ?? ''\n }`;\n },\n };\n }\n\n return override;\n }}*/\n //disableSelectionOnClick\n hideFooterSelectedRowCount\n hideFooter\n disableMultipleRowSelection\n checkboxSelection={hasBulkActionButtons}\n filterMode=\"server\"\n //filterModel={filterModel}\n onFilterModelChange={handleFilterChange}\n rowSelectionModel={selectedIds}\n onRowSelectionModelChange={handleSelectionChange}\n isRowSelectable={params => params.row.id}\n initialState={initialState}\n //components={{ Toolbar: GridToolbar }}\n //experimentalFeatures={{ newEditingApi: true }}\n {...rest}\n />\n </ThemeProvider>\n </Box>\n </DatagridRoot>\n );\n};\n\nconst GrillaSm = props => {\n const {\n sx,\n columns,\n hasEdit,\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n } = props;\n\n const count = columns.length;\n let primaryText = pt;\n let secondaryText = st;\n\n if (!pt) {\n if (count >= 4) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[0].field]}`;\n } else if (count >= 3) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[1].field]}`;\n } else if (count >= 2) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[1].field]}`;\n } else if (count === 1) {\n primaryText = record => record[columns[0].field];\n }\n }\n\n if (!st) {\n if (count >= 4) {\n secondaryText = record =>\n `${record[columns[2].field]} - ${record[columns[3].field]}`;\n } else if (count >= 3) {\n secondaryText = record => record[columns[2].field];\n } else if (count >= 2) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[1].field]}`;\n } else if (count === 1) {\n primaryText = record => record[columns[0].field];\n }\n }\n\n return (\n <SimpleList\n linkType={record =>\n hasEdit && esEditable(record, isRowEditable) ? 'edit' : false\n }\n primaryText={primaryText}\n secondaryText={secondaryText}\n sx={sx}\n />\n );\n};\n\nconst GrillaEtriek = props => {\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\n const { hasEdit } = useResourceDefinition(props);\n useInitGrilla(props);\n const { desktopSize = false } = props;\n\n return isSmall && desktopSize === false ? (\n <GrillaSm {...props} hasEdit={hasEdit} />\n ) : (\n <GrillaLg {...props} hasEdit={hasEdit} />\n );\n};\n\nexport default GrillaEtriek;\n","import { useEffect } from 'react';\r\nimport { useListContext } from 'react-admin';\r\nimport { useUtilsGrilla } from './useUtils';\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const { isLoading } = useListContext();\r\n const utils = useUtilsGrilla(props);\r\n\r\n useEffect(() => {\r\n onRenderGrilla && onRenderGrilla(utils);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n onLoadGrilla && onLoadGrilla(utils);\r\n }\r\n }, [isLoading]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from './useUtils';\n\nconst useInitFicha = props => {\n const { useFormulario = useDefaultHook, ...rest } = props;\n const fichaProps = useFormulario(rest);\n\n return { fichaProps: { ...fichaProps, etrs: rest.etrs } };\n};\n\nexport default useInitFicha;\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';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\nimport { isAfter } from 'date-fns';\nimport enLocale from 'date-fns/locale/en-US';\nimport esLocale from 'date-fns/locale/es';\nimport * as React from 'react';\nimport {\n ListButton,\n minValue,\n required,\n ShowButton,\n TopToolbar,\n} from 'react-admin';\n\nexport const getFormcodFromResource = resource => resource.split('_')[1];\n\nexport const useStylesContenidos = makeStyles(theme => ({\n form: {\n maxHeight: '70vh',\n overflow: 'auto',\n },\n tab: {\n display: 'block',\n maxHeight: '65vh',\n overflow: 'auto',\n },\n contenido: {\n [theme.breakpoints.up('xs')]: {\n width: '100%', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n },\n [theme.breakpoints.up('md')]: {\n width: '12vw', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n '&.MuiAutocomplete-root': {\n width: '16vw',\n },\n },\n },\n}));\n\n//parse(): input -> record\n//format(): record -> input\n\nconst dateRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\n\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) return '';\n const pad = '00';\n const yyyy = value.getFullYear().toString();\n const MM = (value.getMonth() + 1).toString();\n const dd = value.getDate().toString();\n return `${yyyy}-${(pad + MM).slice(-2)}-${(pad + dd).slice(-2)}`;\n};\n\nexport const dateFormat = value => {\n // null, undefined and empty string values should not go through dateFormatter\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateRegex.test(value)) {\n const match = value.split('/');\n return match[2] + '-' + match[1] + '-' + match[0];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n const match = value.split('-');\n return match[2] + '/' + match[1] + '/' + match[0];\n};\n\nconst dateTimeRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}\\s\\d{2}:\\d{2}$/;\n\nexport const dateTimeFormat = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n const tmpMatch = value.split(' ');\n const match = tmpMatch[0].split('/');\n\n return match[2] + '-' + match[1] + '-' + match[0] + ' ' + tmpMatch[1];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateTimeParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n const tmpMatch = value.split('T');\n const match = tmpMatch[0].split('-');\n\n return match[2] + '/' + match[1] + '/' + match[0] + ' ' + tmpMatch[1];\n};\n\nexport const timeFormat = value => {\n // v is a `Date` object\n if (!value) {\n return '';\n }\n\n if (value instanceof Date) {\n // v is a `Date` object\n return value.toString();\n } else if (value.indexOf(':') !== -1) {\n const match = value.split(':');\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{2}):(\\d{2})/.exec(value);\n if (match === null) {\n return;\n }\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n }\n};\n\nexport const timeParser = (value, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n return value.split(' ')[4].substring(0, 5);\n};\n\nconst sanitizeRestProps = ({\n className,\n record,\n hasEdit,\n hasShow,\n hasList,\n resource,\n totalPages,\n showFilter,\n setSort,\n setPerPage,\n perPage,\n defaultTitle,\n setPage,\n setFilters,\n selectedIds,\n onUnselectItems,\n onToggleItem,\n isLoading,\n exporter,\n hideFilter,\n hasCreate,\n filterValues,\n displayedFilters,\n sort,\n ...rest\n}) => rest;\n\nexport const Separador = props => (\n <Typography variant=\"h6\" gutterBottom>\n {props.children}\n </Typography>\n);\n\nexport const FichaActions = ({\n children,\n className,\n data,\n hasShow,\n hasList = true,\n ...rest\n}) => (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {children}\n {hasList && (\n <ListButton label=\"ra.action.back\" icon={<ChevronLeft />} />\n )}\n {hasShow && <ShowButton record={data} />}\n </TopToolbar>\n);\n\nexport const etrRequerido = required();\nexport const etrRequeridoNumerico = [etrRequerido, minValue(1)];\nexport const dateFormatOptions = { inputFormat: 'dd/MM/yyyy' };\nexport const etrFechaMayorQue = sourceFechaInicio => (value, allValues) => {\n const inicio = allValues[sourceFechaInicio];\n\n if (value && inicio) {\n const iniDate = new Date(inicio.split('/').reverse().join('/'));\n const finDate = new Date(value.split('/').reverse().join('/'));\n\n if (isAfter(iniDate, finDate)) {\n return {\n message: 'validation.greater_or_equal',\n args: { menor: inicio },\n };\n }\n }\n\n return undefined;\n};\n\nexport const localeOptions = (idi = 'es') => ({\n locale: idi === 'en' ? enLocale : esLocale,\n});\nexport const choicesEstado = [\n { id: '1', name: 'Aprobado' },\n { id: '2', name: 'Rechazado' },\n { id: '3', name: 'Pendiente' },\n];\nexport const descargarLink = (ruta, nombre) => {\n const fakeLink = document.createElement('a');\n fakeLink.style.display = 'none';\n document.body.appendChild(fakeLink);\n fakeLink.setAttribute('href', ruta);\n fakeLink.setAttribute('download', nombre);\n fakeLink.click();\n};\n","import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Create, useResourceContext } from 'react-admin';\r\nimport { useInitFicha, useNuevo } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nconst CreateEtriek = props => {\r\n const {\r\n useFormulario = useDefaultHook,\r\n enableLoad = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n\r\n const { data: initialValues, isLoading } = useNuevo(resource, {\r\n enabled: enableLoad,\r\n });\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'N', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Create 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\nexport { CreateEtriek };\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ActionDelete from '@mui/icons-material/Delete';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { alpha } from '@mui/material/styles';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames 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\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n}));\r\n\r\nconst DeleteButtonNoWarning = props => {\r\n const classes = useStyles(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={classnames(\r\n 'ra-delete-button',\r\n classes.deleteButton,\r\n className\r\n )}\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 * as React from 'react';\nimport { useMemo } from 'react';\nimport { Edit, useEditController } from 'react-admin';\nimport { useInitFicha } from '../utils';\nimport { useDefaultHook } from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\nimport { ProgressProvider } from './ProgressContext';\n\n// https://marmelab.com/react-admin/Edit.html#transform\n// Al guardar un formulario, react-admin transforma valores vacíos en null, salvo que ya vinieran vacíos\n// Este transform por defecto evita que se envíen valores null\nconst defaultTransform = data => {\n const sanitizedData = {};\n for (const key in data) {\n if (typeof data[key] === 'string' && data[key].trim().length === 0)\n continue;\n\n if (data[key] == null) {\n data[key] = '';\n }\n sanitizedData[key] = data[key];\n }\n\n return sanitizedData;\n};\n\nexport const EditEtriek = props => {\n const {\n useFormulario = useDefaultHook,\n mutationMode = 'pessimistic',\n ...rest\n } = props;\n const controllerProps = useEditController({ mutationMode, ...rest });\n const { record: initialValues, isLoading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\n [initialValues, isLoading, fichaProps]\n );\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Edit\n mutationMode={mutationMode}\n transform={defaultTransform}\n {...rest}\n {...fichaProps?.panel}\n />\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import 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 DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { makeStyles } from '@mui/styles';\r\nimport * as React from 'react';\r\n\r\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n button: {\r\n margin: theme.spacing(1),\r\n },\r\n input: {\r\n display: 'none',\r\n },\r\n}));\r\n\r\nconst FormDialog = React.forwardRef((props, ref) => {\r\n const {\r\n isOpen,\r\n onConfirm,\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 const classes = useStyles(props);\r\n\r\n const handleConfirm = e => {\r\n onConfirm && onConfirm(e);\r\n };\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 <DialogContent>\r\n <DialogContentText>{dialogText}</DialogContentText>\r\n {children}\r\n </DialogContent>\r\n {(hasAccept || hasCancel) && (\r\n <DialogActions>\r\n {hasCancel && (\r\n <Button\r\n onClick={handleClose}\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n className={classes.button}\r\n disabled={isLoading}\r\n >\r\n Cancelar\r\n </Button>\r\n )}\r\n {hasAccept && (\r\n <Button\r\n onClick={handleConfirm}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.button}\r\n disabled={isLoading}\r\n >\r\n Ok\r\n </Button>\r\n )}\r\n </DialogActions>\r\n )}\r\n </Dialog>\r\n );\r\n});\r\n\r\nexport default FormDialog;\r\n","import { CardContent, CircularProgress } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\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\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n block: {\r\n pointerEvents: 'none',\r\n backgroundColor: '#ffffff',\r\n opacity: 0.6,\r\n position: 'relative',\r\n },\r\n progress: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n },\r\n}));\r\n\r\nconst FormContainer = props => {\r\n const cls = useStyles(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 return (\r\n <CardContent className={context.open ? cls.block : ''} sx={props.sx}>\r\n {context.open && (\r\n <CircularProgress\r\n className={cls.progress}\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';\nimport { useCallback, useContext } from 'react';\nimport { Toolbar, useNotify, useSaveContext } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\n\nconst ToolbarFicha = props => {\n const { record, ...rest } = props;\n return <Toolbar {...rest} record={false} />;\n};\n\nconst dontSave = () => {};\n\nconst useFormSubmit = props => {\n const {\n fichaProps: { onBeforeSubmitFicha },\n } = useContext(FichaContext);\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const submit = useCallback(\n values => {\n const valid =\n onBeforeSubmitFicha &&\n onBeforeSubmitFicha(\n { form: { getValues: () => values }, ...utils },\n 'N'\n );\n if (typeof valid === 'string') {\n notify(valid, { type: 'error' });\n return dontSave();\n } else {\n return valid === undefined || valid ? save(values) : dontSave();\n }\n },\n [onBeforeSubmitFicha, notify, dontSave, save]\n );\n\n return typeof onBeforeSubmitFicha === 'function' ? submit : undefined;\n};\n\nexport { ToolbarFicha, useFormSubmit };\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { useFormSubmit } from './utilsForm';\n\nconst FormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <SimpleForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n />\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes,\n};\n\nexport { FormEtriek };\n","import ExpandMore from '@mui/icons-material/ExpandMore';\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:\r\n props.children.props.children[0].key.startsWith(\r\n 'menu'\r\n )\r\n ? 4\r\n : 0,\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';\nimport { Children, cloneElement, useMemo } from 'react';\nimport {\n CreateButton,\n ExportButton,\n sanitizeListRestProps,\n TopToolbar,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n} from 'react-admin';\nimport { useUtilsGrilla } from '../utils';\n\nconst defaultJsBotonGrilla = (_, __) => {\n alert('Falta implementar la función jsBotonGrilla');\n};\n\nconst ListActionsEtriek = props => {\n const {\n className,\n exporter,\n filters,\n children,\n hideFilterButton = false,\n jsBotonGrilla = defaultJsBotonGrilla,\n ...rest\n } = props;\n const utils = useUtilsGrilla(props);\n const listContext = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n\n const {\n sort,\n displayedFilters,\n filterValues,\n selectedIds,\n showFilter,\n total,\n } = listContext;\n\n const utilsGrilla = { ...utils, ...listContext };\n delete rest.hasCreate;\n\n return useMemo(\n () => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n !hideFilterButton &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n {hasCreate && <CreateButton />}\n {exporter !== false && (\n <ExportButton\n disabled={total === 0}\n resource={resource}\n sort={sort}\n filterValues={filterValues}\n />\n )}\n {Children.map(children, (child, index) =>\n cloneElement(child, {\n onClick: !child.props.options\n ? e => {\n if (child.props.onClick) {\n child.props.onClick(e);\n }\n jsBotonGrilla(utilsGrilla, child.key);\n }\n : null,\n options: child.props.options\n ? child.props.options.map(option => ({\n ...option,\n onClick: e => {\n if (child.props.onClick) {\n child.props.onClick(e);\n }\n jsBotonGrilla(utilsGrilla, option.key);\n },\n }))\n : null,\n })\n )}\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\n );\n};\n\nexport default ListActionsEtriek;\n","import LockIcon from '@mui/icons-material/Lock';\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 { makeStyles } from '@mui/styles';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n Form,\r\n TextInput,\r\n PasswordInput,\r\n useLogin,\r\n useNotify,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n main: {\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 }) => loginBackgroundImage,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n },\r\n card: {\r\n minWidth: 300,\r\n marginTop: '6em',\r\n },\r\n avatar: {\r\n margin: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n avatarIcon: {\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n icon: ({ textLength }) => ({\r\n position: 'absolute',\r\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1),\r\n }),\r\n hint: {\r\n marginTop: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n color: theme.palette.grey[500],\r\n },\r\n form: {\r\n padding: '0 1em 1em 1em',\r\n },\r\n input: {\r\n marginTop: '1em',\r\n },\r\n actions: {\r\n padding: '0 1em 1em 1em',\r\n },\r\n}));\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 classes = useStyles({\r\n loginBackgroundImage,\r\n textLength: loginButtonText.length,\r\n });\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 <div className={classes.main}>\r\n <Card className={classes.card}>\r\n <div className={classes.avatar}>\r\n <Avatar className={classes.avatarIcon}>\r\n <LockIcon />\r\n </Avatar>\r\n </div>\r\n <div className={classes.hint}>Inicio de Sesión</div>\r\n <div className={classes.form}>\r\n <div className={classes.input}>\r\n <TextInput\r\n autoFocus\r\n name={nameSource}\r\n label={translate('ra.auth.username')}\r\n disabled={loading}\r\n />\r\n </div>\r\n <div className={classes.input}>\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 </div>\r\n </div>\r\n <CardActions className={classes.actions}>\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 className={classes.icon}\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 </div>\r\n </Form>\r\n );\r\n};\r\n\r\nexport default Login;\r\n","import Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\r\nimport * as React from 'react';\r\nimport { useRef, useState } from 'react';\r\nimport { Button, FieldTitle, useResourceContext } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n displayedFilters,\r\n filterValues,\r\n showFilter,\r\n ...rest\r\n}) => rest;\r\n\r\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles({\r\n root: { display: 'inline-block' },\r\n paddingRight: { paddingRight: 4 },\r\n});\r\n\r\nconst MenuButton = props => {\r\n const {\r\n className,\r\n options = [],\r\n icon: Icon,\r\n label,\r\n disabled,\r\n ...rest\r\n } = props;\r\n const [open, setOpen] = useState(false);\r\n const anchorEl = useRef();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const classes = useStyles(props);\r\n const resource = useResourceContext(props);\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setOpen(false);\r\n return true;\r\n };\r\n\r\n const handleToggle = e => {\r\n // This prevents ghost click.\r\n e.preventDefault();\r\n setOpen(true);\r\n anchorEl.current = e.currentTarget;\r\n };\r\n\r\n const handleClose = event => {\r\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n className={classnames(classes.root, className)}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n <Button\r\n 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 <span className={classes.paddingRight}></span>\r\n <FieldTitle label={option.label} resource={resource} />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MenuButton;\r\n","import 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';\nimport { styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n isValidElement,\n useContext,\n useState,\n} from 'react';\nimport {\n Form,\n FormTab,\n getTabbedFormTabFullPath,\n TabbedFormTabs,\n Toolbar,\n useResourceContext,\n} from 'react-admin';\nimport {\n matchPath,\n Route,\n Routes,\n useLocation,\n useResolvedPath,\n} from 'react-router-dom';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\n\nconst useFormRootPath = () => {\n const location = useLocation();\n const createMatch = matchPath(':resource/create/*', location.pathname);\n const editMatch = matchPath(':resource/:id/*', location.pathname);\n\n if (createMatch) {\n return createMatch.pathnameBase;\n }\n\n if (editMatch) {\n return editMatch.pathnameBase;\n }\n\n return '';\n};\n\nexport const TabbedFormView = props => {\n const {\n children,\n className,\n component: Component = DefaultComponent,\n formRootPathname,\n syncWithLocation = true,\n tabs = DefaultTabs,\n toolbar = DefaultToolbar,\n onChange,\n ...rest\n } = props;\n const location = useLocation();\n const resolvedPath = useResolvedPath('');\n const resource = useResourceContext(props);\n const [tabValue, setTabValue] = useState(0);\n const {\n fichaProps: { etrs },\n } = useContext(FichaContext);\n const utils = useUtilsFicha({ ...props, etrs });\n const { estado } = useContext(FichaContext);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n if (onChange) {\n onChange(\n utils,\n estado,\n {\n newTab: value,\n prevTab: tabValue,\n setTab: setTabValue,\n },\n event\n );\n }\n }\n };\n\n const renderTabHeaders = () =>\n cloneElement(\n tabs,\n {\n onChange: handleTabChange,\n syncWithLocation,\n url: formRootPathname,\n value: tabValue,\n },\n children\n );\n\n return (\n <Root\n className={clsx('tabbed-form', className)}\n {...sanitizeRestPropsView(rest)}\n >\n {syncWithLocation ? (\n <Routes>\n <Route path=\"/*\" element={renderTabHeaders()} />\n </Routes>\n ) : (\n renderTabHeaders()\n )}\n <Divider />\n <Component>\n {/* All tabs are rendered (not only the one in focus), to allow validation\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\n use to hide the tab using CSS if it's not the one in focus.\n See https://github.com/marmelab/react-admin/issues/1866 */}\n {Children.map(children, (tab, index) => {\n if (!tab) {\n return null;\n }\n const tabPath = getTabbedFormTabFullPath(tab, index);\n const hidden = syncWithLocation\n ? !matchPath(\n `${resolvedPath.pathname}/${tabPath}`,\n location.pathname\n )\n : tabValue !== index;\n\n return isValidElement(tab)\n ? React.cloneElement(tab, {\n intent: 'content',\n resource,\n hidden,\n value: syncWithLocation ? tabPath : index,\n })\n : null;\n })}\n </Component>\n {toolbar !== false ? toolbar : null}\n </Root>\n );\n};\n\nconst DefaultTabs = <TabbedFormTabs />;\nconst DefaultComponent = ({ children }) => (\n <CardContent>{children}</CardContent>\n);\nconst DefaultToolbar = <Toolbar />;\n\nconst PREFIX = 'RaTabbedForm';\n\nexport const TabbedFormClasses = {\n errorTabButton: `${PREFIX}-errorTabButton`,\n};\n\nconst Root = styled('div', {\n name: PREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n [`& .MuiTab-root.${TabbedFormClasses.errorTabButton}`]: {\n color: theme.palette.error.main,\n },\n}));\n\nconst sanitizeRestPropsView = ({ record, resource, ...rest }) => rest;\n\nexport const TabbedForm = props => {\n const { onChange, ...formProps } = props;\n const formRootPathname = useFormRootPath();\n\n return (\n <Form formRootPathname={formRootPathname} {...formProps}>\n <TabbedFormView\n formRootPathname={formRootPathname}\n {...sanitizeRestProps(props)}\n />\n </Form>\n );\n};\n\nTabbedForm.Tab = FormTab;\n\nconst sanitizeRestProps = ({\n criteriaMode,\n defaultValues,\n delayError,\n formRootPathname,\n mode,\n noValidate,\n onSubmit,\n record,\n resolver,\n reValidateMode,\n sanitizeEmptyValues,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n validate,\n warnWhenUnsavedChanges,\n ...rest\n}) => rest;\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { TabbedForm } from './TabbedForm';\nimport { useFormSubmit } from './utilsForm';\n\nexport const TabbedFormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <TabbedForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n /*toolbar={<ToolbarFicha/>}*/\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n syncWithLocation: false,\n};\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 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\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n login: {\r\n id: 'Cédula',\r\n hint: 'Inicio de Sesión',\r\n required: 'Ingrese Usuario o Cédula',\r\n email: 'Ingrese su email aquí',\r\n send: 'Enviar',\r\n check_email:\r\n 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\r\n must_enter_credentials:\r\n 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\r\n restore_password: 'Restablecer Contraseña',\r\n punch_in: 'Generar Marcas',\r\n },\r\n pos: {\r\n search: 'Búsqueda',\r\n change_pin: 'Cambiar Pin',\r\n change_password: 'Cambiar Contraseña',\r\n configuration: 'Configuración',\r\n language: 'Lenguaje',\r\n theme: {\r\n name: 'Tema Visual',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Bienvenid@',\r\n subtitle: 'Gestión de Funcionarios',\r\n aor_button: 'Sitio de Metiri',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Debe ser mayor o igual a %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default esMessages;\r\n","import { useContext, 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: { m: 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 { 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: { md: 'inline-flex' },\r\n margin: 1,\r\n ...sx,\r\n }\r\n }\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 { alpha } from '@mui/material/styles';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\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\nconst 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 iconPaddingStyle: {\r\n paddingRight: '0.5em',\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 confirmColor,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n contentResource,\r\n translateOptions = {},\r\n } = props;\r\n const classes = useStyles(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 className={classes.iconPaddingStyle} />\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 className={classes.iconPaddingStyle} />\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 { alpha } from '@mui/material/styles';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\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\nconst 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 iconPaddingStyle: {\r\n paddingRight: '0.5em',\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 confirmColor,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n translateOptions = {},\r\n } = props;\r\n const classes = useStyles(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 className={classes.iconPaddingStyle} />\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 className={classes.iconPaddingStyle} />\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 (!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 { FileInput, FileField, useRecordContext } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst Camino = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const { options = {}, disabled = false, ...restProps } = propsContenido;\r\n\r\n /* FileField recibe el valor como record, le paso el del contexto */\r\n const record = useRecordContext();\r\n\r\n return (\r\n !hidden && (\r\n <FileInput\r\n accept=\"\"\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n >\r\n <FileField\r\n source={propsContenido.source}\r\n title=\"Ver\"\r\n record={record}\r\n />\r\n </FileInput>\r\n )\r\n );\r\n};\r\n\r\nexport default Camino;\r\n","import * as React from 'react';\r\nimport { BooleanInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst CheckBox = props => {\r\n const {\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 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 * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Show, useShowController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nexport const ShowEtriek = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const controllerProps = useShowController(rest);\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Show {...rest} {...controllerProps} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n","import Divider from '@mui/material/Divider';\r\nimport Tab from '@mui/material/Tab';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport GrillaEtriek from './GrillaEtriek';\r\n\r\nconst TabbedGrillaEtriek = props => {\r\n const {\r\n filterValues,\r\n setFilters,\r\n tabs: { ids, ...tabs },\r\n GridComponent = GrillaEtriek,\r\n ...rest\r\n } = props;\r\n const tabActual = filterValues.id;\r\n\r\n const handleChange = (event, value) => {\r\n setFilters({ ...filterValues, id: value });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Tabs\r\n value={tabActual}\r\n indicatorColor=\"primary\"\r\n onChange={handleChange}\r\n >\r\n {ids.map(id => (\r\n <Tab\r\n key={id}\r\n label={id.charAt(0).toUpperCase() + id.slice(1)}\r\n value={id}\r\n />\r\n ))}\r\n </Tabs>\r\n <Divider />\r\n <GridComponent {...rest} {...tabs[tabActual]} />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default TabbedGrillaEtriek;\r\n","import * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextArea = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <TextInput multiline {...propsContenido} />;\r\n};\r\n\r\nexport default TextArea;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { 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';\nimport * as React from 'react';\nimport { TextInput } from 'react-admin';\nimport ComboBox from './ComboBox';\nimport useContenidoController from './useContenidoController';\n\nconst TextCombo = props => {\n const { source, label, sx } = props;\n const { hidden } = useContenidoController(props);\n\n return !hidden ? (\n <Box\n sx={{\n ...sx,\n display: 'inline-flex',\n alignItems: 'flex-start',\n marginLeft: 1,\n marginBottom: -1,\n width: { xs: '100%', md: 'calc(24vw + 1em)' },\n }}\n >\n <TextInput\n {...props}\n label=\"\"\n source={source}\n sx={{ flex: 1, marginTop: 1 }}\n />\n <ComboBox\n {...props}\n source={source}\n label={label}\n isTC\n sx={{ flex: 3 }}\n />\n </Box>\n ) : null;\n};\nexport default TextCombo;\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","useMemo","show","hide","ProgressContext","Provider","value","context","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","ajax","useAjax","data","notify","redirect","refresh","unselectAll","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","memo","ReferenceFieldView","reference","queryOptions","ResourceContextProvider","PureReferenceFieldView","useReference","resourceLinkPath","emptyText","useRecordContext","record","_","NonEmptyReferenceField","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","makeStyles","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","mode","& .MuiDataGrid-iconSeparator","display","header","secondary","contrastText","light","rootPaper","width","height","borderRadius","marginTop","spacing","rootOverlay","flexDirection","& .ant-empty-img-1","fill","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","label","deleteButton","main","&:hover","alpha","@media (hover: none)","name","useStyles","GridOverlay","className","classes","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","FormEtrGridContext","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","Form","dummyRecord","onSubmit","EtrChildrenWrapper","EtrFormDialog","propTypes","PropTypes","icon","save","render","editors","recordPadre","camposClaveFila","useFormState","dirtyFields","isValid","etrActualProps","onAfterRenderAsistente","useUtilsFicha","formAsistente","useEffect","utils","formPadre","DialogContent","Stack","Children","map","child","index","defaultValue","margin","indexOf","DialogActions","SaveButton","Object","keys","Button","e","stopPropagation","IconCancel","useSafeSetState","useGridApiContext","useAddRow","AddIcon","addRow","EtrDialogChild","row","useEditRow","EditIcon","editRow","confirmTitle","confirmContent","useDeleteRow","Fragment","ActionDelete","Confirm","isOpen","title","content","onConfirm","deleteRow","createTheme","esES","locationDescriptor","getLinkParams","Tooltip","translatedLabel","IconButton","aria-label","size","linkParams","GridButton","alignIcon","oneOf","element","string","oneOfType","bool","replace","state","true","_scrollToTop","false","defaultIcon","scrollToTop","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","filterValues","displayedFilters","setFilters","useGridApiRef","useKeepGroupedColumnsHidden","pinnedColumns","right","column","headerName","translatedColumns","concat","hideable","getActions","getRowNode","EditGridButton","esEditable","button","handler","GridActionsCellItem","showInMenu","CreateGridButton","split","replaceAll","trim","isValidElement","DatagridRoot","DatagridClasses","hasBulkActionButtons","BulkActionsToolbar","tableWrapper","ThemeProvider","DataGridPremium","finalColumns","rows","loading","hideFooterSelectedRowCount","hideFooter","disableMultipleRowSelection","checkboxSelection","filterMode","onFilterModelChange","rowSelectionModel","onRowSelectionModelChange","isRowSelected","isRowSelectable","pt","primaryText","st","secondaryText","count","SimpleList","linkType","down","useResourceDefinition","onRenderGrilla","onLoadGrilla","useInitGrilla","desktopSize","GrillaSm","GrillaLg","useFormulario","maxHeight","tab","contenido","&.MuiAutocomplete-root","isNaN","getDate","getFullYear","toString","getMonth","MM","slice","dd","etrRequerido","minValue","enableLoad","useNuevo","enabled","initialValues","useInitFicha","ProgressProvider","Create","panel","r","t","f","n","isArray","clsx","arguments","CreateEtriek","func","useDelete","deleteOne","classnames","DeleteButtonNoWarning","defaultProps","sanitizedData","input","React","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","onRenderFicha","onLoadFicha","CardContent","cls","CircularProgress","thickness","onBeforeSubmitFicha","useUtilsSubmit","useSaveContext","valid","dontSave","submit","config","useFormSubmit","SimpleForm","defaultValues","FormContainer","FormEtriek","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","paddingLeft","startsWith","& a","transition","mnuPrueba","setState","menus","menu","SubMenu","SettingsIcon","renderMenu","MenuItemLink","leftIcon","JSON","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","__","alert","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","paddingRight","ImageEye","ShowGridButton","any","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","Toolbar","styled","overridesResolver","styles","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","login","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","file","upload_single","useSelector","configInputs","filter","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","m","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","finalPropsValidate","finalInitValidate","finalDynamicValidate","reduxValidate","reduxValidateError","i","hiddenDinamico","isTC","useChoicesContext","allChoices","RefTooltip","inputRef","arrow","md","AutocompleteInput","TextFieldProps","finalFilter","useContenidoController","reload_cb","rcb","recarga_cb","respaldoFiltro","deleteRecargarComboBox","stringify","ReferenceInput","perPage","SelectInputEtriek","optionText","optionValue","confirmPrimary","primary","confirmWarning","iconPaddingStyle","Draggable","handle","cancel","Paper","cursor","confirmColor","ConfirmIcon","CancelIcon","contentResource","translateOptions","useRecordSelection","handleClick","maxWidth","PaperComponent","style","cursorStyle","dividers","autoFocus","FiltroAsig","object","confirm","elementType","node","isRequired","ActionCheck","AlertError","seleccion","all","none","v","hasCreate","exporter","disableSyncWithLocation","Datagrid","TextField","sortable","fillista","filtroInicial","filtro","setFiltro","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","AsistenteList","TreeWithList","FiltroFuncionarios","boolRecord","RaBooleanField","restProps","FileInput","accept","maxSize","FileField","BooleanInput","SelectInput","mutationMode","useEditController","controllerProps","Edit","defaultTransform","filterBy","claves","sortModel","defColumns","allowAdd","allowRemove","setRows","isLoadingParent","sort","setSort","sortField","sortDir","forEach","comparison","useGetList","pagination","order","headerAlign","disableClickEventBubbling","renderCell","EtrEditButton","unshift","renderHeader","EtrCreateButton","EtrDeleteButton","StyledEngineProvider","injectFirst","disableRowSelectionOnClick","paginationModel","pageSize","onSortModelChange","model","resizable","disableReorder","disableExport","filterable","disableColumnMenu","NoRowsOverlay","CustomNoRowsOverlay","hasShow","hasList","TopToolbar","ListButton","ChevronLeft","ShowButton","src","Avatar","Layout","appBar","Menu","filters","hideFilterButton","jsBotonGrilla","defaultJsBotonGrilla","listContext","showFilter","total","sanitizeListRestProps","cloneElement","CreateButton","ExportButton","utilsGrilla","option","ReferenceArrayInput","SelectArrayInput","nameSource","passwordSource","setLoading","loginButtonText","useLogin","nextPathname","messageArgs","errors","Card","TextInput","PasswordInput","CardActions","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","FieldTitle","fields","campos","separador","secundario","hasSecundario","join","noWrap","principal","etiqueta","campo","RadioButtonGroupInput","gutterBottom","useShowController","Show","allowNone","handleTodos","format","InputProps","endAdornment","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","charAt","toUpperCase","multiline","NumberInput","DateInput","DateTimeInput","asistant","asistantResource","FiltroAsis","BulkActions","marginLeft","xs","ComboBox","dateRegex","test","match","inputFormat","dateTimeRegex","tmpMatch","ruta","nombre","document","createElement","fakeLink","body","appendChild","setAttribute","click","sourceFechaInicio","allValues","inicio","reverse","isAfter","iniDate","finDate","args","menor","idi","locale","enLocale","esLocale","etrSource","ReferenceFieldEtriek","meta","etr","now","setHours","setMinutes","exec","substring","finalProps","clear","api","useGetOne","getFormcodFromResource"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/layout/AppBar.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/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/CreateEtriek.js","../node_modules/clsx/dist/clsx.m.js","../src/layout/DeleteButtonNoWarning.js","../src/layout/EditEtriek.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/utilsForm.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/ListActionEtriek.js","../src/layout/Login.js","../src/layout/MenuButton.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","../src/layout/contenidos/useContenidoController.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/contenidos/ImageField.js","../src/layout/Layout.js","../src/layout/contenidos/ListCheck.js","../src/layout/MultiTextField.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.js","../src/layout/ShowEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/layout/contenidos/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/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 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 useUnselectAll,\n} from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\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 [ajax] = useAjax(resource);\n\n return { ajax, data, notify, redirect, refresh, unselectAll };\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;\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';\n\nexport const FichaContext = createContext({});\nexport const FormEtrGridContext = createContext(undefined);\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';\nimport { memo, useCallback } from 'react';\n\nimport {\n ReferenceFieldView,\n ResourceContextProvider,\n useRecordContext,\n useReference,\n useTranslate,\n} from 'react-admin';\nimport TextField from '../TextField';\nimport { Typography } from '@mui/material';\n\n// TODO: Eliminar al instalar react-admin v4.11\nconst PureReferenceFieldView = memo(ReferenceFieldView);\nconst NonEmptyReferenceField = ({\n children,\n id,\n record,\n reference,\n link,\n queryOptions,\n ...props\n}) => {\n return (\n <ResourceContextProvider value={reference}>\n <PureReferenceFieldView\n reference={reference}\n {...props}\n {...useReference({\n reference,\n id,\n options: queryOptions,\n })}\n resourceLinkPath={false}\n >\n {children}\n </PureReferenceFieldView>\n </ResourceContextProvider>\n );\n};\nconst ReferenceFieldEtriek = props => {\n const { source, emptyText, ...rest } = props;\n const record = useRecordContext(props);\n const id = record[source];\n const translate = useTranslate();\n\n return id == null ? (\n emptyText ? (\n <Typography component=\"span\" variant=\"body2\">\n {emptyText && translate(emptyText, { _: emptyText })}\n </Typography>\n ) : null\n ) : (\n <NonEmptyReferenceField\n {...rest}\n emptyText={emptyText}\n record={record}\n id={id}\n />\n );\n};\n// FIN TODO: Eliminar al instalar react-admin v4.11\n\nexport const renderCellComboBox = (etrSource, source, reference) => params => {\n return (\n <ReferenceFieldEtriek\n reference={reference}\n source={source}\n queryOptions={{ meta: { etr: etrSource } }}\n record={{ [source]: params.row[source] }}\n >\n <TextField source=\"etiqueta\" />\n </ReferenceFieldEtriek>\n );\n};\n\nconst getSubmitValues = values => {\n const restValues = { ...values };\n delete restValues.id;\n\n return restValues;\n};\n\nexport const useAddRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'N';\n\n return useCallback(\n (values, form) => {\n const finalValues = getSubmitValues(values);\n const id = apiRef.current.getRowsCount() + 1;\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n claveFila: '',\n estado,\n })) || []\n : form.getValues()[source] || [];\n\n if (!enviarTodo) {\n inputValues.push({\n ...finalValues,\n claveFila: '',\n estado,\n });\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useEditRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'M';\n\n return useCallback(\n (id, values, form) => {\n const _estado = typeof id === 'number' ? 'N' : estado;\n const finalValues = getSubmitValues(values);\n\n apiRef.current.updateRows([{ ...finalValues, id }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado: _estado,\n })) || []\n : form.getValues()[source] || [];\n\n let currentIndex = inputValues.findIndex(item => item.id === id);\n currentIndex =\n currentIndex === -1 ? inputValues.length : currentIndex;\n\n inputValues[currentIndex] = {\n ...finalValues,\n claveFila: inputValues[currentIndex]?.estado === 'N' ? '' : id,\n estado:\n inputValues[currentIndex]?.estado === 'N' ? 'N' : estado,\n };\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nexport const useDeleteRow = props => {\n const { apiRef, source, enviarTodo } = props;\n const estado = 'B';\n\n return useCallback(\n (id, form) => {\n const fila = apiRef.current.getRowModels().get(id);\n\n apiRef.current.updateRows([{ id, _action: 'delete' }]);\n\n const inputValues = enviarTodo\n ? Array.from(apiRef.current.getRowModels().values(), item => ({\n ...item,\n estado,\n })) || []\n : form.getValues()[source] || [];\n let currentIndex = inputValues.findIndex(\n item => item.claveFila === id\n );\n\n currentIndex =\n currentIndex === -1 ? inputValues.length : currentIndex;\n\n inputValues[currentIndex] = { ...fila, estado, claveFila: id };\n\n if (typeof id === 'number') {\n // Estoy borrando una fila nueva que no viene de la base de datos\n inputValues.splice(currentIndex, 1);\n }\n\n form.setValue(source, inputValues, { shouldDirty: true });\n },\n [apiRef, source]\n );\n};\n\nconst useEtrActions = props => {\n const { [props.source]: propsEtr } = props.useFormulario();\n\n const finalProps = { ...props, enviarTodo: propsEtr.enviarTodo };\n const addRow = useAddRow(finalProps);\n const editRow = useEditRow(finalProps);\n const deleteRow = useDeleteRow(finalProps);\n const clear = form => {\n props.apiRef.current.setRows([]);\n form.setValue(props.source, '');\n };\n\n return {\n addRow,\n editRow,\n deleteRow,\n clear,\n api: props.apiRef,\n };\n};\n\nexport default useEtrActions;\n","import { alpha } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { GridOverlay } from '@mui/x-data-grid';\r\nimport * as React from 'react';\r\n\r\nexport const useStyles = makeStyles(\r\n theme => ({\r\n /*shadow: {\r\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\r\n },*/\r\n root: {\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor:\r\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n },\r\n header: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n rootPaper: {\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: theme.spacing(1),\r\n },\r\n rootOverlay: {\r\n flexDirection: 'column',\r\n '& .ant-empty-img-1': {\r\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\r\n },\r\n '& .ant-empty-img-2': {\r\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\r\n },\r\n '& .ant-empty-img-3': {\r\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\r\n },\r\n '& .ant-empty-img-4': {\r\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\r\n },\r\n '& .ant-empty-img-5': {\r\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\r\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\r\n },\r\n },\r\n label: {\r\n marginTop: theme.spacing(1),\r\n },\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n }),\r\n { name: 'GE' }\r\n);\r\nexport const CustomNoRowsOverlay = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <GridOverlay className={classes.rootOverlay}>\r\n <svg\r\n width=\"120\"\r\n height=\"100\"\r\n viewBox=\"0 0 184 152\"\r\n aria-hidden\r\n focusable=\"false\"\r\n >\r\n <g fill=\"none\" fillRule=\"evenodd\">\r\n <g transform=\"translate(24 31.67)\">\r\n <ellipse\r\n className=\"ant-empty-img-5\"\r\n cx=\"67.797\"\r\n cy=\"106.89\"\r\n rx=\"67.797\"\r\n ry=\"12.668\"\r\n />\r\n <path\r\n className=\"ant-empty-img-1\"\r\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-2\"\r\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\r\n />\r\n </g>\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\r\n />\r\n <g\r\n className=\"ant-empty-img-4\"\r\n transform=\"translate(149.65 15.383)\"\r\n >\r\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\r\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n <div className={classes.label}>No hay registros</div>\r\n </GridOverlay>\r\n );\r\n};\r\n","import AddIcon from '@mui/icons-material/Add';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport ActionDelete from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { alpha, createTheme, Stack, StyledEngineProvider } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Paper from '@mui/material/Paper';\nimport { ThemeProvider } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiContext,\n} from '@mui/x-data-grid-premium';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n SaveButton,\n useGetList,\n useInput,\n useRecordContext,\n useResourceContext,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormContext, useFormState } from 'react-hook-form';\nimport useUtilsFicha from '../../../utils/useUtils';\nimport { FichaContext, FormEtrGridContext } from '../../FichaContext';\nimport { useAddRow, useDeleteRow, useEditRow } from './actions';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor:\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n },\n header: {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.light,\n },\n rootPaper: {\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: theme.spacing(1),\n },\n rootOverlay: {\n flexDirection: 'column',\n '& .ant-empty-img-1': {\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\n },\n },\n label: {\n marginTop: theme.spacing(1),\n },\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n }),\n { name: 'EtrGrid' }\n);\n\nconst dummyRecord = {};\n\nconst EtrChildrenWrapper = props => {\n const form = useFormContext();\n\n return (\n <FormEtrGridContext.Provider value={{ form }}>\n {props.children}\n </FormEtrGridContext.Provider>\n );\n};\n\nconst EtrFormDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText component=\"span\">\n <Form\n mode=\"onBlur\"\n record={dummyRecord}\n resource={props.resource}\n onSubmit={props.onSubmit}\n >\n <EtrChildrenWrapper>{props.children}</EtrChildrenWrapper>\n </Form>\n </DialogContentText>\n </Dialog>\n);\n\nEtrFormDialog.propTypes = {\n label: PropTypes.string,\n onClick: PropTypes.func,\n icon: PropTypes.any,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n labelEstado: PropTypes.string,\n resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDialogChild = props => {\n const {\n form: formPadre,\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n open,\n } = props;\n const { dirtyFields, isValid } = useFormState();\n const {\n fichaProps: { [props.source]: etrActualProps, etrs },\n } = useContext(FichaContext);\n\n const formAsistente = useContext(FormEtrGridContext);\n const { onAfterRenderAsistente } = etrActualProps;\n const utils = useUtilsFicha({ resource, etrs, asisEtr: formAsistente });\n\n useEffect(() => {\n if (open) {\n typeof onAfterRenderAsistente === 'function' &&\n onAfterRenderAsistente({ ...utils, form: formPadre });\n }\n }, [open]);\n\n return (\n <>\n <DialogContent>\n <Stack spacing={4}>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n defaultValue: recordPadre[child.props.source] || '',\n fullWidth: true,\n sx: { margin: 0 },\n disabled:\n estado !== 'N' &&\n camposClaveFila.indexOf(child.props.source) !==\n -1,\n ...etrActualProps[child.props.source],\n /*InputLabelProps: { shrink: true },*/\n })\n )}\n </Stack>\n </DialogContent>\n <DialogActions>\n <SaveButton\n disabled={Object.keys(dirtyFields).length === 0 || !isValid}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n editors,\n record: recordPadre,\n camposClaveFila,\n label,\n source,\n enviarTodo,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const resource = useResourceContext(props);\n const form = useFormContext();\n const apiRef = useGridApiContext();\n const addRow = useAddRow({ apiRef, source, enviarTodo });\n const estado = 'N';\n\n const translate = useTranslate();\n const labelEstado = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n addRow(values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre || {}}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n editors,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n enviarTodo,\n } = props;\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const editRow = useEditRow({ apiRef, source, enviarTodo });\n const estado = 'M';\n\n const labelEstado = translate('ra.action.edit');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = (values, e) => {\n editRow(row.id, values, form);\n setOpen(false);\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrFormDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n source={source}\n form={form}\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n //isLoading={isLoading}\n open={open}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrFormDialog>\n </>\n );\n};\n\nconst EtrDeleteButton = props => {\n const {\n classes: classesOverride,\n confirmTitle = 'ra.message.delete_title', //'ra.action.delete'\n confirmContent = 'ra.message.delete_content',\n row,\n source,\n enviarTodo,\n } = props;\n\n const classes = useStyles(props);\n const [open, setOpen] = useSafeSetState(false);\n const apiRef = useGridApiContext();\n const form = useFormContext();\n const deleteRow = useDeleteRow({ apiRef, source, enviarTodo });\n\n const handleDelete = e => {\n deleteRow(row.id, form);\n };\n\n return (\n <Fragment>\n <Button\n key=\"button\"\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n className={classes.deleteButton}\n >\n <ActionDelete />\n </Button>\n <Confirm\n isOpen={open}\n //loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n />\n </Fragment>\n );\n};\n\nconst theme = createTheme({}, esES);\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n enableLoad = true,\n apiRef,\n ...rest\n } = props;\n const [rows, setRows] = useState([]);\n const recordPadre = useRecordContext(props);\n const { field } = useInput({ defaultValue: '', ...props });\n const classes = useStyles(props);\n const {\n isLoading: isLoadingParent,\n fichaProps: { [rest.source]: etrProps },\n } = useContext(FichaContext);\n\n const { enviarTodo = false } = etrProps;\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n let filter = {};\n if (recordPadre) {\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n }\n\n const { data = [], isLoading } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n {\n enabled: enableLoad && !isLoadingParent,\n onSuccess: () => {\n setRows(data);\n },\n }\n );\n\n const columns = [\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrEditButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n ),\n },\n ];\n\n if (allowAdd) {\n columns.unshift({\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n />\n ),\n });\n }\n\n if (allowRemove) {\n columns.push({\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrDeleteButton\n {...rest}\n enviarTodo={enviarTodo}\n camposClaveFila={claves}\n row={params.row}\n />\n ),\n });\n }\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <Fragment>\n <DataGridPremium\n apiRef={apiRef}\n //autoHeight\n //rowHeight={25}\n loading={isLoading || isLoadingParent}\n className={classes.root}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n rows={rows}\n columns={finalColumns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n sortable={false}\n resizable={false}\n disableReorder\n disableExport\n filterable={false}\n disableColumnMenu\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n <input type=\"hidden\" {...field} />\n </Fragment>\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport { ThemeProvider } from '@mui/material/styles';\nimport {\n DataGridPremium,\n esES,\n useGridApiRef,\n useKeepGroupedColumnsHidden,\n} from '@mui/x-data-grid-premium';\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport { useGetList, useRecordContext } from 'react-admin';\nimport { FichaContext } from '../FichaContext';\nimport { CustomNoRowsOverlay, useStyles } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme({}, esES);\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n enableLoad = true,\n initialState: initialStateProps,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const { isLoading: isLoadingParent } = useContext(FichaContext);\n const recordPadre = useRecordContext();\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const columns = useMemo(\n () => [...defColumns],\n [JSON.stringify(defColumns)]\n );\n\n let filter = {};\n if (recordPadre) {\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n }\n\n const { data = [], isLoading } = useGetList(\n reference,\n {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n },\n { enabled: enableLoad && !isLoadingParent }\n );\n\n const apiRef = useGridApiRef();\n const initialState = useKeepGroupedColumnsHidden({\n apiRef,\n initialState: initialStateProps,\n });\n\n const rows = data;\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGridPremium\n //autoHeight\n //rowHeight={25}\n apiRef={apiRef}\n rows={rows}\n columns={columns}\n loading={isLoading || isLoadingParent}\n className={classes.root}\n disableRowSelectionOnClick\n paginationModel={{ page: 1, pageSize: 50 }}\n hideFooter\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n initialState={initialState}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\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 { Box, createTheme, ThemeProvider, useMediaQuery } from '@mui/material';\nimport { GridActionsCellItem } from '@mui/x-data-grid';\nimport {\n DataGridPremium,\n esES,\n useGridApiRef,\n useKeepGroupedColumnsHidden,\n} from '@mui/x-data-grid-premium';\nimport * as React from 'react';\nimport { isValidElement } from 'react';\nimport {\n BulkActionsToolbar,\n DatagridClasses,\n DatagridRoot,\n SimpleList,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n useTranslate,\n} from 'react-admin';\nimport useInitGrilla from '../utils/useInitGrilla';\nimport { useUtilsGrilla } from '../utils/useUtils';\nimport CreateGridButton from './CreateGridButton';\nimport EditGridButton from './EditGridButton';\n\nconst esEditable = (record, isRowEditable) =>\n isRowEditable === undefined ||\n (typeof isRowEditable === 'function' && isRowEditable(record));\n\nconst theme = createTheme({}, esES);\n\nconst operatorParamsToModel = new Map([\n // boolean operators\n ['is', 'is'],\n ['not', 'not'],\n // date operators\n ['after', 'after'],\n ['onOrAfter', 'onOrAfter'],\n ['before', 'before'],\n ['onOrBefore', 'onOrBefore'],\n // numeric operators\n ['eq', '='],\n ['neq', '!='],\n ['gt', '>'],\n ['gte', '>='],\n ['lt', '<'],\n ['lte', '<='],\n // string operators\n ['contains', 'contains'],\n ['equals', 'equals'], // default operator\n ['sw', 'startsWith'],\n ['ew', 'endsWith'],\n ['isEmpty', 'isEmpty'],\n ['isNotEmpty', 'isNotEmpty'],\n ['isAnyOf', 'isAnyOf'],\n]);\n\nconst operatorModelToParams = new Map(\n Array.from(operatorParamsToModel, entry => [entry[1], entry[0]])\n);\n\nconst defaultConvertFilterModelToFilterValues = filterModel =>\n filterModel.items.reduce((acc, item) => {\n if (typeof item.field !== 'undefined' && item.operator) {\n if (operatorModelToParams.has(item.operator)) {\n acc[\n `${item.field}_${operatorModelToParams.get(item.operator)}`\n ] = item.value;\n } else {\n acc[item.field] = item.value;\n }\n }\n return acc;\n }, {});\n\nconst GrillaLg = props => {\n const {\n actionButtons = [],\n bulkActionButtons,\n sx,\n columns,\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n desktopSize = false,\n onRenderGrilla,\n onLoadGrilla,\n hasEdit,\n initialState: initialStateProps,\n convertFilterModelToFilterValues = defaultConvertFilterModelToFilterValues,\n claveNuevo,\n ...rest\n } = props;\n\n const utils = useUtilsGrilla(props);\n const translate = useTranslate();\n const resource = useResourceContext(props);\n const {\n data = [],\n isLoading,\n selectedIds,\n onSelect,\n filterValues,\n displayedFilters,\n setFilters,\n } = useListContext();\n\n const apiRef = useGridApiRef();\n const initialState = useKeepGroupedColumnsHidden({\n apiRef,\n initialState: {\n ...initialStateProps,\n pinnedColumns: { right: ['actions'] },\n },\n });\n\n const translatedColumns = columns.map((column, index) => ({\n ...column,\n headerName:\n column.headerName !== ''\n ? translate(`resources.${resource}.fields.${column.field}`, {\n _: column.headerName,\n })\n : column.headerName,\n }));\n\n const finalColumns =\n actionButtons.length > 0 || hasEdit\n ? translatedColumns.concat([\n {\n field: 'actions',\n type: 'actions',\n width: 100,\n hideable: false,\n getActions: params => {\n const fila = apiRef.current.getRowNode(params.id);\n\n return params.row.id\n ? [\n hasEdit ? (\n <EditGridButton\n record={params.row}\n disabled={\n !esEditable(\n params.row,\n isRowEditable\n )\n }\n />\n ) : null,\n ...actionButtons.map(button => {\n const { handler, ...rest } = button;\n return (\n <GridActionsCellItem\n showInMenu\n onClick={e =>\n typeof handler ===\n 'function'\n ? handler(\n utils,\n rest.key\n )\n : false\n }\n {...rest}\n />\n );\n }),\n ]\n : fila.children[0].indexOf(`${claveNuevo}=`) !==\n -1\n ? [\n <CreateGridButton\n record={\n claveNuevo\n ? {\n [claveNuevo]:\n fila.children[0]\n .split(\n `${claveNuevo}=`\n )[1]\n .replaceAll(\n '[',\n ''\n )\n .trim()\n .split('AND')[0]\n .trim(),\n }\n : undefined\n }\n />,\n ]\n : [];\n },\n },\n ])\n : translatedColumns;\n\n const handleSelectionChange = rowSelectionModel => {\n if (!isLoading) {\n // Deselección sin checkboxes\n if (apiRef.current.isRowSelected(rowSelectionModel[0])) {\n onSelect([]);\n } else {\n onSelect(rowSelectionModel);\n }\n }\n };\n\n const handleFilterChange = params => {\n setFilters(\n { ...filterValues, ...convertFilterModelToFilterValues(params) },\n displayedFilters\n );\n };\n\n const hasBulkActionButtons = isValidElement(bulkActionButtons);\n\n return (\n <DatagridRoot sx={sx} className={DatagridClasses.root}>\n {hasBulkActionButtons ? (\n <BulkActionsToolbar selectedIds={selectedIds}>\n {bulkActionButtons}\n </BulkActionsToolbar>\n ) : null}\n <Box\n sx={{ height: '70vh', width: '100%' }}\n className={DatagridClasses.tableWrapper}\n >\n <ThemeProvider theme={theme}>\n <DataGridPremium\n columns={finalColumns}\n rows={data}\n apiRef={apiRef}\n loading={isLoading}\n /*groupingColDef={params => {\n const override = {};\n\n if (params.fields.includes('nombrecompleto')) {\n return {\n headerName: 'Funcionario',\n valueFormatter: valueFormatterParams => {\n const rowNode =\n apiRef.current.getRowNode(\n valueFormatterParams.id\n );\n console.log(rowNode);\n\n return `By ${\n rowNode.groupingKey ?? ''\n }`;\n },\n };\n }\n\n return override;\n }}*/\n //disableSelectionOnClick\n hideFooterSelectedRowCount\n hideFooter\n disableMultipleRowSelection\n checkboxSelection={hasBulkActionButtons}\n filterMode=\"server\"\n //filterModel={filterModel}\n onFilterModelChange={handleFilterChange}\n rowSelectionModel={selectedIds}\n onRowSelectionModelChange={handleSelectionChange}\n isRowSelectable={params => params.row.id}\n initialState={initialState}\n //components={{ Toolbar: GridToolbar }}\n //experimentalFeatures={{ newEditingApi: true }}\n {...rest}\n />\n </ThemeProvider>\n </Box>\n </DatagridRoot>\n );\n};\n\nconst GrillaSm = props => {\n const {\n sx,\n columns,\n hasEdit,\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n } = props;\n\n const count = columns.length;\n let primaryText = pt;\n let secondaryText = st;\n\n if (!pt) {\n if (count >= 4) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[0].field]}`;\n } else if (count >= 3) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[1].field]}`;\n } else if (count >= 2) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[1].field]}`;\n } else if (count === 1) {\n primaryText = record => record[columns[0].field];\n }\n }\n\n if (!st) {\n if (count >= 4) {\n secondaryText = record =>\n `${record[columns[2].field]} - ${record[columns[3].field]}`;\n } else if (count >= 3) {\n secondaryText = record => record[columns[2].field];\n } else if (count >= 2) {\n primaryText = record =>\n `${record[columns[0].field]} - ${record[columns[1].field]}`;\n } else if (count === 1) {\n primaryText = record => record[columns[0].field];\n }\n }\n\n return (\n <SimpleList\n linkType={record =>\n hasEdit && esEditable(record, isRowEditable) ? 'edit' : false\n }\n primaryText={primaryText}\n secondaryText={secondaryText}\n sx={sx}\n />\n );\n};\n\nconst GrillaEtriek = props => {\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\n const { hasEdit } = useResourceDefinition(props);\n useInitGrilla(props);\n const { desktopSize = false } = props;\n\n return isSmall && desktopSize === false ? (\n <GrillaSm {...props} hasEdit={hasEdit} />\n ) : (\n <GrillaLg {...props} hasEdit={hasEdit} />\n );\n};\n\nexport default GrillaEtriek;\n","import { useEffect } from 'react';\r\nimport { useListContext } from 'react-admin';\r\nimport { useUtilsGrilla } from './useUtils';\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const { isLoading } = useListContext();\r\n const utils = useUtilsGrilla(props);\r\n\r\n useEffect(() => {\r\n onRenderGrilla && onRenderGrilla(utils);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n onLoadGrilla && onLoadGrilla(utils);\r\n }\r\n }, [isLoading]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from './useUtils';\n\nconst useInitFicha = props => {\n const { useFormulario = useDefaultHook, ...rest } = props;\n const fichaProps = useFormulario(rest);\n\n return { fichaProps: { ...fichaProps, etrs: rest.etrs } };\n};\n\nexport default useInitFicha;\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';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\nimport { isAfter } from 'date-fns';\nimport enLocale from 'date-fns/locale/en-US';\nimport esLocale from 'date-fns/locale/es';\nimport * as React from 'react';\nimport {\n ListButton,\n minValue,\n required,\n ShowButton,\n TopToolbar,\n} from 'react-admin';\n\nexport const getFormcodFromResource = resource => resource.split('_')[1];\n\nexport const useStylesContenidos = makeStyles(theme => ({\n form: {\n maxHeight: '70vh',\n overflow: 'auto',\n },\n tab: {\n display: 'block',\n maxHeight: '65vh',\n overflow: 'auto',\n },\n contenido: {\n [theme.breakpoints.up('xs')]: {\n width: '100%', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n },\n [theme.breakpoints.up('md')]: {\n width: '12vw', //1vw = 1% del ancho del viewport, Inputs Default = 20vw\n '&.MuiAutocomplete-root': {\n width: '16vw',\n },\n },\n },\n}));\n\n//parse(): input -> record\n//format(): record -> input\n\nconst dateRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\n\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) return '';\n const pad = '00';\n const yyyy = value.getFullYear().toString();\n const MM = (value.getMonth() + 1).toString();\n const dd = value.getDate().toString();\n return `${yyyy}-${(pad + MM).slice(-2)}-${(pad + dd).slice(-2)}`;\n};\n\nexport const dateFormat = value => {\n // null, undefined and empty string values should not go through dateFormatter\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateRegex.test(value)) {\n const match = value.split('/');\n return match[2] + '-' + match[1] + '-' + match[0];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n const match = value.split('-');\n return match[2] + '/' + match[1] + '/' + match[0];\n};\n\nconst dateTimeRegex = /^\\d{2}\\/\\d{2}\\/\\d{4}\\s\\d{2}:\\d{2}$/;\n\nexport const dateTimeFormat = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n const tmpMatch = value.split(' ');\n const match = tmpMatch[0].split('/');\n\n return match[2] + '-' + match[1] + '-' + match[0] + ' ' + tmpMatch[1];\n }\n\n return convertDateToString(new Date(value));\n};\n\nexport const dateTimeParser = value => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n const tmpMatch = value.split('T');\n const match = tmpMatch[0].split('-');\n\n return match[2] + '/' + match[1] + '/' + match[0] + ' ' + tmpMatch[1];\n};\n\nexport const timeFormat = value => {\n // v is a `Date` object\n if (!value) {\n return '';\n }\n\n if (value instanceof Date) {\n // v is a `Date` object\n return value.toString();\n } else if (value.indexOf(':') !== -1) {\n const match = value.split(':');\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n } else {\n // v is a string of \"YYYY-MM-DD\" format\n const match = /(\\d{2}):(\\d{2})/.exec(value);\n if (match === null) {\n return;\n }\n let now = new Date();\n now.setHours(match[0]);\n now.setMinutes(match[1]);\n return now.toString();\n }\n};\n\nexport const timeParser = (value, source) => {\n // v is a string of \"YYYY-MM-DD\" format\n if (!value) {\n return '';\n }\n\n return value.split(' ')[4].substring(0, 5);\n};\n\nconst sanitizeRestProps = ({\n className,\n record,\n hasEdit,\n hasShow,\n hasList,\n resource,\n totalPages,\n showFilter,\n setSort,\n setPerPage,\n perPage,\n defaultTitle,\n setPage,\n setFilters,\n selectedIds,\n onUnselectItems,\n onToggleItem,\n isLoading,\n exporter,\n hideFilter,\n hasCreate,\n filterValues,\n displayedFilters,\n sort,\n ...rest\n}) => rest;\n\nexport const Separador = props => (\n <Typography variant=\"h6\" gutterBottom>\n {props.children}\n </Typography>\n);\n\nexport const FichaActions = ({\n children,\n className,\n data,\n hasShow,\n hasList = true,\n ...rest\n}) => (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {children}\n {hasList && (\n <ListButton label=\"ra.action.back\" icon={<ChevronLeft />} />\n )}\n {hasShow && <ShowButton record={data} />}\n </TopToolbar>\n);\n\nexport const etrRequerido = required();\nexport const etrRequeridoNumerico = [etrRequerido, minValue(1)];\nexport const dateFormatOptions = { inputFormat: 'dd/MM/yyyy' };\nexport const etrFechaMayorQue = sourceFechaInicio => (value, allValues) => {\n const inicio = allValues[sourceFechaInicio];\n\n if (value && inicio) {\n const iniDate = new Date(inicio.split('/').reverse().join('/'));\n const finDate = new Date(value.split('/').reverse().join('/'));\n\n if (isAfter(iniDate, finDate)) {\n return {\n message: 'validation.greater_or_equal',\n args: { menor: inicio },\n };\n }\n }\n\n return undefined;\n};\n\nexport const localeOptions = (idi = 'es') => ({\n locale: idi === 'en' ? enLocale : esLocale,\n});\nexport const choicesEstado = [\n { id: '1', name: 'Aprobado' },\n { id: '2', name: 'Rechazado' },\n { id: '3', name: 'Pendiente' },\n];\nexport const descargarLink = (ruta, nombre) => {\n const fakeLink = document.createElement('a');\n fakeLink.style.display = 'none';\n document.body.appendChild(fakeLink);\n fakeLink.setAttribute('href', ruta);\n fakeLink.setAttribute('download', nombre);\n fakeLink.click();\n};\n","import PropTypes from 'prop-types';\r\nimport * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Create, useResourceContext } from 'react-admin';\r\nimport { useInitFicha, useNuevo } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nconst CreateEtriek = props => {\r\n const {\r\n useFormulario = useDefaultHook,\r\n enableLoad = true,\r\n ...rest\r\n } = props;\r\n const resource = useResourceContext(props);\r\n\r\n const { data: initialValues, isLoading } = useNuevo(resource, {\r\n enabled: enableLoad,\r\n });\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'N', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Create 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\nexport { CreateEtriek };\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ActionDelete from '@mui/icons-material/Delete';\r\nimport IconButton from '@mui/material/IconButton';\r\nimport { alpha } from '@mui/material/styles';\r\nimport Tooltip from '@mui/material/Tooltip';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames 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\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n}));\r\n\r\nconst DeleteButtonNoWarning = props => {\r\n const classes = useStyles(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={classnames(\r\n 'ra-delete-button',\r\n classes.deleteButton,\r\n className\r\n )}\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 * as React from 'react';\nimport { useMemo } from 'react';\nimport { Edit, useEditController } from 'react-admin';\nimport { useInitFicha } from '../utils';\nimport { useDefaultHook } from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\nimport { ProgressProvider } from './ProgressContext';\n\n// https://marmelab.com/react-admin/Edit.html#transform\n// Al guardar un formulario, react-admin transforma valores vacíos en null, salvo que ya vinieran vacíos\n// Este transform por defecto evita que se envíen valores null\nconst defaultTransform = data => {\n const sanitizedData = {};\n for (const key in data) {\n if (typeof data[key] === 'string' && data[key].trim().length === 0)\n continue;\n\n if (data[key] == null) {\n data[key] = '';\n }\n sanitizedData[key] = data[key];\n }\n\n return sanitizedData;\n};\n\nexport const EditEtriek = props => {\n const {\n useFormulario = useDefaultHook,\n mutationMode = 'pessimistic',\n ...rest\n } = props;\n const controllerProps = useEditController({ mutationMode, ...rest });\n const { record: initialValues, isLoading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\n [initialValues, isLoading, fichaProps]\n );\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Edit\n mutationMode={mutationMode}\n transform={defaultTransform}\n {...rest}\n {...fichaProps?.panel}\n />\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import 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 DialogContentText from '@mui/material/DialogContentText';\r\nimport DialogTitle from '@mui/material/DialogTitle';\r\nimport { makeStyles } from '@mui/styles';\r\nimport * as React from 'react';\r\n\r\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n button: {\r\n margin: theme.spacing(1),\r\n },\r\n input: {\r\n display: 'none',\r\n },\r\n}));\r\n\r\nconst FormDialog = React.forwardRef((props, ref) => {\r\n const {\r\n isOpen,\r\n onConfirm,\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 const classes = useStyles(props);\r\n\r\n const handleConfirm = e => {\r\n onConfirm && onConfirm(e);\r\n };\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 <DialogContent>\r\n <DialogContentText>{dialogText}</DialogContentText>\r\n {children}\r\n </DialogContent>\r\n {(hasAccept || hasCancel) && (\r\n <DialogActions>\r\n {hasCancel && (\r\n <Button\r\n onClick={handleClose}\r\n variant=\"contained\"\r\n color=\"secondary\"\r\n className={classes.button}\r\n disabled={isLoading}\r\n >\r\n Cancelar\r\n </Button>\r\n )}\r\n {hasAccept && (\r\n <Button\r\n onClick={handleConfirm}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.button}\r\n disabled={isLoading}\r\n >\r\n Ok\r\n </Button>\r\n )}\r\n </DialogActions>\r\n )}\r\n </Dialog>\r\n );\r\n});\r\n\r\nexport default FormDialog;\r\n","import { CardContent, CircularProgress } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\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\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n block: {\r\n pointerEvents: 'none',\r\n backgroundColor: '#ffffff',\r\n opacity: 0.6,\r\n position: 'relative',\r\n },\r\n progress: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n },\r\n}));\r\n\r\nconst FormContainer = props => {\r\n const cls = useStyles(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 return (\r\n <CardContent className={context.open ? cls.block : ''} sx={props.sx}>\r\n {context.open && (\r\n <CircularProgress\r\n className={cls.progress}\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';\nimport { useCallback, useContext } from 'react';\nimport { Toolbar, useNotify, useSaveContext } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\n\nconst ToolbarFicha = props => {\n const { record, ...rest } = props;\n return <Toolbar {...rest} record={false} />;\n};\n\nconst dontSave = () => {};\n\nconst useFormSubmit = props => {\n const {\n fichaProps: { onBeforeSubmitFicha },\n } = useContext(FichaContext);\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const submit = useCallback(\n values => {\n const valid =\n onBeforeSubmitFicha &&\n onBeforeSubmitFicha(\n { form: { getValues: () => values }, ...utils },\n 'N'\n );\n if (typeof valid === 'string') {\n notify(valid, { type: 'error' });\n return dontSave();\n } else {\n return valid === undefined || valid ? save(values) : dontSave();\n }\n },\n [onBeforeSubmitFicha, notify, dontSave, save]\n );\n\n return typeof onBeforeSubmitFicha === 'function' ? submit : undefined;\n};\n\nexport { ToolbarFicha, useFormSubmit };\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { useFormSubmit } from './utilsForm';\n\nconst FormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <SimpleForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n />\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes,\n};\n\nexport { FormEtriek };\n","import ExpandMore from '@mui/icons-material/ExpandMore';\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:\r\n props.children.props.children[0].key.startsWith(\r\n 'menu'\r\n )\r\n ? 4\r\n : 0,\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';\nimport { Children, cloneElement, useMemo } from 'react';\nimport {\n CreateButton,\n ExportButton,\n sanitizeListRestProps,\n TopToolbar,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n} from 'react-admin';\nimport { useUtilsGrilla } from '../utils';\n\nconst defaultJsBotonGrilla = (_, __) => {\n alert('Falta implementar la función jsBotonGrilla');\n};\n\nconst ListActionsEtriek = props => {\n const {\n className,\n exporter,\n filters,\n children,\n hideFilterButton = false,\n jsBotonGrilla = defaultJsBotonGrilla,\n ...rest\n } = props;\n const utils = useUtilsGrilla(props);\n const listContext = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n\n const {\n sort,\n displayedFilters,\n filterValues,\n selectedIds,\n showFilter,\n total,\n } = listContext;\n\n const utilsGrilla = { ...utils, ...listContext };\n delete rest.hasCreate;\n\n return useMemo(\n () => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n !hideFilterButton &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n {hasCreate && <CreateButton />}\n {exporter !== false && (\n <ExportButton\n disabled={total === 0}\n resource={resource}\n sort={sort}\n filterValues={filterValues}\n />\n )}\n {Children.map(children, (child, index) =>\n cloneElement(child, {\n onClick: !child.props.options\n ? e => {\n if (child.props.onClick) {\n child.props.onClick(e);\n }\n jsBotonGrilla(utilsGrilla, child.key);\n }\n : null,\n options: child.props.options\n ? child.props.options.map(option => ({\n ...option,\n onClick: e => {\n if (child.props.onClick) {\n child.props.onClick(e);\n }\n jsBotonGrilla(utilsGrilla, option.key);\n },\n }))\n : null,\n })\n )}\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\n );\n};\n\nexport default ListActionsEtriek;\n","import LockIcon from '@mui/icons-material/Lock';\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 { makeStyles } from '@mui/styles';\r\nimport * as React from 'react';\r\nimport { useState } from 'react';\r\nimport {\r\n Form,\r\n TextInput,\r\n PasswordInput,\r\n useLogin,\r\n useNotify,\r\n useTranslate,\r\n} from 'react-admin';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles(theme => ({\r\n main: {\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 }) => loginBackgroundImage,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n },\r\n card: {\r\n minWidth: 300,\r\n marginTop: '6em',\r\n },\r\n avatar: {\r\n margin: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n avatarIcon: {\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n icon: ({ textLength }) => ({\r\n position: 'absolute',\r\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1),\r\n }),\r\n hint: {\r\n marginTop: '1em',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n color: theme.palette.grey[500],\r\n },\r\n form: {\r\n padding: '0 1em 1em 1em',\r\n },\r\n input: {\r\n marginTop: '1em',\r\n },\r\n actions: {\r\n padding: '0 1em 1em 1em',\r\n },\r\n}));\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 classes = useStyles({\r\n loginBackgroundImage,\r\n textLength: loginButtonText.length,\r\n });\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 <div className={classes.main}>\r\n <Card className={classes.card}>\r\n <div className={classes.avatar}>\r\n <Avatar className={classes.avatarIcon}>\r\n <LockIcon />\r\n </Avatar>\r\n </div>\r\n <div className={classes.hint}>Inicio de Sesión</div>\r\n <div className={classes.form}>\r\n <div className={classes.input}>\r\n <TextInput\r\n autoFocus\r\n name={nameSource}\r\n label={translate('ra.auth.username')}\r\n disabled={loading}\r\n />\r\n </div>\r\n <div className={classes.input}>\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 </div>\r\n </div>\r\n <CardActions className={classes.actions}>\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 className={classes.icon}\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 </div>\r\n </Form>\r\n );\r\n};\r\n\r\nexport default Login;\r\n","import Menu from '@mui/material/Menu';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\r\nimport * as React from 'react';\r\nimport { useRef, useState } from 'react';\r\nimport { Button, FieldTitle, useResourceContext } from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({\r\n displayedFilters,\r\n filterValues,\r\n showFilter,\r\n ...rest\r\n}) => rest;\r\n\r\n// TODO: Pasar useStyles a propiedad SX\r\nconst useStyles = makeStyles({\r\n root: { display: 'inline-block' },\r\n paddingRight: { paddingRight: 4 },\r\n});\r\n\r\nconst MenuButton = props => {\r\n const {\r\n className,\r\n options = [],\r\n icon: Icon,\r\n label,\r\n disabled,\r\n ...rest\r\n } = props;\r\n const [open, setOpen] = useState(false);\r\n const anchorEl = useRef();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const classes = useStyles(props);\r\n const resource = useResourceContext(props);\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setOpen(false);\r\n return true;\r\n };\r\n\r\n const handleToggle = e => {\r\n // This prevents ghost click.\r\n e.preventDefault();\r\n setOpen(true);\r\n anchorEl.current = e.currentTarget;\r\n };\r\n\r\n const handleClose = event => {\r\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n className={classnames(classes.root, className)}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n <Button\r\n 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 <span className={classes.paddingRight}></span>\r\n <FieldTitle label={option.label} resource={resource} />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MenuButton;\r\n","import 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';\nimport { styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n isValidElement,\n useContext,\n useState,\n} from 'react';\nimport {\n Form,\n FormTab,\n getTabbedFormTabFullPath,\n TabbedFormTabs,\n Toolbar,\n useResourceContext,\n} from 'react-admin';\nimport {\n matchPath,\n Route,\n Routes,\n useLocation,\n useResolvedPath,\n} from 'react-router-dom';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\n\nconst useFormRootPath = () => {\n const location = useLocation();\n const createMatch = matchPath(':resource/create/*', location.pathname);\n const editMatch = matchPath(':resource/:id/*', location.pathname);\n\n if (createMatch) {\n return createMatch.pathnameBase;\n }\n\n if (editMatch) {\n return editMatch.pathnameBase;\n }\n\n return '';\n};\n\nexport const TabbedFormView = props => {\n const {\n children,\n className,\n component: Component = DefaultComponent,\n formRootPathname,\n syncWithLocation = true,\n tabs = DefaultTabs,\n toolbar = DefaultToolbar,\n onChange,\n ...rest\n } = props;\n const location = useLocation();\n const resolvedPath = useResolvedPath('');\n const resource = useResourceContext(props);\n const [tabValue, setTabValue] = useState(0);\n const {\n fichaProps: { etrs },\n } = useContext(FichaContext);\n const utils = useUtilsFicha({ ...props, etrs });\n const { estado } = useContext(FichaContext);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n if (onChange) {\n onChange(\n utils,\n estado,\n {\n newTab: value,\n prevTab: tabValue,\n setTab: setTabValue,\n },\n event\n );\n }\n }\n };\n\n const renderTabHeaders = () =>\n cloneElement(\n tabs,\n {\n onChange: handleTabChange,\n syncWithLocation,\n url: formRootPathname,\n value: tabValue,\n },\n children\n );\n\n return (\n <Root\n className={clsx('tabbed-form', className)}\n {...sanitizeRestPropsView(rest)}\n >\n {syncWithLocation ? (\n <Routes>\n <Route path=\"/*\" element={renderTabHeaders()} />\n </Routes>\n ) : (\n renderTabHeaders()\n )}\n <Divider />\n <Component>\n {/* All tabs are rendered (not only the one in focus), to allow validation\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\n use to hide the tab using CSS if it's not the one in focus.\n See https://github.com/marmelab/react-admin/issues/1866 */}\n {Children.map(children, (tab, index) => {\n if (!tab) {\n return null;\n }\n const tabPath = getTabbedFormTabFullPath(tab, index);\n const hidden = syncWithLocation\n ? !matchPath(\n `${resolvedPath.pathname}/${tabPath}`,\n location.pathname\n )\n : tabValue !== index;\n\n return isValidElement(tab)\n ? React.cloneElement(tab, {\n intent: 'content',\n resource,\n hidden,\n value: syncWithLocation ? tabPath : index,\n })\n : null;\n })}\n </Component>\n {toolbar !== false ? toolbar : null}\n </Root>\n );\n};\n\nconst DefaultTabs = <TabbedFormTabs />;\nconst DefaultComponent = ({ children }) => (\n <CardContent>{children}</CardContent>\n);\nconst DefaultToolbar = <Toolbar />;\n\nconst PREFIX = 'RaTabbedForm';\n\nexport const TabbedFormClasses = {\n errorTabButton: `${PREFIX}-errorTabButton`,\n};\n\nconst Root = styled('div', {\n name: PREFIX,\n overridesResolver: (props, styles) => styles.root,\n})(({ theme }) => ({\n [`& .MuiTab-root.${TabbedFormClasses.errorTabButton}`]: {\n color: theme.palette.error.main,\n },\n}));\n\nconst sanitizeRestPropsView = ({ record, resource, ...rest }) => rest;\n\nexport const TabbedForm = props => {\n const { onChange, ...formProps } = props;\n const formRootPathname = useFormRootPath();\n\n return (\n <Form formRootPathname={formRootPathname} {...formProps}>\n <TabbedFormView\n formRootPathname={formRootPathname}\n {...sanitizeRestProps(props)}\n />\n </Form>\n );\n};\n\nTabbedForm.Tab = FormTab;\n\nconst sanitizeRestProps = ({\n criteriaMode,\n defaultValues,\n delayError,\n formRootPathname,\n mode,\n noValidate,\n onSubmit,\n record,\n resolver,\n reValidateMode,\n sanitizeEmptyValues,\n shouldFocusError,\n shouldUnregister,\n shouldUseNativeValidation,\n validate,\n warnWhenUnsavedChanges,\n ...rest\n}) => rest;\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\nimport { TabbedForm } from './TabbedForm';\nimport { useFormSubmit } from './utilsForm';\n\nexport const TabbedFormEtriek = props => {\n const {\n initialValues,\n fichaProps: { config = {} },\n } = useContext(FichaContext);\n const submit = useFormSubmit(props);\n\n if (!initialValues) return null;\n\n return (\n <TabbedForm\n mode=\"onBlur\"\n {...props}\n onSubmit={submit}\n defaultValues={initialValues}\n component={FormContainer}\n {...config}\n /*toolbar={<ToolbarFicha/>}*/\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n syncWithLocation: false,\n};\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 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\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n login: {\r\n id: 'Cédula',\r\n hint: 'Inicio de Sesión',\r\n required: 'Ingrese Usuario o Cédula',\r\n email: 'Ingrese su email aquí',\r\n send: 'Enviar',\r\n check_email:\r\n 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\r\n must_enter_credentials:\r\n 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\r\n restore_password: 'Restablecer Contraseña',\r\n punch_in: 'Generar Marcas',\r\n },\r\n pos: {\r\n search: 'Búsqueda',\r\n change_pin: 'Cambiar Pin',\r\n change_password: 'Cambiar Contraseña',\r\n configuration: 'Configuración',\r\n language: 'Lenguaje',\r\n theme: {\r\n name: 'Tema Visual',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Bienvenid@',\r\n subtitle: 'Gestión de Funcionarios',\r\n aor_button: 'Sitio de Metiri',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Debe ser mayor o igual a %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default esMessages;\r\n","import { useContext, 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: { m: 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 { 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: { md: 'inline-flex' },\r\n margin: 1,\r\n ...sx,\r\n }\r\n }\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 { alpha } from '@mui/material/styles';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\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\nconst 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 iconPaddingStyle: {\r\n paddingRight: '0.5em',\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 confirmColor,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n contentResource,\r\n translateOptions = {},\r\n } = props;\r\n const classes = useStyles(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 className={classes.iconPaddingStyle} />\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 className={classes.iconPaddingStyle} />\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 { alpha } from '@mui/material/styles';\r\nimport { makeStyles } from '@mui/styles';\r\nimport classnames from 'clsx';\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\nconst 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 iconPaddingStyle: {\r\n paddingRight: '0.5em',\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 confirmColor,\r\n ConfirmIcon,\r\n CancelIcon,\r\n onClose,\r\n onConfirm,\r\n translateOptions = {},\r\n } = props;\r\n const classes = useStyles(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 className={classes.iconPaddingStyle} />\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 className={classes.iconPaddingStyle} />\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 (!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 { FileInput, FileField, useRecordContext } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst Camino = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const { options = {}, disabled = false, ...restProps } = propsContenido;\r\n\r\n /* FileField recibe el valor como record, le paso el del contexto */\r\n const record = useRecordContext();\r\n\r\n return (\r\n !hidden && (\r\n <FileInput\r\n accept=\"\"\r\n maxSize={5000000}\r\n {...restProps}\r\n options={{ disabled, ...options }}\r\n >\r\n <FileField\r\n source={propsContenido.source}\r\n title=\"Ver\"\r\n record={record}\r\n />\r\n </FileInput>\r\n )\r\n );\r\n};\r\n\r\nexport default Camino;\r\n","import * as React from 'react';\r\nimport { BooleanInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst CheckBox = props => {\r\n const {\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 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 * as React from 'react';\r\nimport { useMemo } from 'react';\r\nimport { Show, useShowController } from 'react-admin';\r\nimport { useInitFicha } from '../utils';\r\nimport { useDefaultHook } from '../utils/useUtils';\r\nimport { FichaContext } from './FichaContext';\r\nimport { ProgressProvider } from './ProgressContext';\r\n\r\nexport const ShowEtriek = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const controllerProps = useShowController(rest);\r\n const { record: initialValues, isLoading } = controllerProps;\r\n const { fichaProps } = useInitFicha(props);\r\n const context = useMemo(\r\n () => ({ estado: 'M', initialValues, isLoading, fichaProps }),\r\n [initialValues, isLoading, fichaProps]\r\n );\r\n\r\n return (\r\n <ProgressProvider>\r\n <FichaContext.Provider value={context}>\r\n <Show {...rest} {...controllerProps} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n","import Divider from '@mui/material/Divider';\r\nimport Tab from '@mui/material/Tab';\r\nimport Tabs from '@mui/material/Tabs';\r\nimport * as React from 'react';\r\nimport { Fragment } from 'react';\r\nimport GrillaEtriek from './GrillaEtriek';\r\n\r\nconst TabbedGrillaEtriek = props => {\r\n const {\r\n filterValues,\r\n setFilters,\r\n tabs: { ids, ...tabs },\r\n GridComponent = GrillaEtriek,\r\n ...rest\r\n } = props;\r\n const tabActual = filterValues.id;\r\n\r\n const handleChange = (event, value) => {\r\n setFilters({ ...filterValues, id: value });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Tabs\r\n value={tabActual}\r\n indicatorColor=\"primary\"\r\n onChange={handleChange}\r\n >\r\n {ids.map(id => (\r\n <Tab\r\n key={id}\r\n label={id.charAt(0).toUpperCase() + id.slice(1)}\r\n value={id}\r\n />\r\n ))}\r\n </Tabs>\r\n <Divider />\r\n <GridComponent {...rest} {...tabs[tabActual]} />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default TabbedGrillaEtriek;\r\n","import * as React from 'react';\r\nimport { TextInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst TextArea = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <TextInput multiline {...propsContenido} />;\r\n};\r\n\r\nexport default TextArea;\r\n","import * as React from 'react';\r\nimport { useEffect } from 'react';\r\nimport { 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';\nimport * as React from 'react';\nimport { TextInput } from 'react-admin';\nimport ComboBox from './ComboBox';\nimport useContenidoController from './useContenidoController';\n\nconst TextCombo = props => {\n const { source, label, sx } = props;\n const { hidden } = useContenidoController(props);\n\n return !hidden ? (\n <Box\n sx={{\n ...sx,\n display: 'inline-flex',\n alignItems: 'flex-start',\n marginLeft: 1,\n marginBottom: -1,\n width: { xs: '100%', md: 'calc(24vw + 1em)' },\n }}\n >\n <TextInput\n {...props}\n label=\"\"\n source={source}\n sx={{ flex: 1, marginTop: 1 }}\n />\n <ComboBox\n {...props}\n source={source}\n label={label}\n isTC\n sx={{ flex: 3 }}\n />\n </Box>\n ) : null;\n};\nexport default TextCombo;\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","useMemo","show","hide","ProgressContext","Provider","value","context","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","ajax","useAjax","data","notify","redirect","refresh","unselectAll","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","memo","ReferenceFieldView","reference","queryOptions","ResourceContextProvider","PureReferenceFieldView","useReference","resourceLinkPath","emptyText","useRecordContext","record","_","NonEmptyReferenceField","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","makeStyles","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","mode","& .MuiDataGrid-iconSeparator","display","header","secondary","contrastText","light","rootPaper","width","height","borderRadius","marginTop","spacing","rootOverlay","flexDirection","& .ant-empty-img-1","fill","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","label","deleteButton","main","&:hover","alpha","@media (hover: none)","name","useStyles","GridOverlay","className","classes","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","FormEtrGridContext","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","Form","dummyRecord","onSubmit","EtrChildrenWrapper","EtrFormDialog","propTypes","PropTypes","icon","save","render","editors","recordPadre","camposClaveFila","useFormState","dirtyFields","isValid","etrActualProps","onAfterRenderAsistente","useUtilsFicha","formAsistente","useEffect","utils","formPadre","DialogContent","Stack","Children","map","child","index","defaultValue","margin","indexOf","DialogActions","SaveButton","Object","keys","Button","e","stopPropagation","IconCancel","useSafeSetState","useGridApiContext","useAddRow","AddIcon","addRow","EtrDialogChild","row","useEditRow","EditIcon","editRow","confirmTitle","confirmContent","useDeleteRow","Fragment","ActionDelete","Confirm","isOpen","title","content","onConfirm","deleteRow","createTheme","esES","locationDescriptor","getLinkParams","Tooltip","translatedLabel","IconButton","aria-label","size","linkParams","GridButton","alignIcon","oneOf","element","string","oneOfType","bool","replace","state","true","_scrollToTop","false","defaultIcon","scrollToTop","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","filterValues","displayedFilters","setFilters","useGridApiRef","useKeepGroupedColumnsHidden","pinnedColumns","right","column","headerName","translatedColumns","concat","hideable","getActions","getRowNode","EditGridButton","esEditable","button","handler","GridActionsCellItem","showInMenu","CreateGridButton","split","replaceAll","trim","isValidElement","DatagridRoot","DatagridClasses","hasBulkActionButtons","BulkActionsToolbar","tableWrapper","ThemeProvider","DataGridPremium","finalColumns","rows","loading","hideFooterSelectedRowCount","hideFooter","disableMultipleRowSelection","checkboxSelection","filterMode","onFilterModelChange","rowSelectionModel","onRowSelectionModelChange","isRowSelected","isRowSelectable","pt","primaryText","st","secondaryText","count","SimpleList","linkType","down","useResourceDefinition","onRenderGrilla","onLoadGrilla","useInitGrilla","desktopSize","GrillaSm","GrillaLg","useFormulario","maxHeight","tab","contenido","&.MuiAutocomplete-root","isNaN","getDate","getFullYear","toString","getMonth","MM","slice","dd","etrRequerido","minValue","enableLoad","useNuevo","enabled","initialValues","useInitFicha","ProgressProvider","Create","panel","r","t","f","n","isArray","clsx","arguments","CreateEtriek","func","useDelete","deleteOne","classnames","DeleteButtonNoWarning","defaultProps","sanitizedData","input","React","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","onRenderFicha","onLoadFicha","CardContent","cls","CircularProgress","thickness","onBeforeSubmitFicha","useUtilsSubmit","useSaveContext","valid","dontSave","submit","config","useFormSubmit","SimpleForm","defaultValues","FormContainer","FormEtriek","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","paddingLeft","startsWith","& a","transition","mnuPrueba","setState","menus","menu","SubMenu","SettingsIcon","renderMenu","MenuItemLink","leftIcon","JSON","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","__","alert","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","paddingRight","ImageEye","ShowGridButton","any","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","Toolbar","styled","overridesResolver","styles","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","login","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","file","upload_single","useSelector","configInputs","filter","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","m","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","finalPropsValidate","finalInitValidate","finalDynamicValidate","reduxValidate","reduxValidateError","i","hiddenDinamico","isTC","useChoicesContext","allChoices","RefTooltip","inputRef","arrow","md","AutocompleteInput","TextFieldProps","finalFilter","useContenidoController","reload_cb","rcb","recarga_cb","respaldoFiltro","deleteRecargarComboBox","stringify","ReferenceInput","perPage","SelectInputEtriek","optionText","optionValue","confirmPrimary","primary","confirmWarning","iconPaddingStyle","Draggable","handle","cancel","Paper","cursor","confirmColor","ConfirmIcon","CancelIcon","contentResource","translateOptions","useRecordSelection","handleClick","maxWidth","PaperComponent","style","cursorStyle","dividers","autoFocus","FiltroAsig","object","confirm","elementType","node","isRequired","ActionCheck","AlertError","seleccion","all","none","v","hasCreate","exporter","disableSyncWithLocation","Datagrid","TextField","sortable","fillista","filtroInicial","filtro","setFiltro","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","AsistenteList","TreeWithList","FiltroFuncionarios","boolRecord","RaBooleanField","restProps","FileInput","accept","maxSize","FileField","BooleanInput","SelectInput","mutationMode","useEditController","controllerProps","Edit","defaultTransform","filterBy","claves","sortModel","defColumns","allowAdd","allowRemove","setRows","isLoadingParent","sort","setSort","sortField","sortDir","forEach","comparison","useGetList","pagination","order","headerAlign","disableClickEventBubbling","renderCell","EtrEditButton","unshift","renderHeader","EtrCreateButton","EtrDeleteButton","StyledEngineProvider","injectFirst","disableRowSelectionOnClick","paginationModel","pageSize","onSortModelChange","model","resizable","disableReorder","disableExport","filterable","disableColumnMenu","NoRowsOverlay","CustomNoRowsOverlay","hasShow","hasList","TopToolbar","ListButton","ChevronLeft","ShowButton","src","Avatar","Layout","appBar","Menu","filters","hideFilterButton","jsBotonGrilla","defaultJsBotonGrilla","listContext","showFilter","total","sanitizeListRestProps","cloneElement","CreateButton","ExportButton","utilsGrilla","option","ReferenceArrayInput","SelectArrayInput","nameSource","passwordSource","setLoading","loginButtonText","useLogin","nextPathname","messageArgs","errors","Card","TextInput","PasswordInput","CardActions","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","FieldTitle","fields","campos","separador","secundario","hasSecundario","join","noWrap","principal","etiqueta","campo","RadioButtonGroupInput","gutterBottom","useShowController","Show","allowNone","handleTodos","format","InputProps","endAdornment","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","charAt","toUpperCase","multiline","NumberInput","DateInput","DateTimeInput","asistant","asistantResource","FiltroAsis","BulkActions","marginLeft","xs","ComboBox","dateRegex","test","match","inputFormat","dateTimeRegex","tmpMatch","ruta","nombre","document","createElement","fakeLink","body","appendChild","setAttribute","click","sourceFechaInicio","allValues","inicio","reverse","isAfter","iniDate","finDate","args","menor","idi","locale","enLocale","esLocale","etrSource","ReferenceFieldEtriek","meta","etr","now","setHours","setMinutes","exec","substring","finalProps","clear","api","useGetOne","getFormcodFromResource"],"mappings":"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"}