biblio-react 2.0.0-alpha47 → 2.0.0-alpha48

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/utils/useNuevo.js","../src/layout/FichaContext.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/useDeleteRowEtrGrid.js","../src/layout/contenidos/EtrGrid/useSaveRowEtrGrid.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/layout/ProgressContext.js","../src/utils/actions.js","../src/utils/hooks.js","../src/utils/useGetJson.js","../src/utils/useAjax.js","../src/utils/useUtils.js","../src/layout/GrillaEtriek.js","../src/utils/useInitGrilla.js","../src/utils/useInitFicha.js","../src/utils/utils.js","../src/layout/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/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/TabbedFormEtriek.js","../src/layout/themes.js","../src/utils/i18n/en.js","../src/utils/i18n/es.js","../src/layout/contenidos/useFieldController.js","../src/layout/contenidos/useContenidoController.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/contenidos/ImageField.js","../src/layout/Layout.js","../src/layout/ListActionEtriek.js","../src/layout/contenidos/ListCheck.js","../src/layout/MultiTextField.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.js","../src/layout/ShowEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/layout/contenidos/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/TextField.js","../src/utils/useReferenceLabel.js"],"sourcesContent":["import LockIcon from '@mui/icons-material/Lock';\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 { 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 { createContext } from 'react';\r\n\r\nexport const FichaContext = createContext({});\r\n","import { alpha } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { GridOverlay } from '@mui/x-data-grid';\r\nimport * as React from 'react';\r\n\r\nexport const useStyles = makeStyles(\r\n theme => ({\r\n /*shadow: {\r\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\r\n },*/\r\n root: {\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor:\r\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n },\r\n header: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n rootPaper: {\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: theme.spacing(1),\r\n },\r\n rootOverlay: {\r\n flexDirection: 'column',\r\n '& .ant-empty-img-1': {\r\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\r\n },\r\n '& .ant-empty-img-2': {\r\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\r\n },\r\n '& .ant-empty-img-3': {\r\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\r\n },\r\n '& .ant-empty-img-4': {\r\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\r\n },\r\n '& .ant-empty-img-5': {\r\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\r\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\r\n },\r\n },\r\n label: {\r\n marginTop: theme.spacing(1),\r\n },\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n }),\r\n { name: 'GE' }\r\n);\r\nexport const CustomNoRowsOverlay = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <GridOverlay className={classes.rootOverlay}>\r\n <svg\r\n width=\"120\"\r\n height=\"100\"\r\n viewBox=\"0 0 184 152\"\r\n aria-hidden\r\n focusable=\"false\"\r\n >\r\n <g fill=\"none\" fillRule=\"evenodd\">\r\n <g transform=\"translate(24 31.67)\">\r\n <ellipse\r\n className=\"ant-empty-img-5\"\r\n cx=\"67.797\"\r\n cy=\"106.89\"\r\n rx=\"67.797\"\r\n ry=\"12.668\"\r\n />\r\n <path\r\n className=\"ant-empty-img-1\"\r\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-2\"\r\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\r\n />\r\n </g>\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\r\n />\r\n <g\r\n className=\"ant-empty-img-4\"\r\n transform=\"translate(149.65 15.383)\"\r\n >\r\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\r\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n <div className={classes.label}>No hay registros</div>\r\n </GridOverlay>\r\n );\r\n};\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useDeleteRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useDeleteRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useDeleteRowEtrGrid = (resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider.deleteEtrRow(resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useDeleteRowEtrGrid;\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useSaveRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useSaveRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useSaveRowEtrGrid = (type, resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider[type](resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useSaveRowEtrGrid;\r\n","import AddIcon from '@mui/icons-material/Add';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport ActionDelete from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { alpha, createTheme, StyledEngineProvider } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Paper from '@mui/material/Paper';\nimport { adaptV4Theme, ThemeProvider } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n Loading,\n SaveButton,\n SaveContextProvider,\n useDeleteWithConfirmController,\n useGetList,\n useNotify,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormState } from 'react-hook-form';\nimport useNuevo from '../../../utils/useNuevo';\nimport { FichaContext } from '../../FichaContext';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\nimport useDeleteRowEtrGrid from './useDeleteRowEtrGrid';\nimport useSaveRowEtrGrid from './useSaveRowEtrGrid';\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor:\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n },\n header: {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.light,\n },\n rootPaper: {\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: theme.spacing(1),\n },\n rootOverlay: {\n flexDirection: 'column',\n '& .ant-empty-img-1': {\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\n },\n },\n label: {\n marginTop: theme.spacing(1),\n },\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n }),\n { name: 'EtrGrid' }\n);\n\nconst styleMargin = { marginLeft: '1.6rem', fontWeight: 'bold' };\n\nconst defaultIcon = <ActionDelete />;\n\nconst EtrDeleteWithConfirmButton = props => {\n const {\n api,\n classes: classesOverride,\n className,\n confirmTitle = 'ra.message.delete_title',\n confirmContent = 'ra.message.delete_content',\n icon = defaultIcon,\n record,\n redirect = false,\n onSuccess,\n onError,\n source,\n camposClaveFila,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const notify = useNotify();\n\n const { open, isLoading, handleDialogOpen, handleDialogClose } =\n useDeleteWithConfirmController({\n record,\n redirect,\n mutationOptions: {\n onSuccess,\n onError,\n },\n });\n //const resource = useResourceContext(props);\n const resource = props.resource;\n\n const { mutate: requestFn } = useDeleteRowEtrGrid(\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n notify('ra.notification.deleted', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'error' });\n },\n }\n );\n\n const clavesFila = Object.keys(record)\n .filter(key => camposClaveFila.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = record[key];\n return obj;\n }, {});\n\n const handleDelete = useCallback(\n event => {\n requestFn({\n payload: {\n ge: source,\n clavesFila,\n },\n });\n },\n [record]\n );\n\n return (\n <Fragment>\n <Button\n key=\"button\"\n onClick={handleDialogOpen}\n className={classes.deleteButton}\n {...rest}\n >\n {icon}\n </Button>\n <Confirm\n isOpen={open}\n loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n};\n\nconst EtrDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText>\n <Typography\n component=\"span\"\n display=\"block\"\n variant=\"subtitle1\"\n style={{ ...styleMargin }}\n >\n {props.msgTitle}\n </Typography>\n {props.msgDesc}\n </DialogContentText>\n <Form\n resource={props.resource}\n onSubmit={props.onSubmit}\n //validate={customValidation}\n defaultValues={props.defaultValues}\n >\n {props.children}\n </Form>\n </Dialog>\n);\n\nEtrDialog.propTypes = {\n label: PropTypes.string,\n onClick: PropTypes.func,\n icon: PropTypes.any,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n labelEstado: PropTypes.string,\n msgTitle: PropTypes.any,\n msgDesc: PropTypes.any,\n resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDeleteButton = props => {\n const { api, camposClaveFila, resource, source, row } = props;\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n\n return (\n <EtrDeleteWithConfirmButton\n api\n confirmTitle=\"ra.action.delete\"\n source={source}\n record={row}\n resource={resource}\n camposClaveFila={camposClaveFila}\n />\n );\n};\n\nconst EtrDialogChild = props => {\n const {\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n isLoading,\n } = props;\n const { isDirty, isValid } = useFormState();\n\n return (\n <>\n <DialogContent>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n initialValue: recordPadre[child.props.source],\n fullWidth: true,\n disabled:\n child.props.disabled !== undefined\n ? child.props.disabled\n : estado !== 'N' &&\n camposClaveFila.indexOf(\n child.props.source\n ) !== -1,\n InputLabelProps: {\n shrink: true,\n },\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton disabled={!isDirty || !isValid} />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={isLoading}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n api,\n editors,\n record: recordPadre,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n etrResource,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const { data: initialValues } = useNuevo(etrResource, { enabled: open });\n const estado = 'N';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'createEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.created', { type: 'info' });\n }\n },\n onError: e => {\n notify(e.message, { type: 'error' });\n },\n }\n );\n const notify = useNotify();\n const translate = useTranslate();\n const etiqueta = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...values, ...clavesFila },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n const saveContext = useMemo(\n () => ({\n save: handleSubmit,\n setOnFailure: e => console.log(e),\n }),\n [handleSubmit]\n );\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <SaveContextProvider value={saveContext}>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={etiqueta}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n defaultValues={initialValues}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </SaveContextProvider>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n api,\n editors,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n } = props;\n const notify = useNotify();\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const estado = 'M';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'updateEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.updated', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'error' });\n },\n }\n );\n const etiqueta = translate('ra.action.edit');\n const labelEstado = etiqueta;\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...clavesFila, ...values },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </>\n );\n};\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n etrResource,\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n const classes = useStyles(props);\n const { isLoading: isLoadingParent } = useContext(FichaContext);\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const clavesFila = Object.keys(recordPadre)\n .filter(key => claves.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = recordPadre[key];\n return obj;\n }, {});\n\n let filter = {};\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n\n const { data, isLoading } = useGetList(reference, {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n options: {\n enabled: enableLoad && !isLoadingParent,\n },\n });\n\n const rows = useMemo(() => data.map(record => record.id), [data]);\n\n const columns = [\n allowAdd\n ? {\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n etrResource={etrResource}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n />\n ),\n }\n : {},\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrEditButton\n {...rest}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n row={params.row}\n />\n ),\n },\n allowRemove\n ? {\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrDeleteButton\n {...rest}\n camposClaveFila={claves}\n api={params.api}\n row={params.row}\n />\n ),\n }\n : {},\n ];\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n if (isLoading || isLoadingParent) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //isLoading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n sortModel={sortModel}\n rows={rows}\n columns={finalColumns}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport { adaptV4Theme, ThemeProvider } from '@mui/material/styles';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport { Loading, useGetList, useRecordContext } from 'react-admin';\nimport { FichaContext } from '../FichaContext';\nimport { CustomNoRowsOverlay, useStyles } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n filter = [],\n enableLoad = true,\n ...rest\n } = props;\n const 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 filterGe = [];\n\n filterBy.split(',').forEach(field => {\n if (field) {\n filterGe.push({\n type: 'string',\n comparison: 'eq',\n value: recordPadre?.field,\n field: field,\n });\n }\n });\n\n const finalFilter = { ...filterGe.concat(filter) };\n\n const { data, isLoading } = useGetList(reference, {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter: finalFilter,\n options: {\n enabled: enableLoad && !isLoadingParent,\n },\n });\n\n const rows = useMemo(\n () => (data ? data.map(record => record.id) : []),\n [data]\n );\n\n if (isLoading || isLoadingParent) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //loading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n rows={rows}\n columns={columns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\n","import * as React from 'react';\r\nimport { createContext, useContext, useMemo, useState } from 'react';\r\n\r\nexport const ProgressContext = createContext();\r\n\r\nexport const ProgressProvider = ({ children }) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n const context = useMemo(\r\n () => ({\r\n open,\r\n show: () => setOpen(true),\r\n hide: () => setOpen(false),\r\n }),\r\n [open]\r\n );\r\n\r\n return (\r\n <ProgressContext.Provider value={context}>\r\n {children}\r\n </ProgressContext.Provider>\r\n );\r\n};\r\n\r\nconst useFormProgress = () => useContext(ProgressContext);\r\n\r\nexport default useFormProgress;\r\n","// ACTION `RELOAD_CB`\nexport const recargarComboBox = (id, method, params, callback) => ({\n type: 'RELOAD_CB',\n payload: {\n id,\n method,\n params,\n callback,\n },\n});\n\n// ACTION `RELOAD_CB_SUCCESS`\nexport const deleteRecargarComboBox = (id, callback) => ({\n type: 'RELOAD_CB_SUCCESS',\n payload: { id, callback },\n});\n\nexport const setHiddenAction = (id, hidden) => ({\n type: 'HIDE_INPUT',\n payload: {\n id,\n hidden,\n },\n});\n\nexport const setDisableAction = (id, disabled) => ({\n type: 'DISABLE_INPUT',\n payload: {\n id,\n disabled,\n },\n});\n\nexport const setRequireAction = (id, required) => ({\n type: 'REQUIRE_INPUT',\n payload: {\n id,\n required,\n },\n});\n\nexport const setErrorAction = (id, error) => ({\n type: 'ERROR_INPUT',\n payload: {\n id,\n error,\n },\n});\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport {\n recargarComboBox,\n setDisableAction,\n setHiddenAction,\n setRequireAction,\n setErrorAction,\n} from './actions';\n\nexport const useRecargarComboBox = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, method, params, callback) => {\n dispatch(recargarComboBox(id, method, params, callback));\n },\n [dispatch]\n );\n};\n\nexport const useSetHidden = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, hidden) => {\n dispatch(setHiddenAction(id, hidden));\n },\n [dispatch]\n );\n};\n\nexport const useSetDisable = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, disable) => {\n dispatch(setDisableAction(id, disable));\n },\n [dispatch]\n );\n};\n\nexport const useSetRequire = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, required) => {\n dispatch(setRequireAction(id, required));\n },\n [dispatch]\n );\n};\n\nexport const useSetError = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, error) => {\n dispatch(setErrorAction(id, error));\n },\n [dispatch]\n );\n};\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 {\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\n return {\n ajax,\n notify,\n redirect,\n recargarComboBox,\n progress,\n setHidden,\n setDisable,\n setRequire,\n setError,\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\n return {\n form,\n ajax,\n notify,\n redirect,\n recargarComboBox,\n progress,\n setHidden,\n setDisable,\n setRequire,\n setError,\n };\n};\n\nexport default useUtilsFicha;\n","import { useMediaQuery } from '@mui/material';\r\nimport * as React from 'react';\r\nimport {\r\n Datagrid,\r\n EditButton,\r\n SimpleList,\r\n useRecordContext,\r\n useResourceDefinition,\r\n} from 'react-admin';\r\nimport useInitGrilla from '../utils/useInitGrilla';\r\n\r\nconst esEditable = (record, isRowEditable) =>\r\n isRowEditable === undefined ||\r\n (typeof isRowEditable === 'function' && isRowEditable(record));\r\n\r\nconst EditButtonGrilla = props => {\r\n const { isRowEditable, ...rest } = props;\r\n const record = useRecordContext(props);\r\n\r\n return esEditable(record, isRowEditable) ? (\r\n <EditButton {...rest} />\r\n ) : null;\r\n};\r\n\r\nconst GrillaEtriek = props => {\r\n useInitGrilla(props);\r\n\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\r\n const {\r\n hasEdit,\r\n options: { borra },\r\n } = useResourceDefinition(props);\r\n const {\r\n isRowEditable,\r\n primaryText: pt,\r\n secondaryText: st,\r\n desktopSize = false,\r\n onRenderGrilla,\r\n onLoadGrilla,\r\n hasEdit: hasEditProps,\r\n ...rest\r\n } = props;\r\n const children = props.children;\r\n const count = React.Children.count(props.children);\r\n let primaryText = pt;\r\n let secondaryText = st;\r\n\r\n if (!pt) {\r\n if (count >= 4) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count >= 3) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count >= 2) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count === 1) {\r\n primaryText = record => record[children[0].props.source];\r\n }\r\n }\r\n\r\n if (!st) {\r\n if (count >= 4) {\r\n secondaryText = record =>\r\n `${record[children[2].props.source]} - ${\r\n record[children[3].props.source]\r\n }`;\r\n } else if (count >= 3) {\r\n secondaryText = record => record[children[2].props.source];\r\n } else if (count >= 2) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count === 1) {\r\n primaryText = record => record[children[0].props.source];\r\n }\r\n }\r\n\r\n return isSmall && desktopSize === false ? (\r\n <SimpleList\r\n linkType={record =>\r\n hasEdit && esEditable(record, isRowEditable) ? 'edit' : false\r\n }\r\n primaryText={primaryText}\r\n secondaryText={secondaryText}\r\n />\r\n ) : (\r\n <Datagrid\r\n //classes={{rowOdd: classes.rowOdd}}\r\n {...rest}\r\n >\r\n {React.Children.map(children, child =>\r\n !child.props.hidden ? child : null\r\n )}\r\n {hasEdit && <EditButtonGrilla isRowEditable={isRowEditable} />}\r\n {/*{borra === '1' && <DeleteButton confirmTitle=\"ra.action.delete\" mutationMode=\"pessimistic\"/>}*/}\r\n </Datagrid>\r\n );\r\n};\r\n\r\nexport default GrillaEtriek;\r\n","import { useEffect } from 'react';\r\nimport { useListContext } from 'react-admin';\r\nimport { useUtilsGrilla } from './useUtils';\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const { isLoading } = useListContext();\r\n const utils = useUtilsGrilla(props);\r\n\r\n useEffect(() => {\r\n onRenderGrilla && onRenderGrilla(utils);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n onLoadGrilla && onLoadGrilla(utils);\r\n }\r\n }, [isLoading]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from './useUtils';\r\n\r\nconst useInitFicha = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const fichaProps = useFormulario(rest);\r\n\r\n return { fichaProps };\r\n};\r\n\r\nexport default useInitFicha;\r\n","import ChevronLeft from '@mui/icons-material/ChevronLeft';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\nimport { format, 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 },\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 {...rest} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n\r\nCreateEtriek.propTypes = {\r\n useFormulario: PropTypes.func,\r\n};\r\n\r\nexport { CreateEtriek };\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ActionDelete from '@mui/icons-material/Delete';\nimport IconButton from '@mui/material/IconButton';\nimport { alpha } from '@mui/material/styles';\nimport Tooltip from '@mui/material/Tooltip';\nimport { makeStyles } from '@mui/styles';\nimport classnames from 'clsx';\nimport * as React from 'react';\nimport { useDelete, useRecordContext, useTranslate } from 'react-admin';\n\nconst sanitizeRestProps = ({\n classes,\n filterValues,\n handleSubmit,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n redirect,\n ...rest\n}) => rest;\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst DeleteButtonNoWarning = props => {\n const classes = useStyles(props);\n const translate = useTranslate();\n const {\n resource,\n redirect,\n className,\n icon,\n label = 'ra.action.delete',\n ...rest\n } = props;\n\n const record = useRecordContext();\n const [deleteOne, { isLoading }] = useDelete(resource, { id: record.id });\n\n return (\n <Tooltip title={translate('ra.action.delete')}>\n <IconButton\n disabled={isLoading}\n onClick={() => deleteOne()}\n label={label}\n className={classnames(\n 'ra-delete-button',\n classes.deleteButton,\n className\n )}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n size=\"large\"\n >\n {icon}\n </IconButton>\n </Tooltip>\n );\n};\n\nDeleteButtonNoWarning.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete />,\n};\n\nexport default DeleteButtonNoWarning;\n","import * 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 { useFormulario = useDefaultHook, ...rest } = props;\n const controllerProps = useEditController(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 transform={defaultTransform}\n {...rest}\n {...fichaProps?.panel}\n />\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n button: {\n margin: theme.spacing(1),\n },\n input: {\n display: 'none',\n },\n}));\n\nconst FormDialog = React.forwardRef((props, ref) => {\n const {\n isOpen,\n onConfirm,\n onClose,\n title,\n dialogText,\n children,\n hasAccept = true,\n hasCancel = true,\n isLoading = false,\n } = props;\n const classes = useStyles(props);\n\n const handleConfirm = e => {\n onConfirm && onConfirm(e);\n };\n\n const handleClose = e => {\n onClose && onClose(e);\n };\n\n return (\n <Dialog\n ref={ref}\n open={isOpen}\n fullWidth\n onClose={handleClose}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">{title}</DialogTitle>\n <DialogContent>\n <DialogContentText>{dialogText}</DialogContentText>\n {children}\n </DialogContent>\n {(hasAccept || hasCancel) && (\n <DialogActions>\n {hasCancel && (\n <Button\n onClick={handleClose}\n variant=\"contained\"\n color=\"secondary\"\n className={classes.button}\n disabled={isLoading}\n >\n Cancelar\n </Button>\n )}\n {hasAccept && (\n <Button\n onClick={handleConfirm}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n disabled={isLoading}\n >\n Ok\n </Button>\n )}\n </DialogActions>\n )}\n </Dialog>\n );\n});\n\nexport default FormDialog;\n","import { CardContent, CircularProgress } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useContext, useEffect } from 'react';\nimport { useResourceContext } from 'react-admin';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\nimport useFormProgress from './ProgressContext';\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n block: {\n pointerEvents: 'none',\n backgroundColor: '#ffffff',\n opacity: 0.6,\n position: 'relative',\n },\n progress: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n },\n}));\n\nconst FormContainer = props => {\n const cls = useStyles(props);\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, isLoading, initialValues, fichaProps } =\n useContext(FichaContext);\n const utils = useUtilsFicha({ resource });\n\n useEffect(() => {\n fichaProps.onRenderFicha && fichaProps.onRenderFicha(utils, estado);\n }, []);\n\n useEffect(() => {\n if (!isLoading) {\n fichaProps.onLoadFicha &&\n fichaProps.onLoadFicha(utils, estado, initialValues);\n }\n }, [isLoading]);\n\n return (\n <CardContent className={context.open ? cls.block : ''} sx={props.sx}>\n {context.open && (\n <CircularProgress\n className={cls.progress}\n thickness={4}\n size={50}\n />\n )}\n {props.children}\n </CardContent>\n );\n};\n\nexport default FormContainer;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport { SimpleForm, useNotify, useSaveContext } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\n\nconst dontSave = () => {};\n\nconst FormEtriek = props => {\n const { children, ...rest } = props;\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config = {} } = fichaProps;\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const finalSave = 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 if (!initialValues) return null;\n\n return (\n <SimpleForm\n onSubmit={\n typeof onBeforeSubmitFicha === 'function'\n ? finalSave\n : undefined\n }\n defaultValues={initialValues}\n component={FormContainer}\n mode=\"onBlur\"\n {...rest}\n {...config}\n >\n {children}\n </SimpleForm>\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 '& 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 LockIcon from '@mui/icons-material/Lock';\nimport Avatar from '@mui/material/Avatar';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardActions from '@mui/material/CardActions';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport {\n Form,\n TextInput,\n PasswordInput,\n useLogin,\n useNotify,\n useTranslate,\n} from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n alignItems: 'center',\n justifyContent: 'flex-start',\n backgroundImage: ({ loginBackgroundImage }) => loginBackgroundImage,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n avatarIcon: {\n backgroundColor: theme.palette.secondary.main,\n },\n icon: ({ textLength }) => ({\n position: 'absolute',\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1),\n }),\n hint: {\n marginTop: '1em',\n display: 'flex',\n justifyContent: 'center',\n color: theme.palette.grey[500],\n },\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n actions: {\n padding: '0 1em 1em 1em',\n },\n}));\n\nconst Login = props => {\n const {\n loginBackgroundImage,\n nameSource = 'username',\n passwordSource = 'password',\n } = props;\n const [loading, setLoading] = useState(false);\n const translate = useTranslate();\n const loginButtonText = translate('ra.auth.sign_in');\n const classes = useStyles({\n loginBackgroundImage,\n textLength: loginButtonText.length,\n });\n const notify = useNotify();\n const login = useLogin();\n const location = useLocation();\n\n const handleSubmit = values => {\n setLoading(true);\n login(values, location.state ? location.state.nextPathname : '/').catch(\n error => {\n setLoading(false);\n notify(\n typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? 'ra.auth.sign_in_error'\n : error.message,\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n },\n }\n );\n }\n );\n };\n\n const validate = values => {\n const errors = {};\n if (!values[nameSource]) {\n errors[nameSource] = translate('ra.validation.required');\n }\n if (!values[passwordSource]) {\n errors[passwordSource] = translate('ra.validation.required');\n }\n return errors;\n };\n\n return (\n <Form onSubmit={handleSubmit} validate={validate}>\n <div className={classes.main}>\n <Card className={classes.card}>\n <div className={classes.avatar}>\n <Avatar className={classes.avatarIcon}>\n <LockIcon />\n </Avatar>\n </div>\n <div className={classes.hint}>Inicio de Sesión</div>\n <div className={classes.form}>\n <div className={classes.input}>\n <TextInput\n autoFocus\n name={nameSource}\n label={translate('ra.auth.username')}\n disabled={loading}\n />\n </div>\n <div className={classes.input}>\n <PasswordInput\n name={passwordSource}\n label={translate('ra.auth.password')}\n type=\"password\"\n disabled={loading}\n />\n </div>\n </div>\n <CardActions className={classes.actions}>\n <Button\n variant=\"contained\"\n type=\"submit\"\n color=\"primary\"\n disabled={loading}\n fullWidth\n >\n {loading && (\n <CircularProgress\n className={classes.icon}\n size={18}\n thickness={2}\n />\n )}\n {loginButtonText}\n </Button>\n </CardActions>\n </Card>\n </div>\n </Form>\n );\n};\n\nexport default Login;\n","import Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport { makeStyles } from '@mui/styles';\nimport classnames from 'clsx';\nimport * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { Button, FieldTitle, useResourceContext } from 'react-admin';\n\nconst sanitizeRestProps = ({\n displayedFilters,\n filterValues,\n showFilter,\n ...rest\n}) => rest;\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles({\n root: { display: 'inline-block' },\n paddingRight: { paddingRight: 4 },\n});\n\nconst MenuButton = props => {\n const {\n className,\n options = [],\n icon: Icon,\n label,\n disabled,\n ...rest\n } = props;\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const [selectedIndex, setSelectedIndex] = useState(0);\n const classes = useStyles(props);\n const resource = useResourceContext(props);\n\n const handleMenuItemClick = (event, index) => {\n setSelectedIndex(index);\n setOpen(false);\n return true;\n };\n\n const handleToggle = e => {\n // This prevents ghost click.\n e.preventDefault();\n setOpen(true);\n anchorEl.current = e.currentTarget;\n };\n\n const handleClose = event => {\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\n return;\n }\n setOpen(false);\n };\n\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Button\n className=\"add-filter\"\n //label={options[selectedIndex].label}\n label={label}\n onClick={handleToggle}\n title={options[selectedIndex].label}\n disabled={disabled}\n >\n {options[selectedIndex]?.icon || Icon}\n </Button>\n <Menu open={open} anchorEl={anchorEl.current} onClose={handleClose}>\n {options.map((option, index) => (\n <MenuItem\n key={option.label}\n disabled={option.disabled}\n selected={index === selectedIndex}\n onClick={event => {\n handleMenuItemClick(event, index);\n option.onClick && option.onClick(event, index);\n }}\n resource={resource}\n title={option.label}\n >\n {option.icon}\n <span className={classes.paddingRight}></span>\n <FieldTitle label={option.label} resource={resource} />\n </MenuItem>\n ))}\n </Menu>\n </div>\n );\n};\n\nexport default MenuButton;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport {\n SaveContextProvider,\n TabbedForm,\n useNotify,\n useSaveContext,\n} from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\n\nconst dontSave = () => {};\n\nexport const TabbedFormEtriek = props => {\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config = {} } = fichaProps;\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const finalSave = useCallback(\n values => {\n const valid =\n onBeforeSubmitFicha &&\n onBeforeSubmitFicha({ form: { values }, ...utils }, 'N');\n if (typeof valid === 'string') {\n notify(valid, { type: 'error' });\n return dontSave();\n } else {\n return valid === undefined || valid ? save(values) : dontSave();\n }\n },\n [onBeforeSubmitFicha, notify, dontSave, save]\n );\n\n if (!initialValues) return null;\n\n return (\n <TabbedForm\n {...props}\n {...config}\n onSubmit={\n typeof onBeforeSubmitFicha === 'function'\n ? finalSave\n : undefined\n }\n defaultValues={initialValues}\n component={FormContainer}\n /*toolbar={<ToolbarFicha/>}*/\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n syncWithLocation: false,\n};\n","import { defaultTheme } from 'react-admin';\n\n// TODO: Probablemente no sea necesario sobreescribir nada de los temas\n\nconst darkTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'dark',\n },\n components: {\n ...defaultTheme.components,\n MuiTextField: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n MuiFormControl: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nconst lightTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'light',\n },\n components: {\n ...defaultTheme.components,\n MuiTextField: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n MuiFormControl: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nexport { lightTheme, darkTheme };\n","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\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n login: {\r\n id: 'Cédula',\r\n hint: 'Inicio de Sesión',\r\n required: 'Ingrese Usuario o Cédula',\r\n email: 'Ingrese su email aquí',\r\n send: 'Enviar',\r\n check_email:\r\n 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\r\n must_enter_credentials:\r\n 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\r\n restore_password: 'Restablecer Contraseña',\r\n punch_in: 'Generar Marcas',\r\n },\r\n pos: {\r\n search: 'Búsqueda',\r\n change_pin: 'Cambiar Pin',\r\n change_password: 'Cambiar Contraseña',\r\n configuration: 'Configuración',\r\n language: 'Lenguaje',\r\n theme: {\r\n name: 'Tema Visual',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Bienvenid@',\r\n subtitle: 'Gestión de Funcionarios',\r\n aor_button: 'Sitio de Metiri',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Debe ser mayor o igual a %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default esMessages;\r\n","import { useContext } from 'react';\r\nimport { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst useFieldController = props => {\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { hidden: hiddenProps = false, ...rest } = props;\r\n const {\r\n hidden: hiddenInitial,\r\n useContenido = useDefaultHook,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n ...restInitialProps,\r\n });\r\n const { hidden: oculto, ...dynamicPropsRest } = dynamicProps;\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${props.source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n return {\r\n propsContenido: {\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n },\r\n hidden: oculto !== undefined ? oculto : hidden,\r\n };\r\n};\r\n\r\nexport default useFieldController;\r\n","import { useContext, useRef } from 'react';\r\nimport { useInput } from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\nimport { etrRequerido } from '../../utils';\r\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst useContenidoController = props => {\r\n const { source } = props;\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const configInput = useSelector(state => {\r\n const configInputs = state.configInputs\r\n ? state.configInputs.filter(item => item.id === source)\r\n : [];\r\n return configInputs[0] ? configInputs[0] : null;\r\n });\r\n const {\r\n disabled: reduxDisabled,\r\n hidden: reduxHidden,\r\n required: reduxRequired,\r\n error: reduxError,\r\n } = configInput || {};\r\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\r\n const reduxValidateError = reduxError ? () => reduxError : undefined;\r\n\r\n const { [source]: initialProps = {} } = fichaProps;\r\n const {\r\n onFocus: onFocusProps,\r\n onChange: onChangeProps,\r\n onBlur: onBlurProps,\r\n hidden: hiddenProps = false,\r\n disabled: disabledProps = false,\r\n validate: propValidate,\r\n ...rest\r\n } = props;\r\n const { field } = useInput(props);\r\n const {\r\n onFocus: onFocusInitial,\r\n onBlur: onBlurInitial,\r\n onChange: onChangeInitial,\r\n hidden: hiddenInitial,\r\n disabled: disabledInitial,\r\n useContenido = useDefaultHook,\r\n validate: initValidate,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const disabled =\r\n disabledInitial !== undefined ? disabledInitial : disabledProps;\r\n const onFocus =\r\n onFocusInitial !== undefined ? onFocusInitial : onFocusProps;\r\n const onBlur = onBlurInitial !== undefined ? onBlurInitial : onBlurProps;\r\n const onChange =\r\n onChangeInitial !== undefined ? onChangeInitial : onChangeProps;\r\n const utils = useUtilsFicha(props);\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n utils,\r\n ...restInitialProps,\r\n });\r\n const previousValue = useRef(field.value);\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n const {\r\n hidden: hiddenDinamico,\r\n disabled: disabledDinamico,\r\n onFocus: onFocusDinamico,\r\n onChnage: onChangeDinamico,\r\n onBlur: onBlurDinamico,\r\n validate: dynamicValidate,\r\n ...dynamicPropsRest\r\n } = dynamicProps;\r\n const onFocusFinal = onFocusDinamico || onFocus;\r\n const onBlurFinal = onBlurDinamico || onBlur;\r\n const onChangeFinal = onChangeDinamico || onChange;\r\n\r\n const argCero = { ...utils, prev: previousValue.current };\r\n const finalPropsValidate = Array.isArray(propValidate)\r\n ? propValidate\r\n : [propValidate];\r\n const finalInitValidate = Array.isArray(initValidate)\r\n ? initValidate\r\n : [initValidate];\r\n const finalDynamicValidate = Array.isArray(dynamicValidate)\r\n ? dynamicValidate\r\n : [dynamicValidate];\r\n const finalValidate = [\r\n ...finalPropsValidate,\r\n ...finalInitValidate,\r\n ...finalDynamicValidate,\r\n 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 * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport {\n AutocompleteInput,\n ReferenceInput,\n useChoicesContext,\n} from 'react-admin';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { deleteRecargarComboBox } from '../../utils';\nimport useContenidoController from './useContenidoController';\n\nexport const SelectInputEtriek = props => {\n const { callback, sx, ...rest } = props;\n const { isLoading, allChoices } = useChoicesContext();\n\n useEffect(() => {\n if (!isLoading) {\n // Llamo al callback de recargarComboBox pasándole los nuevos items\n if (typeof callback === 'function') {\n callback(Object.values([allChoices]));\n }\n }\n //TODO: Siempre entra al useEffect porque callback siempre cambia, aunque no siempre llama por ajax, porque no cambiaron los parámetros de la acción de redux\n // Sacar `callback` del array de dependencias y probar si entra al useEffect al cambiar los parámetros de recargarComboBox\n }, [allChoices, callback, isLoading]);\n\n return (\n <AutocompleteInput\n size=\"small\"\n {...rest}\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\n />\n );\n};\n\nconst ComboBox = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n const dispatch = useDispatch();\n\n const { source, reference } = props;\n const recarga_cb = useSelector(state => {\n const rcb = state.reload_cb\n ? state.reload_cb.filter(item => item.id === source)\n : [];\n return rcb[0] ? rcb[0] : null;\n });\n const respaldoFiltro = useRef(recarga_cb);\n const filter =\n recarga_cb === null && respaldoFiltro.current\n ? respaldoFiltro.current\n : recarga_cb;\n\n let callback, finalFilter;\n if (filter) {\n const { callback: tempCallback, ...restFilter } = filter;\n callback = tempCallback;\n finalFilter = restFilter;\n }\n\n useEffect(() => {\n if (recarga_cb !== null) {\n respaldoFiltro.current = recarga_cb;\n dispatch(deleteRecargarComboBox(source));\n }\n }, [JSON.stringify(recarga_cb)]);\n\n return !hidden ? (\n <ReferenceInput reference={reference} source={source} perPage={500}>\n <SelectInputEtriek\n {...propsContenido}\n callback={callback}\n optionText=\"etiqueta\"\n optionValue={source}\n />\n </ReferenceInput>\n ) : null;\n};\nexport default ComboBox;\n","import { 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 ActionCheck from '@mui/icons-material/CheckCircle';\r\nimport AlertError from '@mui/icons-material/ErrorOutline';\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\nimport { useSelector } from 'react-redux';\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 IconButton from '@mui/material/IconButton';\nimport CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport * as React from 'react';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { TextInput } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport { Box } from '@mui/material';\nimport FiltroAsis from './FiltroAsis';\n\nconst BulkActions = () => <Fragment />;\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n //console.log({ format: v });\n if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v });\n return v;\n};\n\nconst TextBoxSelection = props => {\n const { disabled, asistant, asistantResource, label, source, ...rest } =\n props;\n const [open, setOpen] = useState(false);\n const form = useFormContext();\n\n useEffect(() => {\n // No funciona el defaultValue\n handleTodos();\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, selectedIds) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n };\n\n return (\n <>\n <Box display=\"flex\" alignItems=\"center\" sx={{ mt: 1, mb: 0.5 }}>\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroAsis\n isOpen={open}\n title={`Selección de ${label}`}\n contentResource={asistantResource}\n content={React.createElement(asistant, {\n bulkActionButtons: <BulkActions />,\n hasCreate: false,\n exporter: false,\n resource: asistantResource,\n })}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n );\n};\n\nexport default TextBoxSelection;\n","import { Box, Paper } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { alpha } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport classnames from 'clsx';\nimport { TreeView } from 'devextreme-react';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n Datagrid,\n List,\n TextField,\n useDataProvider,\n useTranslate,\n} from 'react-admin';\nimport Draggable from 'react-draggable';\n\nconst PostList = props => (\n <List\n {...props}\n hasCreate={false}\n exporter={false}\n perPage={50}\n empty={false}\n title=\" \"\n >\n <Datagrid bulkActionButtons={<span />}>\n <TextField source=\"funced\" sortable label=\"Cédula\" />\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\n </Datagrid>\n </List>\n);\n\nconst filtroInicial = { fillista: 'empcod=-1' };\n\nconst TreeWithList = props => {\n const [filtro, setFiltro] = React.useState(filtroInicial);\n const dataProvider = useDataProvider();\n\n const onClick = useCallback(\n e => {\n setFiltro({ fillista: e.node.key });\n },\n [setFiltro]\n );\n\n const createChildren = useCallback(\n parent => {\n const parentId = parent ? parent.itemData.id : '';\n\n return dataProvider\n .getChildNodes('form_224', { parentId: parentId })\n .then(response => response.data)\n .catch(() => {\n throw new Error('Data Loading Error');\n });\n },\n [dataProvider]\n );\n\n return (\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\n <Box flexGrow={1}>\n <TreeView\n id=\"funcionarios-treeview\"\n dataStructure=\"plain\"\n rootValue=\"\"\n onItemClick={onClick}\n createChildren={createChildren}\n />\n </Box>\n <Box flexGrow={2}>\n <PostList resource=\"form_224\" filter={filtro} />\n </Box>\n </Box>\n );\n};\n\nconst useStyles = makeStyles(\n theme => ({\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n }),\n { name: 'RaConfirm' }\n);\n\nconst PaperComponent = props => (\n <Draggable\n handle=\"#draggable-dialog-title\"\n cancel={'[class*=\"MuiDialogContent-root\"]'}\n >\n <Paper {...props} />\n </Draggable>\n);\n\nconst cursorStyle = { cursor: 'move' };\n\nconst FiltroFuncionarios = props => {\n const {\n isOpen,\n isLoading,\n title,\n cancel,\n confirmColor,\n ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n translateOptions = {},\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const handleConfirm = useCallback(\n (e, button) => {\n e.stopPropagation();\n onConfirm(e, button);\n },\n [onConfirm]\n );\n\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"lg\"\n PaperComponent={PaperComponent}\n aria-labelledby=\"draggable-dialog-title\"\n >\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent dividers={true}>\n <TreeWithList />\n </DialogContent>\n <DialogActions>\n <Button disabled={isLoading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={isLoading}\n onClick={e => handleConfirm(e, 'yes')}\n className={classnames('ra-confirm', {\n [classes.confirmWarning]: confirmColor === 'warning',\n [classes.confirmPrimary]: confirmColor === 'primary',\n })}\n autoFocus\n >\n <ConfirmIcon className={classes.iconPaddingStyle} />\n {translate('ra.action.confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nFiltroFuncionarios.propTypes = {\n cancel: PropTypes.string,\n classes: PropTypes.object,\n confirm: PropTypes.string,\n confirmColor: PropTypes.string,\n ConfirmIcon: PropTypes.elementType,\n CancelIcon: PropTypes.elementType,\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nFiltroFuncionarios.defaultProps = {\n cancel: 'ra.action.cancel',\n classes: {},\n confirmColor: 'primary',\n ConfirmIcon: ActionCheck,\n CancelIcon: AlertError,\n isOpen: false,\n};\n\nexport default FiltroFuncionarios;\n","import CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport IconButton from '@mui/material/IconButton';\nimport * as React from 'react';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { TextInput, useRecordSelection } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport { Box } from '@mui/material';\nimport FiltroFuncionarios from './FiltroFuncionarios';\n\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v })\n return v;\n};\n\nconst TBSF = props => {\n const {\n disabled,\n asistant,\n asistantResource,\n label = 'Funcionarios',\n source,\n ...rest\n } = props;\n const [selectedIds] = useRecordSelection('form_224');\n const [open, setOpen] = useState(false);\n const form = useFormContext();\n\n useEffect(() => {\n // No funciona el defaultValue\n handleTodos();\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, button) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n };\n\n return (\n <>\n <Box display=\"flex\" alignItems=\"center\" sx={{ mt: 1, mb: 0.5 }}>\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroFuncionarios\n isOpen={open}\n title={`Selección de ${label}`}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n );\n};\n\nexport default TBSF;\n","import * as React from 'react';\r\nimport { BooleanField as RaBooleanField, useRecordContext } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst BooleanField = props => {\r\n const { propsContenido, hidden } = useFieldController(props);\r\n const record = useRecordContext();\r\n const boolRecord = JSON.parse(JSON.stringify(record));\r\n const value = boolRecord[props.source];\r\n boolRecord[props.source] = value != '' && value != '0';\r\n\r\n return (\r\n !hidden && <RaBooleanField {...propsContenido} record={boolRecord} />\r\n );\r\n};\r\n\r\nexport default BooleanField;\r\n","import * as React from 'react';\r\nimport { 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\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 accept=\"\" maxSize={5000000} {...propsContenido}>\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 { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <BooleanInput {...propsContenido} />;\r\n};\r\n\r\nexport default CheckBox;\r\n","import * as React from 'react';\r\nimport { SelectInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ComboBoxManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <SelectInput {...propsContenido} />;\r\n};\r\n\r\nexport default ComboBoxManual;\r\n","import 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';\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 ListActionsEtriek = props => {\n const { className, exporter, filters, children, jsBotonGrilla, ...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\n return useMemo(\n () => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\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 => jsBotonGrilla(utilsGrilla, child.key)\n : null,\n options: child.props.options\n ? child.props.options.map(option => ({\n ...option,\n onClick: e =>\n jsBotonGrilla(utilsGrilla, option.key),\n }))\n : null,\n })\n )}\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\n );\n};\n\nexport default ListActionsEtriek;\n","import * as React from 'react';\nimport { ReferenceArrayInput, SelectArrayInput } from 'react-admin';\nimport useContenidoController from './useContenidoController';\n\nconst ListCheck = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n const { source, reference } = props;\n\n return !hidden ? (\n <ReferenceArrayInput source={source} reference={reference}>\n <SelectArrayInput\n {...propsContenido}\n optionText=\"etiqueta\"\n optionValue={props.source}\n />\n </ReferenceArrayInput>\n ) : null;\n};\nexport default ListCheck;\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';\nimport { useEffect } from 'react';\nimport { DateInput, DateTimeInput, NumberInput, TextInput } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport useContenidoController from './useContenidoController';\n\nconst TextBox = props => {\n const { tipo, ...rest } = props;\n const { propsContenido, hidden } = useContenidoController(rest);\n const form = useFormContext();\n\n useEffect(() => {\n if (propsContenido.value) {\n form.setValue(props.source, propsContenido.value);\n }\n });\n\n const txtProps = {\n ...propsContenido,\n };\n\n return !hidden ? (\n tipo === 'N' || tipo === 'D' ? (\n <NumberInput {...txtProps} />\n ) : tipo === 'F' ? (\n <DateInput {...txtProps} />\n ) : tipo === 'Z' ? (\n <DateTimeInput {...txtProps} />\n ) : tipo === 'H' ? (\n <TextInput {...txtProps} type=\"time\" />\n ) : (\n <TextInput {...txtProps} />\n )\n ) : null;\n};\n\nexport default TextBox;\n","import * as React from 'react';\r\nimport { DateField, NumberField, TextField as RaTextField } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst TextField = props => {\r\n const { tipo, value, ...rest } = props;\r\n const { propsContenido, hidden } = useFieldController(rest);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'N' || tipo === 'D' ? (\r\n <NumberField {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateField {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateField {...txtProps} showTime />\r\n ) : (\r\n <RaTextField {...txtProps} />\r\n ))\r\n );\r\n};\r\n\r\nexport default TextField;\r\n","import { useResourceContext, useGetOne } from 'react-admin';\r\nimport { getFormcodFromResource } from './utils';\r\n\r\nconst useReferenceLabel = (source, id) => {\r\n const resource = useResourceContext();\r\n\r\n const { data, isLoading, error } = useGetOne(\r\n 'cb_' + getFormcodFromResource(resource) + '_' + source,\r\n { id }\r\n );\r\n\r\n if (isLoading || error) {\r\n return '';\r\n }\r\n\r\n return data?.etiqueta || '';\r\n};\r\n\r\nexport default useReferenceLabel;\r\n"],"names":["forwardRef","props","ref","useTranslate","onClose","useUserMenu","useResourceDefinitions","resourcesDefinitions","React.createElement","MenuItem","component","Link","key","to","onClick","ListItemIcon","LockIcon","ListItemText","translate","existePassword","VpnLockIcon","UserMenu","ConfigurationMenu","Logout","useMediaQuery","theme","breakpoints","up","AppBar","color","userMenu","CustomUserMenu","Typography","variant","sx","flex","textOverflow","whiteSpace","overflow","id","isLargeEnough","Box","resource","options","createContext","makeStyles","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","mode","& .MuiDataGrid-iconSeparator","display","header","secondary","contrastText","light","rootPaper","width","height","borderRadius","marginTop","spacing","rootOverlay","flexDirection","& .ant-empty-img-1","fill","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","label","deleteButton","error","main","&:hover","alpha","@media (hover: none)","name","useStyles","GridOverlay","className","classes","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","params","useDataProvider","useMutation","deleteEtrRow","mutate","isLoading","type","marginLeft","fontWeight","ActionDelete","confirmTitle","confirmContent","icon","defaultIcon","record","redirect","onSuccess","onError","source","camposClaveFila","rest","useNotify","useDeleteWithConfirmController","mutationOptions","open","handleDialogOpen","handleDialogClose","requestFn","useDeleteRowEtrGrid","refresh","json","notify","messageArgs","smart_count","e","message","Object","keys","filter","split","includes","reduce","obj","useCallback","event","payload","ge","clavesFila","Fragment","Button","Confirm","isOpen","loading","title","content","onConfirm","handleDelete","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","style","styleMargin","msgTitle","msgDesc","Form","onSubmit","defaultValues","children","EtrDialog","propTypes","PropTypes","save","render","EtrDeleteWithConfirmButton","api","row","estado","editors","recordPadre","setOpen","useFormState","isDirty","isValid","DialogContent","Children","map","child","index","initialValue","disabled","undefined","indexOf","InputLabelProps","shrink","DialogActions","SaveButton","stopPropagation","IconCancel","etrResource","useSafeSetState","initialValues","useNuevo","enabled","data","useSaveRowEtrGrid","values","useMemo","handleSubmit","setOnFailure","log","AddIcon","SaveContextProvider","value","saveContext","etiqueta","EtrDialogChild","EditIcon","createTheme","adaptV4Theme","esES","useState","show","hide","ProgressContext","Provider","context","method","callback","hidden","required","useDispatch","dispatch","recargarComboBox","setHiddenAction","disable","setDisableAction","setRequireAction","setErrorAction","getJson","mutateAsync","useGetJson","useListContext","useRedirect","useRefresh","useResourceContext","useUnselectAll","ajax","useAjax","unselectAll","useRecargarComboBox","useSetHidden","useSetDisable","useSetRequire","useSetError","useFormProgress","progress","setHidden","setDisable","setRequire","setError","useFormContext","form","isRowEditable","useRecordContext","EditButton","onRenderGrilla","onLoadGrilla","useUtilsGrilla","useEffect","utils","useInitGrilla","down","hasEdit","useResourceDefinition","pt","primaryText","st","secondaryText","desktopSize","React","count","SimpleList","linkType","esEditable","Datagrid","EditButtonGrilla","useFormulario","fichaProps","useDefaultHook","maxHeight","tab","contenido","isNaN","getDate","getFullYear","toString","getMonth","MM","slice","dd","etrRequerido","minValue","enableLoad","useInitFicha","ProgressProvider","FichaContext","Create","panel","r","t","f","n","Array","isArray","length","clsx","arguments","CreateEtriek","func","useDelete","deleteOne","Tooltip","IconButton","classnames","size","DeleteButtonNoWarning","defaultProps","trim","sanitizedData","button","margin","input","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","useContext","useUtilsFicha","onRenderFicha","onLoadFicha","CardContent","cls","CircularProgress","thickness","onBeforeSubmitFicha","config","useUtilsSubmit","useSaveContext","getValues","valid","dontSave","SimpleForm","finalSave","FormContainer","FormEtriek","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","& a","transition","paddingLeft","mnuPrueba","state","setState","items","menus","item","menu","SubMenu","SettingsIcon","renderMenu","MenuItemLink","_","leftIcon","JSON","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","paddingRight","TabbedForm","TabbedFormEtriek","syncWithLocation","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","initialProps","hiddenProps","useContenido","restInitialProps","hiddenInitial","dynamicProps","dynamicPropsRest","propsContenido","oculto","useSelector","configInputs","reduxDisabled","reduxHidden","reduxError","onFocus","onChangeProps","onChange","onBlurProps","onBlur","disabledProps","propValidate","validate","field","useInput","onBlurInitial","onChangeInitial","disabledInitial","initValidate","onFocusInitial","onFocusProps","useRef","disabledDinamico","onFocusDinamico","onChangeDinamico","onChnage","onBlurDinamico","dynamicValidate","prev","previousValue","current","m","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","finalPropsValidate","finalInitValidate","finalDynamicValidate","reduxValidate","reduxValidateError","i","hiddenDinamico","useChoicesContext","allChoices","AutocompleteInput","confirmPrimary","primary","confirmWarning","iconPaddingStyle","Draggable","handle","cancel","Paper","cursor","confirmColor","ConfirmIcon","CancelIcon","contentResource","translateOptions","selectedIds","useRecordSelection","handleClick","maxWidth","PaperComponent","cursorStyle","dividers","autoFocus","FiltroAsig","string","object","confirm","elementType","node","isRequired","bool","ActionCheck","AlertError","seleccion","all","none","v","hasCreate","exporter","perPage","bulkActionButtons","TextField","sortable","fillista","filtroInicial","filtro","setFiltro","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","PostList","TreeWithList","FiltroFuncionarios","useFieldController","stringify","boolRecord","RaBooleanField","useContenidoController","FileInput","accept","maxSize","FileField","BooleanInput","reference","reload_cb","rcb","recarga_cb","respaldoFiltro","tempCallback","deleteRecargarComboBox","ReferenceInput","SelectInputEtriek","optionText","optionValue","SelectInput","useEditController","controllerProps","Edit","defaultTransform","filterBy","claves","sortModel","defColumns","columns","allowAdd","allowRemove","isLoadingParent","setSort","sortField","sortDir","sort","forEach","comparison","useGetList","pagination","order","headerName","renderHeader","EtrCreateButton","headerAlign","disableClickEventBubbling","renderCell","EtrEditButton","EtrDeleteButton","Loading","StyledEngineProvider","injectFirst","ThemeProvider","DataGrid","disableSelectionOnClick","pageSize","hideFooter","rows","finalColumns","onSortModelChange","model","NoRowsOverlay","CustomNoRowsOverlay","hasShow","hasList","TopToolbar","ListButton","ChevronLeft","ShowButton","filterGe","push","concat","finalFilter","src","Avatar","Layout","appBar","Menu","filters","jsBotonGrilla","listContext","displayedFilters","filterValues","showFilter","total","sanitizeListRestProps","cloneElement","CreateButton","ExportButton","utilsGrilla","option","ReferenceArrayInput","SelectArrayInput","nameSource","passwordSource","setLoading","loginButtonText","useLogin","useLocation","location","nextPathname","errors","Card","TextInput","PasswordInput","CardActions","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","FieldTitle","fields","campos","separador","secundario","hasSecundario","join","noWrap","principal","campo","RadioButtonGroupInput","gutterBottom","useShowController","Show","handleTodos","setValue","mt","mb","defaultValue","format","InputProps","endAdornment","aria-label","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","setFilters","tabs","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","Tab","charAt","toUpperCase","Divider","multiline","tipo","NumberInput","txtProps","DateInput","DateTimeInput","asistant","asistantResource","FiltroAsis","BulkActions","NumberField","DateField","showTime","RaTextField","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","now","setHours","setMinutes","exec","substring","useGetOne","getFormcodFromResource"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/layout/AppBar.js","../src/utils/useNuevo.js","../src/layout/FichaContext.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/useDeleteRowEtrGrid.js","../src/layout/contenidos/EtrGrid/useSaveRowEtrGrid.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/layout/ProgressContext.js","../src/utils/actions.js","../src/utils/hooks.js","../src/utils/useGetJson.js","../src/utils/useAjax.js","../src/utils/useUtils.js","../src/layout/GrillaEtriek.js","../src/utils/useInitGrilla.js","../src/utils/useInitFicha.js","../src/utils/utils.js","../src/layout/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/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/TabbedFormEtriek.js","../src/layout/themes.js","../src/utils/i18n/en.js","../src/utils/i18n/es.js","../src/layout/contenidos/useFieldController.js","../src/layout/contenidos/useContenidoController.js","../src/layout/contenidos/ComboBox.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/contenidos/ImageField.js","../src/layout/Layout.js","../src/layout/ListActionEtriek.js","../src/layout/contenidos/ListCheck.js","../src/layout/MultiTextField.js","../src/layout/contenidos/Password.js","../src/layout/contenidos/RadioButton.js","../src/layout/contenidos/RadioButtonManual.js","../src/layout/ShowEtriek.js","../src/layout/TabbedGrillaEtriek.js","../src/layout/contenidos/TextArea.js","../src/layout/contenidos/TextBox.js","../src/layout/contenidos/TextField.js","../src/utils/useReferenceLabel.js"],"sourcesContent":["import LockIcon from '@mui/icons-material/Lock';\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 { 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 { createContext } from 'react';\r\n\r\nexport const FichaContext = createContext({});\r\n","import { alpha } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { GridOverlay } from '@mui/x-data-grid';\r\nimport * as React from 'react';\r\n\r\nexport const useStyles = makeStyles(\r\n theme => ({\r\n /*shadow: {\r\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\r\n },*/\r\n root: {\r\n '& .MuiDataGrid-columnsContainer': {\r\n backgroundColor:\r\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\r\n },\r\n '& .MuiDataGrid-iconSeparator': {\r\n display: 'none',\r\n },\r\n },\r\n header: {\r\n color: theme.palette.secondary.contrastText,\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n rootPaper: {\r\n width: '100%',\r\n height: '40vh',\r\n borderRadius: 0,\r\n marginTop: theme.spacing(1),\r\n },\r\n rootOverlay: {\r\n flexDirection: 'column',\r\n '& .ant-empty-img-1': {\r\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\r\n },\r\n '& .ant-empty-img-2': {\r\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\r\n },\r\n '& .ant-empty-img-3': {\r\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\r\n },\r\n '& .ant-empty-img-4': {\r\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\r\n },\r\n '& .ant-empty-img-5': {\r\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\r\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\r\n },\r\n },\r\n label: {\r\n marginTop: theme.spacing(1),\r\n },\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: alpha(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n }),\r\n { name: 'GE' }\r\n);\r\nexport const CustomNoRowsOverlay = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <GridOverlay className={classes.rootOverlay}>\r\n <svg\r\n width=\"120\"\r\n height=\"100\"\r\n viewBox=\"0 0 184 152\"\r\n aria-hidden\r\n focusable=\"false\"\r\n >\r\n <g fill=\"none\" fillRule=\"evenodd\">\r\n <g transform=\"translate(24 31.67)\">\r\n <ellipse\r\n className=\"ant-empty-img-5\"\r\n cx=\"67.797\"\r\n cy=\"106.89\"\r\n rx=\"67.797\"\r\n ry=\"12.668\"\r\n />\r\n <path\r\n className=\"ant-empty-img-1\"\r\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-2\"\r\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\r\n />\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\r\n />\r\n </g>\r\n <path\r\n className=\"ant-empty-img-3\"\r\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\r\n />\r\n <g\r\n className=\"ant-empty-img-4\"\r\n transform=\"translate(149.65 15.383)\"\r\n >\r\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\r\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\r\n </g>\r\n </g>\r\n </svg>\r\n <div className={classes.label}>No hay registros</div>\r\n </GridOverlay>\r\n );\r\n};\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useDeleteRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useDeleteRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useDeleteRowEtrGrid = (resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider.deleteEtrRow(resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useDeleteRowEtrGrid;\r\n","import { useDataProvider } from 'react-admin';\r\nimport { useMutation } from 'react-query';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.createEtrRow() method, the result\r\n * of the call, and the loading state.\r\n *\r\n * The return value updates according to the request state:\r\n *\r\n * - start: [callback, { loading: true, loaded: false }]\r\n * - success: [callback, { data: [data from response], loading: false, loaded: true }]\r\n * - error: [callback, { error: [error from response], loading: false, loaded: true }]\r\n *\r\n * @param resource string El nombre del recurso\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useSaveRowEtrGrid } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useSaveRowEtrGrid('posts', 'getEstadoVistas', { funcod: '6', vistas: 'HAB' });\r\n * if (error) { return <p>ERROR</p>; }\r\n * return <button disabled={loading} onClick={requestFn}>Mostrar vistas</button>;\r\n * };\r\n */\r\nconst useSaveRowEtrGrid = (type, resource, params, options) => {\r\n const dataProvider = useDataProvider();\r\n const { mutate, isLoading } = useMutation(\r\n () => dataProvider[type](resource, { params }),\r\n options\r\n );\r\n\r\n return { mutate, isLoading };\r\n};\r\n\r\nexport default useSaveRowEtrGrid;\r\n","import AddIcon from '@mui/icons-material/Add';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport ActionDelete from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { alpha, createTheme, StyledEngineProvider } from '@mui/material';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Paper from '@mui/material/Paper';\nimport { adaptV4Theme, ThemeProvider } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport {\n Children,\n cloneElement,\n Fragment,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from 'react';\nimport {\n Button,\n Confirm,\n Form,\n Loading,\n SaveButton,\n SaveContextProvider,\n useDeleteWithConfirmController,\n useGetList,\n useNotify,\n useSafeSetState,\n useTranslate,\n} from 'react-admin';\nimport { useFormState } from 'react-hook-form';\nimport useNuevo from '../../../utils/useNuevo';\nimport { FichaContext } from '../../FichaContext';\nimport { CustomNoRowsOverlay } from './NoRowsOverlay';\nimport useDeleteRowEtrGrid from './useDeleteRowEtrGrid';\nimport useSaveRowEtrGrid from './useSaveRowEtrGrid';\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor:\n theme.palette.mode === 'light' ? '#fafafa' : '#1d1d1d',\n },\n '& .MuiDataGrid-iconSeparator': {\n display: 'none',\n },\n },\n header: {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.light,\n },\n rootPaper: {\n width: '100%',\n height: '40vh',\n borderRadius: 0,\n marginTop: theme.spacing(1),\n },\n rootOverlay: {\n flexDirection: 'column',\n '& .ant-empty-img-1': {\n fill: theme.palette.mode === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.mode === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.mode === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.mode === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.mode === 'light' ? '0.8' : '0.08',\n fill: theme.palette.mode === 'light' ? '#f5f5f5' : '#ffffff',\n },\n },\n label: {\n marginTop: theme.spacing(1),\n },\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n }),\n { name: 'EtrGrid' }\n);\n\nconst styleMargin = { marginLeft: '1.6rem', fontWeight: 'bold' };\n\nconst defaultIcon = <ActionDelete />;\n\nconst EtrDeleteWithConfirmButton = props => {\n const {\n api,\n classes: classesOverride,\n className,\n confirmTitle = 'ra.message.delete_title',\n confirmContent = 'ra.message.delete_content',\n icon = defaultIcon,\n record,\n redirect = false,\n onSuccess,\n onError,\n source,\n camposClaveFila,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const notify = useNotify();\n\n const { open, isLoading, handleDialogOpen, handleDialogClose } =\n useDeleteWithConfirmController({\n record,\n redirect,\n mutationOptions: {\n onSuccess,\n onError,\n },\n });\n //const resource = useResourceContext(props);\n const resource = props.resource;\n\n const { mutate: requestFn } = useDeleteRowEtrGrid(\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n notify('ra.notification.deleted', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'error' });\n },\n }\n );\n\n const clavesFila = Object.keys(record)\n .filter(key => camposClaveFila.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = record[key];\n return obj;\n }, {});\n\n const handleDelete = useCallback(\n event => {\n requestFn({\n payload: {\n ge: source,\n clavesFila,\n },\n });\n },\n [record]\n );\n\n return (\n <Fragment>\n <Button\n key=\"button\"\n onClick={handleDialogOpen}\n className={classes.deleteButton}\n {...rest}\n >\n {icon}\n </Button>\n <Confirm\n isOpen={open}\n loading={isLoading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n};\n\nconst EtrDialog = props => (\n <Dialog open={props.open} onClose={props.onClose} fullWidth>\n <DialogTitle>{`${props.labelEstado} ${props.label}`}</DialogTitle>\n <DialogContentText>\n <Typography\n component=\"span\"\n display=\"block\"\n variant=\"subtitle1\"\n style={{ ...styleMargin }}\n >\n {props.msgTitle}\n </Typography>\n {props.msgDesc}\n </DialogContentText>\n <Form\n resource={props.resource}\n onSubmit={props.onSubmit}\n //validate={customValidation}\n defaultValues={props.defaultValues}\n >\n {props.children}\n </Form>\n </Dialog>\n);\n\nEtrDialog.propTypes = {\n label: PropTypes.string,\n onClick: PropTypes.func,\n icon: PropTypes.any,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n labelEstado: PropTypes.string,\n msgTitle: PropTypes.any,\n msgDesc: PropTypes.any,\n resource: PropTypes.any,\n save: PropTypes.func,\n render: PropTypes.func,\n};\n\nconst EtrDeleteButton = props => {\n const { api, camposClaveFila, resource, source, row } = props;\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n\n return (\n <EtrDeleteWithConfirmButton\n api\n confirmTitle=\"ra.action.delete\"\n source={source}\n record={row}\n resource={resource}\n camposClaveFila={camposClaveFila}\n />\n );\n};\n\nconst EtrDialogChild = props => {\n const {\n resource,\n estado,\n editors,\n recordPadre,\n camposClaveFila,\n setOpen,\n isLoading,\n } = props;\n const { isDirty, isValid } = useFormState();\n\n return (\n <>\n <DialogContent>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n initialValue: recordPadre[child.props.source],\n fullWidth: true,\n disabled:\n child.props.disabled !== undefined\n ? child.props.disabled\n : estado !== 'N' &&\n camposClaveFila.indexOf(\n child.props.source\n ) !== -1,\n InputLabelProps: {\n shrink: true,\n },\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton disabled={!isDirty || !isValid} />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={isLoading}\n >\n <IconCancel />\n </Button>\n </DialogActions>\n </>\n );\n};\n\nconst EtrCreateButton = props => {\n const {\n api,\n editors,\n record: recordPadre,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n etrResource,\n } = props;\n const [open, setOpen] = useSafeSetState(false);\n const { data: initialValues } = useNuevo(etrResource, { enabled: open });\n const estado = 'N';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'createEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.created', { type: 'info' });\n }\n },\n onError: e => {\n notify(e.message, { type: 'error' });\n },\n }\n );\n const notify = useNotify();\n const translate = useTranslate();\n const etiqueta = translate('ra.action.create');\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...values, ...clavesFila },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n const saveContext = useMemo(\n () => ({\n save: handleSubmit,\n setOnFailure: e => console.log(e),\n }),\n [handleSubmit]\n );\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <AddIcon />\n </Button>\n <SaveContextProvider value={saveContext}>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={etiqueta}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n defaultValues={initialValues}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={recordPadre}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </SaveContextProvider>\n </>\n );\n};\n\nconst EtrEditButton = props => {\n const {\n api,\n editors,\n clavesFila,\n camposClaveFila,\n resource,\n label,\n source,\n row,\n } = props;\n const notify = useNotify();\n const translate = useTranslate();\n const [open, setOpen] = useSafeSetState(false);\n const estado = 'M';\n // TODO: refresh=true Refresca la grilla padre y la EtrGrid activa, no solamente la EtrGrid\n const { mutate: requestFn, isLoading } = useSaveRowEtrGrid(\n 'updateEtrRow',\n resource,\n {},\n {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n } else {\n setOpen(false);\n notify('ra.notification.updated', {\n type: 'info',\n messageArgs: { smart_count: 1 },\n });\n }\n },\n onError: e => {\n notify(e.message, { type: 'error' });\n },\n }\n );\n const etiqueta = translate('ra.action.edit');\n const labelEstado = etiqueta;\n //const camposClave = api.getAllColumns().filter(c => c && c.clave).map(column => column.field);\n\n const handleSubmit = values => {\n requestFn({\n payload: {\n data: { ...clavesFila, ...values },\n ge: source,\n camposClaveFila,\n estado,\n },\n });\n };\n\n return (\n <>\n <Button\n onClick={e => {\n setOpen(true);\n e.stopPropagation();\n }}\n >\n <EditIcon />\n </Button>\n <EtrDialog\n open={open}\n onClose={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n labelEstado={labelEstado}\n label={label}\n msgTitle={props.msgTitle}\n msgDesc={props.msgDesc}\n resource={resource}\n onSubmit={handleSubmit}\n >\n <EtrDialogChild\n resource={resource}\n estado={estado}\n editors={editors}\n recordPadre={row}\n camposClaveFila={camposClaveFila}\n isLoading={isLoading}\n setOpen={() => {\n setOpen(false);\n }}\n />\n </EtrDialog>\n </>\n );\n};\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n etrResource,\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n const classes = useStyles(props);\n const { isLoading: isLoadingParent } = useContext(FichaContext);\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const clavesFila = Object.keys(recordPadre)\n .filter(key => claves.split(',').includes(key))\n .reduce((obj, key) => {\n obj[key] = recordPadre[key];\n return obj;\n }, {});\n\n let filter = {};\n filterBy.split(',').forEach(field => {\n if (field) {\n filter[field] = [\n {\n type: 'string',\n comparison: 'eq',\n value: recordPadre[field],\n field: field,\n },\n ];\n }\n });\n\n const { data, isLoading } = useGetList(reference, {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter,\n options: {\n enabled: enableLoad && !isLoadingParent,\n },\n });\n\n const rows = useMemo(() => data.map(record => record.id), [data]);\n\n const columns = [\n allowAdd\n ? {\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => (\n <EtrCreateButton\n {...rest}\n etrResource={etrResource}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n />\n ),\n }\n : {},\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrEditButton\n {...rest}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n row={params.row}\n />\n ),\n },\n allowRemove\n ? {\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => (\n <EtrDeleteButton\n {...rest}\n camposClaveFila={claves}\n api={params.api}\n row={params.row}\n />\n ),\n }\n : {},\n ];\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n if (isLoading || isLoadingParent) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //isLoading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n sortModel={sortModel}\n rows={rows}\n columns={finalColumns}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, StyledEngineProvider } from '@mui/material';\nimport Paper from '@mui/material/Paper';\nimport { adaptV4Theme, ThemeProvider } from '@mui/material/styles';\nimport { DataGrid, esES } from '@mui/x-data-grid';\nimport * as React from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport { Loading, useGetList, useRecordContext } from 'react-admin';\nimport { FichaContext } from '../FichaContext';\nimport { CustomNoRowsOverlay, useStyles } from './EtrGrid/NoRowsOverlay';\n\nconst theme = createTheme(adaptV4Theme({}, esES));\n\nconst GE = props => {\n const {\n filterBy = '',\n sortModel,\n columns: defColumns,\n reference,\n filter = [],\n enableLoad = true,\n ...rest\n } = props;\n const 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 filterGe = [];\n\n filterBy.split(',').forEach(field => {\n if (field) {\n filterGe.push({\n type: 'string',\n comparison: 'eq',\n value: recordPadre?.field,\n field: field,\n });\n }\n });\n\n const finalFilter = { ...filterGe.concat(filter) };\n\n const { data, isLoading } = useGetList(reference, {\n pagination: { page: 1, perPage: 200 },\n sort: { field: sortField, order: sortDir },\n filter: finalFilter,\n options: {\n enabled: enableLoad && !isLoadingParent,\n },\n });\n\n const rows = useMemo(\n () => (data ? data.map(record => record.id) : []),\n [data]\n );\n\n if (isLoading || isLoadingParent) {\n return <Loading />;\n }\n\n return (\n <Paper className={classes.rootPaper}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <DataGrid\n //autoHeight\n //rowHeight={25}\n //loading\n className={classes.root}\n disableSelectionOnClick\n pageSize={50}\n hideFooter\n rows={rows}\n columns={columns}\n sortModel={sort}\n onSortModelChange={model => setSort(model)}\n //checkboxSelection\n components={{\n //header: <div>This is my custom Toolbar!</div>,\n NoRowsOverlay: CustomNoRowsOverlay,\n }}\n {...rest}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </Paper>\n );\n};\n\nexport default GE;\n","import * as React from 'react';\r\nimport { createContext, useContext, useMemo, useState } from 'react';\r\n\r\nexport const ProgressContext = createContext();\r\n\r\nexport const ProgressProvider = ({ children }) => {\r\n const [open, setOpen] = useState(false);\r\n\r\n const context = useMemo(\r\n () => ({\r\n open,\r\n show: () => setOpen(true),\r\n hide: () => setOpen(false),\r\n }),\r\n [open]\r\n );\r\n\r\n return (\r\n <ProgressContext.Provider value={context}>\r\n {children}\r\n </ProgressContext.Provider>\r\n );\r\n};\r\n\r\nconst useFormProgress = () => useContext(ProgressContext);\r\n\r\nexport default useFormProgress;\r\n","// ACTION `RELOAD_CB`\nexport const recargarComboBox = (id, method, params, callback) => ({\n type: 'RELOAD_CB',\n payload: {\n id,\n method,\n params,\n callback,\n },\n});\n\n// ACTION `RELOAD_CB_SUCCESS`\nexport const deleteRecargarComboBox = (id, callback) => ({\n type: 'RELOAD_CB_SUCCESS',\n payload: { id, callback },\n});\n\nexport const setHiddenAction = (id, hidden) => ({\n type: 'HIDE_INPUT',\n payload: {\n id,\n hidden,\n },\n});\n\nexport const setDisableAction = (id, disabled) => ({\n type: 'DISABLE_INPUT',\n payload: {\n id,\n disabled,\n },\n});\n\nexport const setRequireAction = (id, required) => ({\n type: 'REQUIRE_INPUT',\n payload: {\n id,\n required,\n },\n});\n\nexport const setErrorAction = (id, error) => ({\n type: 'ERROR_INPUT',\n payload: {\n id,\n error,\n },\n});\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport {\n recargarComboBox,\n setDisableAction,\n setHiddenAction,\n setRequireAction,\n setErrorAction,\n} from './actions';\n\nexport const useRecargarComboBox = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, method, params, callback) => {\n dispatch(recargarComboBox(id, method, params, callback));\n },\n [dispatch]\n );\n};\n\nexport const useSetHidden = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, hidden) => {\n dispatch(setHiddenAction(id, hidden));\n },\n [dispatch]\n );\n};\n\nexport const useSetDisable = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, disable) => {\n dispatch(setDisableAction(id, disable));\n },\n [dispatch]\n );\n};\n\nexport const useSetRequire = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, required) => {\n dispatch(setRequireAction(id, required));\n },\n [dispatch]\n );\n};\n\nexport const useSetError = () => {\n const dispatch = useDispatch();\n return useCallback(\n (id, error) => {\n dispatch(setErrorAction(id, error));\n },\n [dispatch]\n );\n};\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 {\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\n return {\n ajax,\n notify,\n redirect,\n recargarComboBox,\n progress,\n setHidden,\n setDisable,\n setRequire,\n setError,\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\n return {\n form,\n ajax,\n notify,\n redirect,\n recargarComboBox,\n progress,\n setHidden,\n setDisable,\n setRequire,\n setError,\n };\n};\n\nexport default useUtilsFicha;\n","import { useMediaQuery } from '@mui/material';\r\nimport * as React from 'react';\r\nimport {\r\n Datagrid,\r\n EditButton,\r\n SimpleList,\r\n useRecordContext,\r\n useResourceDefinition,\r\n} from 'react-admin';\r\nimport useInitGrilla from '../utils/useInitGrilla';\r\n\r\nconst esEditable = (record, isRowEditable) =>\r\n isRowEditable === undefined ||\r\n (typeof isRowEditable === 'function' && isRowEditable(record));\r\n\r\nconst EditButtonGrilla = props => {\r\n const { isRowEditable, ...rest } = props;\r\n const record = useRecordContext(props);\r\n\r\n return esEditable(record, isRowEditable) ? (\r\n <EditButton {...rest} />\r\n ) : null;\r\n};\r\n\r\nconst GrillaEtriek = props => {\r\n useInitGrilla(props);\r\n\r\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('md'));\r\n const {\r\n hasEdit,\r\n options: { borra },\r\n } = useResourceDefinition(props);\r\n const {\r\n isRowEditable,\r\n primaryText: pt,\r\n secondaryText: st,\r\n desktopSize = false,\r\n onRenderGrilla,\r\n onLoadGrilla,\r\n hasEdit: hasEditProps,\r\n ...rest\r\n } = props;\r\n const children = props.children;\r\n const count = React.Children.count(props.children);\r\n let primaryText = pt;\r\n let secondaryText = st;\r\n\r\n if (!pt) {\r\n if (count >= 4) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count >= 3) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count >= 2) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count === 1) {\r\n primaryText = record => record[children[0].props.source];\r\n }\r\n }\r\n\r\n if (!st) {\r\n if (count >= 4) {\r\n secondaryText = record =>\r\n `${record[children[2].props.source]} - ${\r\n record[children[3].props.source]\r\n }`;\r\n } else if (count >= 3) {\r\n secondaryText = record => record[children[2].props.source];\r\n } else if (count >= 2) {\r\n primaryText = record =>\r\n `${record[children[0].props.source]} - ${\r\n record[children[1].props.source]\r\n }`;\r\n } else if (count === 1) {\r\n primaryText = record => record[children[0].props.source];\r\n }\r\n }\r\n\r\n return isSmall && desktopSize === false ? (\r\n <SimpleList\r\n linkType={record =>\r\n hasEdit && esEditable(record, isRowEditable) ? 'edit' : false\r\n }\r\n primaryText={primaryText}\r\n secondaryText={secondaryText}\r\n />\r\n ) : (\r\n <Datagrid\r\n //classes={{rowOdd: classes.rowOdd}}\r\n {...rest}\r\n >\r\n {React.Children.map(children, child =>\r\n !child.props.hidden ? child : null\r\n )}\r\n {hasEdit && <EditButtonGrilla isRowEditable={isRowEditable} />}\r\n {/*{borra === '1' && <DeleteButton confirmTitle=\"ra.action.delete\" mutationMode=\"pessimistic\"/>}*/}\r\n </Datagrid>\r\n );\r\n};\r\n\r\nexport default GrillaEtriek;\r\n","import { useEffect } from 'react';\r\nimport { useListContext } from 'react-admin';\r\nimport { useUtilsGrilla } from './useUtils';\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const { isLoading } = useListContext();\r\n const utils = useUtilsGrilla(props);\r\n\r\n useEffect(() => {\r\n onRenderGrilla && onRenderGrilla(utils);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n onLoadGrilla && onLoadGrilla(utils);\r\n }\r\n }, [isLoading]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from './useUtils';\r\n\r\nconst useInitFicha = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const fichaProps = useFormulario(rest);\r\n\r\n return { fichaProps };\r\n};\r\n\r\nexport default useInitFicha;\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 },\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 {...rest} {...fichaProps?.panel} />\r\n </FichaContext.Provider>\r\n </ProgressProvider>\r\n );\r\n};\r\n\r\nCreateEtriek.propTypes = {\r\n useFormulario: PropTypes.func,\r\n};\r\n\r\nexport { CreateEtriek };\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ActionDelete from '@mui/icons-material/Delete';\nimport IconButton from '@mui/material/IconButton';\nimport { alpha } from '@mui/material/styles';\nimport Tooltip from '@mui/material/Tooltip';\nimport { makeStyles } from '@mui/styles';\nimport classnames from 'clsx';\nimport * as React from 'react';\nimport { useDelete, useRecordContext, useTranslate } from 'react-admin';\n\nconst sanitizeRestProps = ({\n classes,\n filterValues,\n handleSubmit,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n redirect,\n ...rest\n}) => rest;\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst DeleteButtonNoWarning = props => {\n const classes = useStyles(props);\n const translate = useTranslate();\n const {\n resource,\n redirect,\n className,\n icon,\n label = 'ra.action.delete',\n ...rest\n } = props;\n\n const record = useRecordContext();\n const [deleteOne, { isLoading }] = useDelete(resource, { id: record.id });\n\n return (\n <Tooltip title={translate('ra.action.delete')}>\n <IconButton\n disabled={isLoading}\n onClick={() => deleteOne()}\n label={label}\n className={classnames(\n 'ra-delete-button',\n classes.deleteButton,\n className\n )}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n size=\"large\"\n >\n {icon}\n </IconButton>\n </Tooltip>\n );\n};\n\nDeleteButtonNoWarning.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete />,\n};\n\nexport default DeleteButtonNoWarning;\n","import * 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 { useFormulario = useDefaultHook, ...rest } = props;\n const controllerProps = useEditController(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 transform={defaultTransform}\n {...rest}\n {...fichaProps?.panel}\n />\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n button: {\n margin: theme.spacing(1),\n },\n input: {\n display: 'none',\n },\n}));\n\nconst FormDialog = React.forwardRef((props, ref) => {\n const {\n isOpen,\n onConfirm,\n onClose,\n title,\n dialogText,\n children,\n hasAccept = true,\n hasCancel = true,\n isLoading = false,\n } = props;\n const classes = useStyles(props);\n\n const handleConfirm = e => {\n onConfirm && onConfirm(e);\n };\n\n const handleClose = e => {\n onClose && onClose(e);\n };\n\n return (\n <Dialog\n ref={ref}\n open={isOpen}\n fullWidth\n onClose={handleClose}\n aria-labelledby=\"form-dialog-title\"\n >\n <DialogTitle id=\"form-dialog-title\">{title}</DialogTitle>\n <DialogContent>\n <DialogContentText>{dialogText}</DialogContentText>\n {children}\n </DialogContent>\n {(hasAccept || hasCancel) && (\n <DialogActions>\n {hasCancel && (\n <Button\n onClick={handleClose}\n variant=\"contained\"\n color=\"secondary\"\n className={classes.button}\n disabled={isLoading}\n >\n Cancelar\n </Button>\n )}\n {hasAccept && (\n <Button\n onClick={handleConfirm}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n disabled={isLoading}\n >\n Ok\n </Button>\n )}\n </DialogActions>\n )}\n </Dialog>\n );\n});\n\nexport default FormDialog;\n","import { CardContent, CircularProgress } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useContext, useEffect } from 'react';\nimport { useResourceContext } from 'react-admin';\nimport useUtilsFicha from '../utils/useUtils';\nimport { FichaContext } from './FichaContext';\nimport useFormProgress from './ProgressContext';\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n block: {\n pointerEvents: 'none',\n backgroundColor: '#ffffff',\n opacity: 0.6,\n position: 'relative',\n },\n progress: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n },\n}));\n\nconst FormContainer = props => {\n const cls = useStyles(props);\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, isLoading, initialValues, fichaProps } =\n useContext(FichaContext);\n const utils = useUtilsFicha({ resource });\n\n useEffect(() => {\n fichaProps.onRenderFicha && fichaProps.onRenderFicha(utils, estado);\n }, []);\n\n useEffect(() => {\n if (!isLoading) {\n fichaProps.onLoadFicha &&\n fichaProps.onLoadFicha(utils, estado, initialValues);\n }\n }, [isLoading]);\n\n return (\n <CardContent className={context.open ? cls.block : ''} sx={props.sx}>\n {context.open && (\n <CircularProgress\n className={cls.progress}\n thickness={4}\n size={50}\n />\n )}\n {props.children}\n </CardContent>\n );\n};\n\nexport default FormContainer;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport { SimpleForm, useNotify, useSaveContext } from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\n\nconst dontSave = () => {};\n\nconst FormEtriek = props => {\n const { children, ...rest } = props;\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config = {} } = fichaProps;\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const finalSave = 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 if (!initialValues) return null;\n\n return (\n <SimpleForm\n onSubmit={\n typeof onBeforeSubmitFicha === 'function'\n ? finalSave\n : undefined\n }\n defaultValues={initialValues}\n component={FormContainer}\n mode=\"onBlur\"\n {...rest}\n {...config}\n >\n {children}\n </SimpleForm>\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 '& 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 LockIcon from '@mui/icons-material/Lock';\nimport Avatar from '@mui/material/Avatar';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardActions from '@mui/material/CardActions';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { makeStyles } from '@mui/styles';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport {\n Form,\n TextInput,\n PasswordInput,\n useLogin,\n useNotify,\n useTranslate,\n} from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles(theme => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n alignItems: 'center',\n justifyContent: 'flex-start',\n backgroundImage: ({ loginBackgroundImage }) => loginBackgroundImage,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n avatarIcon: {\n backgroundColor: theme.palette.secondary.main,\n },\n icon: ({ textLength }) => ({\n position: 'absolute',\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1),\n }),\n hint: {\n marginTop: '1em',\n display: 'flex',\n justifyContent: 'center',\n color: theme.palette.grey[500],\n },\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n actions: {\n padding: '0 1em 1em 1em',\n },\n}));\n\nconst Login = props => {\n const {\n loginBackgroundImage,\n nameSource = 'username',\n passwordSource = 'password',\n } = props;\n const [loading, setLoading] = useState(false);\n const translate = useTranslate();\n const loginButtonText = translate('ra.auth.sign_in');\n const classes = useStyles({\n loginBackgroundImage,\n textLength: loginButtonText.length,\n });\n const notify = useNotify();\n const login = useLogin();\n const location = useLocation();\n\n const handleSubmit = values => {\n setLoading(true);\n login(values, location.state ? location.state.nextPathname : '/').catch(\n error => {\n setLoading(false);\n notify(\n typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? 'ra.auth.sign_in_error'\n : error.message,\n {\n type: 'error',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n },\n }\n );\n }\n );\n };\n\n const validate = values => {\n const errors = {};\n if (!values[nameSource]) {\n errors[nameSource] = translate('ra.validation.required');\n }\n if (!values[passwordSource]) {\n errors[passwordSource] = translate('ra.validation.required');\n }\n return errors;\n };\n\n return (\n <Form onSubmit={handleSubmit} validate={validate}>\n <div className={classes.main}>\n <Card className={classes.card}>\n <div className={classes.avatar}>\n <Avatar className={classes.avatarIcon}>\n <LockIcon />\n </Avatar>\n </div>\n <div className={classes.hint}>Inicio de Sesión</div>\n <div className={classes.form}>\n <div className={classes.input}>\n <TextInput\n autoFocus\n name={nameSource}\n label={translate('ra.auth.username')}\n disabled={loading}\n />\n </div>\n <div className={classes.input}>\n <PasswordInput\n name={passwordSource}\n label={translate('ra.auth.password')}\n type=\"password\"\n disabled={loading}\n />\n </div>\n </div>\n <CardActions className={classes.actions}>\n <Button\n variant=\"contained\"\n type=\"submit\"\n color=\"primary\"\n disabled={loading}\n fullWidth\n >\n {loading && (\n <CircularProgress\n className={classes.icon}\n size={18}\n thickness={2}\n />\n )}\n {loginButtonText}\n </Button>\n </CardActions>\n </Card>\n </div>\n </Form>\n );\n};\n\nexport default Login;\n","import Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport { makeStyles } from '@mui/styles';\nimport classnames from 'clsx';\nimport * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { Button, FieldTitle, useResourceContext } from 'react-admin';\n\nconst sanitizeRestProps = ({\n displayedFilters,\n filterValues,\n showFilter,\n ...rest\n}) => rest;\n\n// TODO: Pasar useStyles a propiedad SX\nconst useStyles = makeStyles({\n root: { display: 'inline-block' },\n paddingRight: { paddingRight: 4 },\n});\n\nconst MenuButton = props => {\n const {\n className,\n options = [],\n icon: Icon,\n label,\n disabled,\n ...rest\n } = props;\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const [selectedIndex, setSelectedIndex] = useState(0);\n const classes = useStyles(props);\n const resource = useResourceContext(props);\n\n const handleMenuItemClick = (event, index) => {\n setSelectedIndex(index);\n setOpen(false);\n return true;\n };\n\n const handleToggle = e => {\n // This prevents ghost click.\n e.preventDefault();\n setOpen(true);\n anchorEl.current = e.currentTarget;\n };\n\n const handleClose = event => {\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\n return;\n }\n setOpen(false);\n };\n\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Button\n className=\"add-filter\"\n //label={options[selectedIndex].label}\n label={label}\n onClick={handleToggle}\n title={options[selectedIndex].label}\n disabled={disabled}\n >\n {options[selectedIndex]?.icon || Icon}\n </Button>\n <Menu open={open} anchorEl={anchorEl.current} onClose={handleClose}>\n {options.map((option, index) => (\n <MenuItem\n key={option.label}\n disabled={option.disabled}\n selected={index === selectedIndex}\n onClick={event => {\n handleMenuItemClick(event, index);\n option.onClick && option.onClick(event, index);\n }}\n resource={resource}\n title={option.label}\n >\n {option.icon}\n <span className={classes.paddingRight}></span>\n <FieldTitle label={option.label} resource={resource} />\n </MenuItem>\n ))}\n </Menu>\n </div>\n );\n};\n\nexport default MenuButton;\n","import * as React from 'react';\nimport { useCallback, useContext } from 'react';\nimport {\n SaveContextProvider,\n TabbedForm,\n useNotify,\n useSaveContext,\n} from 'react-admin';\nimport { useUtilsSubmit } from '../utils';\nimport { FichaContext } from './FichaContext';\nimport FormContainer from './FormContainer';\n\nconst dontSave = () => {};\n\nexport const TabbedFormEtriek = props => {\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config = {} } = fichaProps;\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n const { save } = useSaveContext();\n\n const finalSave = useCallback(\n values => {\n const valid =\n onBeforeSubmitFicha &&\n onBeforeSubmitFicha({ form: { values }, ...utils }, 'N');\n if (typeof valid === 'string') {\n notify(valid, { type: 'error' });\n return dontSave();\n } else {\n return valid === undefined || valid ? save(values) : dontSave();\n }\n },\n [onBeforeSubmitFicha, notify, dontSave, save]\n );\n\n if (!initialValues) return null;\n\n return (\n <TabbedForm\n {...props}\n {...config}\n onSubmit={\n typeof onBeforeSubmitFicha === 'function'\n ? finalSave\n : undefined\n }\n defaultValues={initialValues}\n component={FormContainer}\n /*toolbar={<ToolbarFicha/>}*/\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n syncWithLocation: false,\n};\n","import { defaultTheme } from 'react-admin';\n\n// TODO: Probablemente no sea necesario sobreescribir nada de los temas\n\nconst darkTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'dark',\n },\n components: {\n ...defaultTheme.components,\n MuiTextField: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n MuiFormControl: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nconst lightTheme = {\n ...defaultTheme,\n palette: {\n ...defaultTheme.palette,\n mode: 'light',\n },\n components: {\n ...defaultTheme.components,\n MuiTextField: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n MuiFormControl: {\n defaultProps: {\n variant: 'outlined',\n },\n },\n RaSidebar: {\n root: {\n drawerPaper: {\n position: 'sticky', //Para que el menú no escrolee con el contenido del Admin\n },\n },\n },\n RaRichTextInput: {\n root: {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0',\n },\n },\n },\n },\n },\n },\n },\n};\n\nexport { lightTheme, darkTheme };\n","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\n\r\nconst esMessages = {\r\n ...spanishMessages,\r\n login: {\r\n id: 'Cédula',\r\n hint: 'Inicio de Sesión',\r\n required: 'Ingrese Usuario o Cédula',\r\n email: 'Ingrese su email aquí',\r\n send: 'Enviar',\r\n check_email:\r\n 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\r\n must_enter_credentials:\r\n 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\r\n restore_password: 'Restablecer Contraseña',\r\n punch_in: 'Generar Marcas',\r\n },\r\n pos: {\r\n search: 'Búsqueda',\r\n change_pin: 'Cambiar Pin',\r\n change_password: 'Cambiar Contraseña',\r\n configuration: 'Configuración',\r\n language: 'Lenguaje',\r\n theme: {\r\n name: 'Tema Visual',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n dashboard: {\r\n welcome: {\r\n title: 'Bienvenid@',\r\n subtitle: 'Gestión de Funcionarios',\r\n aor_button: 'Sitio de Metiri',\r\n },\r\n },\r\n },\r\n validation: {\r\n greater_or_equal: 'Debe ser mayor o igual a %{menor}',\r\n },\r\n //...resources\r\n};\r\n\r\nexport default esMessages;\r\n","import { useContext } from 'react';\r\nimport { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst useFieldController = props => {\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { hidden: hiddenProps = false, ...rest } = props;\r\n const {\r\n hidden: hiddenInitial,\r\n useContenido = useDefaultHook,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n ...restInitialProps,\r\n });\r\n const { hidden: oculto, ...dynamicPropsRest } = dynamicProps;\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${props.source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n return {\r\n propsContenido: {\r\n ...rest,\r\n ...restInitialProps,\r\n ...dynamicPropsRest,\r\n },\r\n hidden: oculto !== undefined ? oculto : hidden,\r\n };\r\n};\r\n\r\nexport default useFieldController;\r\n","import { useContext, useRef } from 'react';\r\nimport { useInput } from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\nimport { etrRequerido } from '../../utils';\r\nimport useUtilsFicha, { useDefaultHook } from '../../utils/useUtils';\r\nimport { FichaContext } from '../FichaContext';\r\n\r\nconst useContenidoController = props => {\r\n const { source } = props;\r\n const { estado, isLoading, fichaProps = {} } = useContext(FichaContext);\r\n const configInput = useSelector(state => {\r\n const configInputs = state.configInputs\r\n ? state.configInputs.filter(item => item.id === source)\r\n : [];\r\n return configInputs[0] ? configInputs[0] : null;\r\n });\r\n const {\r\n disabled: reduxDisabled,\r\n hidden: reduxHidden,\r\n required: reduxRequired,\r\n error: reduxError,\r\n } = configInput || {};\r\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\r\n const reduxValidateError = reduxError ? () => reduxError : undefined;\r\n\r\n const { [source]: initialProps = {} } = fichaProps;\r\n const {\r\n onFocus: onFocusProps,\r\n onChange: onChangeProps,\r\n onBlur: onBlurProps,\r\n hidden: hiddenProps = false,\r\n disabled: disabledProps = false,\r\n validate: propValidate,\r\n ...rest\r\n } = props;\r\n const { field } = useInput(props);\r\n const {\r\n onFocus: onFocusInitial,\r\n onBlur: onBlurInitial,\r\n onChange: onChangeInitial,\r\n hidden: hiddenInitial,\r\n disabled: disabledInitial,\r\n useContenido = useDefaultHook,\r\n validate: initValidate,\r\n ...restInitialProps\r\n } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const disabled =\r\n disabledInitial !== undefined ? disabledInitial : disabledProps;\r\n const onFocus =\r\n onFocusInitial !== undefined ? onFocusInitial : onFocusProps;\r\n const onBlur = onBlurInitial !== undefined ? onBlurInitial : onBlurProps;\r\n const onChange =\r\n onChangeInitial !== undefined ? onChangeInitial : onChangeProps;\r\n const utils = useUtilsFicha(props);\r\n const dynamicProps = useContenido({\r\n ...rest,\r\n estado,\r\n hidden,\r\n isLoading,\r\n utils,\r\n ...restInitialProps,\r\n });\r\n const previousValue = useRef(field.value);\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(\r\n `useContenido está devolviendo undefined para el contenido ${source}\\n Asegúrese de incluir una instrucción return al final de la función`\r\n );\r\n }\r\n\r\n const {\r\n hidden: hiddenDinamico,\r\n disabled: disabledDinamico,\r\n onFocus: onFocusDinamico,\r\n onChnage: onChangeDinamico,\r\n onBlur: onBlurDinamico,\r\n validate: dynamicValidate,\r\n ...dynamicPropsRest\r\n } = dynamicProps;\r\n const onFocusFinal = onFocusDinamico || onFocus;\r\n const onBlurFinal = onBlurDinamico || onBlur;\r\n const onChangeFinal = onChangeDinamico || onChange;\r\n\r\n const argCero = { ...utils, prev: previousValue.current };\r\n const finalPropsValidate = Array.isArray(propValidate)\r\n ? propValidate\r\n : [propValidate];\r\n const finalInitValidate = Array.isArray(initValidate)\r\n ? initValidate\r\n : [initValidate];\r\n const finalDynamicValidate = Array.isArray(dynamicValidate)\r\n ? dynamicValidate\r\n : [dynamicValidate];\r\n const finalValidate = [\r\n ...finalPropsValidate,\r\n ...finalInitValidate,\r\n ...finalDynamicValidate,\r\n 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 * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport {\n AutocompleteInput,\n ReferenceInput,\n useChoicesContext,\n} from 'react-admin';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { deleteRecargarComboBox } from '../../utils';\nimport useContenidoController from './useContenidoController';\n\nexport const SelectInputEtriek = props => {\n const { callback, sx, ...rest } = props;\n const { isLoading, allChoices } = useChoicesContext();\n\n useEffect(() => {\n if (!isLoading) {\n // Llamo al callback de recargarComboBox pasándole los nuevos items\n if (typeof callback === 'function') {\n callback(Object.values([allChoices]));\n }\n }\n //TODO: Siempre entra al useEffect porque callback siempre cambia, aunque no siempre llama por ajax, porque no cambiaron los parámetros de la acción de redux\n // Sacar `callback` del array de dependencias y probar si entra al useEffect al cambiar los parámetros de recargarComboBox\n }, [allChoices, callback, isLoading]);\n\n return (\n <AutocompleteInput\n size=\"small\"\n {...rest}\n sx={{ ...sx, display: 'inline-flex', margin: 1 }}\n />\n );\n};\n\nconst ComboBox = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n const dispatch = useDispatch();\n\n const { source, reference } = props;\n const recarga_cb = useSelector(state => {\n const rcb = state.reload_cb\n ? state.reload_cb.filter(item => item.id === source)\n : [];\n return rcb[0] ? rcb[0] : null;\n });\n const respaldoFiltro = useRef(recarga_cb);\n const filter =\n recarga_cb === null && respaldoFiltro.current\n ? respaldoFiltro.current\n : recarga_cb;\n\n let callback, finalFilter;\n if (filter) {\n const { callback: tempCallback, ...restFilter } = filter;\n callback = tempCallback;\n finalFilter = restFilter;\n }\n\n useEffect(() => {\n if (recarga_cb !== null) {\n respaldoFiltro.current = recarga_cb;\n dispatch(deleteRecargarComboBox(source));\n }\n }, [JSON.stringify(recarga_cb)]);\n\n return !hidden ? (\n <ReferenceInput reference={reference} source={source} perPage={500}>\n <SelectInputEtriek\n {...propsContenido}\n callback={callback}\n optionText=\"etiqueta\"\n optionValue={source}\n />\n </ReferenceInput>\n ) : null;\n};\nexport default ComboBox;\n","import { 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 ActionCheck from '@mui/icons-material/CheckCircle';\r\nimport AlertError from '@mui/icons-material/ErrorOutline';\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\nimport { useSelector } from 'react-redux';\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 IconButton from '@mui/material/IconButton';\nimport CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport * as React from 'react';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { TextInput } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport { Box } from '@mui/material';\nimport FiltroAsis from './FiltroAsis';\n\nconst BulkActions = () => <Fragment />;\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n //console.log({ format: v });\n if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v });\n return v;\n};\n\nconst TextBoxSelection = props => {\n const { disabled, asistant, asistantResource, label, source, ...rest } =\n props;\n const [open, setOpen] = useState(false);\n const form = useFormContext();\n\n useEffect(() => {\n // No funciona el defaultValue\n handleTodos();\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, selectedIds) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n };\n\n return (\n <>\n <Box display=\"flex\" alignItems=\"center\" sx={{ mt: 1, mb: 0.5 }}>\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroAsis\n isOpen={open}\n title={`Selección de ${label}`}\n contentResource={asistantResource}\n content={React.createElement(asistant, {\n bulkActionButtons: <BulkActions />,\n hasCreate: false,\n exporter: false,\n resource: asistantResource,\n })}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n );\n};\n\nexport default TextBoxSelection;\n","import { Box, Paper } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { alpha } from '@mui/material/styles';\nimport { makeStyles } from '@mui/styles';\nimport ActionCheck from '@mui/icons-material/CheckCircle';\nimport AlertError from '@mui/icons-material/ErrorOutline';\nimport classnames from 'clsx';\nimport { TreeView } from 'devextreme-react';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n Datagrid,\n List,\n TextField,\n useDataProvider,\n useTranslate,\n} from 'react-admin';\nimport Draggable from 'react-draggable';\n\nconst PostList = props => (\n <List\n {...props}\n hasCreate={false}\n exporter={false}\n perPage={50}\n empty={false}\n title=\" \"\n >\n <Datagrid bulkActionButtons={<span />}>\n <TextField source=\"funced\" sortable label=\"Cédula\" />\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\n </Datagrid>\n </List>\n);\n\nconst filtroInicial = { fillista: 'empcod=-1' };\n\nconst TreeWithList = props => {\n const [filtro, setFiltro] = React.useState(filtroInicial);\n const dataProvider = useDataProvider();\n\n const onClick = useCallback(\n e => {\n setFiltro({ fillista: e.node.key });\n },\n [setFiltro]\n );\n\n const createChildren = useCallback(\n parent => {\n const parentId = parent ? parent.itemData.id : '';\n\n return dataProvider\n .getChildNodes('form_224', { parentId: parentId })\n .then(response => response.data)\n .catch(() => {\n throw new Error('Data Loading Error');\n });\n },\n [dataProvider]\n );\n\n return (\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\n <Box flexGrow={1}>\n <TreeView\n id=\"funcionarios-treeview\"\n dataStructure=\"plain\"\n rootValue=\"\"\n onItemClick={onClick}\n createChildren={createChildren}\n />\n </Box>\n <Box flexGrow={2}>\n <PostList resource=\"form_224\" filter={filtro} />\n </Box>\n </Box>\n );\n};\n\nconst useStyles = makeStyles(\n theme => ({\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n }),\n { name: 'RaConfirm' }\n);\n\nconst PaperComponent = props => (\n <Draggable\n handle=\"#draggable-dialog-title\"\n cancel={'[class*=\"MuiDialogContent-root\"]'}\n >\n <Paper {...props} />\n </Draggable>\n);\n\nconst cursorStyle = { cursor: 'move' };\n\nconst FiltroFuncionarios = props => {\n const {\n isOpen,\n isLoading,\n title,\n cancel,\n confirmColor,\n ConfirmIcon,\n CancelIcon,\n onClose,\n onConfirm,\n translateOptions = {},\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const handleConfirm = useCallback(\n (e, button) => {\n e.stopPropagation();\n onConfirm(e, button);\n },\n [onConfirm]\n );\n\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"lg\"\n PaperComponent={PaperComponent}\n aria-labelledby=\"draggable-dialog-title\"\n >\n <DialogTitle style={cursorStyle} id=\"draggable-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent dividers={true}>\n <TreeWithList />\n </DialogContent>\n <DialogActions>\n <Button disabled={isLoading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={isLoading}\n onClick={e => handleConfirm(e, 'yes')}\n className={classnames('ra-confirm', {\n [classes.confirmWarning]: confirmColor === 'warning',\n [classes.confirmPrimary]: confirmColor === 'primary',\n })}\n autoFocus\n >\n <ConfirmIcon className={classes.iconPaddingStyle} />\n {translate('ra.action.confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nFiltroFuncionarios.propTypes = {\n cancel: PropTypes.string,\n classes: PropTypes.object,\n confirm: PropTypes.string,\n confirmColor: PropTypes.string,\n ConfirmIcon: PropTypes.elementType,\n CancelIcon: PropTypes.elementType,\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n};\n\nFiltroFuncionarios.defaultProps = {\n cancel: 'ra.action.cancel',\n classes: {},\n confirmColor: 'primary',\n ConfirmIcon: ActionCheck,\n CancelIcon: AlertError,\n isOpen: false,\n};\n\nexport default FiltroFuncionarios;\n","import CheckIcon from '@mui/icons-material/Check';\nimport RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';\nimport SearchIcon from '@mui/icons-material/Search';\nimport IconButton from '@mui/material/IconButton';\nimport * as React from 'react';\nimport { Fragment, useCallback, useEffect, useState } from 'react';\nimport { TextInput, useRecordSelection } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport { Box } from '@mui/material';\nimport FiltroFuncionarios from './FiltroFuncionarios';\n\nconst defaultValue = {\n seleccion: [],\n all: true,\n none: false,\n};\n\nconst format = v => {\n if (!v || v?.all) {\n return 'Todos';\n } else if (v?.none || v.seleccion.length === 0) {\n return 'Ninguno';\n }\n\n return `Selección (${v.seleccion.length})`;\n};\n\nconst parse = v => {\n //console.log({ parse: v })\n return v;\n};\n\nconst TBSF = props => {\n const {\n disabled,\n asistant,\n asistantResource,\n label = 'Funcionarios',\n source,\n ...rest\n } = props;\n const [selectedIds] = useRecordSelection('form_224');\n const [open, setOpen] = useState(false);\n const form = useFormContext();\n\n useEffect(() => {\n // No funciona el defaultValue\n handleTodos();\n }, []);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, button) => {\n setOpen(false);\n form.setValue(source, {\n seleccion: selectedIds,\n all: false,\n none: false,\n });\n };\n\n const handleNinguno = e => {\n form.setValue(source, {\n seleccion: [],\n all: false,\n none: true,\n });\n };\n\n const handleTodos = e => {\n form.setValue(source, {\n seleccion: [],\n all: true,\n none: false,\n });\n };\n\n return (\n <>\n <Box display=\"flex\" alignItems=\"center\" sx={{ mt: 1, mb: 0.5 }}>\n <TextInput\n defaultValue={defaultValue}\n {...rest}\n source={source}\n label={label}\n disabled\n parse={parse}\n format={format}\n helperText={false}\n InputProps={{\n endAdornment: (\n <>\n <IconButton\n onClick={handleNinguno}\n disabled={disabled}\n aria-label=\"Ninguno\"\n size=\"small\"\n title=\"Ninguno\"\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n <IconButton\n onClick={handleTodos}\n disabled={disabled}\n aria-label=\"Todos\"\n size=\"small\"\n title=\"Todos\"\n >\n <CheckIcon />\n </IconButton>\n <IconButton\n onClick={e => setOpen(true)}\n disabled={disabled}\n aria-label=\"Selección\"\n size=\"small\"\n title=\"Selección\"\n >\n <SearchIcon />\n </IconButton>\n </>\n ),\n }}\n />\n </Box>\n <FiltroFuncionarios\n isOpen={open}\n title={`Selección de ${label}`}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n );\n};\n\nexport default TBSF;\n","import * as React from 'react';\r\nimport { BooleanField as RaBooleanField, useRecordContext } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst BooleanField = props => {\r\n const { propsContenido, hidden } = useFieldController(props);\r\n const record = useRecordContext();\r\n const boolRecord = JSON.parse(JSON.stringify(record));\r\n const value = boolRecord[props.source];\r\n boolRecord[props.source] = value != '' && value != '0';\r\n\r\n return (\r\n !hidden && <RaBooleanField {...propsContenido} record={boolRecord} />\r\n );\r\n};\r\n\r\nexport default BooleanField;\r\n","import * as React from 'react';\r\nimport { 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\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 accept=\"\" maxSize={5000000} {...propsContenido}>\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 { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <BooleanInput {...propsContenido} />;\r\n};\r\n\r\nexport default CheckBox;\r\n","import * as React from 'react';\r\nimport { SelectInput } from 'react-admin';\r\nimport useContenidoController from './useContenidoController';\r\n\r\nconst ComboBoxManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return !hidden && <SelectInput {...propsContenido} />;\r\n};\r\n\r\nexport default ComboBoxManual;\r\n","import 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';\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 ListActionsEtriek = props => {\n const { className, exporter, filters, children, jsBotonGrilla, ...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\n return useMemo(\n () => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\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 => jsBotonGrilla(utilsGrilla, child.key)\n : null,\n options: child.props.options\n ? child.props.options.map(option => ({\n ...option,\n onClick: e =>\n jsBotonGrilla(utilsGrilla, option.key),\n }))\n : null,\n })\n )}\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\n );\n};\n\nexport default ListActionsEtriek;\n","import * as React from 'react';\nimport { ReferenceArrayInput, SelectArrayInput } from 'react-admin';\nimport useContenidoController from './useContenidoController';\n\nconst ListCheck = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n const { source, reference } = props;\n\n return !hidden ? (\n <ReferenceArrayInput source={source} reference={reference}>\n <SelectArrayInput\n {...propsContenido}\n optionText=\"etiqueta\"\n optionValue={props.source}\n />\n </ReferenceArrayInput>\n ) : null;\n};\nexport default ListCheck;\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';\nimport { useEffect } from 'react';\nimport { DateInput, DateTimeInput, NumberInput, TextInput } from 'react-admin';\nimport { useFormContext } from 'react-hook-form';\nimport useContenidoController from './useContenidoController';\n\nconst TextBox = props => {\n const { tipo, ...rest } = props;\n const { propsContenido, hidden } = useContenidoController(rest);\n const form = useFormContext();\n\n useEffect(() => {\n if (propsContenido.value) {\n form.setValue(props.source, propsContenido.value);\n }\n });\n\n const txtProps = {\n ...propsContenido,\n };\n\n return !hidden ? (\n tipo === 'N' || tipo === 'D' ? (\n <NumberInput {...txtProps} />\n ) : tipo === 'F' ? (\n <DateInput {...txtProps} />\n ) : tipo === 'Z' ? (\n <DateTimeInput {...txtProps} />\n ) : tipo === 'H' ? (\n <TextInput {...txtProps} type=\"time\" />\n ) : (\n <TextInput {...txtProps} />\n )\n ) : null;\n};\n\nexport default TextBox;\n","import * as React from 'react';\r\nimport { DateField, NumberField, TextField as RaTextField } from 'react-admin';\r\nimport useFieldController from './useFieldController';\r\n\r\nconst TextField = props => {\r\n const { tipo, value, ...rest } = props;\r\n const { propsContenido, hidden } = useFieldController(rest);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden &&\r\n (tipo === 'N' || tipo === 'D' ? (\r\n <NumberField {...txtProps} />\r\n ) : tipo === 'F' ? (\r\n <DateField {...txtProps} />\r\n ) : tipo === 'Z' ? (\r\n <DateField {...txtProps} showTime />\r\n ) : (\r\n <RaTextField {...txtProps} />\r\n ))\r\n );\r\n};\r\n\r\nexport default TextField;\r\n","import { useResourceContext, useGetOne } from 'react-admin';\r\nimport { getFormcodFromResource } from './utils';\r\n\r\nconst useReferenceLabel = (source, id) => {\r\n const resource = useResourceContext();\r\n\r\n const { data, isLoading, error } = useGetOne(\r\n 'cb_' + getFormcodFromResource(resource) + '_' + source,\r\n { id }\r\n );\r\n\r\n if (isLoading || error) {\r\n return '';\r\n }\r\n\r\n return data?.etiqueta || '';\r\n};\r\n\r\nexport default useReferenceLabel;\r\n"],"names":["forwardRef","props","ref","useTranslate","onClose","useUserMenu","useResourceDefinitions","resourcesDefinitions","React.createElement","MenuItem","component","Link","key","to","onClick","ListItemIcon","LockIcon","ListItemText","translate","existePassword","VpnLockIcon","UserMenu","ConfigurationMenu","Logout","useMediaQuery","theme","breakpoints","up","AppBar","color","userMenu","CustomUserMenu","Typography","variant","sx","flex","textOverflow","whiteSpace","overflow","id","isLargeEnough","Box","resource","options","createContext","makeStyles","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","mode","& .MuiDataGrid-iconSeparator","display","header","secondary","contrastText","light","rootPaper","width","height","borderRadius","marginTop","spacing","rootOverlay","flexDirection","& .ant-empty-img-1","fill","& .ant-empty-img-2","& .ant-empty-img-3","& .ant-empty-img-4","& .ant-empty-img-5","fillOpacity","label","deleteButton","error","main","&:hover","alpha","@media (hover: none)","name","useStyles","GridOverlay","className","classes","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","params","useDataProvider","useMutation","deleteEtrRow","mutate","isLoading","type","marginLeft","fontWeight","ActionDelete","confirmTitle","confirmContent","icon","defaultIcon","record","redirect","onSuccess","onError","source","camposClaveFila","rest","useNotify","useDeleteWithConfirmController","mutationOptions","open","handleDialogOpen","handleDialogClose","requestFn","useDeleteRowEtrGrid","refresh","json","notify","messageArgs","smart_count","e","message","Object","keys","filter","split","includes","reduce","obj","useCallback","event","payload","ge","clavesFila","Fragment","Button","Confirm","isOpen","loading","title","content","onConfirm","handleDelete","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","style","styleMargin","msgTitle","msgDesc","Form","onSubmit","defaultValues","children","EtrDialog","propTypes","PropTypes","save","render","EtrDeleteWithConfirmButton","api","row","estado","editors","recordPadre","setOpen","useFormState","isDirty","isValid","DialogContent","Children","map","child","index","initialValue","disabled","undefined","indexOf","InputLabelProps","shrink","DialogActions","SaveButton","stopPropagation","IconCancel","etrResource","useSafeSetState","initialValues","useNuevo","enabled","data","useSaveRowEtrGrid","values","useMemo","handleSubmit","setOnFailure","log","AddIcon","SaveContextProvider","value","saveContext","etiqueta","EtrDialogChild","EditIcon","createTheme","adaptV4Theme","esES","useState","show","hide","ProgressContext","Provider","context","method","callback","hidden","required","useDispatch","dispatch","recargarComboBox","setHiddenAction","disable","setDisableAction","setRequireAction","setErrorAction","getJson","mutateAsync","useGetJson","useListContext","useRedirect","useRefresh","useResourceContext","useUnselectAll","ajax","useAjax","unselectAll","useRecargarComboBox","useSetHidden","useSetDisable","useSetRequire","useSetError","useFormProgress","progress","setHidden","setDisable","setRequire","setError","useFormContext","form","isRowEditable","useRecordContext","EditButton","onRenderGrilla","onLoadGrilla","useUtilsGrilla","useEffect","utils","useInitGrilla","down","hasEdit","useResourceDefinition","pt","primaryText","st","secondaryText","desktopSize","React","count","SimpleList","linkType","esEditable","Datagrid","EditButtonGrilla","useFormulario","fichaProps","useDefaultHook","maxHeight","tab","contenido","isNaN","getDate","getFullYear","toString","getMonth","MM","slice","dd","etrRequerido","minValue","enableLoad","useInitFicha","ProgressProvider","FichaContext","Create","panel","r","t","f","n","Array","isArray","length","clsx","arguments","CreateEtriek","func","useDelete","deleteOne","Tooltip","IconButton","classnames","size","DeleteButtonNoWarning","defaultProps","trim","sanitizedData","button","margin","input","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","useContext","useUtilsFicha","onRenderFicha","onLoadFicha","CardContent","cls","CircularProgress","thickness","onBeforeSubmitFicha","config","useUtilsSubmit","useSaveContext","getValues","valid","dontSave","SimpleForm","finalSave","FormContainer","FormEtriek","handleToggle","dense","sidebarIsOpen","useSidebarState","minWidth","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","& a","transition","paddingLeft","mnuPrueba","state","setState","items","menus","item","menu","SubMenu","SettingsIcon","renderMenu","MenuItemLink","_","leftIcon","JSON","parse","localStorage","getItem","activeClassName","iconClass","marginBottom","transitions","create","easing","sharp","duration","leavingScreen","RaMenu","DashboardMenuItem","itemsFn","isXSmall","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","paddingRight","TabbedForm","TabbedFormEtriek","syncWithLocation","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","initialProps","hiddenProps","useContenido","restInitialProps","hiddenInitial","dynamicProps","dynamicPropsRest","propsContenido","oculto","useSelector","configInputs","reduxDisabled","reduxHidden","reduxError","onFocus","onChangeProps","onChange","onBlurProps","onBlur","disabledProps","propValidate","validate","field","useInput","onBlurInitial","onChangeInitial","disabledInitial","initValidate","onFocusInitial","onFocusProps","useRef","disabledDinamico","onFocusDinamico","onChangeDinamico","onChnage","onBlurDinamico","dynamicValidate","prev","previousValue","current","m","onFocusFinal","target","onBlurFinal","argCero","onChangeFinal","helperText","finalPropsValidate","finalInitValidate","finalDynamicValidate","reduxValidate","reduxValidateError","i","hiddenDinamico","useChoicesContext","allChoices","AutocompleteInput","confirmPrimary","primary","confirmWarning","iconPaddingStyle","Draggable","handle","cancel","Paper","cursor","confirmColor","ConfirmIcon","CancelIcon","contentResource","translateOptions","selectedIds","useRecordSelection","handleClick","maxWidth","PaperComponent","cursorStyle","dividers","autoFocus","FiltroAsig","string","object","confirm","elementType","node","isRequired","bool","ActionCheck","AlertError","seleccion","all","none","v","hasCreate","exporter","perPage","bulkActionButtons","TextField","sortable","fillista","filtroInicial","filtro","setFiltro","parent","getChildNodes","parentId","itemData","then","response","dataProvider","flexGrow","TreeView","dataStructure","rootValue","onItemClick","createChildren","PostList","TreeWithList","FiltroFuncionarios","useFieldController","stringify","boolRecord","RaBooleanField","useContenidoController","FileInput","accept","maxSize","FileField","BooleanInput","reference","reload_cb","rcb","recarga_cb","respaldoFiltro","tempCallback","deleteRecargarComboBox","ReferenceInput","SelectInputEtriek","optionText","optionValue","SelectInput","useEditController","controllerProps","Edit","defaultTransform","filterBy","claves","sortModel","defColumns","columns","allowAdd","allowRemove","isLoadingParent","setSort","sortField","sortDir","sort","forEach","comparison","useGetList","pagination","order","headerName","renderHeader","EtrCreateButton","headerAlign","disableClickEventBubbling","renderCell","EtrEditButton","EtrDeleteButton","Loading","StyledEngineProvider","injectFirst","ThemeProvider","DataGrid","disableSelectionOnClick","pageSize","hideFooter","rows","finalColumns","onSortModelChange","model","NoRowsOverlay","CustomNoRowsOverlay","hasShow","hasList","TopToolbar","ListButton","ChevronLeft","ShowButton","filterGe","push","concat","finalFilter","src","Avatar","Layout","appBar","Menu","filters","jsBotonGrilla","listContext","displayedFilters","filterValues","showFilter","total","sanitizeListRestProps","cloneElement","CreateButton","ExportButton","utilsGrilla","option","ReferenceArrayInput","SelectArrayInput","nameSource","passwordSource","setLoading","loginButtonText","useLogin","useLocation","location","nextPathname","errors","Card","TextInput","PasswordInput","CardActions","Icon","selectedIndex","setSelectedIndex","preventDefault","anchorEl","currentTarget","contains","selected","handleMenuItemClick","FieldTitle","fields","campos","separador","secundario","hasSecundario","join","noWrap","principal","campo","RadioButtonGroupInput","gutterBottom","useShowController","Show","handleTodos","setValue","mt","mb","defaultValue","format","InputProps","endAdornment","aria-label","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","setFilters","tabs","ids","GridComponent","GrillaEtriek","Tabs","tabActual","indicatorColor","Tab","charAt","toUpperCase","Divider","multiline","tipo","NumberInput","txtProps","DateInput","DateTimeInput","asistant","asistantResource","FiltroAsis","BulkActions","NumberField","DateField","showTime","RaTextField","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","now","setHours","setMinutes","exec","substring","useGetOne","getFormcodFromResource"],"mappings":"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"}