biblio-react 1.7.2 → 1.7.3

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/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/useGetJson.js","../src/utils/useAjax.js","../src/utils/actions.js","../src/utils/hooks.js","../src/utils/useUtils.js","../src/layout/GrillaEtriek.js","../src/utils/useInitGrilla.js","../src/utils/useInitFicha.js","../src/utils/utils.js","../src/layout/FichaContext.js","../src/layout/CreateEtriek.js","../src/layout/DeleteButtonNoWarning.js","../src/layout/EtriekNotification.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/themes.js","../src/layout/Layout.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/TabbedFormEtriek.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/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/EditEtriek.js","../src/layout/contenidos/ImageField.js","../src/layout/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 '@material-ui/icons/Lock';\r\nimport VpnLockIcon from '@material-ui/icons/VpnLock';\r\nimport * as React from \"react\";\r\nimport { forwardRef } from \"react\";\r\nimport { AppBar, MenuItemLink, UserMenu, useTranslate } from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\n\r\nconst ConfigurationMenu = forwardRef((props, ref) => {\r\n const translate = useTranslate();\r\n const [existeCP, existePassword] = useSelector(state => [\r\n state.admin.resources['form_275'] ? 1 : 0,\r\n state.admin.resources['form_59'] ? 1 : 0\r\n ]);\r\n\r\n return [\r\n existeCP ? <MenuItemLink\r\n ref={ref}\r\n key=\"/form_275\"\r\n to=\"/form_275\"\r\n primaryText={translate('pos.change_pin')}\r\n leftIcon={<LockIcon/>}\r\n onClick={props.onClick}\r\n /> : null,\r\n existePassword ? <MenuItemLink\r\n ref={ref}\r\n key=\"/form_59\"\r\n to=\"/form_59\"\r\n primaryText={translate('pos.change_password')}\r\n leftIcon={<VpnLockIcon/>}\r\n onClick={props.onClick}\r\n /> : null\r\n ];\r\n});\r\n\r\nconst CustomUserMenu = props => (\r\n <UserMenu {...props}>\r\n <ConfigurationMenu/>\r\n </UserMenu>\r\n);\r\n\r\nconst CustomAppBar = props => (\r\n <AppBar {...props} elevation={1} userMenu={<CustomUserMenu/>}/>\r\n);\r\n\r\nexport default CustomAppBar;\r\n","import { useGetOne } from \"react-admin\";\r\n\r\nconst useNuevo = (resource, options) => useGetOne(resource, '-1', options);\r\n\r\nexport default useNuevo;\r\n","import { alpha } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { GridOverlay } from \"@material-ui/data-grid\";\nimport * as React from \"react\";\n\nexport const useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme.palette.type === '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.type === 'light' ? '#aeb8c2' : '#262626'\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.type === 'light' ? '#f5f5f7' : '#595959'\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.type === 'light' ? '#dce0e6' : '#434343'\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.type === 'light' ? '#ffffff' : '#1c1c1c'\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.type === 'light' ? '0.8' : '0.08',\n fill: theme.palette.type === '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: 'GE' }\n);\nexport const CustomNoRowsOverlay = () => {\n const classes = useStyles();\n\n return (\n <GridOverlay className={classes.rootOverlay}>\n <svg\n width=\"120\"\n height=\"100\"\n viewBox=\"0 0 184 152\"\n aria-hidden\n focusable=\"false\"\n >\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse\n className=\"ant-empty-img-5\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"ant-empty-img-1\"\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\"\n />\n <path\n className=\"ant-empty-img-2\"\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\"\n />\n <path\n className=\"ant-empty-img-3\"\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\"\n />\n </g>\n <path\n className=\"ant-empty-img-3\"\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\"\n />\n <g className=\"ant-empty-img-4\" transform=\"translate(149.65 15.383)\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\"/>\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\"/>\n </g>\n </g>\n </svg>\n <div className={classes.label}>No hay registros</div>\n </GridOverlay>\n );\n};\n","import { useMutation } from 'react-admin';\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 = (\r\n resource,\r\n params,\r\n options\r\n) =>\r\n useMutation(\r\n { type: 'deleteEtrRow', resource, payload: { params } },\r\n options\r\n );\r\n\r\nexport default useDeleteRowEtrGrid;\r\n","import { useMutation } from 'react-admin';\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 = (\r\n type,\r\n resource,\r\n params,\r\n options\r\n) =>\r\n useMutation(\r\n { type, resource, payload: { params } },\r\n options\r\n );\r\n\r\nexport default useSaveRowEtrGrid;\r\n","import { createTheme, alpha, ThemeProvider } from \"@material-ui/core\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { DataGrid, esES } from \"@material-ui/data-grid\";\nimport AddIcon from '@material-ui/icons/Add';\nimport IconCancel from \"@material-ui/icons/Cancel\";\nimport ActionDelete from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport * as PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport { Children, cloneElement, Fragment, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Button,\n Confirm,\n FormWithRedirect,\n Loading,\n SaveButton,\n SaveContextProvider,\n useDeleteWithConfirmController,\n useGetList,\n useNotify,\n useSafeSetState,\n useTranslate,\n useVersion\n} from \"react-admin\";\nimport useNuevo from \"../../../utils/useNuevo\";\nimport { CustomNoRowsOverlay } from \"./NoRowsOverlay\";\nimport useDeleteRowEtrGrid from \"./useDeleteRowEtrGrid\";\nimport useSaveRowEtrGrid from \"./useSaveRowEtrGrid\";\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme.palette.type === '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.type === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.type === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.type === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.type === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.type === 'light' ? '0.8' : '0.08',\n fill: theme.palette.type === '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 basePath,\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 onFailure,\n source,\n camposClaveFila,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const notify = useNotify();\n\n const {\n open,\n loading,\n handleDialogOpen,\n handleDialogClose\n } = useDeleteWithConfirmController({\n record,\n redirect,\n basePath,\n onSuccess,\n onFailure,\n });\n //const resource = useResourceContext(props);\n const resource = props.resource;\n\n const [requestFn, { loadingEtr, error }] = useDeleteRowEtrGrid(resource, {}, {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n }\n else {\n notify('ra.notification.deleted', 'info', { smart_count: 1 });\n }\n },\n onFailure: e => {\n notify(e.message, 'warning');\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={loading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n}\n\nconst EtrDialog = props => (\n <Dialog\n open={props.open}\n onClose={props.onClose}\n fullWidth\n >\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 <FormWithRedirect\n resource={props.resource}\n save={props.save}\n //validate={customValidation}\n render={props.render}\n initialValues={props.initialValues}\n />\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 <EtrDeleteWithConfirmButton\n api\n confirmTitle=\"ra.action.delete\"\n source={source}\n record={row}\n resource={resource}\n camposClaveFila={camposClaveFila}\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, loading: loadingNuevo } = 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 [\n requestFn, {\n loading,\n error\n }\n ] = useSaveRowEtrGrid('createEtrRow', resource, {}, {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n }\n else {\n setOpen(false);\n notify('ra.notification.created', 'info');\n }\n },\n onFailure: e => {\n notify(e.message, 'warning');\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 save: handleSubmit,\n setOnFailure: (e) => console.log(e)\n }), [handleSubmit]);\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 save={handleSubmit}\n //mutators={finalMutators}\n initialValues={initialValues}\n render={({\n handleSubmitWithRedirect,\n pristine,\n saving\n }) => (\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: child.props.disabled !== undefined ? child.props.disabled :\n estado !== 'N' && camposClaveFila.indexOf(child.props.source) != -1,\n InputLabelProps: {\n shrink: true\n }\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton\n handleSubmitWithRedirect={\n handleSubmitWithRedirect\n }\n pristine={pristine}\n saving={saving}\n disabled={loading}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={loading}\n >\n <IconCancel/>\n </Button>\n </DialogActions>\n </>\n )}\n />\n </SaveContextProvider>\n </>\n )\n};\n\nconst EtrEditButton = props => {\n const { api, editors, clavesFila, camposClaveFila, resource, label, source, row } = 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 [\n requestFn, {\n loading,\n error\n }\n ] = useSaveRowEtrGrid('updateEtrRow', resource, {}, {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n }\n else {\n setOpen(false);\n notify('ra.notification.updated', 'info', { smart_count: 1 });\n }\n },\n onFailure: e => {\n notify(e.message, 'warning');\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 save={handleSubmit}\n render={({\n handleSubmitWithRedirect,\n pristine,\n saving\n }) => (\n <>\n <DialogContent>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n initialValue: row[child.props.source],\n fullWidth: true,\n disabled: estado != 'N' && camposClaveFila.indexOf(child.props.source) != -1,\n InputLabelProps: {\n shrink: true\n }\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton\n handleSubmitWithRedirect={\n handleSubmitWithRedirect\n }\n pristine={pristine}\n saving={saving}\n disabled={loading}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={loading}\n >\n <IconCancel/>\n </Button>\n </DialogActions>\n </>\n )}\n />\n </>\n )\n};\n\nconst theme = createTheme({}, esES);\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n etrResource,\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n const parentLoaded = useRef(false);\n const classes = useStyles(props);\n const version = useVersion();\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n useEffect(() => {\n parentLoaded.current = true;\n }, [version]);\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 {\n data,\n ids,\n error,\n loaded,\n loading,\n total\n } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n filter,\n { enabled: enableLoad && parentLoaded.current }\n );\n\n const rows = useMemo(() => ids.map(id => data[id]), [ids, data]);\n\n const columns = [\n allowAdd ? {\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => <EtrCreateButton\n {...rest}\n etrResource={etrResource}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n />\n } : {},\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => <EtrEditButton\n {...rest}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n row={params.row}\n />\n },\n allowRemove ? {\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => <EtrDeleteButton\n {...rest}\n camposClaveFila={claves}\n api={params.api}\n row={params.row}\n />\n } : {}\n ];\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n if (loading) {\n return <Loading/>;\n }\n\n return (\n <Paper className={classes.rootPaper}>\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 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 </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, ThemeProvider } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { DataGrid, esES } from \"@material-ui/data-grid\";\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Loading, useGetList, useVersion } from \"react-admin\";\nimport { CustomNoRowsOverlay, useStyles } from \"./EtrGrid/NoRowsOverlay\";\n\nconst theme = createTheme({}, esES);\n\nconst GE = props => {\n const { filterBy = '', sortModel, columns: defColumns, reference, filter = [], enableLoad = true, ...rest } = props;\n const { record: recordPadre } = props;\n const parentLoaded = useRef(false);\n const classes = useStyles(props);\n const version = useVersion();\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const columns = useMemo(() => [...defColumns], [JSON.stringify(defColumns)]);\n\n useEffect(() => {\n parentLoaded.current = true;\n }, [version]);\n\n let filterGe = [];\n\n filterBy.split(',').forEach(field => {\n if (field) {\n filterGe.push({\n \"type\": \"string\",\n \"comparison\": \"eq\",\n \"value\": recordPadre[field],\n \"field\": field\n })\n }\n });\n\n const finalFilter = { ...filterGe.concat(filter) }\n\n const {\n data,\n ids,\n error,\n loading,\n total\n } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n finalFilter,\n { enabled: enableLoad && parentLoaded.current }\n );\n\n const rows = useMemo(() => ids.map(id => data[id]), [ids, data]);\n\n if (loading) {\n return <Loading/>;\n }\n\n return (\n <Paper className={classes.rootPaper}>\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 </Paper>\n );\n};\n\nexport default GE;\n","import * as React from \"react\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\n\nexport const ProgressContext = createContext();\n\nexport const ProgressProvider = ({ children }) => {\n const [open, setOpen] = useState(false);\n\n const context = useMemo(\n () => ({\n open,\n show: () => setOpen(true),\n hide: () => setOpen(false)\n }),\n [open]\n );\n\n return (\n <ProgressContext.Provider value={context}>\n {children}\n </ProgressContext.Provider>\n );\n};\n\nconst useFormProgress = () => useContext(ProgressContext);\n\nexport default useFormProgress;\n","import { useMutation } from 'react-admin';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.getJson() 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 method string El método del formulario a llamar en el servidor\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useGetJson } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useGetJson('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 useGetJson = (\r\n resource,\r\n method,\r\n params,\r\n options\r\n) =>\r\n useMutation(\r\n { type: 'getJson', resource, payload: { method, params } },\r\n options\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 [requestFn, { loading, error }] = useGetJson(resource);\r\n\r\n const ajax = useCallback(\r\n (method, params, callback) =>\r\n requestFn(\r\n { payload: { params, method } },\r\n { returnPromise: true, onSuccess: callback, onFailure: callback }\r\n ),\r\n []\r\n );\r\n\r\n return [ajax, loading];\r\n};\r\n\r\nexport default useAjax;\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","import { useCallback } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { recargarComboBox, setHiddenAction, setDisableAction, setRequireAction } 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","import { useListContext, useNotify, useRedirect, useRefresh, useUnselectAll } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport useFormProgress from \"../layout/ProgressContext\";\nimport useAjax from \"./useAjax\";\nimport {useRecargarComboBox, useSetDisable, useSetHidden, useSetRequire} from \"./hooks\";\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 unselectAll = useUnselectAll(props.resource);\n const [ajax] = useAjax(props.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 progress = useFormProgress();\n const notify = useNotify();\n const redirect = useRedirect();\n const [ajax] = useAjax(props.resource);\n\n return { ajax, notify, redirect, recargarComboBox, progress, setHidden, setDisable, setRequire };\n};\n\nconst useUtilsFicha = props => {\n const recargarComboBox = useRecargarComboBox();\n const setHidden = useSetHidden();\n const setDisable = useSetDisable();\n const setRequire = useSetRequire();\n const progress = useFormProgress();\n const notify = useNotify();\n const redirect = useRedirect();\n const form = useForm();\n const [ajax] = useAjax(props.resource);\n\n return { form, ajax, notify, redirect, recargarComboBox, progress, setHidden, setDisable, setRequire };\n};\n\nexport default useUtilsFicha;\n","import { useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport * as React from \"react\";\nimport { Datagrid, EditButton, SimpleList, useResourceDefinition } from \"react-admin\";\nimport useInitGrilla from \"../utils/useInitGrilla\";\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n container: {\n maxHeight: \"70vh\"\n //height: \"70vh\"\n },\n rowOdd: {\n backgroundColor: theme.palette.action.hover\n }\n }),\n { name: 'GrillaEtriek' }\n);\n\nconst esEditable = (record, isRowEditable) => isRowEditable === undefined || (typeof isRowEditable === 'function' && isRowEditable(record));\n\nconst EditButtonGrilla = props => {\n const { isRowEditable, ...rest } = props;\n\n return esEditable(props.record, isRowEditable) ? <EditButton {...rest} /> : null;\n};\n\nconst GrillaEtriek = props => {\n useInitGrilla(props);\n\n const isSmall = useMediaQuery(theme => theme.breakpoints.down(\"sm\"));\n const classes = useStyles(props);\n const { hasEdit, options: { borra } } = useResourceDefinition(props);\n const {\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n desktopSize = false,\n onRenderGrilla,\n onLoadGrilla,\n hasEdit: hasEditProps,\n ...rest\n } = props;\n const children = props.children;\n const count = React.Children.count(props.children);\n let primaryText = pt;\n let secondaryText = st;\n\n if (!pt) {\n if (count >= 4) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count >= 3) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count >= 2) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count == 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n if (!st) {\n if (count >= 4) {\n secondaryText = record => `${record[children[2].props.source]} - ${record[children[3].props.source]}`;\n }\n else if (count >= 3) {\n secondaryText = record => record[children[2].props.source];\n }\n else if (count >= 2) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count == 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n return isSmall && desktopSize === false ?\n <SimpleList\n linkType={record => hasEdit && esEditable(record, isRowEditable) ? \"edit\" : false}\n primaryText={primaryText}\n secondaryText={secondaryText}\n /> :\n <TableContainer className={classes.container}>\n <Datagrid\n //classes={{rowOdd: classes.rowOdd}}\n stickyHeader\n {...rest}\n >\n {React.Children.map(children, child => !child.props.hidden ? child : null)}\n {hasEdit && <EditButtonGrilla isRowEditable={isRowEditable}/>}\n {/*{borra === '1' && <DeleteButton confirmTitle=\"ra.action.delete\" mutationMode=\"pessimistic\"/>}*/}\n </Datagrid>\n </TableContainer>;\n};\n\nexport default GrillaEtriek;\n","import { useEffect } from \"react\";\r\nimport { useVersion } from \"react-admin\";\r\nimport { useUtilsGrilla } from \"./useUtils\";\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const version = useVersion();\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 onLoadGrilla && onLoadGrilla(utils);\r\n }, [version]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from \"./useUtils\";\r\n\r\nconst useInitFicha = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const fichaProps = useFormulario(rest);\r\n\r\n return { fichaProps };\r\n};\r\n\r\nexport default useInitFicha;\r\n","import makeStyles from \"@material-ui/core/styles/makeStyles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ChevronLeft from \"@material-ui/icons/ChevronLeft\";\r\nimport enLocale from \"date-fns/locale/en-US\";\r\nimport esLocale from \"date-fns/locale/es\";\r\nimport Moment from \"moment\";\r\nimport * as React from \"react\";\r\nimport { ListButton, minValue, required, ShowButton, TopToolbar } from \"react-admin\";\r\n\r\nexport const getFormcodFromResource = resource => resource.split('_')[1];\r\n\r\nexport const useStylesContenidos = makeStyles(\r\n theme => ({\r\n form: {\r\n maxHeight: \"70vh\",\r\n overflow: \"auto\"\r\n },\r\n tab: {\r\n display: \"block\",\r\n maxHeight: \"65vh\",\r\n overflow: \"auto\"\r\n },\r\n contenido: {\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: '20vw' //1vw = 1% del ancho del viewport, Inputs Default = 20vw\r\n }\r\n }\r\n })\r\n);\r\n\r\n//parse(): input -> record\r\n//format(): record -> input\r\n\r\nexport const dateFormat = (v, source) => {\r\n // v is a `Date` object\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n if (v instanceof Date) {\r\n // v is a `Date` object\r\n return v.toString();\r\n }\r\n else if (v.indexOf(\"/\") !== -1) {\r\n const match = v.split(\"/\");\r\n const d = new Date(parseInt(match[2], 10), parseInt(match[1], 10) - 1, parseInt(match[0], 10));\r\n return d.toString();\r\n }\r\n else {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n const match = /(\\d{4})-(\\d{2})-(\\d{2})/.exec(v);\r\n if (match === null) {\r\n return;\r\n }\r\n const d = new Date(parseInt(match[1], 10), parseInt(match[2], 10) - 1, parseInt(match[3], 10));\r\n if (isNaN(d)) {\r\n return;\r\n }\r\n return d.toString();\r\n }\r\n};\r\n\r\nexport const dateParser = (v, source) => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n const match = v.split(' ');\r\n let mes = '';\r\n switch (match[1]) {\r\n case 'Jan':\r\n mes = '01';\r\n break;\r\n case 'Feb':\r\n mes = '02';\r\n break;\r\n case 'Mar':\r\n mes = '03';\r\n break;\r\n case 'Apr':\r\n mes = '04';\r\n break;\r\n case 'May':\r\n mes = '05';\r\n break;\r\n case 'Jun':\r\n mes = '06';\r\n break;\r\n case 'Jul':\r\n mes = '07';\r\n break;\r\n case 'Aug':\r\n mes = '08';\r\n break;\r\n case 'Sep':\r\n mes = '09';\r\n break;\r\n case 'Oct':\r\n mes = '10';\r\n break;\r\n case 'Nov':\r\n mes = '11';\r\n break;\r\n case 'Dec':\r\n mes = '12';\r\n break;\r\n }\r\n\r\n return match[2] + '/' + mes + '/' + match[3];\r\n};\r\n\r\nexport const dateTimeFormat = v => {\r\n // v is a `Date` object\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n if (v instanceof Date) {\r\n // v is a `Date` object\r\n return v.toString();\r\n }\r\n else if (v.indexOf(\"/\") !== -1) {\r\n const match = v.split(\"/\");\r\n const d = new Date(parseInt(match[2].substr(0, 4), 10), parseInt(match[1], 10) - 1, parseInt(match[0], 10), match[2].substr(5, 2), match[2].substr(8, 2));\r\n return d.toString();\r\n }\r\n else {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n const match = /(\\d{4})-(\\d{2})-(\\d{2})\\s(\\d{2}):(\\d{2})/.exec(v);\r\n if (match === null) {\r\n return;\r\n }\r\n const d = new Date(parseInt(match[1], 10), parseInt(match[2], 10) - 1, parseInt(match[3], 10), match[4], match[5]);\r\n if (isNaN(d)) {\r\n return;\r\n }\r\n return d.toString();\r\n }\r\n};\r\n\r\nexport const dateTimeParser = (v, source) => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n const match = v.split(' ');\r\n let mes = '';\r\n switch (match[1]) {\r\n case 'Jan':\r\n mes = '01';\r\n break;\r\n case 'Feb':\r\n mes = '02';\r\n break;\r\n case 'Mar':\r\n mes = '03';\r\n break;\r\n case 'Apr':\r\n mes = '04';\r\n break;\r\n case 'May':\r\n mes = '05';\r\n break;\r\n case 'Jun':\r\n mes = '06';\r\n break;\r\n case 'Jul':\r\n mes = '07';\r\n break;\r\n case 'Aug':\r\n mes = '08';\r\n break;\r\n case 'Sep':\r\n mes = '09';\r\n break;\r\n case 'Oct':\r\n mes = '10';\r\n break;\r\n case 'Nov':\r\n mes = '11';\r\n break;\r\n case 'Dec':\r\n mes = '12';\r\n break;\r\n }\r\n\r\n return match[2] + '/' + mes + '/' + match[3] + ' ' + match[4].substr(0, 5);\r\n};\r\n\r\nexport const timeFormat = v => {\r\n // v is a `Date` object\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n if (v instanceof Date) {\r\n // v is a `Date` object\r\n return v.toString();\r\n }\r\n else if (v.indexOf(\":\") !== -1) {\r\n const match = v.split(\":\");\r\n let now = new Date();\r\n now.setHours(match[0]);\r\n now.setMinutes(match[1]);\r\n return now.toString();\r\n }\r\n else {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n const match = /(\\d{2}):(\\d{2})/.exec(v);\r\n if (match === null) {\r\n return;\r\n }\r\n let now = new Date();\r\n now.setHours(match[0]);\r\n now.setMinutes(match[1]);\r\n return now.toString();\r\n }\r\n};\r\n\r\nexport const timeParser = (v, source) => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n return v.split(' ')[4].substr(0, 5);\r\n};\r\n\r\nconst sanitizeRestProps = ({\r\n basePath,\r\n className,\r\n record,\r\n hasEdit,\r\n hasShow,\r\n hasList,\r\n resource,\r\n totalPages,\r\n showFilter,\r\n setSort,\r\n setPerPage,\r\n perPage,\r\n defaultTitle,\r\n setPage,\r\n setFilters,\r\n selectedIds,\r\n onUnselectItems,\r\n onToggleItem,\r\n loaded,\r\n loading,\r\n exporter,\r\n hideFilter,\r\n hasCreate,\r\n filterValues,\r\n displayedFilters,\r\n currentSort,\r\n ...rest\r\n}) => rest;\r\n\r\nexport const Separador = props => <Typography variant=\"h6\" gutterBottom>{props.children}</Typography>;\r\n\r\nexport const FichaActions = ({ children, basePath, className, data, hasShow, hasList, ...rest }) => (\r\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\r\n {children}\r\n <ListButton label=\"ra.action.back\" basePath={basePath} icon={<ChevronLeft/>}/>\r\n {hasShow && <ShowButton basePath={basePath} record={data}/>}\r\n </TopToolbar>\r\n);\r\n\r\nexport const etrRequerido = required();\r\nexport const etrRequeridoNumerico = [etrRequerido, minValue(1)];\r\nexport const dateFormatOptions = { format: \"dd/MM/yyyy\" };\r\nexport const etrFechaMayorQue = sourceFechaInicio => (value, allValues) => {\r\n const inicio = allValues[sourceFechaInicio];\r\n\r\n if (value && inicio) {\r\n const iniDate = inicio.split('/').reverse().join('/');\r\n const finDate = value.split('/').reverse().join('/');\r\n\r\n if (Moment(iniDate).isAfter(finDate)) {\r\n return { message: 'validation.greater_or_equal', args: { menor: inicio } };\r\n }\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const localeOptions = (idi = 'es') => ({ locale: idi == 'en' ? enLocale : esLocale });\r\nexport const choicesEstado = [\r\n { id: '1', name: 'Aprobado' },\r\n { id: '2', name: 'Rechazado' },\r\n { id: '3', name: 'Pendiente' },\r\n];\r\nexport const descargarLink = (ruta, nombre) => {\r\n const fakeLink = document.createElement('a');\r\n fakeLink.style.display = 'none';\r\n document.body.appendChild(fakeLink);\r\n fakeLink.setAttribute('href', ruta);\r\n fakeLink.setAttribute('download', nombre);\r\n fakeLink.click();\r\n};\r\n","import { createContext } from \"react\";\r\n\r\nexport const FichaContext = createContext({});\r\n","import PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Create, useResourceContext } from \"react-admin\";\nimport { useInitFicha, useNuevo } from \"../utils\";\nimport { useDefaultHook } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport { ProgressProvider } from \"./ProgressContext\";\n\nconst CreateEtriek = props => {\n const { useFormulario = useDefaultHook, enableLoad = true, ...rest } = props;\n const resource = useResourceContext(props);\n\n const { data: initialValues, loading } = useNuevo(resource, { enabled: enableLoad });\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(() => ({ estado: \"N\", initialValues, loading, fichaProps }), [\n initialValues,\n loading,\n fichaProps\n ]);\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Create {...rest} {...fichaProps?.panel}/>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n\nCreateEtriek.propTypes = {\n useFormulario: PropTypes.func\n};\n\nexport { CreateEtriek };\n","import IconButton from \"@material-ui/core/IconButton\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport ActionDelete from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\nimport * as React from \"react\";\nimport { useDelete, useTranslate } from 'react-admin';\n\nconst sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n submitOnEnter,\n redirect,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst DeleteButtonNoWarning = props => {\n const classes = useStyles(props);\n const translate = useTranslate();\n const {\n resource,\n record,\n basePath,\n redirect,\n className,\n icon,\n label = 'ra.action.delete',\n ...rest\n } = props;\n\n const [deleteOne, { loading }] = useDelete(resource, record.id);\n\n return (\n <Tooltip title={translate(\"ra.action.delete\")}>\n <IconButton\n disabled={loading}\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 >\n {icon}\n </IconButton>\n </Tooltip>\n );\n};\n\nDeleteButtonNoWarning.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete/>,\n};\n\nexport default DeleteButtonNoWarning;\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport * as React from \"react\";\r\nimport { Notification } from 'react-admin';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n snackbarContent: {\r\n whiteSpace: 'pre-wrap'\r\n }\r\n}));\r\n\r\nconst EtriekNotification = props => {\r\n const classes = useStyles(props);\r\n\r\n return (\r\n <Notification {...props} className={classes.snackbarContent}/>\r\n );\r\n};\r\n\r\nexport default EtriekNotification;\r\n","import Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport * as React from \"react\";\n\nconst useStyles = makeStyles(theme => ({\n button: {\n margin: theme.spacing(1),\n },\n input: {\n display: 'none',\n },\n}));\n\nconst FormDialog = React.forwardRef((props, ref) => {\n const {\n isOpen,\n onConfirm,\n onClose,\n title,\n dialogText,\n children,\n hasAccept = true,\n hasCancel = true,\n loading = 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\">\n {title}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {dialogText}\n </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={loading}\n >\n Cancelar\n </Button>}\n {hasAccept && <Button\n onClick={handleConfirm}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n disabled={loading}\n >\n Ok\n </Button>}\n </DialogActions>\n }\n </Dialog>\n );\n});\n\nexport default FormDialog;\n","import { CircularProgress } from \"@material-ui/core\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport * as React from \"react\";\nimport { useContext, useEffect } from \"react\";\nimport { CardContentInner, useResourceContext } from \"react-admin\";\nimport useUtilsFicha from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport useFormProgress from \"./ProgressContext\";\n\nconst useStyles = makeStyles(\n 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);\n\nconst ComponentInner = props => {\n const cls = useStyles(props);\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, loading, fichaProps } = useContext(FichaContext);\n const utils = useUtilsFicha({ resource });\n\n useEffect(() => {\n fichaProps.onRenderFicha && fichaProps.onRenderFicha(utils, estado);\n }, []);\n\n useEffect(() => {\n if (!loading) {\n fichaProps.onLoadFicha && fichaProps.onLoadFicha(utils, estado);\n }\n }, [loading]);\n\n return (\n <CardContentInner className={context.open ? cls.block : ''}>\n {context.open && <CircularProgress\n className={cls.progress}\n thickness={4}\n size={50}\n />}\n {props.children}\n </CardContentInner>\n );\n};\n\nconst FormContainer = props => <ComponentInner {...props} />;\n\nexport default FormContainer;\n","import * as React from \"react\";\nimport { useCallback, useContext } from \"react\";\nimport { FormWithRedirect, SimpleForm, SimpleFormView, useNotify } from \"react-admin\";\nimport { useUtilsSubmit } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport FormContainer from \"./FormContainer\";\n//import ToolbarFicha from \"./ToolbarFicha\";\n\nconst setError = ([field, errors], state) => {\n state.fields[field].data = errors;\n};\n\nconst defaultMutators = {\n setError\n};\n\nconst defaultSave = () => {};\n\nconst FormEtriek = props => {\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config: { mutators = {}, ...restConfig } = {} } = fichaProps;\n const finalMutators = mutators === defaultMutators ? mutators : { ...defaultMutators, ...mutators };\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n\n const finalSave = useCallback(\n (values, redirectTo, options) => {\n const valid = onBeforeSubmitFicha && onBeforeSubmitFicha({ form: { values }, ...utils }, \"N\");\n if (typeof valid === 'string') {\n notify(valid, 'warning');\n return defaultSave();\n }\n else {\n return valid === undefined || valid ? props.save(values, redirectTo, options) : defaultSave();\n }\n },\n [onBeforeSubmitFicha, utils]\n );\n\n return (\n <FormWithRedirect\n {...props}\n {...restConfig}\n save={finalSave}\n mutators={finalMutators}\n initialValues={initialValues}\n /*toolbar={<ToolbarFicha />}*/\n render={formProps => <SimpleFormView component={FormContainer} {...formProps} />}\n />\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes\n};\n\nFormEtriek.defaultProps = {\n margin: \"normal\",\n variant: \"outlined\"\n};\n\nexport { FormEtriek };\n","import Collapse from '@material-ui/core/Collapse';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport List from '@material-ui/core/List';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport * as React from \"react\";\r\nimport { Fragment } from \"react\";\r\n\r\nimport { useTranslate } from 'react-admin';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n icon: {\r\n minWidth: theme.spacing(5)\r\n },\r\n sidebarIsOpen: {\r\n paddingLeft: 25,\r\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\r\n },\r\n sidebarIsClosed: {\r\n paddingLeft: 0,\r\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\r\n },\r\n}));\r\n\r\nconst SubMenu = ({\r\n handleToggle,\r\n sidebarIsOpen,\r\n isOpen,\r\n name,\r\n icon,\r\n children,\r\n dense,\r\n}) => {\r\n const translate = useTranslate();\r\n const classes = useStyles();\r\n\r\n const header = (\r\n <MenuItem dense={dense} button onClick={handleToggle}>\r\n <ListItemIcon className={classes.icon}>\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 <Fragment>\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 className={\r\n sidebarIsOpen\r\n ? classes.sidebarIsOpen\r\n : classes.sidebarIsClosed\r\n }\r\n >\r\n {children}\r\n </List>\r\n <Divider/>\r\n </Collapse>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default SubMenu;\r\n","import { useMediaQuery } from '@material-ui/core';\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport * as React from \"react\";\nimport { Fragment, useState } from \"react\";\nimport { DashboardMenuItem, Menu as RaMenu, MenuItemLink, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport SubMenu from \"./SubMenu\";\n\nconst margenTop = { marginTop: \"1.5em\" };\n\nconst renderMenu = props => {\n const { items: menus, translate, ...rest } = props;\n const { state, onMenuClick, handleToggle, activeClassName, iconClass, className, dense, open } = rest;\n\n return menus && <Fragment>\n {menus.map(item => {\n const { name, menu, label, icon = 'settings' } = item;\n\n return menu ?\n <SubMenu\n key={name}\n name={label}\n handleToggle={() => handleToggle(name)}\n isOpen={state[name]}\n sidebarIsOpen={open}\n icon={<SettingsIcon/>} /* createElement(resource.icon) */\n dense={dense}\n >\n {renderMenu({ items: menu, translate, ...rest })}\n </SubMenu> :\n <MenuItemLink\n key={name}\n to={`/${name}`}\n //TODO: Cambiar junto con 'es.js'\n //primaryText={translate(`resources.${resource}.name`, {smart_count: 2})}\n primaryText={translate(`resources.${name}.name`, { _: label })}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n leftIcon={<SettingsIcon/>}\n //classes={{active: activeClassName, icon: iconClass}}\n //className={className}\n />\n })}\n </Fragment>\n};\n\nconst Menu = ({ onMenuClick, dense, logout, hasDashboard }) => {\n const translate = useTranslate();\n const [state, setState] = useState({ mnuPrueba: false });\n //const classes = useStyles();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const open = useSelector(state => state.admin.ui.sidebarOpen);\n //useSelector(state => state.theme); // force rerender on theme change\n\n const menus = JSON.parse(localStorage.getItem('menus'));\n\n const className = '';//classes.itemLink;\n const iconClass = '';//classes.itemIcon;\n const activeClassName = '';//classes.secondary;\n\n const handleToggle = menu => {\n setState(state => ({ ...state, [menu]: !state[menu] }));\n };\n\n const itemsFn = renderMenu({\n items: menus,\n handleToggle,\n state,\n activeClassName,\n iconClass,\n className,\n open,\n dense,\n onMenuClick,\n translate\n });\n\n return (\n <RaMenu style={margenTop}>\n <DashboardMenuItem\n primaryText={translate(\"ra.page.dashboard\")}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n {itemsFn}\n {isXSmall && (\n <MenuItemLink\n to=\"/configuration\"\n primaryText={translate(\"pos.configuration\")}\n leftIcon={<SettingsIcon/>}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n )}\n {isXSmall && logout}\n {!isXSmall && isSmall && logout}\n </RaMenu>\n );\n};\n\nexport default Menu;\n","import { defaultTheme } from 'react-admin';\n\nconst darkTheme = { ...defaultTheme };\ndarkTheme.palette.type = 'dark';\ndarkTheme.overrides.RaSidebar = {\n drawerPaper: {\n position: 'sticky' //Para que el menú no escrolee con el contenido del Admin\n }\n};\ndarkTheme.overrides.RaRichTextInput = {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0'\n }\n }\n }\n }\n};\n\nconst lightTheme = { ...defaultTheme };\nlightTheme.palette.type = 'light';\nlightTheme.overrides.RaSidebar = {\n drawerPaper: {\n position: 'sticky' //Para que el menú no escrolee con el contenido del Admin\n }\n};\nlightTheme.overrides.RaRichTextInput = {\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\nexport { lightTheme, darkTheme };\n","import * as React from \"react\";\nimport { Layout as RaLayout, Sidebar } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport AppBar from './AppBar';\nimport EtriekNotification from \"./EtriekNotification\";\nimport Menu from './Menu';\nimport { darkTheme, lightTheme } from './themes';\n\nconst CustomSidebar = props => <Sidebar {...props} />;\n\nconst Layout = props => {\n const { apiFolder, ...rest } = props;\n const theme = useSelector(state => state.theme === 'dark' ? darkTheme : lightTheme);\n\n return (\n <RaLayout\n {...rest}\n appBar={AppBar}\n sidebar={CustomSidebar}\n menu={Menu}\n theme={theme}\n notification={EtriekNotification}\n />\n );\n};\n\nexport default Layout;\n","import Avatar from '@material-ui/core/Avatar';\nimport Button from '@material-ui/core/Button';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { createTheme, makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport LockIcon from '@material-ui/icons/Lock';\nimport { ThemeProvider } from '@material-ui/styles';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { Notification, useLogin, useNotify, useTranslate } from 'react-admin';\nimport { Field, Form } from 'react-final-form';\nimport { useLocation } from 'react-router-dom';\nimport { lightTheme } from './themes';\n\nconst useStyles = makeStyles(theme => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n alignItems: 'center',\n justifyContent: 'flex-start',\n backgroundImage: ({ loginBackgroundImage }) => loginBackgroundImage,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n avatarIcon: {\n backgroundColor: theme.palette.secondary.main,\n },\n icon: ({ textLength }) => ({\n position: \"absolute\",\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1)\n }),\n hint: {\n marginTop: '1em',\n display: 'flex',\n justifyContent: 'center',\n color: theme.palette.grey[500],\n },\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n actions: {\n padding: '0 1em 1em 1em',\n }\n}));\n\nconst renderInput = ({\n meta: { touched, error } = { touched: false, error: undefined },\n input: { ...inputProps },\n render,\n ...props\n}) => (\n <TextField\n error={!!(touched && error)}\n helperText={touched && error}\n {...inputProps}\n {...props}\n fullWidth\n />\n);\n\nconst Login = props => {\n const { loginBackgroundImage, nameSource = \"username\", passwordSource = \"password\" } = props;\n const [loading, setLoading] = useState(false);\n const translate = useTranslate();\n const loginButtonText = translate('ra.auth.sign_in');\n const classes = useStyles({ loginBackgroundImage, textLength: loginButtonText.length });\n const notify = useNotify();\n const login = useLogin();\n const location = useLocation();\n\n const handleSubmit = auth => {\n setLoading(true);\n login(auth, location.state ? location.state.nextPathname : '/')\n .catch(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 'warning'\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\n onSubmit={handleSubmit}\n validate={validate}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit}>\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 <Field\n autoFocus\n name={nameSource}\n component={renderInput}\n label={translate('ra.auth.username')}\n disabled={loading}\n />\n </div>\n <div className={classes.input}>\n <Field\n name={passwordSource}\n component={renderInput}\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 <Notification/>\n </div>\n </form>\n )}\n />\n );\n};\n\n// We need to put the ThemeProvider decoration in another component\n// Because otherwise the useStyles() hook used in Login won't get\n// the right theme\nconst LoginWithTheme = props => (\n <ThemeProvider theme={createTheme(lightTheme)}>\n <Login {...props} />\n </ThemeProvider>\n);\n\nexport default LoginWithTheme;\n","import Menu from \"@material-ui/core/Menu\";\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { useRef, useState } from \"react\";\r\nimport { Button, FieldTitle, useResourceContext } from \"react-admin\";\r\n\r\nconst sanitizeRestProps = ({\r\n displayedFilters,\r\n filterValues,\r\n showFilter,\r\n ...rest\r\n}) => rest;\r\n\r\nconst useStyles = makeStyles({\r\n root: { display: 'inline-block' },\r\n});\r\n\r\nconst MenuButton = props => {\r\n const { className, options = [], icon: Icon, ...rest } = props;\r\n const [open, setOpen] = useState(false);\r\n const anchorEl = useRef();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const classes = useStyles(props);\r\n const resource = useResourceContext(props);\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setOpen(false);\r\n };\r\n\r\n const handleToggle = (e) => {\r\n // This prevents ghost click.\r\n e.preventDefault();\r\n setOpen(true);\r\n anchorEl.current = e.currentTarget;\r\n };\r\n\r\n const handleClose = (event) => {\r\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n className={classnames(classes.root, className)}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n <Button\r\n className=\"add-filter\"\r\n label={options[selectedIndex].label}\r\n onClick={handleToggle}\r\n >\r\n {Icon}\r\n </Button>\r\n <Menu\r\n open={open}\r\n anchorEl={anchorEl.current}\r\n onClose={handleClose}\r\n >\r\n {options.map((option, index) => (\r\n <MenuItem\r\n key={option.label}\r\n disabled={option.disabled}\r\n selected={index === selectedIndex}\r\n onClick={(event) => handleMenuItemClick(event, index) && option?.onClick(event, index)}\r\n resource={resource}\r\n title={option.label}\r\n >\r\n <FieldTitle\r\n label={option.label}\r\n resource={resource}\r\n />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MenuButton\r\n","import { Divider } from '@material-ui/core';\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Children, cloneElement, isValidElement, useCallback, useContext, useState } from \"react\";\nimport { escapePath, FormWithRedirect, getTabFullPath, TabbedFormTabs, Toolbar, useNotify } from \"react-admin\";\nimport { Route, useLocation, useRouteMatch } from \"react-router-dom\";\nimport { useUtilsSubmit } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport FormContainer from \"./FormContainer\";\n\nconst TabbedFormView = props => {\n const {\n basePath,\n children,\n className,\n classes: classesOverride,\n component: Component,\n form,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n mutationMode,\n pristine,\n record,\n redirect: defaultRedirect,\n resource,\n saving,\n submitOnEnter,\n syncWithLocation = true,\n tabs,\n toolbar,\n undoable,\n variant,\n margin,\n ...rest\n } = props;\n const classes = useTabbedFormViewStyles(props);\n const match = useRouteMatch();\n const location = useLocation();\n const url = match ? match.url : location.pathname;\n const [tabValue, setTabValue] = useState(0);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n }\n };\n\n return (\n <form\n className={classnames('tabbed-form', className)}\n {...sanitizeRestProps(rest)}\n >\n {cloneElement(\n tabs,\n {\n classes,\n url,\n syncWithLocation,\n onChange: handleTabChange,\n value: tabValue,\n },\n children\n )}\n <Divider/>\n <Component className={classes.content}>\n {/* All tabs are rendered (not only the one in focus), to allow validation\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\n use to hide the tab using CSS if it's not the one in focus.\n See https://github.com/marmelab/react-admin/issues/1866 */}\n {Children.map(children, (tab, index) => {\n if (!tab) {\n return;\n }\n const tabPath = getTabFullPath(tab, index, url);\n return (\n <Route exact path={escapePath(tabPath)}>\n {routeProps =>\n isValidElement(tab)\n ? React.cloneElement(tab, {\n intent: 'content',\n classes,\n resource,\n record,\n basePath,\n hidden: syncWithLocation\n ? !routeProps.match\n : tabValue !== index,\n variant: tab.props.variant || variant,\n margin: tab.props.margin || margin,\n value: syncWithLocation\n ? tabPath\n : index,\n })\n : null\n }\n </Route>\n );\n })}\n </Component>\n {toolbar &&\n React.cloneElement(toolbar, {\n basePath,\n className: 'toolbar',\n handleSubmitWithRedirect,\n handleSubmit,\n invalid,\n mutationMode,\n pristine,\n record,\n redirect: defaultRedirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n })}\n </form>\n );\n};\n\nexport const useTabbedFormViewStyles = makeStyles(\n theme => ({\n errorTabButton: { color: theme.palette.error.main },\n content: {\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n }),\n { name: 'RaTabbedForm' }\n);\n\nconst DefaultInnerContainer = props => {\n const { className, children } = props;\n return <div className={className}>{children}</div>;\n};\n\nTabbedFormView.defaultProps = {\n submitOnEnter: true,\n tabs: <TabbedFormTabs/>,\n toolbar: <Toolbar/>,\n component: DefaultInnerContainer,\n};\n\nconst sanitizeRestProps = ({\n active,\n dirty,\n dirtyFields,\n dirtyFieldsSinceLastSubmit,\n dirtySinceLastSubmit,\n error,\n errors,\n hasSubmitErrors,\n hasValidationErrors,\n initialValues,\n modified = null,\n modifiedSinceLastSubmit,\n save = null,\n submitError,\n submitErrors,\n submitFailed,\n submitSucceeded,\n submitting,\n touched = null,\n valid,\n validating,\n values,\n visited = null,\n __versions = null,\n ...props\n}) => props;\n\nconst setError = ([field, errors], state) => {\n state.fields[field].data = errors;\n};\n\nconst defaultMutators = {\n setError\n};\n\nconst defaultSave = () => {};\n\nexport const TabbedFormEtriek = props => {\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config: { mutators = {}, ...restConfig } = {} } = fichaProps;\n const finalMutators = mutators === defaultMutators ? mutators : { ...defaultMutators, ...mutators };\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n\n const finalSave = useCallback(\n (values, redirectTo, options) => {\n const valid = onBeforeSubmitFicha && onBeforeSubmitFicha({ form: { values }, ...utils }, \"N\");\n if (typeof valid === 'string') {\n notify(valid, 'warning');\n return defaultSave();\n }\n else {\n return valid === undefined || valid ? props.save(values, redirectTo, options) : defaultSave();\n }\n },\n [onBeforeSubmitFicha, utils]\n );\n\n return (\n <FormWithRedirect\n {...props}\n {...restConfig}\n save={finalSave}\n mutators={finalMutators}\n initialValues={initialValues}\n /*toolbar={<ToolbarFicha/>}*/\n render={formProps => <TabbedFormView component={FormContainer} {...formProps} />}\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n margin: \"normal\",\n variant: \"outlined\",\n syncWithLocation: false\n};\n","import englishMessages from 'ra-language-english';\n//import resources from './en-fides';\n\nenglishMessages.ra.page.empty = 'No records yet';\n\nconst enMessages = {\n ...englishMessages,\n login: {\n id: 'ID',\n hint: 'Login',\n required: 'Insert Username or ID',\n send: 'Send',\n email: \"Enter your email address\",\n check_email: 'Check your email inbox, we just send you a verification code!',\n must_enter_credentials: 'You must first enter Username or ID',\n restore_password: \"Restore Password\",\n punch_in: \"Punch In\"\n },\n pos: {\n search: 'Search',\n change_pin: 'Change Pin',\n change_password: 'Change Password',\n configuration: 'Configuration',\n language: 'Language',\n theme: {\n name: 'Theme',\n light: 'Light',\n dark: 'Dark',\n },\n dashboard: {\n welcome: {\n title: 'Welcome',\n subtitle: \"Employee Management\",\n aor_button: 'Metiri WebSite'\n },\n }\n },\n validation: {\n greater_or_equal: 'Must be greater than or equal to %{menor}'\n },\n //...resources\n};\n\nexport default enMessages;\n","import spanishMessages from '@blackbox-vision/ra-language-spanish';\n//import resources from './es-fides';\n\nspanishMessages.ra.notification.created = 'Datos guardados correctamente';\nspanishMessages.ra.action.bulk_actions = '1 seleccionado |||| %{smart_count} selecccionados';\nspanishMessages.ra.page.dashboard = 'Inicio';\nspanishMessages.ra.page.empty = 'Sin registros todavía';\nspanishMessages.ra.page.invite = '¿Quiere agregar uno?';\nspanishMessages.ra.page.list = '%{name}';\nspanishMessages.ra.page.edit = \"Editar %{name}\";\nspanishMessages.ra.action.back = 'Volver';\n\nconst esMessages = {\n ...spanishMessages,\n login: {\n id: 'Cédula',\n hint: 'Inicio de Sesión',\n required: 'Ingrese Usuario o Cédula',\n email: \"Ingrese su email aquí\",\n send: 'Enviar',\n check_email: 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\n must_enter_credentials: 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\n restore_password: \"Restablecer Contraseña\",\n punch_in: \"Generar Marcas\"\n },\n pos: {\n search: 'Búsqueda',\n change_pin: 'Cambiar Pin',\n change_password: 'Cambiar Contraseña',\n configuration: 'Configuración',\n language: 'Lenguaje',\n theme: {\n name: 'Tema Visual',\n light: 'Light',\n dark: 'Dark',\n },\n dashboard: {\n welcome: {\n title: 'Bienvenid@',\n subtitle: 'Gestión de Funcionarios',\n aor_button: 'Sitio de Metiri'\n },\n }\n },\n validation: {\n greater_or_equal: 'Debe ser mayor o igual a %{menor}'\n },\n //...resources\n};\n\nexport default esMessages;\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, loading, fichaProps = {} } = useContext(FichaContext);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { hidden: hiddenProps = false, ...rest } = props;\r\n const { hidden: hiddenInitial, useContenido = useDefaultHook, ...restInitialProps } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const dynamicProps = useContenido({ ...rest, estado, hidden, loading, ...restInitialProps });\r\n const { hidden: oculto, ...dynamicPropsRest } = dynamicProps;\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(`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 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\";\nimport { useInput } from \"react-admin\";\nimport { useSelector } from \"react-redux\";\nimport { etrRequerido } from \"../../utils\";\nimport useUtilsFicha, { useDefaultHook } from \"../../utils/useUtils\";\nimport { FichaContext } from \"../FichaContext\";\n\nconst validateInput = (value, allVallues, meta) => typeof meta?.data === 'string' ? meta.data : undefined;\n\nconst useContenidoController = props => {\n const { estado, loading, fichaProps = {} } = useContext(FichaContext);\n const configInput = useSelector(state => {\n const configInputs = state.configInputs ? state.configInputs.filter(item => item.id === props.source) : [];\n return configInputs[0] ? configInputs[0] : null;\n });\n const { disabled: reduxDisabled, hidden: reduxHidden, required: reduxRequired } = configInput || {};\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\n\n const { [props.source]: initialProps = {} } = fichaProps;\n const {\n onFocus: onFocusProps,\n onChange: onChangeProps,\n onBlur: onBlurProps,\n hidden: hiddenProps = false,\n disabled: disabledProps = false,\n validate: propValidate,\n ...rest\n } = props;\n const { input } = useInput({ source: props.source });\n const {\n onFocus: onFocusInitial,\n onBlur: onBlurInitial,\n onChange: onChangeInitial,\n hidden: hiddenInitial,\n disabled: disabledInitial,\n useContenido = useDefaultHook,\n validate: initValidate,\n ...restInitialProps\n } = initialProps;\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\n const disabled = disabledInitial !== undefined ? disabledInitial : disabledProps;\n const onFocus = onFocusInitial !== undefined ? onFocusInitial : onFocusProps;\n const onBlur = onBlurInitial !== undefined ? onBlurInitial : onBlurProps;\n const onChange = onChangeInitial !== undefined ? onChangeInitial : onChangeProps;\n const utils = useUtilsFicha(props);\n const dynamicProps = useContenido({ ...rest, estado, hidden, loading, utils, ...restInitialProps });\n const previousValue = useRef(input.value);\n\n if (dynamicProps === undefined) {\n throw new Error(`useContenido está devolviendo undefined para el contenido ${props.source}\\n Asegúrese de incluir una instrucción return al final de la función`);\n }\n\n const {\n hidden: hiddenDinamico,\n disabled: disabledDinamico,\n onFocus: onFocusDinamico,\n onChnage: onChangeDinamico,\n onBlur: onBlurDinamico,\n validate: dynamicValidate,\n ...dynamicPropsRest\n } = dynamicProps;\n const onFocusFinal = onFocusDinamico || onFocus;\n const onBlurFinal = onBlurDinamico || onBlur;\n const onChangeFinal = onChangeDinamico || onChange;\n\n const argCero = { ...utils, prev: previousValue.current };\n const finalPropsValidate = Array.isArray(propValidate) ? propValidate : [propValidate];\n const finalInitValidate = Array.isArray(initValidate) ? initValidate : [initValidate];\n const finalDynamicValidate = Array.isArray(dynamicValidate) ? dynamicValidate : [dynamicValidate];\n const finalValidate = [...finalPropsValidate, ...finalInitValidate, ...finalDynamicValidate, validateInput, reduxValidate].filter(i => i !== undefined);\n\n return {\n propsContenido: {\n onFocus: e => {\n onFocusFinal && onFocus(utils, estado, e);\n previousValue.current = e.target.value;\n },\n onBlur: e => onBlurFinal && onBlurFinal(argCero, estado, e),\n onChange: e => onChangeFinal && onChangeFinal(argCero, estado, e),\n helperText: false,\n validate: finalValidate,\n ...rest,\n ...restInitialProps,\n ...dynamicPropsRest,\n disabled: reduxDisabled !== undefined ? reduxDisabled : disabledDinamico !== undefined ? disabledDinamico : disabled\n },\n hidden: reduxHidden !== undefined ? reduxHidden : hiddenDinamico !== undefined ? hiddenDinamico : hidden\n }\n};\n\nexport default useContenidoController;\n","import * as React from \"react\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { Labeled, LinearProgress, ReferenceInput, SelectInput, useListContext, useVersion } from \"react-admin\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { deleteRecargarComboBox } from \"../../utils\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nexport const SelectInputEtriek = props => {\r\n const { callback, ...rest } = props;\r\n const { loading, data } = useListContext(rest);\r\n\r\n useEffect(() => {\r\n if (!loading) {\r\n // Llamo al callback de recargarComboBox pasándole data\r\n if (typeof callback === 'function') {\r\n callback(Object.values(data));\r\n }\r\n }\r\n }, [loading]);\r\n\r\n return <SelectInput {...rest}/>\r\n};\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const parentLoaded = useRef(false);\r\n const dispatch = useDispatch();\r\n const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n const recarga_cb = useSelector(state => {\r\n const rcb = state.reload_cb ? state.reload_cb.filter(item => item.id === props.source) : [];\r\n return rcb[0] ? rcb[0] : null;\r\n });\r\n const respaldoFiltro = useRef(recarga_cb);\r\n const filter = recarga_cb === null && respaldoFiltro.current ? respaldoFiltro.current : recarga_cb;\r\n\r\n let callback, finalFilter;\r\n if (filter) {\r\n const { callback: tempCallback, ...restFilter } = filter;\r\n callback = tempCallback;\r\n finalFilter = restFilter;\r\n }\r\n\r\n useEffect(() => {\r\n if (recarga_cb !== null) {\r\n respaldoFiltro.current = recarga_cb;\r\n dispatch(deleteRecargarComboBox(props.source));\r\n }\r\n }, [JSON.stringify(recarga_cb)]);\r\n\r\n useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n\r\n return parentLoaded.current ? (\r\n !hidden &&\r\n <ReferenceInput\r\n {...rest}\r\n perPage={250}\r\n filter={finalFilter}\r\n >\r\n <SelectInputEtriek\r\n callback={callback}\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceInput>\r\n ) :\r\n <Labeled\r\n id={props.id}\r\n label={props.label}\r\n source={props.source}\r\n resource={props.resource}\r\n className={props.className}\r\n isRequired={props.isRequired}\r\n meta={props.meta}\r\n input={props.input}\r\n margin={props.margin}\r\n >\r\n <LinearProgress timeout={1}/>\r\n </Labeled>;\r\n};\r\nexport default ComboBox;\r\n","import { Box, Paper } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport ActionCheck from \"@material-ui/icons/CheckCircle\";\nimport AlertError from \"@material-ui/icons/ErrorOutline\";\nimport classnames from \"classnames\";\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\";\nimport { TreeView } from \"devextreme-react\";\n\nconst PostList = (props) => (\n <List\n {...props}\n hasCreate={false}\n exporter={false}\n perPage={25}\n title=\" \"\n bulkActionButtons={<span />}\n >\n <Datagrid>\n <TextField source=\"funced\" sortable label=\"Cédula\" />\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\n </Datagrid>\n </List>\n);\n\nconst filtroInicial = { fillista: \"empcod=-1\" };\n\nconst TreeWithList = (props) => {\n const [filtro, setFiltro] = React.useState(filtroInicial);\n const dataProvider = useDataProvider();\n\n const onClick = useCallback(\n (e) => {\n setFiltro({ fillista: e.node.key });\n },\n [setFiltro]\n );\n\n const createChildren = useCallback(\n (parent) => {\n const parentId = parent ? parent.itemData.id : \"\";\n\n return dataProvider\n .getChildNodes(\"form_224\", { parentId: parentId })\n .then((response) => response.data)\n .catch(() => {\n throw new Error(\"Data Loading Error\");\n });\n },\n [dataProvider]\n );\n\n return (\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\n <Box flexGrow={1}>\n <TreeView\n id=\"funcionarios-treeview\"\n dataStructure=\"plain\"\n rootValue=\"\"\n onItemClick={onClick}\n createChildren={createChildren}\n />\n </Box>\n <Box flexGrow={2}>\n <PostList\n resource=\"form_224\"\n basePath=\"/form_224\"\n filter={filtro}\n />\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 loading,\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={loading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={loading}\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 loading: 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 * as React from 'react'\nimport { useCallback, useState } from 'react'\nimport { TextInput } from 'react-admin'\nimport IconButton from '@material-ui/core/IconButton'\nimport RemoveCircleOutlineIcon from '@material-ui/icons/RemoveCircleOutline'\nimport CheckIcon from '@material-ui/icons/Check'\nimport SearchIcon from '@material-ui/icons/Search'\nimport { useForm } from 'react-final-form'\nimport { useSelector } from 'react-redux'\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 = useSelector(\n (state) => state.admin.resources['form_224'].list.selectedIds\n )\n const [open, setOpen] = useState(false)\n const form = useForm()\n\n const handleClose = useCallback(() => {\n setOpen(false)\n }, [setOpen])\n\n const handleConfirm = (e, button) => {\n setOpen(false)\n form.change(source, {\n seleccion: selectedIds,\n all: false,\n none: false\n })\n }\n\n const handleNinguno = (e) => {\n form.change(source, {\n seleccion: [],\n all: false,\n none: true\n })\n }\n\n const handleTodos = (e) => {\n form.change(source, {\n seleccion: [],\n all: true,\n none: false\n })\n }\n\n return (\n <>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TextInput\n initialValue={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 </div>\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 { Paper } from \"@material-ui/core\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\r\nimport ActionCheck from \"@material-ui/icons/CheckCircle\";\r\nimport AlertError from \"@material-ui/icons/ErrorOutline\";\r\nimport classnames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\nimport * as React from \"react\";\r\nimport { useCallback } from \"react\";\r\nimport { 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 loading,\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 = useSelector(state => {\r\n return state.admin.resources[contentResource].list.selectedIds;\r\n });\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}>\r\n {content}\r\n </DialogContent>\r\n <DialogActions>\r\n <Button disabled={loading} onClick={onClose}>\r\n <CancelIcon className={classes.iconPaddingStyle}/>\r\n {translate(cancel, { _: cancel })}\r\n </Button>\r\n <Button\r\n disabled={loading}\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 loading: 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 * as React from \"react\";\nimport { Fragment, useCallback, useState } from \"react\";\nimport { TextInput } from \"react-admin\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport RemoveCircleOutlineIcon from '@material-ui/icons/RemoveCircleOutline';\nimport CheckIcon from '@material-ui/icons/Check';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { useForm } from \"react-final-form\";\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 }\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 } = props;\n const [open, setOpen] = useState(false);\n const form = useForm();\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, selectedIds) => {\n setOpen(false);\n form.change(source, {\n \"seleccion\": selectedIds,\n \"all\": false,\n \"none\": false,\n });\n };\n\n const handleNinguno = e => {\n form.change(source, {\n \"seleccion\": [],\n \"all\": false,\n \"none\": true,\n });\n };\n\n const handleTodos = e => {\n form.change(source, {\n \"seleccion\": [],\n \"all\": true,\n \"none\": false,\n });\n };\n\n return (\n <>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TextInput\n initialValue={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 <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\" title=\"Selección\"\n >\n <SearchIcon/>\n </IconButton>\n </>\n }}\n />\n </div>\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 basePath: `/${asistantResource}`\n })}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n )\n};\n\nexport default TextBoxSelection;\n","import * as React from \"react\";\r\nimport { BooleanField as RaBooleanField } 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 } = props;\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 &&\r\n <RaBooleanField {...propsContenido} record={boolRecord}/>\r\n );\r\n};\r\n\r\nexport default BooleanField;\r\n","import * as React from \"react\";\nimport { ImageField, FileInput } from \"react-admin\";\nimport useContenidoController from \"./useContenidoController\";\n\nconst Camino = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n\n return (\n !hidden &&\n <FileInput\n accept=\"\"\n maxSize={5000000}\n {...propsContenido}\n >\n <ImageField source=\"src\"/>\n </FileInput>\n );\n};\n\nexport default Camino;\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 (\r\n !hidden &&\r\n <BooleanInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default CheckBox;\r\n","import * as React from \"react\";\r\nimport { SelectInput } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst ComboBoxManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return (\r\n !hidden &&\r\n <SelectInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default ComboBoxManual;\r\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Edit, useEditController } from \"react-admin\";\nimport { useInitFicha } from \"../utils\";\nimport { useDefaultHook } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport { ProgressProvider } from \"./ProgressContext\";\n\nexport const EditEtriek = props => {\n const { useFormulario = useDefaultHook, ...rest } = props;\n const controllerProps = useEditController(rest);\n const { record: initialValues, loading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(() => ({ estado: \"M\", initialValues, loading, fichaProps }), [\n initialValues,\n loading,\n fichaProps\n ]);\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Edit {...rest} {...fichaProps?.panel}/>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import Avatar from '@material-ui/core/Avatar';\r\nimport * as React from \"react\";\r\nimport { useRecordContext } from \"react-admin\";\r\n\r\nconst ImageField = props => {\r\n const {\r\n title,\r\n source,\r\n src\r\n } = props;\r\n const record = useRecordContext(props);\r\n const rutaImg = `${src}/${record[source]}`;\r\n\r\n return (\r\n <Avatar\r\n title={title}\r\n src={rutaImg}\r\n />\r\n );\r\n};\r\n\r\nexport default ImageField;\r\n","import * as React from \"react\";\r\nimport { cloneElement, useMemo } from \"react\";\r\nimport {\r\n CreateButton,\r\n ExportButton,\r\n sanitizeListRestProps,\r\n TopToolbar,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition\r\n} from \"react-admin\";\r\n\r\nconst ListActionsEtriek = props => {\r\n const { className, exporter, filters, children, ...rest } = props;\r\n const {\r\n currentSort,\r\n displayedFilters,\r\n filterValues,\r\n basePath,\r\n selectedIds,\r\n showFilter,\r\n total,\r\n } = useListContext(props);\r\n const resource = useResourceContext(rest);\r\n const { hasCreate } = useResourceDefinition(rest);\r\n\r\n return useMemo(\r\n () => (\r\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\r\n {filters &&\r\n cloneElement(filters, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })}\r\n {hasCreate && <CreateButton basePath={basePath}/>}\r\n {exporter !== false && (\r\n <ExportButton\r\n disabled={total === 0}\r\n resource={resource}\r\n sort={currentSort}\r\n filterValues={filterValues}\r\n />\r\n )}\r\n {children}\r\n </TopToolbar>\r\n ),\r\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\r\n );\r\n};\r\n\r\nexport default ListActionsEtriek;\r\n","import * as React from \"react\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { Labeled, LinearProgress, ReferenceArrayInput, SelectArrayInput, useVersion } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst ListCheck = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const parentLoaded = useRef(false);\r\n const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n\r\n return parentLoaded.current ? (\r\n !hidden &&\r\n <ReferenceArrayInput\r\n {...rest}\r\n >\r\n <SelectArrayInput\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceArrayInput>\r\n ) :\r\n <Labeled\r\n id={props.id}\r\n label={props.label}\r\n source={props.source}\r\n resource={props.resource}\r\n className={props.className}\r\n isRequired={props.isRequired}\r\n meta={props.meta}\r\n input={props.input}\r\n margin={props.margin}\r\n >\r\n <LinearProgress timeout={1}/>\r\n </Labeled>;\r\n};\r\nexport default ListCheck;\r\n","import Typography from \"@material-ui/core/Typography\";\r\nimport * as React from \"react\";\r\n\r\nconst MultiTextField = props => {\r\n const { fields, className, basePath, record, textAlign, sortable, ...rest } = props;\r\n const { campos, separador = '', secundario = [], hasSecundario } = fields;\r\n const principal = campos.map(item => record[item] !== undefined ? record[item] : item).join(`${separador}`);\r\n\r\n return <Typography\r\n noWrap\r\n variant=\"inherit\"\r\n className={className}\r\n {...rest}\r\n >\r\n {principal}\r\n {hasSecundario && <Typography\r\n component=\"span\"\r\n display=\"block\"\r\n color=\"textSecondary\"\r\n variant=\"caption\"\r\n >\r\n {secundario.map(item => `${item.etiqueta || '---'}: ${record[item.campo] || '---'}`).join(\" \")}\r\n </Typography>}\r\n </Typography>\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 (\r\n !hidden &&\r\n <PasswordInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default Password;\r\n","import * as React from \"react\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { Labeled, LinearProgress, RadioButtonGroupInput, ReferenceInput, useVersion } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const parentLoaded = useRef(false);\r\n const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n\r\n return parentLoaded.current ? (\r\n !hidden &&\r\n <ReferenceInput {...rest} >\r\n <RadioButtonGroupInput helperText={helperText} optionText=\"etiqueta\" optionValue={props.source}/>\r\n </ReferenceInput>\r\n ) :\r\n <Labeled\r\n id={props.id}\r\n label={props.label}\r\n source={props.source}\r\n resource={props.resource}\r\n className={props.className}\r\n isRequired={props.isRequired}\r\n meta={props.meta}\r\n input={props.input}\r\n >\r\n <LinearProgress/>\r\n </Labeled>;\r\n};\r\n\r\nexport default ComboBox;\r\n","import * as React from \"react\";\r\nimport { RadioButtonGroupInput } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst RadioButtonManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return (\r\n !hidden &&\r\n <RadioButtonGroupInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default RadioButtonManual;\r\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Show, useShowController } from \"react-admin\";\nimport { useInitFicha } from \"../utils\";\nimport { useDefaultHook } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport { ProgressProvider } from \"./ProgressContext\";\n\nexport const ShowEtriek = props => {\n const { useFormulario = useDefaultHook, ...rest } = props;\n const controllerProps = useShowController(rest);\n const { record: initialValues, loading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(() => ({ estado: \"M\", initialValues, loading, fichaProps }), [\n initialValues,\n loading,\n fichaProps\n ]);\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Show {...rest} {...controllerProps} {...fichaProps?.panel} />\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import Divider from \"@material-ui/core/Divider\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Tabs from \"@material-ui/core/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 { filterValues, setFilters, tabs: { ids, ...tabs }, GridComponent = GrillaEtriek, ...rest } = 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\r\n {...rest}\r\n {...tabs[tabActual]}\r\n />\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 (\r\n !hidden &&\r\n <TextInput\r\n multiline\r\n {...propsContenido}\r\n />\r\n );\r\n};\r\n\r\nexport default TextArea;\r\n","import * as React from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { NumberInput, TextInput, useInput } from \"react-admin\";\r\nimport { KeyboardDateInput, KeyboardDateTimeInput } from \"react-admin-date-inputs\";\r\nimport { useForm } from \"react-final-form\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst TextBox = props => {\r\n const { tipo, ...rest } = props;\r\n const { propsContenido, hidden } = useContenidoController(rest);\r\n const form = useForm();\r\n const { input, meta } = useInput({ source: props.source });\r\n const esFechaHora = tipo === 'F' || tipo === 'Z';\r\n\r\n useEffect(() => {\r\n if (propsContenido.value) {\r\n form.change(props.source, propsContenido.value);\r\n if (props.disabled) {\r\n form.blur(props.source);\r\n }\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n // Para que ejecute el onBlur al cambiar el valor desde el asistente\r\n if (esFechaHora && input.value != '' && meta.valid && meta.modified && !meta.active) {\r\n propsContenido.onBlur();\r\n }\r\n }, [input.value]);\r\n\r\n const txtProps = {\r\n ...propsContenido\r\n };\r\n\r\n return (\r\n !hidden && (\r\n tipo === 'N' || tipo === 'D' ?\r\n <NumberInput {...txtProps} /> :\r\n tipo === 'F' ?\r\n <KeyboardDateInput {...txtProps} /> :\r\n tipo === 'Z' ?\r\n <KeyboardDateTimeInput {...txtProps} /> :\r\n tipo === 'H' ?\r\n <TextInput {...txtProps} type=\"time\"/> :\r\n <TextInput {...txtProps} />\r\n )\r\n );\r\n};\r\n\r\nexport default TextBox;\r\n","import * as React from \"react\";\r\nimport { DateField, NumberField, TextField as RaTextField } from \"react-admin\";\r\nimport useFieldController from \"./useFieldController\";\r\n\r\nconst TextField = props => {\r\n const { tipo, value, ...rest } = props;\r\n const { propsContenido, hidden } = useFieldController(rest);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden && (\r\n tipo === 'N' || tipo === 'D' ?\r\n <NumberField {...txtProps} /> :\r\n tipo === 'F' ?\r\n <DateField {...txtProps} /> :\r\n tipo === 'Z' ?\r\n <DateField {...txtProps} showTime/> :\r\n <RaTextField {...txtProps} />\r\n )\r\n );\r\n};\r\n\r\nexport default TextField;\r\n","import { useResourceContext } from \"react-admin\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getFormcodFromResource } from \"./utils\";\r\n\r\nconst useReferenceLabel = (source, id) => {\r\n const resource = useResourceContext();\r\n\r\n return useSelector(state => state.admin.resources['cb_' + getFormcodFromResource(resource) + '_' + source].data[id]?.etiqueta || '');\r\n};\r\n\r\nexport default useReferenceLabel;\r\n"],"names":["ConfigurationMenu","forwardRef","props","ref","translate","useTranslate","useSelector","state","admin","resources","existePassword","React.createElement","MenuItemLink","key","to","primaryText","leftIcon","LockIcon","onClick","VpnLockIcon","CustomUserMenu","UserMenu","CustomAppBar","AppBar","elevation","userMenu","useNuevo","resource","options","useGetOne","useStyles","makeStyles","theme","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","type","& .MuiDataGrid-iconSeparator","display","header","color","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","CustomNoRowsOverlay","classes","GridOverlay","className","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","useDeleteRowEtrGrid","params","useMutation","payload","useSaveRowEtrGrid","styleMargin","marginLeft","fontWeight","defaultIcon","ActionDelete","EtrDeleteWithConfirmButton","api","basePath","confirmTitle","confirmContent","icon","record","redirect","onSuccess","onFailure","source","camposClaveFila","rest","notify","useNotify","useDeleteWithConfirmController","open","loading","handleDialogOpen","handleDialogClose","requestFn","refresh","json","Error","smart_count","e","message","clavesFila","Object","keys","filter","split","includes","reduce","obj","handleDelete","useCallback","event","ge","Fragment","Button","Confirm","isOpen","title","content","onConfirm","onClose","EtrDialog","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","Typography","component","variant","style","msgTitle","msgDesc","FormWithRedirect","save","render","initialValues","propTypes","PropTypes","EtrDeleteButton","row","EtrCreateButton","editors","recordPadre","etrResource","useSafeSetState","setOpen","enabled","data","etiqueta","handleSubmit","values","estado","saveContext","useMemo","setOnFailure","console","log","stopPropagation","AddIcon","SaveContextProvider","value","handleSubmitWithRedirect","pristine","saving","DialogContent","Children","map","child","index","cloneElement","initialValue","disabled","undefined","InputLabelProps","shrink","DialogActions","SaveButton","IconCancel","EtrEditButton","EditIcon","indexOf","createTheme","esES","ProgressContext","createContext","ProgressProvider","children","useState","context","show","hide","Provider","useFormProgress","useContext","useGetJson","method","useAjax","callback","returnPromise","recargarComboBox","id","deleteRecargarComboBox","setHiddenAction","hidden","setDisableAction","setRequireAction","required","useRecargarComboBox","dispatch","useDispatch","useSetHidden","useSetDisable","disable","useSetRequire","useDefaultHook","useUtilsGrilla","useListContext","useRedirect","useRefresh","unselectAll","useUnselectAll","ajax","useUtilsSubmit","setHidden","setDisable","setRequire","progress","useUtilsFicha","form","useForm","container","maxHeight","rowOdd","action","hover","esEditable","isRowEditable","EditButtonGrilla","EditButton","GrillaEtriek","onRenderGrilla","onLoadGrilla","version","useVersion","utils","useEffect","useInitGrilla","isSmall","useMediaQuery","breakpoints","down","hasEdit","useResourceDefinition","pt","st","secondaryText","desktopSize","count","React","SimpleList","linkType","TableContainer","Datagrid","stickyHeader","useInitFicha","useFormulario","fichaProps","getFormcodFromResource","useStylesContenidos","overflow","tab","contenido","up","etrRequerido","etrRequeridoNumerico","minValue","FichaContext","CreateEtriek","enableLoad","useResourceContext","Create","panel","func","DeleteButtonNoWarning","useDelete","deleteOne","Tooltip","IconButton","classnames","defaultProps","snackbarContent","whiteSpace","EtriekNotification","Notification","button","margin","input","FormDialog","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","ComponentInner","cls","onRenderFicha","onLoadFicha","CardContentInner","CircularProgress","thickness","size","FormContainer","defaultMutators","setError","fields","FormEtriek","onBeforeSubmitFicha","config","mutators","restConfig","finalMutators","finalSave","redirectTo","valid","defaultSave","formProps","SimpleFormView","SimpleForm","minWidth","sidebarIsOpen","paddingLeft","transition","sidebarIsClosed","SubMenu","handleToggle","dense","MenuItem","ListItemIcon","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","Divider","margenTop","Menu","onMenuClick","logout","mnuPrueba","setState","isXSmall","ui","sidebarOpen","itemsFn","renderMenu","menus","items","item","menu","SettingsIcon","_","JSON","parse","localStorage","getItem","activeClassName","iconClass","RaMenu","DashboardMenuItem","darkTheme","defaultTheme","overrides","RaSidebar","drawerPaper","RaRichTextInput","@global",".ra-rich-text-input","& .ql-editor","& p:not(:last-child)","marginBottom","lightTheme","CustomSidebar","Sidebar","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","renderInput","meta","touched","inputProps","TextField","helperText","Login","nameSource","passwordSource","setLoading","loginButtonText","length","login","useLogin","location","useLocation","Form","onSubmit","auth","nextPathname","validate","errors","Card","Avatar","Field","autoFocus","CardActions","TabbedFormView","Component","invalid","mutationMode","defaultRedirect","submitOnEnter","syncWithLocation","tabs","toolbar","undoable","useTabbedFormViewStyles","match","useRouteMatch","url","pathname","tabValue","setTabValue","sanitizeRestProps","onChange","tabPath","getTabFullPath","Route","exact","path","escapePath","routeProps","isValidElement","intent","errorTabButton","paddingTop","paddingRight","TabbedFormTabs","Toolbar","TabbedFormEtriek","englishMessages","ra","page","empty","enMessages","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","bulk_actions","invite","list","edit","back","esMessages","useFieldController","initialProps","hiddenProps","hiddenInitial","useContenido","restInitialProps","dynamicProps","oculto","dynamicPropsRest","propsContenido","validateInput","allVallues","useContenidoController","configInputs","reduxDisabled","reduxHidden","reduxValidate","onFocusProps","onFocus","onChangeProps","onBlurProps","onBlur","disabledProps","propValidate","useInput","onFocusInitial","onBlurInitial","onChangeInitial","disabledInitial","initValidate","previousValue","useRef","hiddenDinamico","disabledDinamico","onFocusDinamico","onChangeDinamico","onChnage","onBlurDinamico","dynamicValidate","onFocusFinal","onBlurFinal","onChangeFinal","argCero","prev","current","finalPropsValidate","Array","isArray","finalInitValidate","finalDynamicValidate","target","i","SelectInputEtriek","SelectInput","PostList","hasCreate","exporter","perPage","bulkActionButtons","sortable","filtroInicial","fillista","TreeWithList","filtro","setFiltro","dataProvider","useDataProvider","node","createChildren","parent","getChildNodes","parentId","itemData","then","response","Box","flex","flexGrow","TreeView","dataStructure","rootValue","onItemClick","confirmPrimary","primary","confirmWarning","iconPaddingStyle","PaperComponent","Draggable","handle","cancel","Paper","cursorStyle","cursor","FiltroFuncionarios","confirmColor","ConfirmIcon","CancelIcon","translateOptions","handleConfirm","handleClick","maxWidth","dividers","string","object","confirm","elementType","bool","isRequired","ActionCheck","AlertError","defaultValue","seleccion","all","none","format","v","FiltroAsig","contentResource","selectedIds","BulkActions","boolRecord","stringify","RaBooleanField","FileInput","accept","maxSize","ImageField","BooleanInput","finalFilter","parentLoaded","recarga_cb","rcb","reload_cb","respaldoFiltro","ReferenceInput","optionText","optionValue","Labeled","LinearProgress","controllerProps","useEditController","Edit","filterBy","claves","sortModel","defColumns","columns","reference","allowAdd","allowRemove","setSort","sortField","field","sortDir","sort","forEach","comparison","useGetList","order","ids","rows","headerName","renderHeader","headerAlign","disableClickEventBubbling","renderCell","finalColumns","Loading","ThemeProvider","DataGrid","disableSelectionOnClick","pageSize","hideFooter","onSortModelChange","model","components","NoRowsOverlay","hasShow","TopToolbar","ListButton","ChevronLeft","ShowButton","filterGe","push","concat","src","useRecordContext","apiFolder","RaLayout","appBar","sidebar","filters","currentSort","displayedFilters","filterValues","showFilter","total","sanitizeListRestProps","CreateButton","ExportButton","ReferenceArrayInput","SelectArrayInput","Icon","anchorEl","selectedIndex","setSelectedIndex","preventDefault","currentTarget","contains","option","selected","handleMenuItemClick","FieldTitle","separador","secundario","hasSecundario","principal","campos","join","noWrap","campo","PasswordInput","RadioButtonGroupInput","gutterBottom","useShowController","Show","TextInput","InputProps","endAdornment","change","aria-label","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","setFilters","GridComponent","tabActual","Tabs","indicatorColor","Tab","charAt","toUpperCase","slice","multiline","tipo","esFechaHora","blur","modified","active","txtProps","NumberInput","KeyboardDateInput","KeyboardDateTimeInput","asistant","asistantResource","FiltroAsis","NumberField","DateField","showTime","RaTextField","Date","toString","parseInt","exec","isNaN","mes","substr","ruta","nombre","fakeLink","document","createElement","body","appendChild","setAttribute","click","sourceFechaInicio","allValues","inicio","iniDate","reverse","finDate","Moment","isAfter","args","menor","idi","locale","enLocale","esLocale","now","setHours","setMinutes"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/layout/AppBar.js","../src/utils/useNuevo.js","../src/layout/contenidos/EtrGrid/NoRowsOverlay.js","../src/layout/contenidos/EtrGrid/useDeleteRowEtrGrid.js","../src/layout/contenidos/EtrGrid/useSaveRowEtrGrid.js","../src/layout/contenidos/EtrGrid/EtrGrid.js","../src/layout/contenidos/GE.js","../src/layout/ProgressContext.js","../src/utils/useGetJson.js","../src/utils/useAjax.js","../src/utils/actions.js","../src/utils/hooks.js","../src/utils/useUtils.js","../src/layout/GrillaEtriek.js","../src/utils/useInitGrilla.js","../src/utils/useInitFicha.js","../src/utils/utils.js","../src/layout/FichaContext.js","../src/layout/CreateEtriek.js","../src/layout/DeleteButtonNoWarning.js","../src/layout/EtriekNotification.js","../src/layout/FormDialog.js","../src/layout/FormContainer.js","../src/layout/FormEtriek.js","../src/layout/SubMenu.js","../src/layout/Menu.js","../src/layout/themes.js","../src/layout/Layout.js","../src/layout/Login.js","../src/layout/MenuButton.js","../src/layout/TabbedFormEtriek.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/TBSF/FiltroFuncionarios.js","../src/layout/contenidos/TBSF/TBSF.js","../src/layout/contenidos/TBS/FiltroAsis.js","../src/layout/contenidos/TBS/TextBoxSelection.js","../src/layout/contenidos/BooleanField.js","../src/layout/contenidos/Camino.js","../src/layout/contenidos/CheckBox.js","../src/layout/contenidos/ComboBoxManual.js","../src/layout/EditEtriek.js","../src/layout/contenidos/ImageField.js","../src/layout/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 '@material-ui/icons/Lock';\r\nimport VpnLockIcon from '@material-ui/icons/VpnLock';\r\nimport * as React from \"react\";\r\nimport { forwardRef } from \"react\";\r\nimport { AppBar, MenuItemLink, UserMenu, useTranslate } from 'react-admin';\r\nimport { useSelector } from 'react-redux';\r\n\r\nconst ConfigurationMenu = forwardRef((props, ref) => {\r\n const translate = useTranslate();\r\n const [existeCP, existePassword] = useSelector(state => [\r\n state.admin.resources['form_275'] ? 1 : 0,\r\n state.admin.resources['form_59'] ? 1 : 0\r\n ]);\r\n\r\n return [\r\n existeCP ? <MenuItemLink\r\n ref={ref}\r\n key=\"/form_275\"\r\n to=\"/form_275\"\r\n primaryText={translate('pos.change_pin')}\r\n leftIcon={<LockIcon/>}\r\n onClick={props.onClick}\r\n /> : null,\r\n existePassword ? <MenuItemLink\r\n ref={ref}\r\n key=\"/form_59\"\r\n to=\"/form_59\"\r\n primaryText={translate('pos.change_password')}\r\n leftIcon={<VpnLockIcon/>}\r\n onClick={props.onClick}\r\n /> : null\r\n ];\r\n});\r\n\r\nconst CustomUserMenu = props => (\r\n <UserMenu {...props}>\r\n <ConfigurationMenu/>\r\n </UserMenu>\r\n);\r\n\r\nconst CustomAppBar = props => (\r\n <AppBar {...props} elevation={1} userMenu={<CustomUserMenu/>}/>\r\n);\r\n\r\nexport default CustomAppBar;\r\n","import { useGetOne } from \"react-admin\";\r\n\r\nconst useNuevo = (resource, options) => useGetOne(resource, '-1', options);\r\n\r\nexport default useNuevo;\r\n","import { alpha } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { GridOverlay } from \"@material-ui/data-grid\";\nimport * as React from \"react\";\n\nexport const useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme.palette.type === '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.type === 'light' ? '#aeb8c2' : '#262626'\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.type === 'light' ? '#f5f5f7' : '#595959'\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.type === 'light' ? '#dce0e6' : '#434343'\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.type === 'light' ? '#ffffff' : '#1c1c1c'\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.type === 'light' ? '0.8' : '0.08',\n fill: theme.palette.type === '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: 'GE' }\n);\nexport const CustomNoRowsOverlay = () => {\n const classes = useStyles();\n\n return (\n <GridOverlay className={classes.rootOverlay}>\n <svg\n width=\"120\"\n height=\"100\"\n viewBox=\"0 0 184 152\"\n aria-hidden\n focusable=\"false\"\n >\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse\n className=\"ant-empty-img-5\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"ant-empty-img-1\"\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\"\n />\n <path\n className=\"ant-empty-img-2\"\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\"\n />\n <path\n className=\"ant-empty-img-3\"\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\"\n />\n </g>\n <path\n className=\"ant-empty-img-3\"\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\"\n />\n <g className=\"ant-empty-img-4\" transform=\"translate(149.65 15.383)\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\"/>\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\"/>\n </g>\n </g>\n </svg>\n <div className={classes.label}>No hay registros</div>\n </GridOverlay>\n );\n};\n","import { useMutation } from 'react-admin';\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 = (\r\n resource,\r\n params,\r\n options\r\n) =>\r\n useMutation(\r\n { type: 'deleteEtrRow', resource, payload: { params } },\r\n options\r\n );\r\n\r\nexport default useDeleteRowEtrGrid;\r\n","import { useMutation } from 'react-admin';\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 = (\r\n type,\r\n resource,\r\n params,\r\n options\r\n) =>\r\n useMutation(\r\n { type, resource, payload: { params } },\r\n options\r\n );\r\n\r\nexport default useSaveRowEtrGrid;\r\n","import { createTheme, alpha, ThemeProvider } from \"@material-ui/core\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { DataGrid, esES } from \"@material-ui/data-grid\";\nimport AddIcon from '@material-ui/icons/Add';\nimport IconCancel from \"@material-ui/icons/Cancel\";\nimport ActionDelete from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport * as PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport { Children, cloneElement, Fragment, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Button,\n Confirm,\n FormWithRedirect,\n Loading,\n SaveButton,\n SaveContextProvider,\n useDeleteWithConfirmController,\n useGetList,\n useNotify,\n useSafeSetState,\n useTranslate,\n useVersion\n} from \"react-admin\";\nimport useNuevo from \"../../../utils/useNuevo\";\nimport { CustomNoRowsOverlay } from \"./NoRowsOverlay\";\nimport useDeleteRowEtrGrid from \"./useDeleteRowEtrGrid\";\nimport useSaveRowEtrGrid from \"./useSaveRowEtrGrid\";\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n root: {\n '& .MuiDataGrid-columnsContainer': {\n backgroundColor: theme.palette.type === '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.type === 'light' ? '#aeb8c2' : '#262626',\n },\n '& .ant-empty-img-2': {\n fill: theme.palette.type === 'light' ? '#f5f5f7' : '#595959',\n },\n '& .ant-empty-img-3': {\n fill: theme.palette.type === 'light' ? '#dce0e6' : '#434343',\n },\n '& .ant-empty-img-4': {\n fill: theme.palette.type === 'light' ? '#ffffff' : '#1c1c1c',\n },\n '& .ant-empty-img-5': {\n fillOpacity: theme.palette.type === 'light' ? '0.8' : '0.08',\n fill: theme.palette.type === '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 basePath,\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 onFailure,\n source,\n camposClaveFila,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const notify = useNotify();\n\n const {\n open,\n loading,\n handleDialogOpen,\n handleDialogClose\n } = useDeleteWithConfirmController({\n record,\n redirect,\n basePath,\n onSuccess,\n onFailure,\n });\n //const resource = useResourceContext(props);\n const resource = props.resource;\n\n const [requestFn, { loadingEtr, error }] = useDeleteRowEtrGrid(resource, {}, {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n }\n else {\n notify('ra.notification.deleted', 'info', { smart_count: 1 });\n }\n },\n onFailure: e => {\n notify(e.message, 'warning');\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={loading}\n title={confirmTitle}\n content={confirmContent}\n onConfirm={handleDelete}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n}\n\nconst EtrDialog = props => (\n <Dialog\n open={props.open}\n onClose={props.onClose}\n fullWidth\n >\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 <FormWithRedirect\n resource={props.resource}\n save={props.save}\n //validate={customValidation}\n render={props.render}\n initialValues={props.initialValues}\n />\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 <EtrDeleteWithConfirmButton\n api\n confirmTitle=\"ra.action.delete\"\n source={source}\n record={row}\n resource={resource}\n camposClaveFila={camposClaveFila}\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, loading: loadingNuevo } = 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 [\n requestFn, {\n loading,\n error\n }\n ] = useSaveRowEtrGrid('createEtrRow', resource, {}, {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n }\n else {\n setOpen(false);\n notify('ra.notification.created', 'info');\n }\n },\n onFailure: e => {\n notify(e.message, 'warning');\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 save: handleSubmit,\n setOnFailure: (e) => console.log(e)\n }), [handleSubmit]);\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 save={handleSubmit}\n //mutators={finalMutators}\n initialValues={initialValues}\n render={({\n handleSubmitWithRedirect,\n pristine,\n saving\n }) => (\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: child.props.disabled !== undefined ? child.props.disabled :\n estado !== 'N' && camposClaveFila.indexOf(child.props.source) != -1,\n InputLabelProps: {\n shrink: true\n }\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton\n handleSubmitWithRedirect={\n handleSubmitWithRedirect\n }\n pristine={pristine}\n saving={saving}\n disabled={loading}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={loading}\n >\n <IconCancel/>\n </Button>\n </DialogActions>\n </>\n )}\n />\n </SaveContextProvider>\n </>\n )\n};\n\nconst EtrEditButton = props => {\n const { api, editors, clavesFila, camposClaveFila, resource, label, source, row } = 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 [\n requestFn, {\n loading,\n error\n }\n ] = useSaveRowEtrGrid('updateEtrRow', resource, {}, {\n refresh: true,\n onSuccess: json => {\n if (json.error) {\n throw new Error(json.error);\n }\n else {\n setOpen(false);\n notify('ra.notification.updated', 'info', { smart_count: 1 });\n }\n },\n onFailure: e => {\n notify(e.message, 'warning');\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 save={handleSubmit}\n render={({\n handleSubmitWithRedirect,\n pristine,\n saving\n }) => (\n <>\n <DialogContent>\n {Children.map(editors, (child, index) =>\n cloneElement(child, {\n resource,\n estado,\n initialValue: row[child.props.source],\n fullWidth: true,\n disabled: estado != 'N' && camposClaveFila.indexOf(child.props.source) != -1,\n InputLabelProps: {\n shrink: true\n }\n })\n )}\n </DialogContent>\n <DialogActions>\n <SaveButton\n handleSubmitWithRedirect={\n handleSubmitWithRedirect\n }\n pristine={pristine}\n saving={saving}\n disabled={loading}\n />\n <Button\n label=\"ra.action.cancel\"\n onClick={e => {\n setOpen(false);\n e.stopPropagation();\n }}\n disabled={loading}\n >\n <IconCancel/>\n </Button>\n </DialogActions>\n </>\n )}\n />\n </>\n )\n};\n\nconst theme = createTheme({}, esES);\n\nconst EtrGrid = props => {\n const {\n filterBy = '',\n claves,\n sortModel,\n columns: defColumns,\n reference,\n allowAdd = true,\n allowRemove = true,\n etrResource,\n enableLoad = true,\n ...rest\n } = props;\n const { record: recordPadre } = props;\n const parentLoaded = useRef(false);\n const classes = useStyles(props);\n const version = useVersion();\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n useEffect(() => {\n parentLoaded.current = true;\n }, [version]);\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 {\n data,\n ids,\n error,\n loaded,\n loading,\n total\n } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n filter,\n { enabled: enableLoad && parentLoaded.current }\n );\n\n const rows = useMemo(() => ids.map(id => data[id]), [ids, data]);\n\n const columns = [\n allowAdd ? {\n field: 'BTN',\n headerName: '',\n sortable: false,\n renderHeader: params => <EtrCreateButton\n {...rest}\n etrResource={etrResource}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n />\n } : {},\n ...defColumns,\n {\n field: ' ',\n width: 80,\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => <EtrEditButton\n {...rest}\n camposClaveFila={claves}\n clavesFila={clavesFila}\n api={params.api}\n row={params.row}\n />\n },\n allowRemove ? {\n field: ' ',\n headerName: '',\n headerAlign: 'center',\n sortable: false,\n disableClickEventBubbling: true,\n renderCell: params => <EtrDeleteButton\n {...rest}\n camposClaveFila={claves}\n api={params.api}\n row={params.row}\n />\n } : {}\n ];\n\n const finalColumns = useMemo(() => columns, [JSON.stringify(columns)]);\n\n if (loading) {\n return <Loading/>;\n }\n\n return (\n <Paper className={classes.rootPaper}>\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 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 </Paper>\n );\n};\n\nexport default EtrGrid;\n","import { createTheme, ThemeProvider } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { DataGrid, esES } from \"@material-ui/data-grid\";\nimport * as React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Loading, useGetList, useVersion } from \"react-admin\";\nimport { CustomNoRowsOverlay, useStyles } from \"./EtrGrid/NoRowsOverlay\";\n\nconst theme = createTheme({}, esES);\n\nconst GE = props => {\n const { filterBy = '', sortModel, columns: defColumns, reference, filter = [], enableLoad = true, ...rest } = props;\n const { record: recordPadre } = props;\n const parentLoaded = useRef(false);\n const classes = useStyles(props);\n const version = useVersion();\n\n const [sort, setSort] = useState(sortModel);\n const [{ field: sortField, sort: sortDir }] = sortModel;\n\n const columns = useMemo(() => [...defColumns], [JSON.stringify(defColumns)]);\n\n useEffect(() => {\n parentLoaded.current = true;\n }, [version]);\n\n let filterGe = [];\n\n filterBy.split(',').forEach(field => {\n if (field) {\n filterGe.push({\n \"type\": \"string\",\n \"comparison\": \"eq\",\n \"value\": recordPadre[field],\n \"field\": field\n })\n }\n });\n\n const finalFilter = { ...filterGe.concat(filter) }\n\n const {\n data,\n ids,\n error,\n loading,\n total\n } = useGetList(\n reference,\n { page: 1, perPage: 200 },\n { field: sortField, order: sortDir },\n finalFilter,\n { enabled: enableLoad && parentLoaded.current }\n );\n\n const rows = useMemo(() => ids.map(id => data[id]), [ids, data]);\n\n if (loading) {\n return <Loading/>;\n }\n\n return (\n <Paper className={classes.rootPaper}>\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 </Paper>\n );\n};\n\nexport default GE;\n","import * as React from \"react\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\n\nexport const ProgressContext = createContext();\n\nexport const ProgressProvider = ({ children }) => {\n const [open, setOpen] = useState(false);\n\n const context = useMemo(\n () => ({\n open,\n show: () => setOpen(true),\n hide: () => setOpen(false)\n }),\n [open]\n );\n\n return (\n <ProgressContext.Provider value={context}>\n {children}\n </ProgressContext.Provider>\n );\n};\n\nconst useFormProgress = () => useContext(ProgressContext);\n\nexport default useFormProgress;\n","import { useMutation } from 'react-admin';\r\n\r\n/**\r\n * Get a callback to call the dataProvider.getJson() 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 method string El método del formulario a llamar en el servidor\r\n * @param params Object Un objeto con cualquier cantidad de parámetros, e.g. { views: 10 }\r\n * @param options Options objeto para pasar al dataProvider. Puede incluir funciones de ser ejecutadas si es 'success' o 'failure', e.g. { onSuccess: { refresh: true } }\r\n *\r\n * @returns El estado actual del request. Destructurado como el siguiente array [callback, { data, error, loading, loaded }].\r\n *\r\n * @example\r\n *\r\n * import { useGetJson } from './forms';\r\n *\r\n * const BulkResetViewsButton = ({ selectedIds }) => {\r\n * const [requestFn, { loading, error }] = useGetJson('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 useGetJson = (\r\n resource,\r\n method,\r\n params,\r\n options\r\n) =>\r\n useMutation(\r\n { type: 'getJson', resource, payload: { method, params } },\r\n options\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 [requestFn, { loading, error }] = useGetJson(resource);\r\n\r\n const ajax = useCallback(\r\n (method, params, callback) =>\r\n requestFn(\r\n { payload: { params, method } },\r\n { returnPromise: true, onSuccess: callback, onFailure: callback }\r\n ),\r\n []\r\n );\r\n\r\n return [ajax, loading];\r\n};\r\n\r\nexport default useAjax;\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","import { useCallback } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { recargarComboBox, setHiddenAction, setDisableAction, setRequireAction } 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","import { useListContext, useNotify, useRedirect, useRefresh, useUnselectAll } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\nimport useFormProgress from \"../layout/ProgressContext\";\nimport useAjax from \"./useAjax\";\nimport {useRecargarComboBox, useSetDisable, useSetHidden, useSetRequire} from \"./hooks\";\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 unselectAll = useUnselectAll(props.resource);\n const [ajax] = useAjax(props.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 progress = useFormProgress();\n const notify = useNotify();\n const redirect = useRedirect();\n const [ajax] = useAjax(props.resource);\n\n return { ajax, notify, redirect, recargarComboBox, progress, setHidden, setDisable, setRequire };\n};\n\nconst useUtilsFicha = props => {\n const recargarComboBox = useRecargarComboBox();\n const setHidden = useSetHidden();\n const setDisable = useSetDisable();\n const setRequire = useSetRequire();\n const progress = useFormProgress();\n const notify = useNotify();\n const redirect = useRedirect();\n const form = useForm();\n const [ajax] = useAjax(props.resource);\n\n return { form, ajax, notify, redirect, recargarComboBox, progress, setHidden, setDisable, setRequire };\n};\n\nexport default useUtilsFicha;\n","import { useMediaQuery } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport * as React from \"react\";\nimport { Datagrid, EditButton, SimpleList, useResourceDefinition } from \"react-admin\";\nimport useInitGrilla from \"../utils/useInitGrilla\";\n\nconst useStyles = makeStyles(\n theme => ({\n /*shadow: {\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`\n },*/\n container: {\n maxHeight: \"70vh\"\n //height: \"70vh\"\n },\n rowOdd: {\n backgroundColor: theme.palette.action.hover\n }\n }),\n { name: 'GrillaEtriek' }\n);\n\nconst esEditable = (record, isRowEditable) => isRowEditable === undefined || (typeof isRowEditable === 'function' && isRowEditable(record));\n\nconst EditButtonGrilla = props => {\n const { isRowEditable, ...rest } = props;\n\n return esEditable(props.record, isRowEditable) ? <EditButton {...rest} /> : null;\n};\n\nconst GrillaEtriek = props => {\n useInitGrilla(props);\n\n const isSmall = useMediaQuery(theme => theme.breakpoints.down(\"sm\"));\n const classes = useStyles(props);\n const { hasEdit, options: { borra } } = useResourceDefinition(props);\n const {\n isRowEditable,\n primaryText: pt,\n secondaryText: st,\n desktopSize = false,\n onRenderGrilla,\n onLoadGrilla,\n hasEdit: hasEditProps,\n ...rest\n } = props;\n const children = props.children;\n const count = React.Children.count(props.children);\n let primaryText = pt;\n let secondaryText = st;\n\n if (!pt) {\n if (count >= 4) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count >= 3) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count >= 2) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count == 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n if (!st) {\n if (count >= 4) {\n secondaryText = record => `${record[children[2].props.source]} - ${record[children[3].props.source]}`;\n }\n else if (count >= 3) {\n secondaryText = record => record[children[2].props.source];\n }\n else if (count >= 2) {\n primaryText = record => `${record[children[0].props.source]} - ${record[children[1].props.source]}`;\n }\n else if (count == 1) {\n primaryText = record => record[children[0].props.source];\n }\n }\n\n return isSmall && desktopSize === false ?\n <SimpleList\n linkType={record => hasEdit && esEditable(record, isRowEditable) ? \"edit\" : false}\n primaryText={primaryText}\n secondaryText={secondaryText}\n /> :\n <TableContainer className={classes.container}>\n <Datagrid\n //classes={{rowOdd: classes.rowOdd}}\n stickyHeader\n {...rest}\n >\n {React.Children.map(children, child => !child.props.hidden ? child : null)}\n {hasEdit && <EditButtonGrilla isRowEditable={isRowEditable}/>}\n {/*{borra === '1' && <DeleteButton confirmTitle=\"ra.action.delete\" mutationMode=\"pessimistic\"/>}*/}\n </Datagrid>\n </TableContainer>;\n};\n\nexport default GrillaEtriek;\n","import { useEffect } from \"react\";\r\nimport { useVersion } from \"react-admin\";\r\nimport { useUtilsGrilla } from \"./useUtils\";\r\n\r\nconst useInitGrilla = props => {\r\n const { onRenderGrilla, onLoadGrilla } = props;\r\n const version = useVersion();\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 onLoadGrilla && onLoadGrilla(utils);\r\n }, [version]);\r\n};\r\n\r\nexport default useInitGrilla;\r\n","import { useDefaultHook } from \"./useUtils\";\r\n\r\nconst useInitFicha = props => {\r\n const { useFormulario = useDefaultHook, ...rest } = props;\r\n const fichaProps = useFormulario(rest);\r\n\r\n return { fichaProps };\r\n};\r\n\r\nexport default useInitFicha;\r\n","import makeStyles from \"@material-ui/core/styles/makeStyles\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport ChevronLeft from \"@material-ui/icons/ChevronLeft\";\r\nimport enLocale from \"date-fns/locale/en-US\";\r\nimport esLocale from \"date-fns/locale/es\";\r\nimport Moment from \"moment\";\r\nimport * as React from \"react\";\r\nimport { ListButton, minValue, required, ShowButton, TopToolbar } from \"react-admin\";\r\n\r\nexport const getFormcodFromResource = resource => resource.split('_')[1];\r\n\r\nexport const useStylesContenidos = makeStyles(\r\n theme => ({\r\n form: {\r\n maxHeight: \"70vh\",\r\n overflow: \"auto\"\r\n },\r\n tab: {\r\n display: \"block\",\r\n maxHeight: \"65vh\",\r\n overflow: \"auto\"\r\n },\r\n contenido: {\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: '20vw' //1vw = 1% del ancho del viewport, Inputs Default = 20vw\r\n }\r\n }\r\n })\r\n);\r\n\r\n//parse(): input -> record\r\n//format(): record -> input\r\n\r\nexport const dateFormat = (v, source) => {\r\n // v is a `Date` object\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n if (v instanceof Date) {\r\n // v is a `Date` object\r\n return v.toString();\r\n }\r\n else if (v.indexOf(\"/\") !== -1) {\r\n const match = v.split(\"/\");\r\n const d = new Date(parseInt(match[2], 10), parseInt(match[1], 10) - 1, parseInt(match[0], 10));\r\n return d.toString();\r\n }\r\n else {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n const match = /(\\d{4})-(\\d{2})-(\\d{2})/.exec(v);\r\n if (match === null) {\r\n return;\r\n }\r\n const d = new Date(parseInt(match[1], 10), parseInt(match[2], 10) - 1, parseInt(match[3], 10));\r\n if (isNaN(d)) {\r\n return;\r\n }\r\n return d.toString();\r\n }\r\n};\r\n\r\nexport const dateParser = (v, source) => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n const match = v.split(' ');\r\n let mes = '';\r\n switch (match[1]) {\r\n case 'Jan':\r\n mes = '01';\r\n break;\r\n case 'Feb':\r\n mes = '02';\r\n break;\r\n case 'Mar':\r\n mes = '03';\r\n break;\r\n case 'Apr':\r\n mes = '04';\r\n break;\r\n case 'May':\r\n mes = '05';\r\n break;\r\n case 'Jun':\r\n mes = '06';\r\n break;\r\n case 'Jul':\r\n mes = '07';\r\n break;\r\n case 'Aug':\r\n mes = '08';\r\n break;\r\n case 'Sep':\r\n mes = '09';\r\n break;\r\n case 'Oct':\r\n mes = '10';\r\n break;\r\n case 'Nov':\r\n mes = '11';\r\n break;\r\n case 'Dec':\r\n mes = '12';\r\n break;\r\n }\r\n\r\n return match[2] + '/' + mes + '/' + match[3];\r\n};\r\n\r\nexport const dateTimeFormat = v => {\r\n // v is a `Date` object\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n if (v instanceof Date) {\r\n // v is a `Date` object\r\n return v.toString();\r\n }\r\n else if (v.indexOf(\"/\") !== -1) {\r\n const match = v.split(\"/\");\r\n const d = new Date(parseInt(match[2].substr(0, 4), 10), parseInt(match[1], 10) - 1, parseInt(match[0], 10), match[2].substr(5, 2), match[2].substr(8, 2));\r\n return d.toString();\r\n }\r\n else {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n const match = /(\\d{4})-(\\d{2})-(\\d{2})\\s(\\d{2}):(\\d{2})/.exec(v);\r\n if (match === null) {\r\n return;\r\n }\r\n const d = new Date(parseInt(match[1], 10), parseInt(match[2], 10) - 1, parseInt(match[3], 10), match[4], match[5]);\r\n if (isNaN(d)) {\r\n return;\r\n }\r\n return d.toString();\r\n }\r\n};\r\n\r\nexport const dateTimeParser = (v, source) => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n const match = v.split(' ');\r\n let mes = '';\r\n switch (match[1]) {\r\n case 'Jan':\r\n mes = '01';\r\n break;\r\n case 'Feb':\r\n mes = '02';\r\n break;\r\n case 'Mar':\r\n mes = '03';\r\n break;\r\n case 'Apr':\r\n mes = '04';\r\n break;\r\n case 'May':\r\n mes = '05';\r\n break;\r\n case 'Jun':\r\n mes = '06';\r\n break;\r\n case 'Jul':\r\n mes = '07';\r\n break;\r\n case 'Aug':\r\n mes = '08';\r\n break;\r\n case 'Sep':\r\n mes = '09';\r\n break;\r\n case 'Oct':\r\n mes = '10';\r\n break;\r\n case 'Nov':\r\n mes = '11';\r\n break;\r\n case 'Dec':\r\n mes = '12';\r\n break;\r\n }\r\n\r\n return match[2] + '/' + mes + '/' + match[3] + ' ' + match[4].substr(0, 5);\r\n};\r\n\r\nexport const timeFormat = v => {\r\n // v is a `Date` object\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n if (v instanceof Date) {\r\n // v is a `Date` object\r\n return v.toString();\r\n }\r\n else if (v.indexOf(\":\") !== -1) {\r\n const match = v.split(\":\");\r\n let now = new Date();\r\n now.setHours(match[0]);\r\n now.setMinutes(match[1]);\r\n return now.toString();\r\n }\r\n else {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n const match = /(\\d{2}):(\\d{2})/.exec(v);\r\n if (match === null) {\r\n return;\r\n }\r\n let now = new Date();\r\n now.setHours(match[0]);\r\n now.setMinutes(match[1]);\r\n return now.toString();\r\n }\r\n};\r\n\r\nexport const timeParser = (v, source) => {\r\n // v is a string of \"YYYY-MM-DD\" format\r\n if (!v) {\r\n return \"\";\r\n }\r\n\r\n return v.split(' ')[4].substr(0, 5);\r\n};\r\n\r\nconst sanitizeRestProps = ({\r\n basePath,\r\n className,\r\n record,\r\n hasEdit,\r\n hasShow,\r\n hasList,\r\n resource,\r\n totalPages,\r\n showFilter,\r\n setSort,\r\n setPerPage,\r\n perPage,\r\n defaultTitle,\r\n setPage,\r\n setFilters,\r\n selectedIds,\r\n onUnselectItems,\r\n onToggleItem,\r\n loaded,\r\n loading,\r\n exporter,\r\n hideFilter,\r\n hasCreate,\r\n filterValues,\r\n displayedFilters,\r\n currentSort,\r\n ...rest\r\n}) => rest;\r\n\r\nexport const Separador = props => <Typography variant=\"h6\" gutterBottom>{props.children}</Typography>;\r\n\r\nexport const FichaActions = ({ children, basePath, className, data, hasShow, hasList, ...rest }) => (\r\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\r\n {children}\r\n <ListButton label=\"ra.action.back\" basePath={basePath} icon={<ChevronLeft/>}/>\r\n {hasShow && <ShowButton basePath={basePath} record={data}/>}\r\n </TopToolbar>\r\n);\r\n\r\nexport const etrRequerido = required();\r\nexport const etrRequeridoNumerico = [etrRequerido, minValue(1)];\r\nexport const dateFormatOptions = { format: \"dd/MM/yyyy\" };\r\nexport const etrFechaMayorQue = sourceFechaInicio => (value, allValues) => {\r\n const inicio = allValues[sourceFechaInicio];\r\n\r\n if (value && inicio) {\r\n const iniDate = inicio.split('/').reverse().join('/');\r\n const finDate = value.split('/').reverse().join('/');\r\n\r\n if (Moment(iniDate).isAfter(finDate)) {\r\n return { message: 'validation.greater_or_equal', args: { menor: inicio } };\r\n }\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const localeOptions = (idi = 'es') => ({ locale: idi == 'en' ? enLocale : esLocale });\r\nexport const choicesEstado = [\r\n { id: '1', name: 'Aprobado' },\r\n { id: '2', name: 'Rechazado' },\r\n { id: '3', name: 'Pendiente' },\r\n];\r\nexport const descargarLink = (ruta, nombre) => {\r\n const fakeLink = document.createElement('a');\r\n fakeLink.style.display = 'none';\r\n document.body.appendChild(fakeLink);\r\n fakeLink.setAttribute('href', ruta);\r\n fakeLink.setAttribute('download', nombre);\r\n fakeLink.click();\r\n};\r\n","import { createContext } from \"react\";\r\n\r\nexport const FichaContext = createContext({});\r\n","import PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Create, useResourceContext } from \"react-admin\";\nimport { useInitFicha, useNuevo } from \"../utils\";\nimport { useDefaultHook } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport { ProgressProvider } from \"./ProgressContext\";\n\nconst CreateEtriek = props => {\n const { useFormulario = useDefaultHook, enableLoad = true, ...rest } = props;\n const resource = useResourceContext(props);\n\n const { data: initialValues, loading } = useNuevo(resource, { enabled: enableLoad });\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(() => ({ estado: \"N\", initialValues, loading, fichaProps }), [\n initialValues,\n loading,\n fichaProps\n ]);\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Create {...rest} {...fichaProps?.panel}/>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n\nCreateEtriek.propTypes = {\n useFormulario: PropTypes.func\n};\n\nexport { CreateEtriek };\n","import IconButton from \"@material-ui/core/IconButton\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport ActionDelete from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\nimport * as React from \"react\";\nimport { useDelete, useTranslate } from 'react-admin';\n\nconst sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n submitOnEnter,\n redirect,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst DeleteButtonNoWarning = props => {\n const classes = useStyles(props);\n const translate = useTranslate();\n const {\n resource,\n record,\n basePath,\n redirect,\n className,\n icon,\n label = 'ra.action.delete',\n ...rest\n } = props;\n\n const [deleteOne, { loading }] = useDelete(resource, record.id);\n\n return (\n <Tooltip title={translate(\"ra.action.delete\")}>\n <IconButton\n disabled={loading}\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 >\n {icon}\n </IconButton>\n </Tooltip>\n );\n};\n\nDeleteButtonNoWarning.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete/>,\n};\n\nexport default DeleteButtonNoWarning;\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport * as React from \"react\";\r\nimport { Notification } from 'react-admin';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n snackbarContent: {\r\n whiteSpace: 'pre-wrap'\r\n }\r\n}));\r\n\r\nconst EtriekNotification = props => {\r\n const classes = useStyles(props);\r\n\r\n return (\r\n <Notification {...props} className={classes.snackbarContent}/>\r\n );\r\n};\r\n\r\nexport default EtriekNotification;\r\n","import Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport * as React from \"react\";\n\nconst useStyles = makeStyles(theme => ({\n button: {\n margin: theme.spacing(1),\n },\n input: {\n display: 'none',\n },\n}));\n\nconst FormDialog = React.forwardRef((props, ref) => {\n const {\n isOpen,\n onConfirm,\n onClose,\n title,\n dialogText,\n children,\n hasAccept = true,\n hasCancel = true,\n loading = 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\">\n {title}\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {dialogText}\n </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={loading}\n >\n Cancelar\n </Button>}\n {hasAccept && <Button\n onClick={handleConfirm}\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n disabled={loading}\n >\n Ok\n </Button>}\n </DialogActions>\n }\n </Dialog>\n );\n});\n\nexport default FormDialog;\n","import { CircularProgress } from \"@material-ui/core\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport * as React from \"react\";\nimport { useContext, useEffect } from \"react\";\nimport { CardContentInner, useResourceContext } from \"react-admin\";\nimport useUtilsFicha from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport useFormProgress from \"./ProgressContext\";\n\nconst useStyles = makeStyles(\n 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);\n\nconst ComponentInner = props => {\n const cls = useStyles(props);\n const context = useFormProgress();\n const resource = useResourceContext(props);\n const { estado, loading, fichaProps } = useContext(FichaContext);\n const utils = useUtilsFicha({ resource });\n\n useEffect(() => {\n fichaProps.onRenderFicha && fichaProps.onRenderFicha(utils, estado);\n }, []);\n\n useEffect(() => {\n if (!loading) {\n fichaProps.onLoadFicha && fichaProps.onLoadFicha(utils, estado);\n }\n }, [loading]);\n\n return (\n <CardContentInner className={context.open ? cls.block : ''}>\n {context.open && <CircularProgress\n className={cls.progress}\n thickness={4}\n size={50}\n />}\n {props.children}\n </CardContentInner>\n );\n};\n\nconst FormContainer = props => <ComponentInner {...props} />;\n\nexport default FormContainer;\n","import * as React from \"react\";\nimport { useCallback, useContext } from \"react\";\nimport { FormWithRedirect, SimpleForm, SimpleFormView, useNotify } from \"react-admin\";\nimport { useUtilsSubmit } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport FormContainer from \"./FormContainer\";\n//import ToolbarFicha from \"./ToolbarFicha\";\n\nconst setError = ([field, errors], state) => {\n state.fields[field].data = errors;\n};\n\nconst defaultMutators = {\n setError\n};\n\nconst defaultSave = () => {};\n\nconst FormEtriek = props => {\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config: { mutators = {}, ...restConfig } = {} } = fichaProps;\n const finalMutators = mutators === defaultMutators ? mutators : { ...defaultMutators, ...mutators };\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n\n const finalSave = useCallback(\n (values, redirectTo, options) => {\n const valid = onBeforeSubmitFicha && onBeforeSubmitFicha({ form: { values }, ...utils }, \"N\");\n if (typeof valid === 'string') {\n notify(valid, 'warning');\n return defaultSave();\n }\n else {\n return valid === undefined || valid ? props.save(values, redirectTo, options) : defaultSave();\n }\n },\n [onBeforeSubmitFicha, utils]\n );\n\n return (\n <FormWithRedirect\n {...props}\n {...restConfig}\n save={finalSave}\n mutators={finalMutators}\n initialValues={initialValues}\n /*toolbar={<ToolbarFicha />}*/\n render={formProps => <SimpleFormView component={FormContainer} {...formProps} />}\n />\n );\n};\n\nFormEtriek.propTypes = {\n ...SimpleForm.propTypes\n};\n\nFormEtriek.defaultProps = {\n margin: \"normal\",\n variant: \"outlined\"\n};\n\nexport { FormEtriek };\n","import Collapse from '@material-ui/core/Collapse';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport List from '@material-ui/core/List';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport * as React from \"react\";\r\nimport { Fragment } from \"react\";\r\n\r\nimport { useTranslate } from 'react-admin';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n icon: {\r\n minWidth: theme.spacing(5)\r\n },\r\n sidebarIsOpen: {\r\n paddingLeft: 25,\r\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\r\n },\r\n sidebarIsClosed: {\r\n paddingLeft: 0,\r\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\r\n },\r\n}));\r\n\r\nconst SubMenu = ({\r\n handleToggle,\r\n sidebarIsOpen,\r\n isOpen,\r\n name,\r\n icon,\r\n children,\r\n dense,\r\n}) => {\r\n const translate = useTranslate();\r\n const classes = useStyles();\r\n\r\n const header = (\r\n <MenuItem dense={dense} button onClick={handleToggle}>\r\n <ListItemIcon className={classes.icon}>\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 <Fragment>\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 className={\r\n sidebarIsOpen\r\n ? classes.sidebarIsOpen\r\n : classes.sidebarIsClosed\r\n }\r\n >\r\n {children}\r\n </List>\r\n <Divider/>\r\n </Collapse>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default SubMenu;\r\n","import { useMediaQuery } from '@material-ui/core';\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport * as React from \"react\";\nimport { Fragment, useState } from \"react\";\nimport { DashboardMenuItem, Menu as RaMenu, MenuItemLink, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport SubMenu from \"./SubMenu\";\n\nconst margenTop = { marginTop: \"1.5em\" };\n\nconst renderMenu = props => {\n const { items: menus, translate, ...rest } = props;\n const { state, onMenuClick, handleToggle, activeClassName, iconClass, className, dense, open } = rest;\n\n return menus && <Fragment>\n {menus.map(item => {\n const { name, menu, label, icon = 'settings' } = item;\n\n return menu ?\n <SubMenu\n key={name}\n name={label}\n handleToggle={() => handleToggle(name)}\n isOpen={state[name]}\n sidebarIsOpen={open}\n icon={<SettingsIcon/>} /* createElement(resource.icon) */\n dense={dense}\n >\n {renderMenu({ items: menu, translate, ...rest })}\n </SubMenu> :\n <MenuItemLink\n key={name}\n to={`/${name}`}\n //TODO: Cambiar junto con 'es.js'\n //primaryText={translate(`resources.${resource}.name`, {smart_count: 2})}\n primaryText={translate(`resources.${name}.name`, { _: label })}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n leftIcon={<SettingsIcon/>}\n //classes={{active: activeClassName, icon: iconClass}}\n //className={className}\n />\n })}\n </Fragment>\n};\n\nconst Menu = ({ onMenuClick, dense, logout, hasDashboard }) => {\n const translate = useTranslate();\n const [state, setState] = useState({ mnuPrueba: false });\n //const classes = useStyles();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const open = useSelector(state => state.admin.ui.sidebarOpen);\n //useSelector(state => state.theme); // force rerender on theme change\n\n const menus = JSON.parse(localStorage.getItem('menus'));\n\n const className = '';//classes.itemLink;\n const iconClass = '';//classes.itemIcon;\n const activeClassName = '';//classes.secondary;\n\n const handleToggle = menu => {\n setState(state => ({ ...state, [menu]: !state[menu] }));\n };\n\n const itemsFn = renderMenu({\n items: menus,\n handleToggle,\n state,\n activeClassName,\n iconClass,\n className,\n open,\n dense,\n onMenuClick,\n translate\n });\n\n return (\n <RaMenu style={margenTop}>\n <DashboardMenuItem\n primaryText={translate(\"ra.page.dashboard\")}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n {itemsFn}\n {isXSmall && (\n <MenuItemLink\n to=\"/configuration\"\n primaryText={translate(\"pos.configuration\")}\n leftIcon={<SettingsIcon/>}\n onClick={onMenuClick}\n sidebarIsOpen={open}\n dense={dense}\n //classes={{ active: activeClassName, icon: iconClass }}\n //className={className}\n />\n )}\n {isXSmall && logout}\n {!isXSmall && isSmall && logout}\n </RaMenu>\n );\n};\n\nexport default Menu;\n","import { defaultTheme } from 'react-admin';\n\nconst darkTheme = { ...defaultTheme };\ndarkTheme.palette.type = 'dark';\ndarkTheme.overrides.RaSidebar = {\n drawerPaper: {\n position: 'sticky' //Para que el menú no escrolee con el contenido del Admin\n }\n};\ndarkTheme.overrides.RaRichTextInput = {\n '@global': {\n '.ra-rich-text-input': {\n '& .ql-editor': {\n '& p:not(:last-child)': {\n marginBottom: '0'\n }\n }\n }\n }\n};\n\nconst lightTheme = { ...defaultTheme };\nlightTheme.palette.type = 'light';\nlightTheme.overrides.RaSidebar = {\n drawerPaper: {\n position: 'sticky' //Para que el menú no escrolee con el contenido del Admin\n }\n};\nlightTheme.overrides.RaRichTextInput = {\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\nexport { lightTheme, darkTheme };\n","import * as React from \"react\";\nimport { Layout as RaLayout, Sidebar } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport AppBar from './AppBar';\nimport EtriekNotification from \"./EtriekNotification\";\nimport Menu from './Menu';\nimport { darkTheme, lightTheme } from './themes';\n\nconst CustomSidebar = props => <Sidebar {...props} />;\n\nconst Layout = props => {\n const { apiFolder, ...rest } = props;\n const theme = useSelector(state => state.theme === 'dark' ? darkTheme : lightTheme);\n\n return (\n <RaLayout\n {...rest}\n appBar={AppBar}\n sidebar={CustomSidebar}\n menu={Menu}\n theme={theme}\n notification={EtriekNotification}\n />\n );\n};\n\nexport default Layout;\n","import Avatar from '@material-ui/core/Avatar';\nimport Button from '@material-ui/core/Button';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { createTheme, makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport LockIcon from '@material-ui/icons/Lock';\nimport { ThemeProvider } from '@material-ui/styles';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { Notification, useLogin, useNotify, useTranslate } from 'react-admin';\nimport { Field, Form } from 'react-final-form';\nimport { useLocation } from 'react-router-dom';\nimport { lightTheme } from './themes';\n\nconst useStyles = makeStyles(theme => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n alignItems: 'center',\n justifyContent: 'flex-start',\n backgroundImage: ({ loginBackgroundImage }) => loginBackgroundImage,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n avatarIcon: {\n backgroundColor: theme.palette.secondary.main,\n },\n icon: ({ textLength }) => ({\n position: \"absolute\",\n left: theme.spacing(14 - Math.ceil(textLength / 2) - 1)\n }),\n hint: {\n marginTop: '1em',\n display: 'flex',\n justifyContent: 'center',\n color: theme.palette.grey[500],\n },\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n actions: {\n padding: '0 1em 1em 1em',\n }\n}));\n\nconst renderInput = ({\n meta: { touched, error } = { touched: false, error: undefined },\n input: { ...inputProps },\n render,\n ...props\n}) => (\n <TextField\n error={!!(touched && error)}\n helperText={touched && error}\n {...inputProps}\n {...props}\n fullWidth\n />\n);\n\nconst Login = props => {\n const { loginBackgroundImage, nameSource = \"username\", passwordSource = \"password\" } = props;\n const [loading, setLoading] = useState(false);\n const translate = useTranslate();\n const loginButtonText = translate('ra.auth.sign_in');\n const classes = useStyles({ loginBackgroundImage, textLength: loginButtonText.length });\n const notify = useNotify();\n const login = useLogin();\n const location = useLocation();\n\n const handleSubmit = auth => {\n setLoading(true);\n login(auth, location.state ? location.state.nextPathname : '/')\n .catch(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 'warning'\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\n onSubmit={handleSubmit}\n validate={validate}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit}>\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 <Field\n autoFocus\n name={nameSource}\n component={renderInput}\n label={translate('ra.auth.username')}\n disabled={loading}\n />\n </div>\n <div className={classes.input}>\n <Field\n name={passwordSource}\n component={renderInput}\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 <Notification/>\n </div>\n </form>\n )}\n />\n );\n};\n\n// We need to put the ThemeProvider decoration in another component\n// Because otherwise the useStyles() hook used in Login won't get\n// the right theme\nconst LoginWithTheme = props => (\n <ThemeProvider theme={createTheme(lightTheme)}>\n <Login {...props} />\n </ThemeProvider>\n);\n\nexport default LoginWithTheme;\n","import Menu from \"@material-ui/core/Menu\";\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { useRef, useState } from \"react\";\r\nimport { Button, FieldTitle, useResourceContext } from \"react-admin\";\r\n\r\nconst sanitizeRestProps = ({\r\n displayedFilters,\r\n filterValues,\r\n showFilter,\r\n ...rest\r\n}) => rest;\r\n\r\nconst useStyles = makeStyles({\r\n root: { display: 'inline-block' },\r\n});\r\n\r\nconst MenuButton = props => {\r\n const { className, options = [], icon: Icon, ...rest } = props;\r\n const [open, setOpen] = useState(false);\r\n const anchorEl = useRef();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const classes = useStyles(props);\r\n const resource = useResourceContext(props);\r\n\r\n const handleMenuItemClick = (event, index) => {\r\n setSelectedIndex(index);\r\n setOpen(false);\r\n };\r\n\r\n const handleToggle = (e) => {\r\n // This prevents ghost click.\r\n e.preventDefault();\r\n setOpen(true);\r\n anchorEl.current = e.currentTarget;\r\n };\r\n\r\n const handleClose = (event) => {\r\n if (anchorEl.current && anchorEl.current.contains(event.target)) {\r\n return;\r\n }\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <div\r\n className={classnames(classes.root, className)}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n <Button\r\n className=\"add-filter\"\r\n label={options[selectedIndex].label}\r\n onClick={handleToggle}\r\n >\r\n {Icon}\r\n </Button>\r\n <Menu\r\n open={open}\r\n anchorEl={anchorEl.current}\r\n onClose={handleClose}\r\n >\r\n {options.map((option, index) => (\r\n <MenuItem\r\n key={option.label}\r\n disabled={option.disabled}\r\n selected={index === selectedIndex}\r\n onClick={(event) => handleMenuItemClick(event, index) && option?.onClick(event, index)}\r\n resource={resource}\r\n title={option.label}\r\n >\r\n <FieldTitle\r\n label={option.label}\r\n resource={resource}\r\n />\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MenuButton\r\n","import { Divider } from '@material-ui/core';\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Children, cloneElement, isValidElement, useCallback, useContext, useState } from \"react\";\nimport { escapePath, FormWithRedirect, getTabFullPath, TabbedFormTabs, Toolbar, useNotify } from \"react-admin\";\nimport { Route, useLocation, useRouteMatch } from \"react-router-dom\";\nimport { useUtilsSubmit } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport FormContainer from \"./FormContainer\";\n\nconst TabbedFormView = props => {\n const {\n basePath,\n children,\n className,\n classes: classesOverride,\n component: Component,\n form,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n mutationMode,\n pristine,\n record,\n redirect: defaultRedirect,\n resource,\n saving,\n submitOnEnter,\n syncWithLocation = true,\n tabs,\n toolbar,\n undoable,\n variant,\n margin,\n ...rest\n } = props;\n const classes = useTabbedFormViewStyles(props);\n const match = useRouteMatch();\n const location = useLocation();\n const url = match ? match.url : location.pathname;\n const [tabValue, setTabValue] = useState(0);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n }\n };\n\n return (\n <form\n className={classnames('tabbed-form', className)}\n {...sanitizeRestProps(rest)}\n >\n {cloneElement(\n tabs,\n {\n classes,\n url,\n syncWithLocation,\n onChange: handleTabChange,\n value: tabValue,\n },\n children\n )}\n <Divider/>\n <Component className={classes.content}>\n {/* All tabs are rendered (not only the one in focus), to allow validation\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\n use to hide the tab using CSS if it's not the one in focus.\n See https://github.com/marmelab/react-admin/issues/1866 */}\n {Children.map(children, (tab, index) => {\n if (!tab) {\n return;\n }\n const tabPath = getTabFullPath(tab, index, url);\n return (\n <Route exact path={escapePath(tabPath)}>\n {routeProps =>\n isValidElement(tab)\n ? React.cloneElement(tab, {\n intent: 'content',\n classes,\n resource,\n record,\n basePath,\n hidden: syncWithLocation\n ? !routeProps.match\n : tabValue !== index,\n variant: tab.props.variant || variant,\n margin: tab.props.margin || margin,\n value: syncWithLocation\n ? tabPath\n : index,\n })\n : null\n }\n </Route>\n );\n })}\n </Component>\n {toolbar &&\n React.cloneElement(toolbar, {\n basePath,\n className: 'toolbar',\n handleSubmitWithRedirect,\n handleSubmit,\n invalid,\n mutationMode,\n pristine,\n record,\n redirect: defaultRedirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n })}\n </form>\n );\n};\n\nexport const useTabbedFormViewStyles = makeStyles(\n theme => ({\n errorTabButton: { color: theme.palette.error.main },\n content: {\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n }),\n { name: 'RaTabbedForm' }\n);\n\nconst DefaultInnerContainer = props => {\n const { className, children } = props;\n return <div className={className}>{children}</div>;\n};\n\nTabbedFormView.defaultProps = {\n submitOnEnter: true,\n tabs: <TabbedFormTabs/>,\n toolbar: <Toolbar/>,\n component: DefaultInnerContainer,\n};\n\nconst sanitizeRestProps = ({\n active,\n dirty,\n dirtyFields,\n dirtyFieldsSinceLastSubmit,\n dirtySinceLastSubmit,\n error,\n errors,\n hasSubmitErrors,\n hasValidationErrors,\n initialValues,\n modified = null,\n modifiedSinceLastSubmit,\n save = null,\n submitError,\n submitErrors,\n submitFailed,\n submitSucceeded,\n submitting,\n touched = null,\n valid,\n validating,\n values,\n visited = null,\n __versions = null,\n ...props\n}) => props;\n\nconst setError = ([field, errors], state) => {\n state.fields[field].data = errors;\n};\n\nconst defaultMutators = {\n setError\n};\n\nconst defaultSave = () => {};\n\nexport const TabbedFormEtriek = props => {\n const { initialValues, fichaProps } = useContext(FichaContext);\n const { onBeforeSubmitFicha } = fichaProps;\n const { config: { mutators = {}, ...restConfig } = {} } = fichaProps;\n const finalMutators = mutators === defaultMutators ? mutators : { ...defaultMutators, ...mutators };\n const utils = useUtilsSubmit(props);\n const notify = useNotify();\n\n const finalSave = useCallback(\n (values, redirectTo, options) => {\n const valid = onBeforeSubmitFicha && onBeforeSubmitFicha({ form: { values }, ...utils }, \"N\");\n if (typeof valid === 'string') {\n notify(valid, 'warning');\n return defaultSave();\n }\n else {\n return valid === undefined || valid ? props.save(values, redirectTo, options) : defaultSave();\n }\n },\n [onBeforeSubmitFicha, utils]\n );\n\n return (\n <FormWithRedirect\n {...props}\n {...restConfig}\n save={finalSave}\n mutators={finalMutators}\n initialValues={initialValues}\n /*toolbar={<ToolbarFicha/>}*/\n render={formProps => <TabbedFormView component={FormContainer} {...formProps} />}\n />\n );\n};\n\nTabbedFormEtriek.defaultProps = {\n margin: \"normal\",\n variant: \"outlined\",\n syncWithLocation: false\n};\n","import englishMessages from 'ra-language-english';\n//import resources from './en-fides';\n\nenglishMessages.ra.page.empty = 'No records yet';\n\nconst enMessages = {\n ...englishMessages,\n login: {\n id: 'ID',\n hint: 'Login',\n required: 'Insert Username or ID',\n send: 'Send',\n email: \"Enter your email address\",\n check_email: 'Check your email inbox, we just send you a verification code!',\n must_enter_credentials: 'You must first enter Username or ID',\n restore_password: \"Restore Password\",\n punch_in: \"Punch In\"\n },\n pos: {\n search: 'Search',\n change_pin: 'Change Pin',\n change_password: 'Change Password',\n configuration: 'Configuration',\n language: 'Language',\n theme: {\n name: 'Theme',\n light: 'Light',\n dark: 'Dark',\n },\n dashboard: {\n welcome: {\n title: 'Welcome',\n subtitle: \"Employee Management\",\n aor_button: 'Metiri WebSite'\n },\n }\n },\n validation: {\n greater_or_equal: 'Must be greater than or equal to %{menor}'\n },\n //...resources\n};\n\nexport default enMessages;\n","import spanishMessages from '@blackbox-vision/ra-language-spanish';\n//import resources from './es-fides';\n\nspanishMessages.ra.notification.created = 'Datos guardados correctamente';\nspanishMessages.ra.action.bulk_actions = '1 seleccionado |||| %{smart_count} selecccionados';\nspanishMessages.ra.page.dashboard = 'Inicio';\nspanishMessages.ra.page.empty = 'Sin registros todavía';\nspanishMessages.ra.page.invite = '¿Quiere agregar uno?';\nspanishMessages.ra.page.list = '%{name}';\nspanishMessages.ra.page.edit = \"Editar %{name}\";\nspanishMessages.ra.action.back = 'Volver';\n\nconst esMessages = {\n ...spanishMessages,\n login: {\n id: 'Cédula',\n hint: 'Inicio de Sesión',\n required: 'Ingrese Usuario o Cédula',\n email: \"Ingrese su email aquí\",\n send: 'Enviar',\n check_email: 'Revisa tu correo electrónico, te enviaremos un código de verificación!',\n must_enter_credentials: 'Debe ingresar Nº de Usuario o Cédula y Contraseña primero',\n restore_password: \"Restablecer Contraseña\",\n punch_in: \"Generar Marcas\"\n },\n pos: {\n search: 'Búsqueda',\n change_pin: 'Cambiar Pin',\n change_password: 'Cambiar Contraseña',\n configuration: 'Configuración',\n language: 'Lenguaje',\n theme: {\n name: 'Tema Visual',\n light: 'Light',\n dark: 'Dark',\n },\n dashboard: {\n welcome: {\n title: 'Bienvenid@',\n subtitle: 'Gestión de Funcionarios',\n aor_button: 'Sitio de Metiri'\n },\n }\n },\n validation: {\n greater_or_equal: 'Debe ser mayor o igual a %{menor}'\n },\n //...resources\n};\n\nexport default esMessages;\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, loading, fichaProps = {} } = useContext(FichaContext);\r\n const { [props.source]: initialProps = {} } = fichaProps;\r\n const { hidden: hiddenProps = false, ...rest } = props;\r\n const { hidden: hiddenInitial, useContenido = useDefaultHook, ...restInitialProps } = initialProps;\r\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\r\n const dynamicProps = useContenido({ ...rest, estado, hidden, loading, ...restInitialProps });\r\n const { hidden: oculto, ...dynamicPropsRest } = dynamicProps;\r\n\r\n if (dynamicProps === undefined) {\r\n throw new Error(`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 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\";\nimport { useInput } from \"react-admin\";\nimport { useSelector } from \"react-redux\";\nimport { etrRequerido } from \"../../utils\";\nimport useUtilsFicha, { useDefaultHook } from \"../../utils/useUtils\";\nimport { FichaContext } from \"../FichaContext\";\n\nconst validateInput = (value, allVallues, meta) => typeof meta?.data === 'string' ? meta.data : undefined;\n\nconst useContenidoController = props => {\n const { estado, loading, fichaProps = {} } = useContext(FichaContext);\n const configInput = useSelector(state => {\n const configInputs = state.configInputs ? state.configInputs.filter(item => item.id === props.source) : [];\n return configInputs[0] ? configInputs[0] : null;\n });\n const { disabled: reduxDisabled, hidden: reduxHidden, required: reduxRequired } = configInput || {};\n const reduxValidate = reduxRequired === true ? etrRequerido : undefined;\n\n const { [props.source]: initialProps = {} } = fichaProps;\n const {\n onFocus: onFocusProps,\n onChange: onChangeProps,\n onBlur: onBlurProps,\n hidden: hiddenProps = false,\n disabled: disabledProps = false,\n validate: propValidate,\n ...rest\n } = props;\n const { input } = useInput({ source: props.source });\n const {\n onFocus: onFocusInitial,\n onBlur: onBlurInitial,\n onChange: onChangeInitial,\n hidden: hiddenInitial,\n disabled: disabledInitial,\n useContenido = useDefaultHook,\n validate: initValidate,\n ...restInitialProps\n } = initialProps;\n const hidden = hiddenInitial !== undefined ? hiddenInitial : hiddenProps;\n const disabled = disabledInitial !== undefined ? disabledInitial : disabledProps;\n const onFocus = onFocusInitial !== undefined ? onFocusInitial : onFocusProps;\n const onBlur = onBlurInitial !== undefined ? onBlurInitial : onBlurProps;\n const onChange = onChangeInitial !== undefined ? onChangeInitial : onChangeProps;\n const utils = useUtilsFicha(props);\n const dynamicProps = useContenido({ ...rest, estado, hidden, loading, utils, ...restInitialProps });\n const previousValue = useRef(input.value);\n\n if (dynamicProps === undefined) {\n throw new Error(`useContenido está devolviendo undefined para el contenido ${props.source}\\n Asegúrese de incluir una instrucción return al final de la función`);\n }\n\n const {\n hidden: hiddenDinamico,\n disabled: disabledDinamico,\n onFocus: onFocusDinamico,\n onChnage: onChangeDinamico,\n onBlur: onBlurDinamico,\n validate: dynamicValidate,\n ...dynamicPropsRest\n } = dynamicProps;\n const onFocusFinal = onFocusDinamico || onFocus;\n const onBlurFinal = onBlurDinamico || onBlur;\n const onChangeFinal = onChangeDinamico || onChange;\n\n const argCero = { ...utils, prev: previousValue.current };\n const finalPropsValidate = Array.isArray(propValidate) ? propValidate : [propValidate];\n const finalInitValidate = Array.isArray(initValidate) ? initValidate : [initValidate];\n const finalDynamicValidate = Array.isArray(dynamicValidate) ? dynamicValidate : [dynamicValidate];\n const finalValidate = [...finalPropsValidate, ...finalInitValidate, ...finalDynamicValidate, validateInput, reduxValidate].filter(i => i !== undefined);\n\n return {\n propsContenido: {\n onFocus: e => {\n onFocusFinal && onFocus(utils, estado, e);\n previousValue.current = e.target.value;\n },\n onBlur: e => onBlurFinal && onBlurFinal(argCero, estado, e),\n onChange: e => onChangeFinal && onChangeFinal(argCero, estado, e),\n helperText: false,\n validate: finalValidate,\n ...rest,\n ...restInitialProps,\n ...dynamicPropsRest,\n disabled: reduxDisabled !== undefined ? reduxDisabled : disabledDinamico !== undefined ? disabledDinamico : disabled\n },\n hidden: reduxHidden !== undefined ? reduxHidden : hiddenDinamico !== undefined ? hiddenDinamico : hidden\n }\n};\n\nexport default useContenidoController;\n","import * as React from \"react\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { Labeled, LinearProgress, ReferenceInput, SelectInput, useListContext, useVersion } from \"react-admin\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { deleteRecargarComboBox } from \"../../utils\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nexport const SelectInputEtriek = props => {\r\n const { callback, ...rest } = props;\r\n const { loading, data } = useListContext(rest);\r\n\r\n useEffect(() => {\r\n if (!loading) {\r\n // Llamo al callback de recargarComboBox pasándole data\r\n if (typeof callback === 'function') {\r\n callback(Object.values(data));\r\n }\r\n }\r\n }, [loading]);\r\n\r\n return <SelectInput {...rest}/>\r\n};\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const parentLoaded = useRef(false);\r\n const dispatch = useDispatch();\r\n const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n const recarga_cb = useSelector(state => {\r\n const rcb = state.reload_cb ? state.reload_cb.filter(item => item.id === props.source) : [];\r\n return rcb[0] ? rcb[0] : null;\r\n });\r\n const respaldoFiltro = useRef(recarga_cb);\r\n const filter = recarga_cb === null && respaldoFiltro.current ? respaldoFiltro.current : recarga_cb;\r\n\r\n let callback, finalFilter;\r\n if (filter) {\r\n const { callback: tempCallback, ...restFilter } = filter;\r\n callback = tempCallback;\r\n finalFilter = restFilter;\r\n }\r\n\r\n useEffect(() => {\r\n if (recarga_cb !== null) {\r\n respaldoFiltro.current = recarga_cb;\r\n dispatch(deleteRecargarComboBox(props.source));\r\n }\r\n }, [JSON.stringify(recarga_cb)]);\r\n\r\n useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n\r\n return parentLoaded.current ? (\r\n !hidden &&\r\n <ReferenceInput\r\n {...rest}\r\n perPage={250}\r\n filter={finalFilter}\r\n >\r\n <SelectInputEtriek\r\n callback={callback}\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceInput>\r\n ) :\r\n <Labeled\r\n id={props.id}\r\n label={props.label}\r\n source={props.source}\r\n resource={props.resource}\r\n className={props.className}\r\n isRequired={props.isRequired}\r\n meta={props.meta}\r\n input={props.input}\r\n margin={props.margin}\r\n >\r\n <LinearProgress timeout={1}/>\r\n </Labeled>;\r\n};\r\nexport default ComboBox;\r\n","import { Box, Paper } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport ActionCheck from \"@material-ui/icons/CheckCircle\";\nimport AlertError from \"@material-ui/icons/ErrorOutline\";\nimport classnames from \"classnames\";\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\";\nimport { TreeView } from \"devextreme-react\";\n\nconst PostList = (props) => (\n <List\n {...props}\n hasCreate={false}\n exporter={false}\n perPage={25}\n title=\" \"\n bulkActionButtons={<span />}\n >\n <Datagrid>\n <TextField source=\"funced\" sortable label=\"Cédula\" />\n <TextField source=\"funpriape\" sortable label=\"Apellido\" />\n <TextField source=\"funprinom\" sortable label=\"Nombre\" />\n </Datagrid>\n </List>\n);\n\nconst filtroInicial = { fillista: \"empcod=-1\" };\n\nconst TreeWithList = (props) => {\n const [filtro, setFiltro] = React.useState(filtroInicial);\n const dataProvider = useDataProvider();\n\n const onClick = useCallback(\n (e) => {\n setFiltro({ fillista: e.node.key });\n },\n [setFiltro]\n );\n\n const createChildren = useCallback(\n (parent) => {\n const parentId = parent ? parent.itemData.id : \"\";\n\n return dataProvider\n .getChildNodes(\"form_224\", { parentId: parentId })\n .then((response) => response.data)\n .catch(() => {\n throw new Error(\"Data Loading Error\");\n });\n },\n [dataProvider]\n );\n\n return (\n <Box display=\"flex\" flex={1} alignItems=\"flex-start\" height=\"20em\">\n <Box flexGrow={1}>\n <TreeView\n id=\"funcionarios-treeview\"\n dataStructure=\"plain\"\n rootValue=\"\"\n onItemClick={onClick}\n createChildren={createChildren}\n />\n </Box>\n <Box flexGrow={2}>\n <PostList\n resource=\"form_224\"\n basePath=\"/form_224\"\n filter={filtro}\n />\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 loading,\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={loading} onClick={onClose}>\n <CancelIcon className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={loading}\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 loading: 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 * as React from 'react'\nimport { Fragment, useCallback, useState } from 'react'\nimport { TextInput } from 'react-admin'\nimport IconButton from '@material-ui/core/IconButton'\nimport RemoveCircleOutlineIcon from '@material-ui/icons/RemoveCircleOutline'\nimport CheckIcon from '@material-ui/icons/Check'\nimport SearchIcon from '@material-ui/icons/Search'\nimport { useForm } from 'react-final-form'\nimport { useSelector } from 'react-redux'\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 = useSelector(\n (state) => state.admin.resources['form_224'].list.selectedIds\n )\n const [open, setOpen] = useState(false)\n const form = useForm()\n\n const handleClose = useCallback(() => {\n setOpen(false)\n }, [setOpen])\n\n const handleConfirm = (e, button) => {\n setOpen(false)\n form.change(source, {\n seleccion: selectedIds,\n all: false,\n none: false\n })\n }\n\n const handleNinguno = (e) => {\n form.change(source, {\n seleccion: [],\n all: false,\n none: true\n })\n }\n\n const handleTodos = (e) => {\n form.change(source, {\n seleccion: [],\n all: true,\n none: false\n })\n }\n\n return (\n <Fragment>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TextInput\n initialValue={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='Ninguno2'\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 </div>\n <FiltroFuncionarios\n isOpen={open}\n title={`Selección de ${label}`}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </Fragment>\n )\n}\n\nexport default TBSF\n","import { Paper } from \"@material-ui/core\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\r\nimport ActionCheck from \"@material-ui/icons/CheckCircle\";\r\nimport AlertError from \"@material-ui/icons/ErrorOutline\";\r\nimport classnames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\nimport * as React from \"react\";\r\nimport { useCallback } from \"react\";\r\nimport { 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 loading,\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 = useSelector(state => {\r\n return state.admin.resources[contentResource].list.selectedIds;\r\n });\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}>\r\n {content}\r\n </DialogContent>\r\n <DialogActions>\r\n <Button disabled={loading} onClick={onClose}>\r\n <CancelIcon className={classes.iconPaddingStyle}/>\r\n {translate(cancel, { _: cancel })}\r\n </Button>\r\n <Button\r\n disabled={loading}\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 loading: 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 * as React from \"react\";\nimport { Fragment, useCallback, useState } from \"react\";\nimport { TextInput } from \"react-admin\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport RemoveCircleOutlineIcon from '@material-ui/icons/RemoveCircleOutline';\nimport CheckIcon from '@material-ui/icons/Check';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { useForm } from \"react-final-form\";\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 }\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 } = props;\n const [open, setOpen] = useState(false);\n const form = useForm();\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleConfirm = (e, selectedIds) => {\n setOpen(false);\n form.change(source, {\n \"seleccion\": selectedIds,\n \"all\": false,\n \"none\": false,\n });\n };\n\n const handleNinguno = e => {\n form.change(source, {\n \"seleccion\": [],\n \"all\": false,\n \"none\": true,\n });\n };\n\n const handleTodos = e => {\n form.change(source, {\n \"seleccion\": [],\n \"all\": true,\n \"none\": false,\n });\n };\n\n return (\n <>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TextInput\n initialValue={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 <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\" title=\"Selección\"\n >\n <SearchIcon/>\n </IconButton>\n </>\n }}\n />\n </div>\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 basePath: `/${asistantResource}`\n })}\n onConfirm={handleConfirm}\n onClose={handleClose}\n />\n </>\n )\n};\n\nexport default TextBoxSelection;\n","import * as React from \"react\";\r\nimport { BooleanField as RaBooleanField } 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 } = props;\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 &&\r\n <RaBooleanField {...propsContenido} record={boolRecord}/>\r\n );\r\n};\r\n\r\nexport default BooleanField;\r\n","import * as React from \"react\";\nimport { ImageField, FileInput } from \"react-admin\";\nimport useContenidoController from \"./useContenidoController\";\n\nconst Camino = props => {\n const { propsContenido, hidden } = useContenidoController(props);\n\n return (\n !hidden &&\n <FileInput\n accept=\"\"\n maxSize={5000000}\n {...propsContenido}\n >\n <ImageField source=\"src\"/>\n </FileInput>\n );\n};\n\nexport default Camino;\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 (\r\n !hidden &&\r\n <BooleanInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default CheckBox;\r\n","import * as React from \"react\";\r\nimport { SelectInput } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst ComboBoxManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return (\r\n !hidden &&\r\n <SelectInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default ComboBoxManual;\r\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Edit, useEditController } from \"react-admin\";\nimport { useInitFicha } from \"../utils\";\nimport { useDefaultHook } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport { ProgressProvider } from \"./ProgressContext\";\n\nexport const EditEtriek = props => {\n const { useFormulario = useDefaultHook, ...rest } = props;\n const controllerProps = useEditController(rest);\n const { record: initialValues, loading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(() => ({ estado: \"M\", initialValues, loading, fichaProps }), [\n initialValues,\n loading,\n fichaProps\n ]);\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Edit {...rest} {...fichaProps?.panel}/>\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import Avatar from '@material-ui/core/Avatar';\r\nimport * as React from \"react\";\r\nimport { useRecordContext } from \"react-admin\";\r\n\r\nconst ImageField = props => {\r\n const {\r\n title,\r\n source,\r\n src\r\n } = props;\r\n const record = useRecordContext(props);\r\n const rutaImg = `${src}/${record[source]}`;\r\n\r\n return (\r\n <Avatar\r\n title={title}\r\n src={rutaImg}\r\n />\r\n );\r\n};\r\n\r\nexport default ImageField;\r\n","import * as React from \"react\";\r\nimport { cloneElement, useMemo } from \"react\";\r\nimport {\r\n CreateButton,\r\n ExportButton,\r\n sanitizeListRestProps,\r\n TopToolbar,\r\n useListContext,\r\n useResourceContext,\r\n useResourceDefinition\r\n} from \"react-admin\";\r\n\r\nconst ListActionsEtriek = props => {\r\n const { className, exporter, filters, children, ...rest } = props;\r\n const {\r\n currentSort,\r\n displayedFilters,\r\n filterValues,\r\n basePath,\r\n selectedIds,\r\n showFilter,\r\n total,\r\n } = useListContext(props);\r\n const resource = useResourceContext(rest);\r\n const { hasCreate } = useResourceDefinition(rest);\r\n\r\n return useMemo(\r\n () => (\r\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\r\n {filters &&\r\n cloneElement(filters, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })}\r\n {hasCreate && <CreateButton basePath={basePath}/>}\r\n {exporter !== false && (\r\n <ExportButton\r\n disabled={total === 0}\r\n resource={resource}\r\n sort={currentSort}\r\n filterValues={filterValues}\r\n />\r\n )}\r\n {children}\r\n </TopToolbar>\r\n ),\r\n [resource, displayedFilters, filterValues, selectedIds, filters, total]\r\n );\r\n};\r\n\r\nexport default ListActionsEtriek;\r\n","import * as React from \"react\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { Labeled, LinearProgress, ReferenceArrayInput, SelectArrayInput, useVersion } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst ListCheck = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const parentLoaded = useRef(false);\r\n const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n\r\n return parentLoaded.current ? (\r\n !hidden &&\r\n <ReferenceArrayInput\r\n {...rest}\r\n >\r\n <SelectArrayInput\r\n helperText={helperText}\r\n optionText=\"etiqueta\"\r\n optionValue={props.source}\r\n />\r\n </ReferenceArrayInput>\r\n ) :\r\n <Labeled\r\n id={props.id}\r\n label={props.label}\r\n source={props.source}\r\n resource={props.resource}\r\n className={props.className}\r\n isRequired={props.isRequired}\r\n meta={props.meta}\r\n input={props.input}\r\n margin={props.margin}\r\n >\r\n <LinearProgress timeout={1}/>\r\n </Labeled>;\r\n};\r\nexport default ListCheck;\r\n","import Typography from \"@material-ui/core/Typography\";\r\nimport * as React from \"react\";\r\n\r\nconst MultiTextField = props => {\r\n const { fields, className, basePath, record, textAlign, sortable, ...rest } = props;\r\n const { campos, separador = '', secundario = [], hasSecundario } = fields;\r\n const principal = campos.map(item => record[item] !== undefined ? record[item] : item).join(`${separador}`);\r\n\r\n return <Typography\r\n noWrap\r\n variant=\"inherit\"\r\n className={className}\r\n {...rest}\r\n >\r\n {principal}\r\n {hasSecundario && <Typography\r\n component=\"span\"\r\n display=\"block\"\r\n color=\"textSecondary\"\r\n variant=\"caption\"\r\n >\r\n {secundario.map(item => `${item.etiqueta || '---'}: ${record[item.campo] || '---'}`).join(\" \")}\r\n </Typography>}\r\n </Typography>\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 (\r\n !hidden &&\r\n <PasswordInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default Password;\r\n","import * as React from \"react\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { Labeled, LinearProgress, RadioButtonGroupInput, ReferenceInput, useVersion } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst ComboBox = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n const parentLoaded = useRef(false);\r\n const version = useVersion();\r\n const { helperText, ...rest } = propsContenido;\r\n\r\n useEffect(() => {\r\n parentLoaded.current = true;\r\n }, [version]);\r\n\r\n return parentLoaded.current ? (\r\n !hidden &&\r\n <ReferenceInput {...rest} >\r\n <RadioButtonGroupInput helperText={helperText} optionText=\"etiqueta\" optionValue={props.source}/>\r\n </ReferenceInput>\r\n ) :\r\n <Labeled\r\n id={props.id}\r\n label={props.label}\r\n source={props.source}\r\n resource={props.resource}\r\n className={props.className}\r\n isRequired={props.isRequired}\r\n meta={props.meta}\r\n input={props.input}\r\n >\r\n <LinearProgress/>\r\n </Labeled>;\r\n};\r\n\r\nexport default ComboBox;\r\n","import * as React from \"react\";\r\nimport { RadioButtonGroupInput } from \"react-admin\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst RadioButtonManual = props => {\r\n const { propsContenido, hidden } = useContenidoController(props);\r\n\r\n return (\r\n !hidden &&\r\n <RadioButtonGroupInput {...propsContenido} />\r\n );\r\n};\r\n\r\nexport default RadioButtonManual;\r\n","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Show, useShowController } from \"react-admin\";\nimport { useInitFicha } from \"../utils\";\nimport { useDefaultHook } from \"../utils/useUtils\";\nimport { FichaContext } from \"./FichaContext\";\nimport { ProgressProvider } from \"./ProgressContext\";\n\nexport const ShowEtriek = props => {\n const { useFormulario = useDefaultHook, ...rest } = props;\n const controllerProps = useShowController(rest);\n const { record: initialValues, loading } = controllerProps;\n const { fichaProps } = useInitFicha(props);\n const context = useMemo(() => ({ estado: \"M\", initialValues, loading, fichaProps }), [\n initialValues,\n loading,\n fichaProps\n ]);\n\n return (\n <ProgressProvider>\n <FichaContext.Provider value={context}>\n <Show {...rest} {...controllerProps} {...fichaProps?.panel} />\n </FichaContext.Provider>\n </ProgressProvider>\n );\n};\n","import Divider from \"@material-ui/core/Divider\";\r\nimport Tab from \"@material-ui/core/Tab\";\r\nimport Tabs from \"@material-ui/core/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 { filterValues, setFilters, tabs: { ids, ...tabs }, GridComponent = GrillaEtriek, ...rest } = 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\r\n {...rest}\r\n {...tabs[tabActual]}\r\n />\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 (\r\n !hidden &&\r\n <TextInput\r\n multiline\r\n {...propsContenido}\r\n />\r\n );\r\n};\r\n\r\nexport default TextArea;\r\n","import * as React from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { NumberInput, TextInput, useInput } from \"react-admin\";\r\nimport { KeyboardDateInput, KeyboardDateTimeInput } from \"react-admin-date-inputs\";\r\nimport { useForm } from \"react-final-form\";\r\nimport useContenidoController from \"./useContenidoController\";\r\n\r\nconst TextBox = props => {\r\n const { tipo, ...rest } = props;\r\n const { propsContenido, hidden } = useContenidoController(rest);\r\n const form = useForm();\r\n const { input, meta } = useInput({ source: props.source });\r\n const esFechaHora = tipo === 'F' || tipo === 'Z';\r\n\r\n useEffect(() => {\r\n if (propsContenido.value) {\r\n form.change(props.source, propsContenido.value);\r\n if (props.disabled) {\r\n form.blur(props.source);\r\n }\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n // Para que ejecute el onBlur al cambiar el valor desde el asistente\r\n if (esFechaHora && input.value != '' && meta.valid && meta.modified && !meta.active) {\r\n propsContenido.onBlur();\r\n }\r\n }, [input.value]);\r\n\r\n const txtProps = {\r\n ...propsContenido\r\n };\r\n\r\n return (\r\n !hidden && (\r\n tipo === 'N' || tipo === 'D' ?\r\n <NumberInput {...txtProps} /> :\r\n tipo === 'F' ?\r\n <KeyboardDateInput {...txtProps} /> :\r\n tipo === 'Z' ?\r\n <KeyboardDateTimeInput {...txtProps} /> :\r\n tipo === 'H' ?\r\n <TextInput {...txtProps} type=\"time\"/> :\r\n <TextInput {...txtProps} />\r\n )\r\n );\r\n};\r\n\r\nexport default TextBox;\r\n","import * as React from \"react\";\r\nimport { DateField, NumberField, TextField as RaTextField } from \"react-admin\";\r\nimport useFieldController from \"./useFieldController\";\r\n\r\nconst TextField = props => {\r\n const { tipo, value, ...rest } = props;\r\n const { propsContenido, hidden } = useFieldController(rest);\r\n\r\n const txtProps = {\r\n ...propsContenido,\r\n };\r\n\r\n return (\r\n !hidden && (\r\n tipo === 'N' || tipo === 'D' ?\r\n <NumberField {...txtProps} /> :\r\n tipo === 'F' ?\r\n <DateField {...txtProps} /> :\r\n tipo === 'Z' ?\r\n <DateField {...txtProps} showTime/> :\r\n <RaTextField {...txtProps} />\r\n )\r\n );\r\n};\r\n\r\nexport default TextField;\r\n","import { useResourceContext } from \"react-admin\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { getFormcodFromResource } from \"./utils\";\r\n\r\nconst useReferenceLabel = (source, id) => {\r\n const resource = useResourceContext();\r\n\r\n return useSelector(state => state.admin.resources['cb_' + getFormcodFromResource(resource) + '_' + source].data[id]?.etiqueta || '');\r\n};\r\n\r\nexport default useReferenceLabel;\r\n"],"names":["ConfigurationMenu","forwardRef","props","ref","translate","useTranslate","useSelector","state","admin","resources","existePassword","React.createElement","MenuItemLink","key","to","primaryText","leftIcon","LockIcon","onClick","VpnLockIcon","CustomUserMenu","UserMenu","CustomAppBar","AppBar","elevation","userMenu","useNuevo","resource","options","useGetOne","useStyles","makeStyles","theme","root","& .MuiDataGrid-columnsContainer","backgroundColor","palette","type","& .MuiDataGrid-iconSeparator","display","header","color","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","CustomNoRowsOverlay","classes","GridOverlay","className","viewBox","aria-hidden","focusable","fillRule","transform","cx","cy","rx","ry","d","useDeleteRowEtrGrid","params","useMutation","payload","useSaveRowEtrGrid","styleMargin","marginLeft","fontWeight","defaultIcon","ActionDelete","EtrDeleteWithConfirmButton","api","basePath","confirmTitle","confirmContent","icon","record","redirect","onSuccess","onFailure","source","camposClaveFila","rest","notify","useNotify","useDeleteWithConfirmController","open","loading","handleDialogOpen","handleDialogClose","requestFn","refresh","json","Error","smart_count","e","message","clavesFila","Object","keys","filter","split","includes","reduce","obj","handleDelete","useCallback","event","ge","Fragment","Button","Confirm","isOpen","title","content","onConfirm","onClose","EtrDialog","Dialog","fullWidth","DialogTitle","labelEstado","DialogContentText","Typography","component","variant","style","msgTitle","msgDesc","FormWithRedirect","save","render","initialValues","propTypes","PropTypes","EtrDeleteButton","row","EtrCreateButton","editors","recordPadre","etrResource","useSafeSetState","setOpen","enabled","data","etiqueta","handleSubmit","values","estado","saveContext","useMemo","setOnFailure","console","log","stopPropagation","AddIcon","SaveContextProvider","value","handleSubmitWithRedirect","pristine","saving","DialogContent","Children","map","child","index","cloneElement","initialValue","disabled","undefined","InputLabelProps","shrink","DialogActions","SaveButton","IconCancel","EtrEditButton","EditIcon","indexOf","createTheme","esES","ProgressContext","createContext","ProgressProvider","children","useState","context","show","hide","Provider","useFormProgress","useContext","useGetJson","method","useAjax","callback","returnPromise","recargarComboBox","id","deleteRecargarComboBox","setHiddenAction","hidden","setDisableAction","setRequireAction","required","useRecargarComboBox","dispatch","useDispatch","useSetHidden","useSetDisable","disable","useSetRequire","useDefaultHook","useUtilsGrilla","useListContext","useRedirect","useRefresh","unselectAll","useUnselectAll","ajax","useUtilsSubmit","setHidden","setDisable","setRequire","progress","useUtilsFicha","form","useForm","container","maxHeight","rowOdd","action","hover","esEditable","isRowEditable","EditButtonGrilla","EditButton","GrillaEtriek","onRenderGrilla","onLoadGrilla","version","useVersion","utils","useEffect","useInitGrilla","isSmall","useMediaQuery","breakpoints","down","hasEdit","useResourceDefinition","pt","st","secondaryText","desktopSize","count","React","SimpleList","linkType","TableContainer","Datagrid","stickyHeader","useInitFicha","useFormulario","fichaProps","getFormcodFromResource","useStylesContenidos","overflow","tab","contenido","up","etrRequerido","etrRequeridoNumerico","minValue","FichaContext","CreateEtriek","enableLoad","useResourceContext","Create","panel","func","DeleteButtonNoWarning","useDelete","deleteOne","Tooltip","IconButton","classnames","defaultProps","snackbarContent","whiteSpace","EtriekNotification","Notification","button","margin","input","FormDialog","dialogText","hasAccept","hasCancel","handleClose","aria-labelledby","block","pointerEvents","opacity","position","left","top","ComponentInner","cls","onRenderFicha","onLoadFicha","CardContentInner","CircularProgress","thickness","size","FormContainer","defaultMutators","setError","fields","FormEtriek","onBeforeSubmitFicha","config","mutators","restConfig","finalMutators","finalSave","redirectTo","valid","defaultSave","formProps","SimpleFormView","SimpleForm","minWidth","sidebarIsOpen","paddingLeft","transition","sidebarIsClosed","SubMenu","handleToggle","dense","MenuItem","ListItemIcon","ExpandMore","placement","Collapse","in","timeout","unmountOnExit","List","disablePadding","Divider","margenTop","Menu","onMenuClick","logout","mnuPrueba","setState","isXSmall","ui","sidebarOpen","itemsFn","renderMenu","menus","items","item","menu","SettingsIcon","_","JSON","parse","localStorage","getItem","activeClassName","iconClass","RaMenu","DashboardMenuItem","darkTheme","defaultTheme","overrides","RaSidebar","drawerPaper","RaRichTextInput","@global",".ra-rich-text-input","& .ql-editor","& p:not(:last-child)","marginBottom","lightTheme","CustomSidebar","Sidebar","minHeight","alignItems","justifyContent","backgroundImage","loginBackgroundImage","backgroundRepeat","backgroundSize","card","avatar","avatarIcon","Math","ceil","textLength","hint","grey","padding","actions","renderInput","meta","touched","inputProps","TextField","helperText","Login","nameSource","passwordSource","setLoading","loginButtonText","length","login","useLogin","location","useLocation","Form","onSubmit","auth","nextPathname","validate","errors","Card","Avatar","Field","autoFocus","CardActions","TabbedFormView","Component","invalid","mutationMode","defaultRedirect","submitOnEnter","syncWithLocation","tabs","toolbar","undoable","useTabbedFormViewStyles","match","useRouteMatch","url","pathname","tabValue","setTabValue","sanitizeRestProps","onChange","tabPath","getTabFullPath","Route","exact","path","escapePath","routeProps","isValidElement","intent","errorTabButton","paddingTop","paddingRight","TabbedFormTabs","Toolbar","TabbedFormEtriek","englishMessages","ra","page","empty","enMessages","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","bulk_actions","invite","list","edit","back","esMessages","useFieldController","initialProps","hiddenProps","hiddenInitial","useContenido","restInitialProps","dynamicProps","oculto","dynamicPropsRest","propsContenido","validateInput","allVallues","useContenidoController","configInputs","reduxDisabled","reduxHidden","reduxValidate","onFocusProps","onFocus","onChangeProps","onBlurProps","onBlur","disabledProps","propValidate","useInput","onFocusInitial","onBlurInitial","onChangeInitial","disabledInitial","initValidate","previousValue","useRef","hiddenDinamico","disabledDinamico","onFocusDinamico","onChangeDinamico","onChnage","onBlurDinamico","dynamicValidate","onFocusFinal","onBlurFinal","onChangeFinal","argCero","prev","current","finalPropsValidate","Array","isArray","finalInitValidate","finalDynamicValidate","target","i","SelectInputEtriek","SelectInput","PostList","hasCreate","exporter","perPage","bulkActionButtons","sortable","filtroInicial","fillista","TreeWithList","filtro","setFiltro","dataProvider","useDataProvider","node","createChildren","parent","getChildNodes","parentId","itemData","then","response","Box","flex","flexGrow","TreeView","dataStructure","rootValue","onItemClick","confirmPrimary","primary","confirmWarning","iconPaddingStyle","PaperComponent","Draggable","handle","cancel","Paper","cursorStyle","cursor","FiltroFuncionarios","confirmColor","ConfirmIcon","CancelIcon","translateOptions","handleConfirm","handleClick","maxWidth","dividers","string","object","confirm","elementType","bool","isRequired","ActionCheck","AlertError","defaultValue","seleccion","all","none","format","v","FiltroAsig","contentResource","selectedIds","BulkActions","boolRecord","stringify","RaBooleanField","FileInput","accept","maxSize","ImageField","BooleanInput","finalFilter","parentLoaded","recarga_cb","rcb","reload_cb","respaldoFiltro","ReferenceInput","optionText","optionValue","Labeled","LinearProgress","controllerProps","useEditController","Edit","filterBy","claves","sortModel","defColumns","columns","reference","allowAdd","allowRemove","setSort","sortField","field","sortDir","sort","forEach","comparison","useGetList","order","ids","rows","headerName","renderHeader","headerAlign","disableClickEventBubbling","renderCell","finalColumns","Loading","ThemeProvider","DataGrid","disableSelectionOnClick","pageSize","hideFooter","onSortModelChange","model","components","NoRowsOverlay","hasShow","TopToolbar","ListButton","ChevronLeft","ShowButton","filterGe","push","concat","src","useRecordContext","apiFolder","RaLayout","appBar","sidebar","filters","currentSort","displayedFilters","filterValues","showFilter","total","sanitizeListRestProps","CreateButton","ExportButton","ReferenceArrayInput","SelectArrayInput","Icon","anchorEl","selectedIndex","setSelectedIndex","preventDefault","currentTarget","contains","option","selected","handleMenuItemClick","FieldTitle","separador","secundario","hasSecundario","principal","campos","join","noWrap","campo","PasswordInput","RadioButtonGroupInput","gutterBottom","useShowController","Show","TextInput","InputProps","endAdornment","change","aria-label","RemoveCircleOutlineIcon","CheckIcon","SearchIcon","setFilters","GridComponent","tabActual","Tabs","indicatorColor","Tab","charAt","toUpperCase","slice","multiline","tipo","esFechaHora","blur","modified","active","txtProps","NumberInput","KeyboardDateInput","KeyboardDateTimeInput","asistant","asistantResource","FiltroAsis","NumberField","DateField","showTime","RaTextField","Date","toString","parseInt","exec","isNaN","mes","substr","ruta","nombre","fakeLink","document","createElement","body","appendChild","setAttribute","click","sourceFechaInicio","allValues","inicio","iniDate","reverse","finDate","Moment","isAfter","args","menor","idi","locale","enLocale","esLocale","now","setHours","setMinutes"],"mappings":"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"}