component\n */\nvar TextInput = function (_a) {\n var label = _a.label, format = _a.format, helperText = _a.helperText, onBlur = _a.onBlur, onFocus = _a.onFocus, onChange = _a.onChange, options = _a.options, parse = _a.parse, resource = _a.resource, source = _a.source, validate = _a.validate, rest = __rest(_a, [\"label\", \"format\", \"helperText\", \"onBlur\", \"onFocus\", \"onChange\", \"options\", \"parse\", \"resource\", \"source\", \"validate\"]);\n var _b = useInput(__assign({ format: format,\n onBlur: onBlur,\n onChange: onChange,\n onFocus: onFocus,\n parse: parse,\n resource: resource,\n source: source, type: 'text', validate: validate }, rest)), id = _b.id, input = _b.input, isRequired = _b.isRequired, _c = _b.meta, error = _c.error, touched = _c.touched;\n return (React.createElement(ResettableTextField, __assign({ id: id }, input, { label: label !== '' &&\n label !== false && (React.createElement(FieldTitle, { label: label, source: source, resource: resource, isRequired: isRequired })), error: !!(touched && error), helperText: React.createElement(InputHelperText, { touched: touched, error: error, helperText: helperText }) }, options, sanitizeRestProps(rest))));\n};\nTextInput.propTypes = {\n className: PropTypes.string,\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n options: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n};\nTextInput.defaultProps = {\n options: {},\n};\nexport default TextInput;\n","import { isValidElementType } from 'react-is';\nexport default (function (props, propName, componentName) {\n if (props[propName] && !isValidElementType(props[propName])) {\n return new Error(\"Invalid prop '\" + propName + \"' supplied to '\" + componentName + \"': the prop is not a valid React component\");\n }\n});\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { setListSelectedIds } from '../actions';\nimport { warning } from '../util';\n/**\n * Hook for Unselect All Side Effect\n *\n * @example\n *\n * const unselectAll = useUnselectAll('posts');\n * unselectAll();\n */\nvar useUnselectAll = function (resource1) {\n var dispatch = useDispatch();\n return useCallback(function (resource2) {\n warning(!resource2 && !resource1, \"You didn't specify the resource at initialization (useUnselectAll('posts')) nor when using the callback (unselectAll('posts'))\");\n dispatch(setListSelectedIds(resource2 || resource1, []));\n }, [dispatch, resource1]);\n};\nexport default useUnselectAll;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport resolveRedirectTo from '../util/resolveRedirectTo';\nimport { refreshView } from '../actions/uiActions';\nimport { useHistory } from 'react-router-dom';\n/**\n * Hook for Redirection Side Effect\n *\n * @example\n *\n * const redirect = useRedirect();\n * // redirect to list view\n * redirect('list', '/posts');\n * // redirect to edit view\n * redirect('edit', '/posts', 123);\n * // do not redirect (resets the record form)\n * redirect(false);\n * // redirect to the result of a function\n * redirect((redirectTo, basePath, is, data) => ...)\n */\nvar useRedirect = function () {\n var dispatch = useDispatch();\n var history = useHistory(); // Note: history is mutable. This prevents render loops in useCallback.\n return useCallback(function (redirectTo, basePath, id, data) {\n if (basePath === void 0) { basePath = ''; }\n if (!redirectTo) {\n if (history.location.state || history.location.search) {\n history.replace(__assign(__assign({}, history.location), { state: {}, search: undefined }));\n }\n else {\n dispatch(refreshView());\n }\n return;\n }\n history.push(resolveRedirectTo(redirectTo, basePath, id, data));\n }, [dispatch, history]);\n};\nexport default useRedirect;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Fade from '../Fade';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n // Improve scrollable dialog support.\n zIndex: -1,\n position: 'fixed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n right: 0,\n bottom: 0,\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n WebkitTapHighlightColor: 'transparent'\n },\n\n /* Styles applied to the root element if `invisible={true}`. */\n invisible: {\n backgroundColor: 'transparent'\n }\n};\nvar Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n _props$invisible = props.invisible,\n invisible = _props$invisible === void 0 ? false : _props$invisible,\n open = props.open,\n transitionDuration = props.transitionDuration,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Fade : _props$TransitionComp,\n other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"invisible\", \"open\", \"transitionDuration\", \"TransitionComponent\"]);\n\n return /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n in: open,\n timeout: transitionDuration\n }, other), /*#__PURE__*/React.createElement(\"div\", {\n className: clsx(classes.root, className, invisible && classes.invisible),\n \"aria-hidden\": true,\n ref: ref\n }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the backdrop is invisible.\n * It can be used when rendering a popover or a custom select component.\n */\n invisible: PropTypes.bool,\n\n /**\n * If `true`, the backdrop is open.\n */\n open: PropTypes.bool.isRequired,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiBackdrop'\n})(Backdrop);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Paper from '../Paper';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n overflow: 'hidden'\n }\n};\nvar Card = /*#__PURE__*/React.forwardRef(function Card(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$raised = props.raised,\n raised = _props$raised === void 0 ? false : _props$raised,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"raised\"]);\n\n return /*#__PURE__*/React.createElement(Paper, _extends({\n className: clsx(classes.root, className),\n elevation: raised ? 8 : 1,\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Card.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the card will use raised styling.\n */\n raised: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiCard'\n})(Card);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport { darken, fade, lighten } from '../styles/colorManipulator';\nimport TableContext from '../Table/TableContext';\nimport Tablelvl2Context from '../Table/Tablelvl2Context';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: _extends({}, theme.typography.body2, {\n display: 'table-cell',\n verticalAlign: 'inherit',\n // Workaround for a rendering bug with spanned columns in Chrome 62.0.\n // Removes the alpha (sets it to 1), and lightens or darkens the theme color.\n borderBottom: \"1px solid\\n \".concat(theme.palette.type === 'light' ? lighten(fade(theme.palette.divider, 1), 0.88) : darken(fade(theme.palette.divider, 1), 0.68)),\n textAlign: 'left',\n padding: 16\n }),\n\n /* Styles applied to the root element if `variant=\"head\"` or `context.table.head`. */\n head: {\n color: theme.palette.text.primary,\n lineHeight: theme.typography.pxToRem(24),\n fontWeight: theme.typography.fontWeightMedium\n },\n\n /* Styles applied to the root element if `variant=\"body\"` or `context.table.body`. */\n body: {\n color: theme.palette.text.primary\n },\n\n /* Styles applied to the root element if `variant=\"footer\"` or `context.table.footer`. */\n footer: {\n color: theme.palette.text.secondary,\n lineHeight: theme.typography.pxToRem(21),\n fontSize: theme.typography.pxToRem(12)\n },\n\n /* Styles applied to the root element if `size=\"small\"`. */\n sizeSmall: {\n padding: '6px 24px 6px 16px',\n '&:last-child': {\n paddingRight: 16\n },\n '&$paddingCheckbox': {\n width: 24,\n // prevent the checkbox column from growing\n padding: '0 12px 0 16px',\n '&:last-child': {\n paddingLeft: 12,\n paddingRight: 16\n },\n '& > *': {\n padding: 0\n }\n }\n },\n\n /* Styles applied to the root element if `padding=\"checkbox\"`. */\n paddingCheckbox: {\n width: 48,\n // prevent the checkbox column from growing\n padding: '0 0 0 4px',\n '&:last-child': {\n paddingLeft: 0,\n paddingRight: 4\n }\n },\n\n /* Styles applied to the root element if `padding=\"none\"`. */\n paddingNone: {\n padding: 0,\n '&:last-child': {\n padding: 0\n }\n },\n\n /* Styles applied to the root element if `align=\"left\"`. */\n alignLeft: {\n textAlign: 'left'\n },\n\n /* Styles applied to the root element if `align=\"center\"`. */\n alignCenter: {\n textAlign: 'center'\n },\n\n /* Styles applied to the root element if `align=\"right\"`. */\n alignRight: {\n textAlign: 'right',\n flexDirection: 'row-reverse'\n },\n\n /* Styles applied to the root element if `align=\"justify\"`. */\n alignJustify: {\n textAlign: 'justify'\n },\n\n /* Styles applied to the root element if `context.table.stickyHeader={true}`. */\n stickyHeader: {\n position: 'sticky',\n top: 0,\n left: 0,\n zIndex: 2,\n backgroundColor: theme.palette.background.default\n }\n };\n};\n/**\n * The component renders a `| ` element when the parent context is a header\n * or otherwise a ` | ` element.\n */\n\nvar TableCell = /*#__PURE__*/React.forwardRef(function TableCell(props, ref) {\n var _props$align = props.align,\n align = _props$align === void 0 ? 'inherit' : _props$align,\n classes = props.classes,\n className = props.className,\n component = props.component,\n paddingProp = props.padding,\n scopeProp = props.scope,\n sizeProp = props.size,\n sortDirection = props.sortDirection,\n variantProp = props.variant,\n other = _objectWithoutProperties(props, [\"align\", \"classes\", \"className\", \"component\", \"padding\", \"scope\", \"size\", \"sortDirection\", \"variant\"]);\n\n var table = React.useContext(TableContext);\n var tablelvl2 = React.useContext(Tablelvl2Context);\n var isHeadCell = tablelvl2 && tablelvl2.variant === 'head';\n var role;\n var Component;\n\n if (component) {\n Component = component;\n role = isHeadCell ? 'columnheader' : 'cell';\n } else {\n Component = isHeadCell ? 'th' : 'td';\n }\n\n var scope = scopeProp;\n\n if (!scope && isHeadCell) {\n scope = 'col';\n }\n\n var padding = paddingProp || (table && table.padding ? table.padding : 'default');\n var size = sizeProp || (table && table.size ? table.size : 'medium');\n var variant = variantProp || tablelvl2 && tablelvl2.variant;\n var ariaSort = null;\n\n if (sortDirection) {\n ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';\n }\n\n return /*#__PURE__*/React.createElement(Component, _extends({\n ref: ref,\n className: clsx(classes.root, classes[variant], className, align !== 'inherit' && classes[\"align\".concat(capitalize(align))], padding !== 'default' && classes[\"padding\".concat(capitalize(padding))], size !== 'medium' && classes[\"size\".concat(capitalize(size))], variant === 'head' && table && table.stickyHeader && classes.stickyHeader),\n \"aria-sort\": ariaSort,\n role: role,\n scope: scope\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? TableCell.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Set the text-align on the table cell content.\n *\n * Monetary or generally number fields **should be right aligned** as that allows\n * you to add them up quickly in your head without having to worry about decimals.\n */\n align: PropTypes.oneOf(['center', 'inherit', 'justify', 'left', 'right']),\n\n /**\n * The table cell contents.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * Sets the padding applied to the cell.\n * By default, the Table parent component set the value (`default`).\n */\n padding: PropTypes.oneOf(['checkbox', 'default', 'none']),\n\n /**\n * Set scope attribute.\n */\n scope: PropTypes.string,\n\n /**\n * Specify the size of the cell.\n * By default, the Table parent component set the value (`medium`).\n */\n size: PropTypes.oneOf(['medium', 'small']),\n\n /**\n * Set aria-sort direction.\n */\n sortDirection: PropTypes.oneOf(['asc', 'desc', false]),\n\n /**\n * Specify the cell type.\n * By default, the TableHead, TableBody or TableFooter parent component set the value.\n */\n variant: PropTypes.oneOf(['body', 'footer', 'head'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiTableCell'\n})(TableCell);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n padding: 16,\n '&:last-child': {\n paddingBottom: 24\n }\n }\n};\nvar CardContent = /*#__PURE__*/React.forwardRef(function CardContent(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\"]);\n\n return /*#__PURE__*/React.createElement(Component, _extends({\n className: clsx(classes.root, className),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardContent.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes\n /* @typescript-to-proptypes-ignore */\n .elementType\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiCardContent'\n})(CardContent);","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeRestProps from './sanitizeRestProps';\nimport { fieldPropTypes } from './types';\nvar hasNumberFormat = !!(typeof Intl === 'object' &&\n Intl &&\n typeof Intl.NumberFormat === 'function');\n/**\n * Display a numeric value as a locale string.\n *\n * Uses Intl.NumberFormat() if available, passing the locales and options props as arguments.\n * If Intl is not available, it outputs number as is (and ignores the locales and options props).\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @example\n * \n * // renders the record { id: 1234, score: 567 } as\n * 567\n *\n * \n * // renders the record { id: 1234, score: 567 } as\n * 567\n *\n * \n * // renders the record { id: 1234, share: 0.2545 } as\n * 25%\n *\n * \n * // renders the record { id: 1234, price: 25.99 } as\n * $25.99\n *\n * \n * // renders the record { id: 1234, price: 25.99 } as\n * 25,99 $US\n */\nexport var NumberField = memo(function (_a) {\n var className = _a.className, emptyText = _a.emptyText, record = _a.record, source = _a.source, locales = _a.locales, options = _a.options, textAlign = _a.textAlign, rest = __rest(_a, [\"className\", \"emptyText\", \"record\", \"source\", \"locales\", \"options\", \"textAlign\"]);\n if (!record) {\n return null;\n }\n var value = get(record, source);\n if (value == null) {\n return emptyText ? (React.createElement(Typography, __assign({ component: \"span\", variant: \"body2\", className: className }, sanitizeRestProps(rest)), emptyText)) : null;\n }\n return (React.createElement(Typography, __assign({ variant: \"body2\", component: \"span\", className: className }, sanitizeRestProps(rest)), hasNumberFormat\n ? value.toLocaleString(locales, options)\n : value));\n});\n// what? TypeScript looses the displayName if we don't set it explicitly\nNumberField.displayName = 'NumberField';\nNumberField.defaultProps = {\n addLabel: true,\n textAlign: 'right',\n};\nNumberField.propTypes = __assign(__assign(__assign({}, Typography.propTypes), fieldPropTypes), { locales: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]), options: PropTypes.object });\nexport default NumberField;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeRestProps from './sanitizeRestProps';\nimport { fieldPropTypes } from './types';\nvar TextField = memo(function (_a) {\n var className = _a.className, source = _a.source, _b = _a.record, record = _b === void 0 ? {} : _b, emptyText = _a.emptyText, rest = __rest(_a, [\"className\", \"source\", \"record\", \"emptyText\"]);\n var value = get(record, source);\n return (React.createElement(Typography, __assign({ component: \"span\", variant: \"body2\", className: className }, sanitizeRestProps(rest)), value != null && typeof value !== 'string'\n ? JSON.stringify(value)\n : value || emptyText));\n});\n// what? TypeScript looses the displayName if we don't set it explicitly\nTextField.displayName = 'TextField';\nTextField.defaultProps = {\n addLabel: true,\n};\nTextField.propTypes = __assign(__assign({}, Typography.propTypes), fieldPropTypes);\nexport default TextField;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport FalseIcon from '@material-ui/icons/Clear';\nimport TrueIcon from '@material-ui/icons/Done';\nimport { Tooltip, Typography } from '@material-ui/core';\nimport { useTranslate } from 'ra-core';\nimport { fieldPropTypes } from './types';\nimport sanitizeRestProps from './sanitizeRestProps';\nexport var BooleanField = memo(function (_a) {\n var className = _a.className, classesOverride = _a.classes, emptyText = _a.emptyText, source = _a.source, _b = _a.record, record = _b === void 0 ? {} : _b, valueLabelTrue = _a.valueLabelTrue, valueLabelFalse = _a.valueLabelFalse, rest = __rest(_a, [\"className\", \"classes\", \"emptyText\", \"source\", \"record\", \"valueLabelTrue\", \"valueLabelFalse\"]);\n var translate = useTranslate();\n var value = get(record, source);\n var ariaLabel = value ? valueLabelTrue : valueLabelFalse;\n if (!ariaLabel) {\n ariaLabel =\n value === false ? 'ra.boolean.false' : 'ra.boolean.true';\n }\n if (value === false || value === true) {\n return (React.createElement(Typography, __assign({ component: \"span\", variant: \"body2\", className: className }, sanitizeRestProps(rest)),\n React.createElement(Tooltip, { title: translate(ariaLabel, { _: ariaLabel }) }, value === true ? (React.createElement(TrueIcon, { \"data-testid\": \"true\" })) : (React.createElement(FalseIcon, { \"data-testid\": \"false\" })))));\n }\n return (React.createElement(Typography, __assign({ component: \"span\", variant: \"body2\", className: className }, sanitizeRestProps(rest)), emptyText));\n});\nBooleanField.defaultProps = {\n addLabel: true,\n};\nBooleanField.propTypes = __assign(__assign(__assign({}, Typography.propTypes), fieldPropTypes), { valueLabelFalse: PropTypes.string, valueLabelTrue: PropTypes.string });\nexport default BooleanField;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeRestProps from './sanitizeRestProps';\nimport { fieldPropTypes } from './types';\nvar toLocaleStringSupportsLocales = (function () {\n // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n try {\n new Date().toLocaleString('i');\n }\n catch (error) {\n return error instanceof RangeError;\n }\n return false;\n})();\n/**\n * Display a date value as a locale string.\n *\n * Uses Intl.DateTimeFormat() if available, passing the locales and options props as arguments.\n * If Intl is not available, it outputs date as is (and ignores the locales and options props).\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @example\n * \n * // renders the record { id: 1234, published_at: new Date('2012-11-07') } as\n * 07/11/2012\n *\n * \n * // renders the record { id: 1234, new Date('2012-11-07') } as\n * 07/11/2012\n *\n * \n * // renders the record { id: 1234, new Date('2012-11-07') } as\n * Wednesday, November 7, 2012\n *\n * \n * // renders the record { id: 1234, new Date('2012-11-07') } as\n * mercredi 7 novembre 2012\n */\nexport var DateField = memo(function (_a) {\n var className = _a.className, emptyText = _a.emptyText, locales = _a.locales, options = _a.options, record = _a.record, _b = _a.showTime, showTime = _b === void 0 ? false : _b, source = _a.source, rest = __rest(_a, [\"className\", \"emptyText\", \"locales\", \"options\", \"record\", \"showTime\", \"source\"]);\n if (!record) {\n return null;\n }\n var value = get(record, source);\n if (value == null) {\n return emptyText ? (React.createElement(Typography, __assign({ component: \"span\", variant: \"body2\", className: className }, sanitizeRestProps(rest)), emptyText)) : null;\n }\n var date = value instanceof Date ? value : new Date(value);\n var dateString = showTime\n ? toLocaleStringSupportsLocales\n ? date.toLocaleString(locales, options)\n : date.toLocaleString()\n : toLocaleStringSupportsLocales\n ? date.toLocaleDateString(locales, options)\n : date.toLocaleDateString();\n return (React.createElement(Typography, __assign({ component: \"span\", variant: \"body2\", className: className }, sanitizeRestProps(rest)), dateString));\n});\nDateField.defaultProps = {\n addLabel: true,\n};\nDateField.propTypes = __assign(__assign(__assign({}, Typography.propTypes), fieldPropTypes), { locales: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]), options: PropTypes.object, showTime: PropTypes.bool });\nexport default DateField;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport ContentCreate from '@material-ui/icons/Create';\nimport { Link } from 'react-router-dom';\nimport { linkToRecord } from 'ra-core';\nimport Button from './Button';\nvar EditButton = function (_a) {\n var _b = _a.basePath, basePath = _b === void 0 ? '' : _b, _c = _a.label, label = _c === void 0 ? 'ra.action.edit' : _c, record = _a.record, _d = _a.icon, icon = _d === void 0 ? defaultIcon : _d, rest = __rest(_a, [\"basePath\", \"label\", \"record\", \"icon\"]);\n return (React.createElement(Button, __assign({ component: Link, to: linkToRecord(basePath, record && record.id), label: label, onClick: stopPropagation }, rest), icon));\n};\nvar defaultIcon = React.createElement(ContentCreate, null);\n// useful to prevent click bubbling in a datagrid with rowClick\nvar stopPropagation = function (e) { return e.stopPropagation(); };\nEditButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\nexport default EditButton;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nvar SIZE = 44;\n\nfunction getRelativeValue(value, min, max) {\n return (Math.min(Math.max(min, value), max) - min) / (max - min);\n}\n\nfunction easeOut(t) {\n t = getRelativeValue(t, 0, 1); // https://gist.github.com/gre/1650294\n\n t = (t -= 1) * t * t + 1;\n return t;\n}\n\nfunction easeIn(t) {\n return t * t;\n}\n\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-block'\n },\n\n /* Styles applied to the root element if `variant=\"static\"`. */\n static: {\n transition: theme.transitions.create('transform')\n },\n\n /* Styles applied to the root element if `variant=\"indeterminate\"`. */\n indeterminate: {\n animation: '$circular-rotate 1.4s linear infinite'\n },\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the `svg` element. */\n svg: {\n display: 'block' // Keeps the progress centered\n\n },\n\n /* Styles applied to the `circle` svg path. */\n circle: {\n stroke: 'currentColor' // Use butt to follow the specification, by chance, it's already the default CSS value.\n // strokeLinecap: 'butt',\n\n },\n\n /* Styles applied to the `circle` svg path if `variant=\"static\"`. */\n circleStatic: {\n transition: theme.transitions.create('stroke-dashoffset')\n },\n\n /* Styles applied to the `circle` svg path if `variant=\"indeterminate\"`. */\n circleIndeterminate: {\n animation: '$circular-dash 1.4s ease-in-out infinite',\n // Some default value that looks fine waiting for the animation to kicks in.\n strokeDasharray: '80px, 200px',\n strokeDashoffset: '0px' // Add the unit to fix a Edge 16 and below bug.\n\n },\n '@keyframes circular-rotate': {\n '0%': {\n // Fix IE 11 wobbly\n transformOrigin: '50% 50%'\n },\n '100%': {\n transform: 'rotate(360deg)'\n }\n },\n '@keyframes circular-dash': {\n '0%': {\n strokeDasharray: '1px, 200px',\n strokeDashoffset: '0px'\n },\n '50%': {\n strokeDasharray: '100px, 200px',\n strokeDashoffset: '-15px'\n },\n '100%': {\n strokeDasharray: '100px, 200px',\n strokeDashoffset: '-125px'\n }\n },\n\n /* Styles applied to the `circle` svg path if `disableShrink={true}`. */\n circleDisableShrink: {\n animation: 'none'\n }\n };\n};\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\n\nvar CircularProgress = /*#__PURE__*/React.forwardRef(function CircularProgress(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? 'primary' : _props$color,\n _props$disableShrink = props.disableShrink,\n disableShrink = _props$disableShrink === void 0 ? false : _props$disableShrink,\n _props$size = props.size,\n size = _props$size === void 0 ? 40 : _props$size,\n style = props.style,\n _props$thickness = props.thickness,\n thickness = _props$thickness === void 0 ? 3.6 : _props$thickness,\n _props$value = props.value,\n value = _props$value === void 0 ? 0 : _props$value,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'indeterminate' : _props$variant,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"disableShrink\", \"size\", \"style\", \"thickness\", \"value\", \"variant\"]);\n\n var circleStyle = {};\n var rootStyle = {};\n var rootProps = {};\n\n if (variant === 'determinate' || variant === 'static') {\n var circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n circleStyle.strokeDasharray = circumference.toFixed(3);\n rootProps['aria-valuenow'] = Math.round(value);\n\n if (variant === 'static') {\n circleStyle.strokeDashoffset = \"\".concat(((100 - value) / 100 * circumference).toFixed(3), \"px\");\n rootStyle.transform = 'rotate(-90deg)';\n } else {\n circleStyle.strokeDashoffset = \"\".concat((easeIn((100 - value) / 100) * circumference).toFixed(3), \"px\");\n rootStyle.transform = \"rotate(\".concat((easeOut(value / 70) * 270).toFixed(3), \"deg)\");\n }\n }\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, className, color !== 'inherit' && classes[\"color\".concat(capitalize(color))], {\n 'indeterminate': classes.indeterminate,\n 'static': classes.static\n }[variant]),\n style: _extends({\n width: size,\n height: size\n }, rootStyle, style),\n ref: ref,\n role: \"progressbar\"\n }, rootProps, other), /*#__PURE__*/React.createElement(\"svg\", {\n className: classes.svg,\n viewBox: \"\".concat(SIZE / 2, \" \").concat(SIZE / 2, \" \").concat(SIZE, \" \").concat(SIZE)\n }, /*#__PURE__*/React.createElement(\"circle\", {\n className: clsx(classes.circle, disableShrink && classes.circleDisableShrink, {\n 'indeterminate': classes.circleIndeterminate,\n 'static': classes.circleStatic\n }[variant]),\n style: circleStyle,\n cx: SIZE,\n cy: SIZE,\n r: (SIZE - thickness) / 2,\n fill: \"none\",\n strokeWidth: thickness\n })));\n});\nprocess.env.NODE_ENV !== \"production\" ? CircularProgress.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: PropTypes.oneOf(['inherit', 'primary', 'secondary']),\n\n /**\n * If `true`, the shrink animation is disabled.\n * This only works if variant is `indeterminate`.\n */\n disableShrink: chainPropTypes(PropTypes.bool, function (props) {\n if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {\n return new Error('Material-UI: You have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');\n }\n\n return null;\n }),\n\n /**\n * The size of the circle.\n * If using a number, the pixel unit is assumed.\n * If using a string, you need to provide the CSS unit, e.g '3rem'.\n */\n size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * @ignore\n */\n style: PropTypes.object,\n\n /**\n * The thickness of the circle.\n */\n thickness: PropTypes.number,\n\n /**\n * The value of the progress indicator for the determinate and static variants.\n * Value between 0 and 100.\n */\n value: PropTypes.number,\n\n /**\n * The variant to use.\n * Use indeterminate when there is no progress value.\n */\n variant: PropTypes.oneOf(['determinate', 'indeterminate', 'static'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiCircularProgress',\n flip: false\n})(CircularProgress);","import { DELETE } from '../../core';\nexport var crudDelete = function (resource, id, previousData, basePath, redirectTo, refresh) {\n if (redirectTo === void 0) { redirectTo = 'list'; }\n if (refresh === void 0) { refresh = true; }\n return ({\n type: CRUD_DELETE,\n payload: { id: id, previousData: previousData },\n meta: {\n resource: resource,\n fetch: DELETE,\n onSuccess: {\n notification: {\n body: 'ra.notification.deleted',\n level: 'info',\n messageArgs: {\n smart_count: 1,\n },\n },\n refresh: refresh,\n redirectTo: redirectTo,\n basePath: basePath,\n },\n onFailure: {\n notification: {\n body: 'ra.notification.http_error',\n level: 'warning',\n },\n },\n },\n });\n};\nexport var CRUD_DELETE = 'RA/CRUD_DELETE';\nexport var CRUD_DELETE_LOADING = 'RA/CRUD_DELETE_LOADING';\nexport var CRUD_DELETE_FAILURE = 'RA/CRUD_DELETE_FAILURE';\nexport var CRUD_DELETE_SUCCESS = 'RA/CRUD_DELETE_SUCCESS';\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\nimport WithPermissions from '../auth/WithPermissions';\nimport { registerResource, unregisterResource } from '../actions';\nvar defaultOptions = {};\nvar ResourceRegister = function (_a) {\n var name = _a.name, list = _a.list, create = _a.create, edit = _a.edit, show = _a.show, icon = _a.icon, _b = _a.options, options = _b === void 0 ? defaultOptions : _b;\n var dispatch = useDispatch();\n useEffect(function () {\n dispatch(registerResource({\n name: name,\n options: options,\n hasList: !!list,\n hasEdit: !!edit,\n hasShow: !!show,\n hasCreate: !!create,\n icon: icon,\n }));\n return function () { return dispatch(unregisterResource(name)); };\n }, [dispatch, name, create, edit, icon, list, show, options]);\n return null;\n};\nvar ResourceRoutes = function (_a) {\n var name = _a.name, match = _a.match, list = _a.list, create = _a.create, edit = _a.edit, show = _a.show, _b = _a.options, options = _b === void 0 ? defaultOptions : _b;\n var isRegistered = useSelector(function (state) { return !!state.admin.resources[name]; });\n var basePath = match ? match.path : '';\n // match tends to change even on the same route ; using memo to avoid an extra render\n return useMemo(function () {\n // if the registration hasn't finished, no need to render\n if (!isRegistered) {\n return null;\n }\n var props = {\n resource: name,\n options: options,\n hasList: !!list,\n hasEdit: !!edit,\n hasShow: !!show,\n hasCreate: !!create,\n };\n return (React.createElement(Switch, null,\n create && (React.createElement(Route, { path: basePath + \"/create\", render: function (routeProps) { return (React.createElement(WithPermissions, __assign({ component: create, basePath: basePath }, routeProps, props))); } })),\n show && (React.createElement(Route, { path: basePath + \"/:id/show\", render: function (routeProps) { return (React.createElement(WithPermissions, __assign({ component: show, basePath: basePath, id: decodeURIComponent(routeProps.match.params\n .id) }, routeProps, props))); } })),\n edit && (React.createElement(Route, { path: basePath + \"/:id\", render: function (routeProps) { return (React.createElement(WithPermissions, __assign({ component: edit, basePath: basePath, id: decodeURIComponent(routeProps.match.params\n .id) }, routeProps, props))); } })),\n list && (React.createElement(Route, { path: \"\" + basePath, render: function (routeProps) { return (React.createElement(WithPermissions, __assign({ component: list, basePath: basePath }, routeProps, props))); } }))));\n }, [basePath, name, create, edit, list, show, options, isRegistered]); // eslint-disable-line react-hooks/exhaustive-deps\n};\nvar Resource = function (_a) {\n var _b = _a.intent, intent = _b === void 0 ? 'route' : _b, props = __rest(_a, [\"intent\"]);\n return intent === 'registration' ? (React.createElement(ResourceRegister, __assign({}, props))) : (React.createElement(ResourceRoutes, __assign({}, props)));\n};\nexport default Resource;\n","/**\n * This action type will be dispatched when your history\n * receives a location change.\n */\nexport var LOCATION_CHANGE = '@@router/LOCATION_CHANGE';\nexport var onLocationChanged = function onLocationChanged(location, action) {\n var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n return {\n type: LOCATION_CHANGE,\n payload: {\n location: location,\n action: action,\n isFirstRendering: isFirstRendering\n }\n };\n};\n/**\n * This action type will be dispatched by the history actions below.\n * If you're writing a middleware to watch for navigation events, be sure to\n * look for actions of this type.\n */\n\nexport var CALL_HISTORY_METHOD = '@@router/CALL_HISTORY_METHOD';\n\nvar updateLocation = function updateLocation(method) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return {\n type: CALL_HISTORY_METHOD,\n payload: {\n method: method,\n args: args\n }\n };\n };\n};\n/**\n * These actions correspond to the history API.\n * The associated routerMiddleware will capture these events before they get to\n * your reducer and reissue them as the matching function on your history.\n */\n\n\nexport var push = updateLocation('push');\nexport var replace = updateLocation('replace');\nexport var go = updateLocation('go');\nexport var goBack = updateLocation('goBack');\nexport var goForward = updateLocation('goForward');\nexport var routerActions = {\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { matchPath } from \"react-router\";\n\nvar createSelectors = function createSelectors(structure) {\n var getIn = structure.getIn,\n toJS = structure.toJS;\n\n var isRouter = function isRouter(value) {\n return value != null && _typeof(value) === 'object' && getIn(value, ['location']) && getIn(value, ['action']);\n };\n\n var getRouter = function getRouter(state) {\n var router = toJS(getIn(state, ['router']));\n\n if (!isRouter(router)) {\n throw 'Could not find router reducer in state tree, it must be mounted under \"router\"';\n }\n\n return router;\n };\n\n var getLocation = function getLocation(state) {\n return toJS(getIn(getRouter(state), ['location']));\n };\n\n var getAction = function getAction(state) {\n return toJS(getIn(getRouter(state), ['action']));\n };\n\n var getSearch = function getSearch(state) {\n return toJS(getIn(getRouter(state), ['location', 'search']));\n };\n\n var getHash = function getHash(state) {\n return toJS(getIn(getRouter(state), ['location', 'hash']));\n }; // It only makes sense to recalculate the `matchPath` whenever the pathname\n // of the location changes. That's why `createMatchSelector` memoizes\n // the latest result based on the location's pathname.\n\n\n var createMatchSelector = function createMatchSelector(path) {\n var lastPathname = null;\n var lastMatch = null;\n return function (state) {\n var _ref = getLocation(state) || {},\n pathname = _ref.pathname;\n\n if (pathname === lastPathname) {\n return lastMatch;\n }\n\n lastPathname = pathname;\n var match = matchPath(pathname, path);\n\n if (!match || !lastMatch || match.url !== lastMatch.url // When URL matched for nested routes, URL is the same but isExact is not.\n || match.isExact !== lastMatch.isExact) {\n lastMatch = match;\n }\n\n return lastMatch;\n };\n };\n\n return {\n getLocation: getLocation,\n getAction: getAction,\n getRouter: getRouter,\n getSearch: getSearch,\n getHash: getHash,\n createMatchSelector: createMatchSelector\n };\n};\n\nexport default createSelectors;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect, ReactReduxContext } from 'react-redux';\nimport { Router } from 'react-router';\nimport { onLocationChanged as _onLocationChanged } from './actions';\nimport createSelectors from './selectors';\n\nvar createConnectedRouter = function createConnectedRouter(structure) {\n var _createSelectors = createSelectors(structure),\n getLocation = _createSelectors.getLocation;\n /*\n * ConnectedRouter listens to a history object passed from props.\n * When history is changed, it dispatches action to redux store.\n * Then, store will pass props to component to render.\n * This creates uni-directional flow from history->store->router->components.\n */\n\n\n var ConnectedRouter = /*#__PURE__*/function (_PureComponent) {\n _inherits(ConnectedRouter, _PureComponent);\n\n function ConnectedRouter(props) {\n var _this;\n\n _classCallCheck(this, ConnectedRouter);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectedRouter).call(this, props));\n var store = props.store,\n history = props.history,\n onLocationChanged = props.onLocationChanged;\n _this.inTimeTravelling = false; // Subscribe to store changes to check if we are in time travelling\n\n _this.unsubscribe = store.subscribe(function () {\n // Extract store's location\n var _getLocation = getLocation(store.getState()),\n pathnameInStore = _getLocation.pathname,\n searchInStore = _getLocation.search,\n hashInStore = _getLocation.hash,\n stateInStore = _getLocation.state; // Extract history's location\n\n\n var _history$location = history.location,\n pathnameInHistory = _history$location.pathname,\n searchInHistory = _history$location.search,\n hashInHistory = _history$location.hash,\n stateInHistory = _history$location.state; // If we do time travelling, the location in store is changed but location in history is not changed\n\n if (props.history.action === 'PUSH' && (pathnameInHistory !== pathnameInStore || searchInHistory !== searchInStore || hashInHistory !== hashInStore || stateInStore !== stateInHistory)) {\n _this.inTimeTravelling = true; // Update history's location to match store's location\n\n history.push({\n pathname: pathnameInStore,\n search: searchInStore,\n hash: hashInStore,\n state: stateInStore\n });\n }\n });\n\n var handleLocationChange = function handleLocationChange(location, action) {\n var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n // Dispatch onLocationChanged except when we're in time travelling\n if (!_this.inTimeTravelling) {\n onLocationChanged(location, action, isFirstRendering);\n } else {\n _this.inTimeTravelling = false;\n }\n }; // Listen to history changes\n\n\n _this.unlisten = history.listen(handleLocationChange);\n\n if (!props.noInitialPop) {\n // Dispatch a location change action for the initial location.\n // This makes it backward-compatible with react-router-redux.\n // But, we add `isFirstRendering` to `true` to prevent double-rendering.\n handleLocationChange(history.location, history.action, true);\n }\n\n return _this;\n }\n\n _createClass(ConnectedRouter, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.unlisten();\n this.unsubscribe();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n history = _this$props.history,\n children = _this$props.children;\n return React.createElement(Router, {\n history: history\n }, children);\n }\n }]);\n\n return ConnectedRouter;\n }(PureComponent);\n\n ConnectedRouter.propTypes = {\n store: PropTypes.shape({\n getState: PropTypes.func.isRequired,\n subscribe: PropTypes.func.isRequired\n }).isRequired,\n history: PropTypes.shape({\n action: PropTypes.string.isRequired,\n listen: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n push: PropTypes.func.isRequired\n }).isRequired,\n basename: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n onLocationChanged: PropTypes.func.isRequired,\n noInitialPop: PropTypes.bool\n };\n\n var mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onLocationChanged: function onLocationChanged(location, action, isFirstRendering) {\n return dispatch(_onLocationChanged(location, action, isFirstRendering));\n }\n };\n };\n\n var ConnectedRouterWithContext = function ConnectedRouterWithContext(props) {\n var Context = props.context || ReactReduxContext;\n\n if (Context == null) {\n throw 'Please upgrade to react-redux v6';\n }\n\n return React.createElement(Context.Consumer, null, function (_ref) {\n var store = _ref.store;\n return React.createElement(ConnectedRouter, _extends({\n store: store\n }, props));\n });\n };\n\n ConnectedRouterWithContext.propTypes = {\n context: PropTypes.object\n };\n return connect(null, mapDispatchToProps)(ConnectedRouterWithContext);\n};\n\nexport default createConnectedRouter;","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { LOCATION_CHANGE } from './actions';\n/**\n * Adds query to location.\n * Utilises the search prop of location to construct query.\n */\n\nvar injectQuery = function injectQuery(location) {\n if (location && location.query) {\n // Don't inject query if it already exists in history\n return location;\n }\n\n var searchQuery = location && location.search;\n\n if (typeof searchQuery !== 'string' || searchQuery.length === 0) {\n return _objectSpread({}, location, {\n query: {}\n });\n } // Ignore the `?` part of the search string e.g. ?username=codejockie\n\n\n var search = searchQuery.substring(1); // Split the query string on `&` e.g. ?username=codejockie&name=Kennedy\n\n var queries = search.split('&'); // Contruct query\n\n var query = queries.reduce(function (acc, currentQuery) {\n // Split on `=`, to get key and value\n var _currentQuery$split = currentQuery.split('='),\n _currentQuery$split2 = _slicedToArray(_currentQuery$split, 2),\n queryKey = _currentQuery$split2[0],\n queryValue = _currentQuery$split2[1];\n\n return _objectSpread({}, acc, _defineProperty({}, queryKey, queryValue));\n }, {});\n return _objectSpread({}, location, {\n query: query\n });\n};\n\nvar createConnectRouter = function createConnectRouter(structure) {\n var fromJS = structure.fromJS,\n merge = structure.merge;\n\n var createRouterReducer = function createRouterReducer(history) {\n var initialRouterState = fromJS({\n location: injectQuery(history.location),\n action: history.action\n });\n /*\n * This reducer will update the state with the most recent location history\n * has transitioned to.\n */\n\n return function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialRouterState;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n type = _ref.type,\n payload = _ref.payload;\n\n if (type === LOCATION_CHANGE) {\n var location = payload.location,\n action = payload.action,\n isFirstRendering = payload.isFirstRendering; // Don't update the state ref for the first rendering\n // to prevent the double-rendering issue on initilization\n\n return isFirstRendering ? state : merge(state, {\n location: fromJS(injectQuery(location)),\n action: action\n });\n }\n\n return state;\n };\n };\n\n return createRouterReducer;\n};\n\nexport default createConnectRouter;","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport getIn from './getIn';\nvar structure = {\n fromJS: function fromJS(value) {\n return value;\n },\n getIn: getIn,\n merge: function merge(state, payload) {\n return _objectSpread({}, state, {}, payload);\n },\n toJS: function toJS(value) {\n return value;\n }\n};\nexport default structure;","/* Code from github.com/erikras/redux-form by Erik Rasmussen */\nvar getIn = function getIn(state, path) {\n if (!state) {\n return state;\n }\n\n var length = path.length;\n\n if (!length) {\n return undefined;\n }\n\n var result = state;\n\n for (var i = 0; i < length && !!result; ++i) {\n result = result[path[i]];\n }\n\n return result;\n};\n\nexport default getIn;","import createConnectedRouter from \"./ConnectedRouter\";\nimport createConnectRouter from \"./reducer\";\nimport createSelectors from \"./selectors\";\nimport plainStructure from \"./structure/plain\";\nexport { LOCATION_CHANGE, CALL_HISTORY_METHOD, onLocationChanged, push, replace, go, goBack, goForward, routerActions } from \"./actions\";\nexport { default as routerMiddleware } from \"./middleware\";\nexport var ConnectedRouter = /*#__PURE__*/createConnectedRouter(plainStructure);\nexport var connectRouter = /*#__PURE__*/createConnectRouter(plainStructure);\n\nvar _createSelectors = /*#__PURE__*/createSelectors(plainStructure),\n getLocation = _createSelectors.getLocation,\n getAction = _createSelectors.getAction,\n getHash = _createSelectors.getHash,\n getSearch = _createSelectors.getSearch,\n createMatchSelector = _createSelectors.createMatchSelector;\n\nexport { getLocation, getAction, getHash, getSearch, createMatchSelector };","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nimport { CALL_HISTORY_METHOD } from './actions';\n/**\n * This middleware captures CALL_HISTORY_METHOD actions to redirect to the\n * provided history object. This will prevent these actions from reaching your\n * reducer or any middleware that comes after this one.\n */\n\nvar routerMiddleware = function routerMiddleware(history) {\n return function (store) {\n return function (next) {\n return function (action) {\n // eslint-disable-line no-unused-vars\n if (action.type !== CALL_HISTORY_METHOD) {\n return next(action);\n }\n\n var _action$payload = action.payload,\n method = _action$payload.method,\n args = _action$payload.args;\n history[method].apply(history, _toConsumableArray(args));\n };\n };\n };\n};\n\nexport default routerMiddleware;","var createSymbol = function createSymbol(name) {\n return \"@@redux-saga/\" + name;\n};\n\nvar CANCEL =\n/*#__PURE__*/\ncreateSymbol('CANCEL_PROMISE');\nvar CHANNEL_END_TYPE =\n/*#__PURE__*/\ncreateSymbol('CHANNEL_END');\nvar IO =\n/*#__PURE__*/\ncreateSymbol('IO');\nvar MATCH =\n/*#__PURE__*/\ncreateSymbol('MATCH');\nvar MULTICAST =\n/*#__PURE__*/\ncreateSymbol('MULTICAST');\nvar SAGA_ACTION =\n/*#__PURE__*/\ncreateSymbol('SAGA_ACTION');\nvar SELF_CANCELLATION =\n/*#__PURE__*/\ncreateSymbol('SELF_CANCELLATION');\nvar TASK =\n/*#__PURE__*/\ncreateSymbol('TASK');\nvar TASK_CANCEL =\n/*#__PURE__*/\ncreateSymbol('TASK_CANCEL');\nvar TERMINATE =\n/*#__PURE__*/\ncreateSymbol('TERMINATE');\nvar SAGA_LOCATION =\n/*#__PURE__*/\ncreateSymbol('LOCATION');\n\nexport { CANCEL, CHANNEL_END_TYPE, IO, MATCH, MULTICAST, SAGA_ACTION, SAGA_LOCATION, SELF_CANCELLATION, TASK, TASK_CANCEL, TERMINATE };\n","import { TASK, SAGA_ACTION, MULTICAST, IO } from '@redux-saga/symbols';\n\nvar undef = function undef(v) {\n return v === null || v === undefined;\n};\nvar notUndef = function notUndef(v) {\n return v !== null && v !== undefined;\n};\nvar func = function func(f) {\n return typeof f === 'function';\n};\nvar number = function number(n) {\n return typeof n === 'number';\n};\nvar string = function string(s) {\n return typeof s === 'string';\n};\nvar array = Array.isArray;\nvar object = function object(obj) {\n return obj && !array(obj) && typeof obj === 'object';\n};\nvar promise = function promise(p) {\n return p && func(p.then);\n};\nvar iterator = function iterator(it) {\n return it && func(it.next) && func(it.throw);\n};\nvar iterable = function iterable(it) {\n return it && func(Symbol) ? func(it[Symbol.iterator]) : array(it);\n};\nvar task = function task(t) {\n return t && t[TASK];\n};\nvar sagaAction = function sagaAction(a) {\n return Boolean(a && a[SAGA_ACTION]);\n};\nvar observable = function observable(ob) {\n return ob && func(ob.subscribe);\n};\nvar buffer = function buffer(buf) {\n return buf && func(buf.isEmpty) && func(buf.take) && func(buf.put);\n};\nvar pattern = function pattern(pat) {\n return pat && (string(pat) || symbol(pat) || func(pat) || array(pat) && pat.every(pattern));\n};\nvar channel = function channel(ch) {\n return ch && func(ch.take) && func(ch.close);\n};\nvar stringableFunc = function stringableFunc(f) {\n return func(f) && f.hasOwnProperty('toString');\n};\nvar symbol = function symbol(sym) {\n return Boolean(sym) && typeof Symbol === 'function' && sym.constructor === Symbol && sym !== Symbol.prototype;\n};\nvar multicast = function multicast(ch) {\n return channel(ch) && ch[MULTICAST];\n};\nvar effect = function effect(eff) {\n return eff && eff[IO];\n};\n\nexport { array, buffer, channel, effect, func, iterable, iterator, multicast, notUndef, number, object, observable, pattern, promise, sagaAction, string, stringableFunc, symbol, task, undef };\n","import { CANCEL } from '@redux-saga/symbols';\n\nfunction delayP(ms, val) {\n if (val === void 0) {\n val = true;\n }\n\n var timeoutId;\n var promise = new Promise(function (resolve) {\n timeoutId = setTimeout(resolve, ms, val);\n });\n\n promise[CANCEL] = function () {\n clearTimeout(timeoutId);\n };\n\n return promise;\n}\n\nexport default delayP;\n","import { TASK_CANCEL, TERMINATE, SAGA_LOCATION, SAGA_ACTION, IO, SELF_CANCELLATION } from '@redux-saga/symbols';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { array, notUndef, pattern, multicast, channel, undef, effect, task, func, buffer, string, object } from '@redux-saga/is';\nimport delayP from '@redux-saga/delay-p';\n\nvar konst = function konst(v) {\n return function () {\n return v;\n };\n};\nvar kTrue =\n/*#__PURE__*/\nkonst(true);\n\nvar noop = function noop() {};\n\nif (process.env.NODE_ENV !== 'production' && typeof Proxy !== 'undefined') {\n noop =\n /*#__PURE__*/\n new Proxy(noop, {\n set: function set() {\n throw internalErr('There was an attempt to assign a property to internal `noop` function.');\n }\n });\n}\nvar identity = function identity(v) {\n return v;\n};\nvar hasSymbol = typeof Symbol === 'function';\nvar asyncIteratorSymbol = hasSymbol && Symbol.asyncIterator ? Symbol.asyncIterator : '@@asyncIterator';\nfunction check(value, predicate, error) {\n if (!predicate(value)) {\n throw new Error(error);\n }\n}\nvar assignWithSymbols = function assignWithSymbols(target, source) {\n _extends(target, source);\n\n if (Object.getOwnPropertySymbols) {\n Object.getOwnPropertySymbols(source).forEach(function (s) {\n target[s] = source[s];\n });\n }\n};\nvar flatMap = function flatMap(mapper, arr) {\n var _ref;\n\n return (_ref = []).concat.apply(_ref, arr.map(mapper));\n};\nfunction remove(array, item) {\n var index = array.indexOf(item);\n\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\nfunction once(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n\n called = true;\n fn();\n };\n}\n\nvar kThrow = function kThrow(err) {\n throw err;\n};\n\nvar kReturn = function kReturn(value) {\n return {\n value: value,\n done: true\n };\n};\n\nfunction makeIterator(next, thro, name) {\n if (thro === void 0) {\n thro = kThrow;\n }\n\n if (name === void 0) {\n name = 'iterator';\n }\n\n var iterator = {\n meta: {\n name: name\n },\n next: next,\n throw: thro,\n return: kReturn,\n isSagaIterator: true\n };\n\n if (typeof Symbol !== 'undefined') {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n\n return iterator;\n}\nfunction logError(error, _ref2) {\n var sagaStack = _ref2.sagaStack;\n\n /*eslint-disable no-console*/\n console.error(error);\n console.error(sagaStack);\n}\nvar internalErr = function internalErr(err) {\n return new Error(\"\\n redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\\n in redux-saga code and not yours. Thanks for reporting this in the project's github repo.\\n Error: \" + err + \"\\n\");\n};\nvar createSetContextWarning = function createSetContextWarning(ctx, props) {\n return (ctx ? ctx + '.' : '') + \"setContext(props): argument \" + props + \" is not a plain object\";\n};\nvar FROZEN_ACTION_ERROR = \"You can't put (a.k.a. dispatch from saga) frozen actions.\\nWe have to define a special non-enumerable property on those actions for scheduling purposes.\\nOtherwise you wouldn't be able to communicate properly between sagas & other subscribers (action ordering would become far less predictable).\\nIf you are using redux and you care about this behaviour (frozen actions),\\nthen you might want to switch to freezing actions in a middleware rather than in action creator.\\nExample implementation:\\n\\nconst freezeActions = store => next => action => next(Object.freeze(action))\\n\"; // creates empty, but not-holey array\n\nvar createEmptyArray = function createEmptyArray(n) {\n return Array.apply(null, new Array(n));\n};\nvar wrapSagaDispatch = function wrapSagaDispatch(dispatch) {\n return function (action) {\n if (process.env.NODE_ENV !== 'production') {\n check(action, function (ac) {\n return !Object.isFrozen(ac);\n }, FROZEN_ACTION_ERROR);\n }\n\n return dispatch(Object.defineProperty(action, SAGA_ACTION, {\n value: true\n }));\n };\n};\nvar shouldTerminate = function shouldTerminate(res) {\n return res === TERMINATE;\n};\nvar shouldCancel = function shouldCancel(res) {\n return res === TASK_CANCEL;\n};\nvar shouldComplete = function shouldComplete(res) {\n return shouldTerminate(res) || shouldCancel(res);\n};\nfunction createAllStyleChildCallbacks(shape, parentCallback) {\n var keys = Object.keys(shape);\n var totalCount = keys.length;\n\n if (process.env.NODE_ENV !== 'production') {\n check(totalCount, function (c) {\n return c > 0;\n }, 'createAllStyleChildCallbacks: get an empty array or object');\n }\n\n var completedCount = 0;\n var completed;\n var results = array(shape) ? createEmptyArray(totalCount) : {};\n var childCallbacks = {};\n\n function checkEnd() {\n if (completedCount === totalCount) {\n completed = true;\n parentCallback(results);\n }\n }\n\n keys.forEach(function (key) {\n var chCbAtKey = function chCbAtKey(res, isErr) {\n if (completed) {\n return;\n }\n\n if (isErr || shouldComplete(res)) {\n parentCallback.cancel();\n parentCallback(res, isErr);\n } else {\n results[key] = res;\n completedCount++;\n checkEnd();\n }\n };\n\n chCbAtKey.cancel = noop;\n childCallbacks[key] = chCbAtKey;\n });\n\n parentCallback.cancel = function () {\n if (!completed) {\n completed = true;\n keys.forEach(function (key) {\n return childCallbacks[key].cancel();\n });\n }\n };\n\n return childCallbacks;\n}\nfunction getMetaInfo(fn) {\n return {\n name: fn.name || 'anonymous',\n location: getLocation(fn)\n };\n}\nfunction getLocation(instrumented) {\n return instrumented[SAGA_LOCATION];\n}\n\nvar BUFFER_OVERFLOW = \"Channel's Buffer overflow!\";\nvar ON_OVERFLOW_THROW = 1;\nvar ON_OVERFLOW_DROP = 2;\nvar ON_OVERFLOW_SLIDE = 3;\nvar ON_OVERFLOW_EXPAND = 4;\nvar zeroBuffer = {\n isEmpty: kTrue,\n put: noop,\n take: noop\n};\n\nfunction ringBuffer(limit, overflowAction) {\n if (limit === void 0) {\n limit = 10;\n }\n\n var arr = new Array(limit);\n var length = 0;\n var pushIndex = 0;\n var popIndex = 0;\n\n var push = function push(it) {\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n length++;\n };\n\n var take = function take() {\n if (length != 0) {\n var it = arr[popIndex];\n arr[popIndex] = null;\n length--;\n popIndex = (popIndex + 1) % limit;\n return it;\n }\n };\n\n var flush = function flush() {\n var items = [];\n\n while (length) {\n items.push(take());\n }\n\n return items;\n };\n\n return {\n isEmpty: function isEmpty() {\n return length == 0;\n },\n put: function put(it) {\n if (length < limit) {\n push(it);\n } else {\n var doubledLimit;\n\n switch (overflowAction) {\n case ON_OVERFLOW_THROW:\n throw new Error(BUFFER_OVERFLOW);\n\n case ON_OVERFLOW_SLIDE:\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n popIndex = pushIndex;\n break;\n\n case ON_OVERFLOW_EXPAND:\n doubledLimit = 2 * limit;\n arr = flush();\n length = arr.length;\n pushIndex = arr.length;\n popIndex = 0;\n arr.length = doubledLimit;\n limit = doubledLimit;\n push(it);\n break;\n\n default: // DROP\n\n }\n }\n },\n take: take,\n flush: flush\n };\n}\n\nvar none = function none() {\n return zeroBuffer;\n};\nvar fixed = function fixed(limit) {\n return ringBuffer(limit, ON_OVERFLOW_THROW);\n};\nvar dropping = function dropping(limit) {\n return ringBuffer(limit, ON_OVERFLOW_DROP);\n};\nvar sliding = function sliding(limit) {\n return ringBuffer(limit, ON_OVERFLOW_SLIDE);\n};\nvar expanding = function expanding(initialSize) {\n return ringBuffer(initialSize, ON_OVERFLOW_EXPAND);\n};\n\nvar buffers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n none: none,\n fixed: fixed,\n dropping: dropping,\n sliding: sliding,\n expanding: expanding\n});\n\nvar TAKE = 'TAKE';\nvar PUT = 'PUT';\nvar ALL = 'ALL';\nvar RACE = 'RACE';\nvar CALL = 'CALL';\nvar CPS = 'CPS';\nvar FORK = 'FORK';\nvar JOIN = 'JOIN';\nvar CANCEL = 'CANCEL';\nvar SELECT = 'SELECT';\nvar ACTION_CHANNEL = 'ACTION_CHANNEL';\nvar CANCELLED = 'CANCELLED';\nvar FLUSH = 'FLUSH';\nvar GET_CONTEXT = 'GET_CONTEXT';\nvar SET_CONTEXT = 'SET_CONTEXT';\n\nvar effectTypes = /*#__PURE__*/Object.freeze({\n __proto__: null,\n TAKE: TAKE,\n PUT: PUT,\n ALL: ALL,\n RACE: RACE,\n CALL: CALL,\n CPS: CPS,\n FORK: FORK,\n JOIN: JOIN,\n CANCEL: CANCEL,\n SELECT: SELECT,\n ACTION_CHANNEL: ACTION_CHANNEL,\n CANCELLED: CANCELLED,\n FLUSH: FLUSH,\n GET_CONTEXT: GET_CONTEXT,\n SET_CONTEXT: SET_CONTEXT\n});\n\nvar TEST_HINT = '\\n(HINT: if you are getting these errors in tests, consider using createMockTask from @redux-saga/testing-utils)';\n\nvar makeEffect = function makeEffect(type, payload) {\n var _ref;\n\n return _ref = {}, _ref[IO] = true, _ref.combinator = false, _ref.type = type, _ref.payload = payload, _ref;\n};\n\nvar isForkEffect = function isForkEffect(eff) {\n return effect(eff) && eff.type === FORK;\n};\n\nvar detach = function detach(eff) {\n if (process.env.NODE_ENV !== 'production') {\n check(eff, isForkEffect, 'detach(eff): argument must be a fork effect');\n }\n\n return makeEffect(FORK, _extends({}, eff.payload, {\n detached: true\n }));\n};\nfunction take(patternOrChannel, multicastPattern) {\n if (patternOrChannel === void 0) {\n patternOrChannel = '*';\n }\n\n if (process.env.NODE_ENV !== 'production' && arguments.length) {\n check(arguments[0], notUndef, 'take(patternOrChannel): patternOrChannel is undefined');\n }\n\n if (pattern(patternOrChannel)) {\n return makeEffect(TAKE, {\n pattern: patternOrChannel\n });\n }\n\n if (multicast(patternOrChannel) && notUndef(multicastPattern) && pattern(multicastPattern)) {\n return makeEffect(TAKE, {\n channel: patternOrChannel,\n pattern: multicastPattern\n });\n }\n\n if (channel(patternOrChannel)) {\n return makeEffect(TAKE, {\n channel: patternOrChannel\n });\n }\n\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\"take(patternOrChannel): argument \" + patternOrChannel + \" is not valid channel or a valid pattern\");\n }\n}\nvar takeMaybe = function takeMaybe() {\n var eff = take.apply(void 0, arguments);\n eff.payload.maybe = true;\n return eff;\n};\nfunction put(channel$1, action) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n check(channel$1, notUndef, 'put(channel, action): argument channel is undefined');\n check(channel$1, channel, \"put(channel, action): argument \" + channel$1 + \" is not a valid channel\");\n check(action, notUndef, 'put(channel, action): argument action is undefined');\n } else {\n check(channel$1, notUndef, 'put(action): argument action is undefined');\n }\n }\n\n if (undef(action)) {\n action = channel$1; // `undefined` instead of `null` to make default parameter work\n\n channel$1 = undefined;\n }\n\n return makeEffect(PUT, {\n channel: channel$1,\n action: action\n });\n}\nvar putResolve = function putResolve() {\n var eff = put.apply(void 0, arguments);\n eff.payload.resolve = true;\n return eff;\n};\nfunction all(effects) {\n var eff = makeEffect(ALL, effects);\n eff.combinator = true;\n return eff;\n}\nfunction race(effects) {\n var eff = makeEffect(RACE, effects);\n eff.combinator = true;\n return eff;\n} // this match getFnCallDescriptor logic\n\nvar validateFnDescriptor = function validateFnDescriptor(effectName, fnDescriptor) {\n check(fnDescriptor, notUndef, effectName + \": argument fn is undefined or null\");\n\n if (func(fnDescriptor)) {\n return;\n }\n\n var context = null;\n var fn;\n\n if (array(fnDescriptor)) {\n context = fnDescriptor[0];\n fn = fnDescriptor[1];\n check(fn, notUndef, effectName + \": argument of type [context, fn] has undefined or null `fn`\");\n } else if (object(fnDescriptor)) {\n context = fnDescriptor.context;\n fn = fnDescriptor.fn;\n check(fn, notUndef, effectName + \": argument of type {context, fn} has undefined or null `fn`\");\n } else {\n check(fnDescriptor, func, effectName + \": argument fn is not function\");\n return;\n }\n\n if (context && string(fn)) {\n check(context[fn], func, effectName + \": context arguments has no such method - \\\"\" + fn + \"\\\"\");\n return;\n }\n\n check(fn, func, effectName + \": unpacked fn argument (from [context, fn] or {context, fn}) is not a function\");\n};\n\nfunction getFnCallDescriptor(fnDescriptor, args) {\n var context = null;\n var fn;\n\n if (func(fnDescriptor)) {\n fn = fnDescriptor;\n } else {\n if (array(fnDescriptor)) {\n context = fnDescriptor[0];\n fn = fnDescriptor[1];\n } else {\n context = fnDescriptor.context;\n fn = fnDescriptor.fn;\n }\n\n if (context && string(fn) && func(context[fn])) {\n fn = context[fn];\n }\n }\n\n return {\n context: context,\n fn: fn,\n args: args\n };\n}\n\nvar isNotDelayEffect = function isNotDelayEffect(fn) {\n return fn !== delay;\n};\n\nfunction call(fnDescriptor) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var arg0 = typeof args[0] === 'number' ? args[0] : 'ms';\n check(fnDescriptor, isNotDelayEffect, \"instead of writing `yield call(delay, \" + arg0 + \")` where delay is an effect from `redux-saga/effects` you should write `yield delay(\" + arg0 + \")`\");\n validateFnDescriptor('call', fnDescriptor);\n }\n\n return makeEffect(CALL, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction apply(context, fn, args) {\n if (args === void 0) {\n args = [];\n }\n\n var fnDescriptor = [context, fn];\n\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('apply', fnDescriptor);\n }\n\n return makeEffect(CALL, getFnCallDescriptor([context, fn], args));\n}\nfunction cps(fnDescriptor) {\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('cps', fnDescriptor);\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return makeEffect(CPS, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction fork(fnDescriptor) {\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('fork', fnDescriptor);\n check(fnDescriptor, function (arg) {\n return !effect(arg);\n }, 'fork: argument must not be an effect');\n }\n\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return makeEffect(FORK, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction spawn(fnDescriptor) {\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('spawn', fnDescriptor);\n }\n\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n return detach(fork.apply(void 0, [fnDescriptor].concat(args)));\n}\nfunction join(taskOrTasks) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n throw new Error('join(...tasks) is not supported any more. Please use join([...tasks]) to join multiple tasks.');\n }\n\n if (array(taskOrTasks)) {\n taskOrTasks.forEach(function (t) {\n check(t, task, \"join([...tasks]): argument \" + t + \" is not a valid Task object \" + TEST_HINT);\n });\n } else {\n check(taskOrTasks, task, \"join(task): argument \" + taskOrTasks + \" is not a valid Task object \" + TEST_HINT);\n }\n }\n\n return makeEffect(JOIN, taskOrTasks);\n}\nfunction cancel(taskOrTasks) {\n if (taskOrTasks === void 0) {\n taskOrTasks = SELF_CANCELLATION;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n throw new Error('cancel(...tasks) is not supported any more. Please use cancel([...tasks]) to cancel multiple tasks.');\n }\n\n if (array(taskOrTasks)) {\n taskOrTasks.forEach(function (t) {\n check(t, task, \"cancel([...tasks]): argument \" + t + \" is not a valid Task object \" + TEST_HINT);\n });\n } else if (taskOrTasks !== SELF_CANCELLATION && notUndef(taskOrTasks)) {\n check(taskOrTasks, task, \"cancel(task): argument \" + taskOrTasks + \" is not a valid Task object \" + TEST_HINT);\n }\n }\n\n return makeEffect(CANCEL, taskOrTasks);\n}\nfunction select(selector) {\n if (selector === void 0) {\n selector = identity;\n }\n\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n if (process.env.NODE_ENV !== 'production' && arguments.length) {\n check(arguments[0], notUndef, 'select(selector, [...]): argument selector is undefined');\n check(selector, func, \"select(selector, [...]): argument \" + selector + \" is not a function\");\n }\n\n return makeEffect(SELECT, {\n selector: selector,\n args: args\n });\n}\n/**\n channel(pattern, [buffer]) => creates a proxy channel for store actions\n**/\n\nfunction actionChannel(pattern$1, buffer$1) {\n if (process.env.NODE_ENV !== 'production') {\n check(pattern$1, pattern, 'actionChannel(pattern,...): argument pattern is not valid');\n\n if (arguments.length > 1) {\n check(buffer$1, notUndef, 'actionChannel(pattern, buffer): argument buffer is undefined');\n check(buffer$1, buffer, \"actionChannel(pattern, buffer): argument \" + buffer$1 + \" is not a valid buffer\");\n }\n }\n\n return makeEffect(ACTION_CHANNEL, {\n pattern: pattern$1,\n buffer: buffer$1\n });\n}\nfunction cancelled() {\n return makeEffect(CANCELLED, {});\n}\nfunction flush(channel$1) {\n if (process.env.NODE_ENV !== 'production') {\n check(channel$1, channel, \"flush(channel): argument \" + channel$1 + \" is not valid channel\");\n }\n\n return makeEffect(FLUSH, channel$1);\n}\nfunction getContext(prop) {\n if (process.env.NODE_ENV !== 'production') {\n check(prop, string, \"getContext(prop): argument \" + prop + \" is not a string\");\n }\n\n return makeEffect(GET_CONTEXT, prop);\n}\nfunction setContext(props) {\n if (process.env.NODE_ENV !== 'production') {\n check(props, object, createSetContextWarning(null, props));\n }\n\n return makeEffect(SET_CONTEXT, props);\n}\nvar delay =\n/*#__PURE__*/\ncall.bind(null, delayP);\n\nexport { apply as $, ALL as A, logError as B, CALL as C, wrapSagaDispatch as D, identity as E, FORK as F, GET_CONTEXT as G, buffers as H, detach as I, JOIN as J, take as K, fork as L, cancel as M, call as N, actionChannel as O, PUT as P, sliding as Q, RACE as R, SELECT as S, TAKE as T, delay as U, race as V, effectTypes as W, takeMaybe as X, put as Y, putResolve as Z, all as _, CPS as a, cps as a0, spawn as a1, join as a2, select as a3, cancelled as a4, flush as a5, getContext as a6, setContext as a7, CANCEL as b, check as c, ACTION_CHANNEL as d, expanding as e, CANCELLED as f, FLUSH as g, SET_CONTEXT as h, internalErr as i, getMetaInfo as j, kTrue as k, createAllStyleChildCallbacks as l, createEmptyArray as m, none as n, once as o, assignWithSymbols as p, makeIterator as q, remove as r, shouldComplete as s, noop as t, flatMap as u, getLocation as v, createSetContextWarning as w, asyncIteratorSymbol as x, shouldCancel as y, shouldTerminate as z };\n","function deferred() {\n var def = {};\n def.promise = new Promise(function (resolve, reject) {\n def.resolve = resolve;\n def.reject = reject;\n });\n return def;\n}\nfunction arrayOfDeferred(length) {\n var arr = [];\n\n for (var i = 0; i < length; i++) {\n arr.push(deferred());\n }\n\n return arr;\n}\n\nexport default deferred;\nexport { arrayOfDeferred };\n","import { CHANNEL_END_TYPE, MULTICAST, MATCH, SAGA_ACTION, CANCEL, SELF_CANCELLATION, TERMINATE, TASK, TASK_CANCEL, IO } from '@redux-saga/symbols';\nexport { CANCEL, SAGA_LOCATION } from '@redux-saga/symbols';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport { string as string$1, array as array$1, stringableFunc, func, symbol as symbol$1, buffer, notUndef, promise, iterator, undef, object, channel as channel$1 } from '@redux-saga/is';\nimport { k as kTrue, e as expanding, c as check, o as once, r as remove, n as none, i as internalErr, T as TAKE, P as PUT, A as ALL, R as RACE, C as CALL, a as CPS, F as FORK, J as JOIN, b as CANCEL$1, S as SELECT, d as ACTION_CHANNEL, f as CANCELLED$1, g as FLUSH, G as GET_CONTEXT, h as SET_CONTEXT, j as getMetaInfo, l as createAllStyleChildCallbacks, m as createEmptyArray, p as assignWithSymbols, q as makeIterator, s as shouldComplete, t as noop, u as flatMap, v as getLocation, w as createSetContextWarning, x as asyncIteratorSymbol, y as shouldCancel, z as shouldTerminate, B as logError, D as wrapSagaDispatch, E as identity } from './io-6de156f3.js';\nexport { H as buffers, I as detach } from './io-6de156f3.js';\nimport { compose } from 'redux';\nimport deferred from '@redux-saga/deferred';\nimport '@redux-saga/delay-p';\n\nvar queue = [];\n/**\n Variable to hold a counting semaphore\n - Incrementing adds a lock and puts the scheduler in a `suspended` state (if it's not\n already suspended)\n - Decrementing releases a lock. Zero locks puts the scheduler in a `released` state. This\n triggers flushing the queued tasks.\n**/\n\nvar semaphore = 0;\n/**\n Executes a task 'atomically'. Tasks scheduled during this execution will be queued\n and flushed after this task has finished (assuming the scheduler endup in a released\n state).\n**/\n\nfunction exec(task) {\n try {\n suspend();\n task();\n } finally {\n release();\n }\n}\n/**\n Executes or queues a task depending on the state of the scheduler (`suspended` or `released`)\n**/\n\n\nfunction asap(task) {\n queue.push(task);\n\n if (!semaphore) {\n suspend();\n flush();\n }\n}\n/**\n * Puts the scheduler in a `suspended` state and executes a task immediately.\n */\n\nfunction immediately(task) {\n try {\n suspend();\n return task();\n } finally {\n flush();\n }\n}\n/**\n Puts the scheduler in a `suspended` state. Scheduled tasks will be queued until the\n scheduler is released.\n**/\n\nfunction suspend() {\n semaphore++;\n}\n/**\n Puts the scheduler in a `released` state.\n**/\n\n\nfunction release() {\n semaphore--;\n}\n/**\n Releases the current lock. Executes all queued tasks if the scheduler is in the released state.\n**/\n\n\nfunction flush() {\n release();\n var task;\n\n while (!semaphore && (task = queue.shift()) !== undefined) {\n exec(task);\n }\n}\n\nvar array = function array(patterns) {\n return function (input) {\n return patterns.some(function (p) {\n return matcher(p)(input);\n });\n };\n};\nvar predicate = function predicate(_predicate) {\n return function (input) {\n return _predicate(input);\n };\n};\nvar string = function string(pattern) {\n return function (input) {\n return input.type === String(pattern);\n };\n};\nvar symbol = function symbol(pattern) {\n return function (input) {\n return input.type === pattern;\n };\n};\nvar wildcard = function wildcard() {\n return kTrue;\n};\nfunction matcher(pattern) {\n // prettier-ignore\n var matcherCreator = pattern === '*' ? wildcard : string$1(pattern) ? string : array$1(pattern) ? array : stringableFunc(pattern) ? string : func(pattern) ? predicate : symbol$1(pattern) ? symbol : null;\n\n if (matcherCreator === null) {\n throw new Error(\"invalid pattern: \" + pattern);\n }\n\n return matcherCreator(pattern);\n}\n\nvar END = {\n type: CHANNEL_END_TYPE\n};\nvar isEnd = function isEnd(a) {\n return a && a.type === CHANNEL_END_TYPE;\n};\nvar CLOSED_CHANNEL_WITH_TAKERS = 'Cannot have a closed channel with pending takers';\nvar INVALID_BUFFER = 'invalid buffer passed to channel factory function';\nvar UNDEFINED_INPUT_ERROR = \"Saga or channel was provided with an undefined action\\nHints:\\n - check that your Action Creator returns a non-undefined value\\n - if the Saga was started using runSaga, check that your subscribe source provides the action to its listeners\";\nfunction channel(buffer$1) {\n if (buffer$1 === void 0) {\n buffer$1 = expanding();\n }\n\n var closed = false;\n var takers = [];\n\n if (process.env.NODE_ENV !== 'production') {\n check(buffer$1, buffer, INVALID_BUFFER);\n }\n\n function checkForbiddenStates() {\n if (closed && takers.length) {\n throw internalErr(CLOSED_CHANNEL_WITH_TAKERS);\n }\n\n if (takers.length && !buffer$1.isEmpty()) {\n throw internalErr('Cannot have pending takers with non empty buffer');\n }\n }\n\n function put(input) {\n if (process.env.NODE_ENV !== 'production') {\n checkForbiddenStates();\n check(input, notUndef, UNDEFINED_INPUT_ERROR);\n }\n\n if (closed) {\n return;\n }\n\n if (takers.length === 0) {\n return buffer$1.put(input);\n }\n\n var cb = takers.shift();\n cb(input);\n }\n\n function take(cb) {\n if (process.env.NODE_ENV !== 'production') {\n checkForbiddenStates();\n check(cb, func, \"channel.take's callback must be a function\");\n }\n\n if (closed && buffer$1.isEmpty()) {\n cb(END);\n } else if (!buffer$1.isEmpty()) {\n cb(buffer$1.take());\n } else {\n takers.push(cb);\n\n cb.cancel = function () {\n remove(takers, cb);\n };\n }\n }\n\n function flush(cb) {\n if (process.env.NODE_ENV !== 'production') {\n checkForbiddenStates();\n check(cb, func, \"channel.flush' callback must be a function\");\n }\n\n if (closed && buffer$1.isEmpty()) {\n cb(END);\n return;\n }\n\n cb(buffer$1.flush());\n }\n\n function close() {\n if (process.env.NODE_ENV !== 'production') {\n checkForbiddenStates();\n }\n\n if (closed) {\n return;\n }\n\n closed = true;\n var arr = takers;\n takers = [];\n\n for (var i = 0, len = arr.length; i < len; i++) {\n var taker = arr[i];\n taker(END);\n }\n }\n\n return {\n take: take,\n put: put,\n flush: flush,\n close: close\n };\n}\nfunction eventChannel(subscribe, buffer) {\n if (buffer === void 0) {\n buffer = none();\n }\n\n var closed = false;\n var unsubscribe;\n var chan = channel(buffer);\n\n var close = function close() {\n if (closed) {\n return;\n }\n\n closed = true;\n\n if (func(unsubscribe)) {\n unsubscribe();\n }\n\n chan.close();\n };\n\n unsubscribe = subscribe(function (input) {\n if (isEnd(input)) {\n close();\n return;\n }\n\n chan.put(input);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n check(unsubscribe, func, 'in eventChannel: subscribe should return a function to unsubscribe');\n }\n\n unsubscribe = once(unsubscribe);\n\n if (closed) {\n unsubscribe();\n }\n\n return {\n take: chan.take,\n flush: chan.flush,\n close: close\n };\n}\nfunction multicastChannel() {\n var _ref;\n\n var closed = false;\n var currentTakers = [];\n var nextTakers = currentTakers;\n\n function checkForbiddenStates() {\n if (closed && nextTakers.length) {\n throw internalErr(CLOSED_CHANNEL_WITH_TAKERS);\n }\n }\n\n var ensureCanMutateNextTakers = function ensureCanMutateNextTakers() {\n if (nextTakers !== currentTakers) {\n return;\n }\n\n nextTakers = currentTakers.slice();\n };\n\n var close = function close() {\n if (process.env.NODE_ENV !== 'production') {\n checkForbiddenStates();\n }\n\n closed = true;\n var takers = currentTakers = nextTakers;\n nextTakers = [];\n takers.forEach(function (taker) {\n taker(END);\n });\n };\n\n return _ref = {}, _ref[MULTICAST] = true, _ref.put = function put(input) {\n if (process.env.NODE_ENV !== 'production') {\n checkForbiddenStates();\n check(input, notUndef, UNDEFINED_INPUT_ERROR);\n }\n\n if (closed) {\n return;\n }\n\n if (isEnd(input)) {\n close();\n return;\n }\n\n var takers = currentTakers = nextTakers;\n\n for (var i = 0, len = takers.length; i < len; i++) {\n var taker = takers[i];\n\n if (taker[MATCH](input)) {\n taker.cancel();\n taker(input);\n }\n }\n }, _ref.take = function take(cb, matcher) {\n if (matcher === void 0) {\n matcher = wildcard;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n checkForbiddenStates();\n }\n\n if (closed) {\n cb(END);\n return;\n }\n\n cb[MATCH] = matcher;\n ensureCanMutateNextTakers();\n nextTakers.push(cb);\n cb.cancel = once(function () {\n ensureCanMutateNextTakers();\n remove(nextTakers, cb);\n });\n }, _ref.close = close, _ref;\n}\nfunction stdChannel() {\n var chan = multicastChannel();\n var put = chan.put;\n\n chan.put = function (input) {\n if (input[SAGA_ACTION]) {\n put(input);\n return;\n }\n\n asap(function () {\n put(input);\n });\n };\n\n return chan;\n}\n\nvar RUNNING = 0;\nvar CANCELLED = 1;\nvar ABORTED = 2;\nvar DONE = 3;\n\nfunction resolvePromise(promise, cb) {\n var cancelPromise = promise[CANCEL];\n\n if (func(cancelPromise)) {\n cb.cancel = cancelPromise;\n }\n\n promise.then(cb, function (error) {\n cb(error, true);\n });\n}\n\nvar current = 0;\nvar nextSagaId = (function () {\n return ++current;\n});\n\nvar _effectRunnerMap;\n\nfunction getIteratorMetaInfo(iterator, fn) {\n if (iterator.isSagaIterator) {\n return {\n name: iterator.meta.name\n };\n }\n\n return getMetaInfo(fn);\n}\n\nfunction createTaskIterator(_ref) {\n var context = _ref.context,\n fn = _ref.fn,\n args = _ref.args;\n\n // catch synchronous failures; see #152 and #441\n try {\n var result = fn.apply(context, args); // i.e. a generator function returns an iterator\n\n if (iterator(result)) {\n return result;\n }\n\n var resolved = false;\n\n var next = function next(arg) {\n if (!resolved) {\n resolved = true; // Only promises returned from fork will be interpreted. See #1573\n\n return {\n value: result,\n done: !promise(result)\n };\n } else {\n return {\n value: arg,\n done: true\n };\n }\n };\n\n return makeIterator(next);\n } catch (err) {\n // do not bubble up synchronous failures for detached forks\n // instead create a failed task. See #152 and #441\n return makeIterator(function () {\n throw err;\n });\n }\n}\n\nfunction runPutEffect(env, _ref2, cb) {\n var channel = _ref2.channel,\n action = _ref2.action,\n resolve = _ref2.resolve;\n\n /**\n Schedule the put in case another saga is holding a lock.\n The put will be executed atomically. ie nested puts will execute after\n this put has terminated.\n **/\n asap(function () {\n var result;\n\n try {\n result = (channel ? channel.put : env.dispatch)(action);\n } catch (error) {\n cb(error, true);\n return;\n }\n\n if (resolve && promise(result)) {\n resolvePromise(result, cb);\n } else {\n cb(result);\n }\n }); // Put effects are non cancellables\n}\n\nfunction runTakeEffect(env, _ref3, cb) {\n var _ref3$channel = _ref3.channel,\n channel = _ref3$channel === void 0 ? env.channel : _ref3$channel,\n pattern = _ref3.pattern,\n maybe = _ref3.maybe;\n\n var takeCb = function takeCb(input) {\n if (input instanceof Error) {\n cb(input, true);\n return;\n }\n\n if (isEnd(input) && !maybe) {\n cb(TERMINATE);\n return;\n }\n\n cb(input);\n };\n\n try {\n channel.take(takeCb, notUndef(pattern) ? matcher(pattern) : null);\n } catch (err) {\n cb(err, true);\n return;\n }\n\n cb.cancel = takeCb.cancel;\n}\n\nfunction runCallEffect(env, _ref4, cb, _ref5) {\n var context = _ref4.context,\n fn = _ref4.fn,\n args = _ref4.args;\n var task = _ref5.task;\n\n // catch synchronous failures; see #152\n try {\n var result = fn.apply(context, args);\n\n if (promise(result)) {\n resolvePromise(result, cb);\n return;\n }\n\n if (iterator(result)) {\n // resolve iterator\n proc(env, result, task.context, current, getMetaInfo(fn),\n /* isRoot */\n false, cb);\n return;\n }\n\n cb(result);\n } catch (error) {\n cb(error, true);\n }\n}\n\nfunction runCPSEffect(env, _ref6, cb) {\n var context = _ref6.context,\n fn = _ref6.fn,\n args = _ref6.args;\n\n // CPS (ie node style functions) can define their own cancellation logic\n // by setting cancel field on the cb\n // catch synchronous failures; see #152\n try {\n var cpsCb = function cpsCb(err, res) {\n if (undef(err)) {\n cb(res);\n } else {\n cb(err, true);\n }\n };\n\n fn.apply(context, args.concat(cpsCb));\n\n if (cpsCb.cancel) {\n cb.cancel = cpsCb.cancel;\n }\n } catch (error) {\n cb(error, true);\n }\n}\n\nfunction runForkEffect(env, _ref7, cb, _ref8) {\n var context = _ref7.context,\n fn = _ref7.fn,\n args = _ref7.args,\n detached = _ref7.detached;\n var parent = _ref8.task;\n var taskIterator = createTaskIterator({\n context: context,\n fn: fn,\n args: args\n });\n var meta = getIteratorMetaInfo(taskIterator, fn);\n immediately(function () {\n var child = proc(env, taskIterator, parent.context, current, meta, detached, undefined);\n\n if (detached) {\n cb(child);\n } else {\n if (child.isRunning()) {\n parent.queue.addTask(child);\n cb(child);\n } else if (child.isAborted()) {\n parent.queue.abort(child.error());\n } else {\n cb(child);\n }\n }\n }); // Fork effects are non cancellables\n}\n\nfunction runJoinEffect(env, taskOrTasks, cb, _ref9) {\n var task = _ref9.task;\n\n var joinSingleTask = function joinSingleTask(taskToJoin, cb) {\n if (taskToJoin.isRunning()) {\n var joiner = {\n task: task,\n cb: cb\n };\n\n cb.cancel = function () {\n if (taskToJoin.isRunning()) remove(taskToJoin.joiners, joiner);\n };\n\n taskToJoin.joiners.push(joiner);\n } else {\n if (taskToJoin.isAborted()) {\n cb(taskToJoin.error(), true);\n } else {\n cb(taskToJoin.result());\n }\n }\n };\n\n if (array$1(taskOrTasks)) {\n if (taskOrTasks.length === 0) {\n cb([]);\n return;\n }\n\n var childCallbacks = createAllStyleChildCallbacks(taskOrTasks, cb);\n taskOrTasks.forEach(function (t, i) {\n joinSingleTask(t, childCallbacks[i]);\n });\n } else {\n joinSingleTask(taskOrTasks, cb);\n }\n}\n\nfunction cancelSingleTask(taskToCancel) {\n if (taskToCancel.isRunning()) {\n taskToCancel.cancel();\n }\n}\n\nfunction runCancelEffect(env, taskOrTasks, cb, _ref10) {\n var task = _ref10.task;\n\n if (taskOrTasks === SELF_CANCELLATION) {\n cancelSingleTask(task);\n } else if (array$1(taskOrTasks)) {\n taskOrTasks.forEach(cancelSingleTask);\n } else {\n cancelSingleTask(taskOrTasks);\n }\n\n cb(); // cancel effects are non cancellables\n}\n\nfunction runAllEffect(env, effects, cb, _ref11) {\n var digestEffect = _ref11.digestEffect;\n var effectId = current;\n var keys = Object.keys(effects);\n\n if (keys.length === 0) {\n cb(array$1(effects) ? [] : {});\n return;\n }\n\n var childCallbacks = createAllStyleChildCallbacks(effects, cb);\n keys.forEach(function (key) {\n digestEffect(effects[key], effectId, childCallbacks[key], key);\n });\n}\n\nfunction runRaceEffect(env, effects, cb, _ref12) {\n var digestEffect = _ref12.digestEffect;\n var effectId = current;\n var keys = Object.keys(effects);\n var response = array$1(effects) ? createEmptyArray(keys.length) : {};\n var childCbs = {};\n var completed = false;\n keys.forEach(function (key) {\n var chCbAtKey = function chCbAtKey(res, isErr) {\n if (completed) {\n return;\n }\n\n if (isErr || shouldComplete(res)) {\n // Race Auto cancellation\n cb.cancel();\n cb(res, isErr);\n } else {\n cb.cancel();\n completed = true;\n response[key] = res;\n cb(response);\n }\n };\n\n chCbAtKey.cancel = noop;\n childCbs[key] = chCbAtKey;\n });\n\n cb.cancel = function () {\n // prevents unnecessary cancellation\n if (!completed) {\n completed = true;\n keys.forEach(function (key) {\n return childCbs[key].cancel();\n });\n }\n };\n\n keys.forEach(function (key) {\n if (completed) {\n return;\n }\n\n digestEffect(effects[key], effectId, childCbs[key], key);\n });\n}\n\nfunction runSelectEffect(env, _ref13, cb) {\n var selector = _ref13.selector,\n args = _ref13.args;\n\n try {\n var state = selector.apply(void 0, [env.getState()].concat(args));\n cb(state);\n } catch (error) {\n cb(error, true);\n }\n}\n\nfunction runChannelEffect(env, _ref14, cb) {\n var pattern = _ref14.pattern,\n buffer = _ref14.buffer;\n var chan = channel(buffer);\n var match = matcher(pattern);\n\n var taker = function taker(action) {\n if (!isEnd(action)) {\n env.channel.take(taker, match);\n }\n\n chan.put(action);\n };\n\n var close = chan.close;\n\n chan.close = function () {\n taker.cancel();\n close();\n };\n\n env.channel.take(taker, match);\n cb(chan);\n}\n\nfunction runCancelledEffect(env, data, cb, _ref15) {\n var task = _ref15.task;\n cb(task.isCancelled());\n}\n\nfunction runFlushEffect(env, channel, cb) {\n channel.flush(cb);\n}\n\nfunction runGetContextEffect(env, prop, cb, _ref16) {\n var task = _ref16.task;\n cb(task.context[prop]);\n}\n\nfunction runSetContextEffect(env, props, cb, _ref17) {\n var task = _ref17.task;\n assignWithSymbols(task.context, props);\n cb();\n}\n\nvar effectRunnerMap = (_effectRunnerMap = {}, _effectRunnerMap[TAKE] = runTakeEffect, _effectRunnerMap[PUT] = runPutEffect, _effectRunnerMap[ALL] = runAllEffect, _effectRunnerMap[RACE] = runRaceEffect, _effectRunnerMap[CALL] = runCallEffect, _effectRunnerMap[CPS] = runCPSEffect, _effectRunnerMap[FORK] = runForkEffect, _effectRunnerMap[JOIN] = runJoinEffect, _effectRunnerMap[CANCEL$1] = runCancelEffect, _effectRunnerMap[SELECT] = runSelectEffect, _effectRunnerMap[ACTION_CHANNEL] = runChannelEffect, _effectRunnerMap[CANCELLED$1] = runCancelledEffect, _effectRunnerMap[FLUSH] = runFlushEffect, _effectRunnerMap[GET_CONTEXT] = runGetContextEffect, _effectRunnerMap[SET_CONTEXT] = runSetContextEffect, _effectRunnerMap);\n\n/**\n Used to track a parent task and its forks\n In the fork model, forked tasks are attached by default to their parent\n We model this using the concept of Parent task && main Task\n main task is the main flow of the current Generator, the parent tasks is the\n aggregation of the main tasks + all its forked tasks.\n Thus the whole model represents an execution tree with multiple branches (vs the\n linear execution tree in sequential (non parallel) programming)\n\n A parent tasks has the following semantics\n - It completes if all its forks either complete or all cancelled\n - If it's cancelled, all forks are cancelled as well\n - It aborts if any uncaught error bubbles up from forks\n - If it completes, the return value is the one returned by the main task\n **/\n\nfunction forkQueue(mainTask, onAbort, cont) {\n var tasks = [];\n var result;\n var completed = false;\n addTask(mainTask);\n\n var getTasks = function getTasks() {\n return tasks;\n };\n\n function abort(err) {\n onAbort();\n cancelAll();\n cont(err, true);\n }\n\n function addTask(task) {\n tasks.push(task);\n\n task.cont = function (res, isErr) {\n if (completed) {\n return;\n }\n\n remove(tasks, task);\n task.cont = noop;\n\n if (isErr) {\n abort(res);\n } else {\n if (task === mainTask) {\n result = res;\n }\n\n if (!tasks.length) {\n completed = true;\n cont(result);\n }\n }\n };\n }\n\n function cancelAll() {\n if (completed) {\n return;\n }\n\n completed = true;\n tasks.forEach(function (t) {\n t.cont = noop;\n t.cancel();\n });\n tasks = [];\n }\n\n return {\n addTask: addTask,\n cancelAll: cancelAll,\n abort: abort,\n getTasks: getTasks\n };\n}\n\n// there can be only a single saga error created at any given moment\n\nfunction formatLocation(fileName, lineNumber) {\n return fileName + \"?\" + lineNumber;\n}\n\nfunction effectLocationAsString(effect) {\n var location = getLocation(effect);\n\n if (location) {\n var code = location.code,\n fileName = location.fileName,\n lineNumber = location.lineNumber;\n var source = code + \" \" + formatLocation(fileName, lineNumber);\n return source;\n }\n\n return '';\n}\n\nfunction sagaLocationAsString(sagaMeta) {\n var name = sagaMeta.name,\n location = sagaMeta.location;\n\n if (location) {\n return name + \" \" + formatLocation(location.fileName, location.lineNumber);\n }\n\n return name;\n}\n\nfunction cancelledTasksAsString(sagaStack) {\n var cancelledTasks = flatMap(function (i) {\n return i.cancelledTasks;\n }, sagaStack);\n\n if (!cancelledTasks.length) {\n return '';\n }\n\n return ['Tasks cancelled due to error:'].concat(cancelledTasks).join('\\n');\n}\n\nvar crashedEffect = null;\nvar sagaStack = [];\nvar addSagaFrame = function addSagaFrame(frame) {\n frame.crashedEffect = crashedEffect;\n sagaStack.push(frame);\n};\nvar clear = function clear() {\n crashedEffect = null;\n sagaStack.length = 0;\n}; // this sets crashed effect for the soon-to-be-reported saga frame\n// this slightly streatches the singleton nature of this module into wrong direction\n// as it's even less obvious what's the data flow here, but it is what it is for now\n\nvar setCrashedEffect = function setCrashedEffect(effect) {\n crashedEffect = effect;\n};\n/**\n @returns {string}\n\n @example\n The above error occurred in task errorInPutSaga {pathToFile}\n when executing effect put({type: 'REDUCER_ACTION_ERROR_IN_PUT'}) {pathToFile}\n created by fetchSaga {pathToFile}\n created by rootSaga {pathToFile}\n*/\n\nvar toString = function toString() {\n var firstSaga = sagaStack[0],\n otherSagas = sagaStack.slice(1);\n var crashedEffectLocation = firstSaga.crashedEffect ? effectLocationAsString(firstSaga.crashedEffect) : null;\n var errorMessage = \"The above error occurred in task \" + sagaLocationAsString(firstSaga.meta) + (crashedEffectLocation ? \" \\n when executing effect \" + crashedEffectLocation : '');\n return [errorMessage].concat(otherSagas.map(function (s) {\n return \" created by \" + sagaLocationAsString(s.meta);\n }), [cancelledTasksAsString(sagaStack)]).join('\\n');\n};\n\nfunction newTask(env, mainTask, parentContext, parentEffectId, meta, isRoot, cont) {\n var _task;\n\n if (cont === void 0) {\n cont = noop;\n }\n\n var status = RUNNING;\n var taskResult;\n var taskError;\n var deferredEnd = null;\n var cancelledDueToErrorTasks = [];\n var context = Object.create(parentContext);\n var queue = forkQueue(mainTask, function onAbort() {\n cancelledDueToErrorTasks.push.apply(cancelledDueToErrorTasks, queue.getTasks().map(function (t) {\n return t.meta.name;\n }));\n }, end);\n /**\n This may be called by a parent generator to trigger/propagate cancellation\n cancel all pending tasks (including the main task), then end the current task.\n Cancellation propagates down to the whole execution tree held by this Parent task\n It's also propagated to all joiners of this task and their execution tree/joiners\n Cancellation is noop for terminated/Cancelled tasks tasks\n **/\n\n function cancel() {\n if (status === RUNNING) {\n // Setting status to CANCELLED does not necessarily mean that the task/iterators are stopped\n // effects in the iterator's finally block will still be executed\n status = CANCELLED;\n queue.cancelAll(); // Ending with a TASK_CANCEL will propagate the Cancellation to all joiners\n\n end(TASK_CANCEL, false);\n }\n }\n\n function end(result, isErr) {\n if (!isErr) {\n // The status here may be RUNNING or CANCELLED\n // If the status is CANCELLED, then we do not need to change it here\n if (result === TASK_CANCEL) {\n status = CANCELLED;\n } else if (status !== CANCELLED) {\n status = DONE;\n }\n\n taskResult = result;\n deferredEnd && deferredEnd.resolve(result);\n } else {\n status = ABORTED;\n addSagaFrame({\n meta: meta,\n cancelledTasks: cancelledDueToErrorTasks\n });\n\n if (task.isRoot) {\n var sagaStack = toString(); // we've dumped the saga stack to string and are passing it to user's code\n // we know that it won't be needed anymore and we need to clear it\n\n clear();\n env.onError(result, {\n sagaStack: sagaStack\n });\n }\n\n taskError = result;\n deferredEnd && deferredEnd.reject(result);\n }\n\n task.cont(result, isErr);\n task.joiners.forEach(function (joiner) {\n joiner.cb(result, isErr);\n });\n task.joiners = null;\n }\n\n function setContext(props) {\n if (process.env.NODE_ENV !== 'production') {\n check(props, object, createSetContextWarning('task', props));\n }\n\n assignWithSymbols(context, props);\n }\n\n function toPromise() {\n if (deferredEnd) {\n return deferredEnd.promise;\n }\n\n deferredEnd = deferred();\n\n if (status === ABORTED) {\n deferredEnd.reject(taskError);\n } else if (status !== RUNNING) {\n deferredEnd.resolve(taskResult);\n }\n\n return deferredEnd.promise;\n }\n\n var task = (_task = {}, _task[TASK] = true, _task.id = parentEffectId, _task.meta = meta, _task.isRoot = isRoot, _task.context = context, _task.joiners = [], _task.queue = queue, _task.cancel = cancel, _task.cont = cont, _task.end = end, _task.setContext = setContext, _task.toPromise = toPromise, _task.isRunning = function isRunning() {\n return status === RUNNING;\n }, _task.isCancelled = function isCancelled() {\n return status === CANCELLED || status === RUNNING && mainTask.status === CANCELLED;\n }, _task.isAborted = function isAborted() {\n return status === ABORTED;\n }, _task.result = function result() {\n return taskResult;\n }, _task.error = function error() {\n return taskError;\n }, _task);\n return task;\n}\n\nfunction proc(env, iterator$1, parentContext, parentEffectId, meta, isRoot, cont) {\n if (process.env.NODE_ENV !== 'production' && iterator$1[asyncIteratorSymbol]) {\n throw new Error(\"redux-saga doesn't support async generators, please use only regular ones\");\n }\n\n var finalRunEffect = env.finalizeRunEffect(runEffect);\n /**\n Tracks the current effect cancellation\n Each time the generator progresses. calling runEffect will set a new value\n on it. It allows propagating cancellation to child effects\n **/\n\n next.cancel = noop;\n /** Creates a main task to track the main flow */\n\n var mainTask = {\n meta: meta,\n cancel: cancelMain,\n status: RUNNING\n };\n /**\n Creates a new task descriptor for this generator.\n A task is the aggregation of it's mainTask and all it's forked tasks.\n **/\n\n var task = newTask(env, mainTask, parentContext, parentEffectId, meta, isRoot, cont);\n var executingContext = {\n task: task,\n digestEffect: digestEffect\n };\n /**\n cancellation of the main task. We'll simply resume the Generator with a TASK_CANCEL\n **/\n\n function cancelMain() {\n if (mainTask.status === RUNNING) {\n mainTask.status = CANCELLED;\n next(TASK_CANCEL);\n }\n }\n /**\n attaches cancellation logic to this task's continuation\n this will permit cancellation to propagate down the call chain\n **/\n\n\n if (cont) {\n cont.cancel = task.cancel;\n } // kicks up the generator\n\n\n next(); // then return the task descriptor to the caller\n\n return task;\n /**\n * This is the generator driver\n * It's a recursive async/continuation function which calls itself\n * until the generator terminates or throws\n * @param {internal commands(TASK_CANCEL | TERMINATE) | any} arg - value, generator will be resumed with.\n * @param {boolean} isErr - the flag shows if effect finished with an error\n *\n * receives either (command | effect result, false) or (any thrown thing, true)\n */\n\n function next(arg, isErr) {\n try {\n var result;\n\n if (isErr) {\n result = iterator$1.throw(arg); // user handled the error, we can clear bookkept values\n\n clear();\n } else if (shouldCancel(arg)) {\n /**\n getting TASK_CANCEL automatically cancels the main task\n We can get this value here\n - By cancelling the parent task manually\n - By joining a Cancelled task\n **/\n mainTask.status = CANCELLED;\n /**\n Cancels the current effect; this will propagate the cancellation down to any called tasks\n **/\n\n next.cancel();\n /**\n If this Generator has a `return` method then invokes it\n This will jump to the finally block\n **/\n\n result = func(iterator$1.return) ? iterator$1.return(TASK_CANCEL) : {\n done: true,\n value: TASK_CANCEL\n };\n } else if (shouldTerminate(arg)) {\n // We get TERMINATE flag, i.e. by taking from a channel that ended using `take` (and not `takem` used to trap End of channels)\n result = func(iterator$1.return) ? iterator$1.return() : {\n done: true\n };\n } else {\n result = iterator$1.next(arg);\n }\n\n if (!result.done) {\n digestEffect(result.value, parentEffectId, next);\n } else {\n /**\n This Generator has ended, terminate the main task and notify the fork queue\n **/\n if (mainTask.status !== CANCELLED) {\n mainTask.status = DONE;\n }\n\n mainTask.cont(result.value);\n }\n } catch (error) {\n if (mainTask.status === CANCELLED) {\n throw error;\n }\n\n mainTask.status = ABORTED;\n mainTask.cont(error, true);\n }\n }\n\n function runEffect(effect, effectId, currCb) {\n /**\n each effect runner must attach its own logic of cancellation to the provided callback\n it allows this generator to propagate cancellation downward.\n ATTENTION! effect runners must setup the cancel logic by setting cb.cancel = [cancelMethod]\n And the setup must occur before calling the callback\n This is a sort of inversion of control: called async functions are responsible\n of completing the flow by calling the provided continuation; while caller functions\n are responsible for aborting the current flow by calling the attached cancel function\n Library users can attach their own cancellation logic to promises by defining a\n promise[CANCEL] method in their returned promises\n ATTENTION! calling cancel must have no effect on an already completed or cancelled effect\n **/\n if (promise(effect)) {\n resolvePromise(effect, currCb);\n } else if (iterator(effect)) {\n // resolve iterator\n proc(env, effect, task.context, effectId, meta,\n /* isRoot */\n false, currCb);\n } else if (effect && effect[IO]) {\n var effectRunner = effectRunnerMap[effect.type];\n effectRunner(env, effect.payload, currCb, executingContext);\n } else {\n // anything else returned as is\n currCb(effect);\n }\n }\n\n function digestEffect(effect, parentEffectId, cb, label) {\n if (label === void 0) {\n label = '';\n }\n\n var effectId = nextSagaId();\n env.sagaMonitor && env.sagaMonitor.effectTriggered({\n effectId: effectId,\n parentEffectId: parentEffectId,\n label: label,\n effect: effect\n });\n /**\n completion callback and cancel callback are mutually exclusive\n We can't cancel an already completed effect\n And We can't complete an already cancelled effectId\n **/\n\n var effectSettled; // Completion callback passed to the appropriate effect runner\n\n function currCb(res, isErr) {\n if (effectSettled) {\n return;\n }\n\n effectSettled = true;\n cb.cancel = noop; // defensive measure\n\n if (env.sagaMonitor) {\n if (isErr) {\n env.sagaMonitor.effectRejected(effectId, res);\n } else {\n env.sagaMonitor.effectResolved(effectId, res);\n }\n }\n\n if (isErr) {\n setCrashedEffect(effect);\n }\n\n cb(res, isErr);\n } // tracks down the current cancel\n\n\n currCb.cancel = noop; // setup cancellation logic on the parent cb\n\n cb.cancel = function () {\n // prevents cancelling an already completed effect\n if (effectSettled) {\n return;\n }\n\n effectSettled = true;\n currCb.cancel(); // propagates cancel downward\n\n currCb.cancel = noop; // defensive measure\n\n env.sagaMonitor && env.sagaMonitor.effectCancelled(effectId);\n };\n\n finalRunEffect(effect, effectId, currCb);\n }\n}\n\nvar RUN_SAGA_SIGNATURE = 'runSaga(options, saga, ...args)';\nvar NON_GENERATOR_ERR = RUN_SAGA_SIGNATURE + \": saga argument must be a Generator function!\";\nfunction runSaga(_ref, saga) {\n var _ref$channel = _ref.channel,\n channel = _ref$channel === void 0 ? stdChannel() : _ref$channel,\n dispatch = _ref.dispatch,\n getState = _ref.getState,\n _ref$context = _ref.context,\n context = _ref$context === void 0 ? {} : _ref$context,\n sagaMonitor = _ref.sagaMonitor,\n effectMiddlewares = _ref.effectMiddlewares,\n _ref$onError = _ref.onError,\n onError = _ref$onError === void 0 ? logError : _ref$onError;\n\n if (process.env.NODE_ENV !== 'production') {\n check(saga, func, NON_GENERATOR_ERR);\n }\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var iterator$1 = saga.apply(void 0, args);\n\n if (process.env.NODE_ENV !== 'production') {\n check(iterator$1, iterator, NON_GENERATOR_ERR);\n }\n\n var effectId = nextSagaId();\n\n if (sagaMonitor) {\n // monitors are expected to have a certain interface, let's fill-in any missing ones\n sagaMonitor.rootSagaStarted = sagaMonitor.rootSagaStarted || noop;\n sagaMonitor.effectTriggered = sagaMonitor.effectTriggered || noop;\n sagaMonitor.effectResolved = sagaMonitor.effectResolved || noop;\n sagaMonitor.effectRejected = sagaMonitor.effectRejected || noop;\n sagaMonitor.effectCancelled = sagaMonitor.effectCancelled || noop;\n sagaMonitor.actionDispatched = sagaMonitor.actionDispatched || noop;\n sagaMonitor.rootSagaStarted({\n effectId: effectId,\n saga: saga,\n args: args\n });\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (notUndef(dispatch)) {\n check(dispatch, func, 'dispatch must be a function');\n }\n\n if (notUndef(getState)) {\n check(getState, func, 'getState must be a function');\n }\n\n if (notUndef(effectMiddlewares)) {\n var MIDDLEWARE_TYPE_ERROR = 'effectMiddlewares must be an array of functions';\n check(effectMiddlewares, array$1, MIDDLEWARE_TYPE_ERROR);\n effectMiddlewares.forEach(function (effectMiddleware) {\n return check(effectMiddleware, func, MIDDLEWARE_TYPE_ERROR);\n });\n }\n\n check(onError, func, 'onError passed to the redux-saga is not a function!');\n }\n\n var finalizeRunEffect;\n\n if (effectMiddlewares) {\n var middleware = compose.apply(void 0, effectMiddlewares);\n\n finalizeRunEffect = function finalizeRunEffect(runEffect) {\n return function (effect, effectId, currCb) {\n var plainRunEffect = function plainRunEffect(eff) {\n return runEffect(eff, effectId, currCb);\n };\n\n return middleware(plainRunEffect)(effect);\n };\n };\n } else {\n finalizeRunEffect = identity;\n }\n\n var env = {\n channel: channel,\n dispatch: wrapSagaDispatch(dispatch),\n getState: getState,\n sagaMonitor: sagaMonitor,\n onError: onError,\n finalizeRunEffect: finalizeRunEffect\n };\n return immediately(function () {\n var task = proc(env, iterator$1, context, effectId, getMetaInfo(saga),\n /* isRoot */\n true, undefined);\n\n if (sagaMonitor) {\n sagaMonitor.effectResolved(effectId, task);\n }\n\n return task;\n });\n}\n\nfunction sagaMiddlewareFactory(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$context = _ref.context,\n context = _ref$context === void 0 ? {} : _ref$context,\n _ref$channel = _ref.channel,\n channel = _ref$channel === void 0 ? stdChannel() : _ref$channel,\n sagaMonitor = _ref.sagaMonitor,\n options = _objectWithoutPropertiesLoose(_ref, [\"context\", \"channel\", \"sagaMonitor\"]);\n\n var boundRunSaga;\n\n if (process.env.NODE_ENV !== 'production') {\n check(channel, channel$1, 'options.channel passed to the Saga middleware is not a channel');\n }\n\n function sagaMiddleware(_ref2) {\n var getState = _ref2.getState,\n dispatch = _ref2.dispatch;\n boundRunSaga = runSaga.bind(null, _extends({}, options, {\n context: context,\n channel: channel,\n dispatch: dispatch,\n getState: getState,\n sagaMonitor: sagaMonitor\n }));\n return function (next) {\n return function (action) {\n if (sagaMonitor && sagaMonitor.actionDispatched) {\n sagaMonitor.actionDispatched(action);\n }\n\n var result = next(action); // hit reducers\n\n channel.put(action);\n return result;\n };\n };\n }\n\n sagaMiddleware.run = function () {\n if (process.env.NODE_ENV !== 'production' && !boundRunSaga) {\n throw new Error('Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware');\n }\n\n return boundRunSaga.apply(void 0, arguments);\n };\n\n sagaMiddleware.setContext = function (props) {\n if (process.env.NODE_ENV !== 'production') {\n check(props, object, createSetContextWarning('sagaMiddleware', props));\n }\n\n assignWithSymbols(context, props);\n };\n\n return sagaMiddleware;\n}\n\nexport default sagaMiddlewareFactory;\nexport { END, channel, eventChannel, isEnd, multicastChannel, runSaga, stdChannel };\n","import createSagaMiddleware__default from '@redux-saga/core';\nexport * from '@redux-saga/core';\n\n\n\nexport default createSagaMiddleware__default;\n","import '@redux-saga/symbols';\nimport '@babel/runtime/helpers/esm/extends';\nimport { channel, stringableFunc, func, notUndef } from '@redux-saga/is';\nimport { q as makeIterator, K as take, L as fork, M as cancel, N as call, O as actionChannel, Q as sliding, U as delay, V as race, c as check } from './io-6de156f3.js';\nexport { O as actionChannel, _ as all, $ as apply, N as call, M as cancel, a4 as cancelled, a0 as cps, U as delay, W as effectTypes, a5 as flush, L as fork, a6 as getContext, a2 as join, Y as put, Z as putResolve, V as race, a3 as select, a7 as setContext, a1 as spawn, K as take, X as takeMaybe } from './io-6de156f3.js';\nimport '@redux-saga/delay-p';\n\nvar done = function done(value) {\n return {\n done: true,\n value: value\n };\n};\n\nvar qEnd = {};\nfunction safeName(patternOrChannel) {\n if (channel(patternOrChannel)) {\n return 'channel';\n }\n\n if (stringableFunc(patternOrChannel)) {\n return String(patternOrChannel);\n }\n\n if (func(patternOrChannel)) {\n return patternOrChannel.name;\n }\n\n return String(patternOrChannel);\n}\nfunction fsmIterator(fsm, startState, name) {\n var stateUpdater,\n errorState,\n effect,\n nextState = startState;\n\n function next(arg, error) {\n if (nextState === qEnd) {\n return done(arg);\n }\n\n if (error && !errorState) {\n nextState = qEnd;\n throw error;\n } else {\n stateUpdater && stateUpdater(arg);\n var currentState = error ? fsm[errorState](error) : fsm[nextState]();\n nextState = currentState.nextState;\n effect = currentState.effect;\n stateUpdater = currentState.stateUpdater;\n errorState = currentState.errorState;\n return nextState === qEnd ? done(arg) : effect;\n }\n }\n\n return makeIterator(next, function (error) {\n return next(null, error);\n }, name);\n}\n\nfunction takeEvery(patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var action,\n setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return {\n nextState: 'q1',\n effect: yFork(action)\n };\n }\n }, 'q1', \"takeEvery(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction takeLatest(patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var yCancel = function yCancel(task) {\n return {\n done: false,\n value: cancel(task)\n };\n };\n\n var task, action;\n\n var setTask = function setTask(t) {\n return task = t;\n };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return task ? {\n nextState: 'q3',\n effect: yCancel(task)\n } : {\n nextState: 'q1',\n effect: yFork(action),\n stateUpdater: setTask\n };\n },\n q3: function q3() {\n return {\n nextState: 'q1',\n effect: yFork(action),\n stateUpdater: setTask\n };\n }\n }, 'q1', \"takeLatest(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction takeLeading(patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n\n var yCall = function yCall(ac) {\n return {\n done: false,\n value: call.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var action;\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return {\n nextState: 'q1',\n effect: yCall(action)\n };\n }\n }, 'q1', \"takeLeading(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction throttle(delayLength, pattern, worker) {\n for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var action, channel;\n var yActionChannel = {\n done: false,\n value: actionChannel(pattern, sliding(1))\n };\n\n var yTake = function yTake() {\n return {\n done: false,\n value: take(channel)\n };\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var yDelay = {\n done: false,\n value: delay(delayLength)\n };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n var setChannel = function setChannel(ch) {\n return channel = ch;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yActionChannel,\n stateUpdater: setChannel\n };\n },\n q2: function q2() {\n return {\n nextState: 'q3',\n effect: yTake(),\n stateUpdater: setAction\n };\n },\n q3: function q3() {\n return {\n nextState: 'q4',\n effect: yFork(action)\n };\n },\n q4: function q4() {\n return {\n nextState: 'q2',\n effect: yDelay\n };\n }\n }, 'q1', \"throttle(\" + safeName(pattern) + \", \" + worker.name + \")\");\n}\n\nfunction retry(maxTries, delayLength, fn) {\n var counter = maxTries;\n\n for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var yCall = {\n done: false,\n value: call.apply(void 0, [fn].concat(args))\n };\n var yDelay = {\n done: false,\n value: delay(delayLength)\n };\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yCall,\n errorState: 'q10'\n };\n },\n q2: function q2() {\n return {\n nextState: qEnd\n };\n },\n q10: function q10(error) {\n counter -= 1;\n\n if (counter <= 0) {\n throw error;\n }\n\n return {\n nextState: 'q1',\n effect: yDelay\n };\n }\n }, 'q1', \"retry(\" + fn.name + \")\");\n}\n\nfunction debounceHelper(delayLength, patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var action, raceOutput;\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n var yRace = {\n done: false,\n value: race({\n action: take(patternOrChannel),\n debounce: delay(delayLength)\n })\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var yNoop = function yNoop(value) {\n return {\n done: false,\n value: value\n };\n };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n var setRaceOutput = function setRaceOutput(ro) {\n return raceOutput = ro;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return {\n nextState: 'q3',\n effect: yRace,\n stateUpdater: setRaceOutput\n };\n },\n q3: function q3() {\n return raceOutput.debounce ? {\n nextState: 'q1',\n effect: yFork(action)\n } : {\n nextState: 'q2',\n effect: yNoop(raceOutput.action),\n stateUpdater: setAction\n };\n }\n }, 'q1', \"debounce(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nvar validateTakeEffect = function validateTakeEffect(fn, patternOrChannel, worker) {\n check(patternOrChannel, notUndef, fn.name + \" requires a pattern or channel\");\n check(worker, notUndef, fn.name + \" requires a saga parameter\");\n};\n\nfunction takeEvery$1(patternOrChannel, worker) {\n if (process.env.NODE_ENV !== 'production') {\n validateTakeEffect(takeEvery$1, patternOrChannel, worker);\n }\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n return fork.apply(void 0, [takeEvery, patternOrChannel, worker].concat(args));\n}\nfunction takeLatest$1(patternOrChannel, worker) {\n if (process.env.NODE_ENV !== 'production') {\n validateTakeEffect(takeLatest$1, patternOrChannel, worker);\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n return fork.apply(void 0, [takeLatest, patternOrChannel, worker].concat(args));\n}\nfunction takeLeading$1(patternOrChannel, worker) {\n if (process.env.NODE_ENV !== 'production') {\n validateTakeEffect(takeLeading$1, patternOrChannel, worker);\n }\n\n for (var _len3 = arguments.length, args = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n args[_key3 - 2] = arguments[_key3];\n }\n\n return fork.apply(void 0, [takeLeading, patternOrChannel, worker].concat(args));\n}\nfunction throttle$1(ms, pattern, worker) {\n if (process.env.NODE_ENV !== 'production') {\n check(pattern, notUndef, 'throttle requires a pattern');\n check(worker, notUndef, 'throttle requires a saga parameter');\n }\n\n for (var _len4 = arguments.length, args = new Array(_len4 > 3 ? _len4 - 3 : 0), _key4 = 3; _key4 < _len4; _key4++) {\n args[_key4 - 3] = arguments[_key4];\n }\n\n return fork.apply(void 0, [throttle, ms, pattern, worker].concat(args));\n}\nfunction retry$1(maxTries, delayLength, worker) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 3 ? _len5 - 3 : 0), _key5 = 3; _key5 < _len5; _key5++) {\n args[_key5 - 3] = arguments[_key5];\n }\n\n return call.apply(void 0, [retry, maxTries, delayLength, worker].concat(args));\n}\nfunction debounce(delayLength, pattern, worker) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 3 ? _len6 - 3 : 0), _key6 = 3; _key6 < _len6; _key6++) {\n args[_key6 - 3] = arguments[_key6];\n }\n\n return fork.apply(void 0, [debounceHelper, delayLength, pattern, worker].concat(args));\n}\n\nexport { debounce, retry$1 as retry, takeEvery$1 as takeEvery, takeLatest$1 as takeLatest, takeLeading$1 as takeLeading, throttle$1 as throttle };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport pickBy from 'lodash/pickBy';\nvar defaultCacheDuration = 10 * 60 * 1000; // ten minutes\n/**\n * Returns a list of fetch dates by record id\n *\n * Given a list of new record ids and a previous list of fetch dates by record id,\n * add the new record ids at the current date,\n * and removes those among the old record ids that are stale.\n *\n * @param newRecordIds an array of record identifiers, e.g. [34, 56]\n * @param oldRecordFetchedAt the fetch dates of old records, e.g. { 12: new Date('12 minutes ago), 34: new Date('5 minutes ago') }\n * @param now Current time (useful for tests)\n * @param cacheDuration How long until an old record is removed from the list\n */\nvar getFetchedAt = function (newRecordIds, oldRecordFetchedAt, now, cacheDuration) {\n if (newRecordIds === void 0) { newRecordIds = []; }\n if (oldRecordFetchedAt === void 0) { oldRecordFetchedAt = {}; }\n if (now === void 0) { now = new Date(); }\n if (cacheDuration === void 0) { cacheDuration = defaultCacheDuration; }\n // prepare new records and timestamp them\n var newFetchedAt = {};\n newRecordIds.forEach(function (recordId) { return (newFetchedAt[recordId] = now); });\n // remove outdated entry\n var latestValidDate = new Date();\n latestValidDate.setTime(latestValidDate.getTime() - cacheDuration);\n var stillValidFetchedAt = pickBy(oldRecordFetchedAt, function (date) { return date > latestValidDate; });\n return __assign(__assign({}, stillValidFetchedAt), newFetchedAt);\n};\nexport default getFetchedAt;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport isEqual from 'lodash/isEqual';\nimport { FETCH_END } from '../../../actions';\nimport { CREATE, DELETE, DELETE_MANY, GET_LIST, GET_MANY, GET_MANY_REFERENCE, GET_ONE, UPDATE, UPDATE_MANY, } from '../../../core';\nimport getFetchedAt from '../../../util/getFetchedAt';\n/**\n * Make the fetchedAt property non enumerable\n */\nexport var hideFetchedAt = function (records) {\n Object.defineProperty(records, 'fetchedAt', {\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return records;\n};\n/**\n * Add new records to the pool, and remove outdated ones.\n *\n * This is the equivalent of a stale-while-revalidate caching strategy:\n * The cached data is displayed before fetching, and stale data is removed\n * only once fresh data is fetched.\n */\nexport var addRecordsAndRemoveOutdated = function (newRecords, oldRecords) {\n if (newRecords === void 0) { newRecords = []; }\n var newRecordsById = {};\n newRecords.forEach(function (record) { return (newRecordsById[record.id] = record); });\n var newFetchedAt = getFetchedAt(newRecords.map(function (_a) {\n var id = _a.id;\n return id;\n }), oldRecords.fetchedAt);\n var records = { fetchedAt: newFetchedAt };\n Object.keys(newFetchedAt).forEach(function (id) {\n return (records[id] = newRecordsById[id]\n ? isEqual(newRecordsById[id], oldRecords[id])\n ? oldRecords[id] // do not change the record to avoid a redraw\n : newRecordsById[id]\n : oldRecords[id]);\n });\n return hideFetchedAt(records);\n};\n/**\n * Add new records to the pool, without touching the other ones.\n */\nexport var addRecords = function (newRecords, oldRecords) {\n if (newRecords === void 0) { newRecords = []; }\n var newRecordsById = __assign({}, oldRecords);\n newRecords.forEach(function (record) {\n newRecordsById[record.id] = isEqual(record, oldRecords[record.id])\n ? oldRecords[record.id]\n : record;\n });\n var updatedFetchedAt = getFetchedAt(newRecords.map(function (_a) {\n var id = _a.id;\n return id;\n }), oldRecords.fetchedAt);\n Object.defineProperty(newRecordsById, 'fetchedAt', {\n value: __assign(__assign({}, oldRecords.fetchedAt), updatedFetchedAt),\n enumerable: false,\n });\n return newRecordsById;\n};\nexport var addOneRecord = function (newRecord, oldRecords, date) {\n var _a, _b;\n if (date === void 0) { date = new Date(); }\n var newRecordsById = __assign(__assign({}, oldRecords), (_a = {}, _a[newRecord.id] = isEqual(newRecord, oldRecords[newRecord.id])\n ? oldRecords[newRecord.id] // do not change the record to avoid a redraw\n : newRecord, _a));\n return Object.defineProperty(newRecordsById, 'fetchedAt', {\n value: __assign(__assign({}, oldRecords.fetchedAt), (_b = {}, _b[newRecord.id] = date, _b)),\n enumerable: false,\n });\n};\nvar includesNotStrict = function (items, element) {\n return items.some(function (item) { return item == element; });\n}; // eslint-disable-line eqeqeq\n/**\n * Remove records from the pool\n */\nexport var removeRecords = function (removedRecordIds, oldRecords) {\n if (removedRecordIds === void 0) { removedRecordIds = []; }\n var records = Object.entries(oldRecords)\n .filter(function (_a) {\n var key = _a[0];\n return !includesNotStrict(removedRecordIds, key);\n })\n .reduce(function (obj, _a) {\n var _b;\n var key = _a[0], val = _a[1];\n return (__assign(__assign({}, obj), (_b = {}, _b[key] = val, _b)));\n }, {\n fetchedAt: {},\n });\n records.fetchedAt = Object.entries(oldRecords.fetchedAt)\n .filter(function (_a) {\n var key = _a[0];\n return !includesNotStrict(removedRecordIds, key);\n })\n .reduce(function (obj, _a) {\n var _b;\n var key = _a[0], val = _a[1];\n return (__assign(__assign({}, obj), (_b = {}, _b[key] = val, _b)));\n }, {});\n return hideFetchedAt(records);\n};\nvar initialState = hideFetchedAt({ fetchedAt: {} });\nvar dataReducer = function (previousState, _a) {\n if (previousState === void 0) { previousState = initialState; }\n var payload = _a.payload, meta = _a.meta;\n if (meta && meta.optimistic) {\n if (meta.fetch === UPDATE) {\n var updatedRecord = __assign(__assign({}, previousState[payload.id]), payload.data);\n return addOneRecord(updatedRecord, previousState);\n }\n if (meta.fetch === UPDATE_MANY) {\n var updatedRecords = payload.ids.map(function (id) { return (__assign(__assign({}, previousState[id]), payload.data)); });\n return addRecordsAndRemoveOutdated(updatedRecords, previousState);\n }\n if (meta.fetch === DELETE) {\n return removeRecords([payload.id], previousState);\n }\n if (meta.fetch === DELETE_MANY) {\n return removeRecords(payload.ids, previousState);\n }\n }\n if (!meta || !meta.fetchResponse || meta.fetchStatus !== FETCH_END) {\n return previousState;\n }\n switch (meta.fetchResponse) {\n case GET_LIST:\n return addRecordsAndRemoveOutdated(payload.data, previousState);\n case GET_MANY:\n case GET_MANY_REFERENCE:\n return addRecords(payload.data, previousState);\n case UPDATE:\n case CREATE:\n case GET_ONE:\n return addOneRecord(payload.data, previousState);\n default:\n return previousState;\n }\n};\nexport var getRecord = function (state, id) { return state[id]; };\nexport default dataReducer;\n","import { GET_LIST } from '../../../../../core';\nvar initialState = [];\nvar idsReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = initialState; }\n if (action.meta && action.meta.fetchResponse === GET_LIST) {\n return action.payload.data.map(function (_a) {\n var id = _a.id;\n return id;\n });\n }\n return previousState;\n};\nexport default idsReducer;\n","import { GET_LIST } from '../../../../../core';\nvar initialState = null;\nvar totalReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = initialState; }\n if (action.meta && action.meta.fetchResponse === GET_LIST) {\n return action.payload.total;\n }\n return previousState;\n};\nexport default totalReducer;\n","import { GET_LIST } from '../../../../../core';\nvar initialState = null;\nvar validityReducer = function (previousState, _a) {\n if (previousState === void 0) { previousState = initialState; }\n var payload = _a.payload, meta = _a.meta;\n switch (meta.fetchResponse) {\n case GET_LIST: {\n if (payload.validUntil) {\n // store the validity date\n return payload.validUntil;\n }\n else {\n // remove the validity date\n return initialState;\n }\n }\n default:\n return previousState;\n }\n};\nexport default validityReducer;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { FETCH_END, REFRESH_VIEW } from '../../../../actions';\nimport { GET_LIST, CREATE, DELETE, DELETE_MANY, UPDATE, UPDATE_MANY, } from '../../../../core';\nimport ids from './cachedRequests/ids';\nimport total from './cachedRequests/total';\nimport validity from './cachedRequests/validity';\nvar initialState = {};\nvar initialSubstate = { ids: [], total: null, validity: null };\nvar cachedRequestsReducer = function (previousState, action) {\n var _a;\n if (previousState === void 0) { previousState = initialState; }\n if (action.type === REFRESH_VIEW) {\n // force refresh\n return initialState;\n }\n if (!action.meta || action.meta.fetchStatus !== FETCH_END) {\n // not a return from the dataProvider\n return previousState;\n }\n if (action.meta.fetchResponse === CREATE ||\n action.meta.fetchResponse === DELETE ||\n action.meta.fetchResponse === DELETE_MANY ||\n action.meta.fetchResponse === UPDATE ||\n action.meta.fetchResponse === UPDATE_MANY) {\n // force refresh of all lists because we don't know where the\n // new/deleted/updated record(s) will appear in the list\n return initialState;\n }\n if (action.meta.fetchResponse !== GET_LIST || action.meta.fromCache) {\n // looks like a GET_MANY, a GET_ONE, or a cached response\n return previousState;\n }\n var requestKey = JSON.stringify(action.requestPayload);\n var previousSubState = previousState[requestKey] || initialSubstate;\n return __assign(__assign({}, previousState), (_a = {}, _a[requestKey] = {\n ids: ids(previousSubState.ids, action),\n total: total(previousSubState.total, action),\n validity: validity(previousSubState.validity, action),\n }, _a));\n};\nexport default cachedRequestsReducer;\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { TOGGLE_LIST_ITEM_EXPAND, } from '../../../../actions/listActions';\nvar initialState = [];\nvar expanded = function (previousState, action) {\n if (previousState === void 0) { previousState = initialState; }\n if (action.type === TOGGLE_LIST_ITEM_EXPAND) {\n var index = previousState\n .map(function (el) { return el == action.payload; }) // eslint-disable-line eqeqeq\n .indexOf(true);\n if (index === -1) {\n // expand\n return __spreadArrays(previousState, [action.payload]);\n }\n else {\n // close\n return __spreadArrays(previousState.slice(0, index), previousState.slice(index + 1));\n }\n }\n return previousState;\n};\nexport default expanded;\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport uniq from 'lodash/uniq';\nimport { CRUD_GET_LIST_SUCCESS, CRUD_CREATE_SUCCESS, } from '../../../../actions';\nimport { DELETE, DELETE_MANY } from '../../../../core';\n/**\n * List of the ids of the latest loaded page, regardless of params\n *\n * When loading a the list for the first time, useListController grabs the ids\n * from the cachedRequests reducer (not this ids reducer). It's only when the user\n * changes page, sort, or filter, that the useListController hook uses the ids\n * reducer, so as to show the previous list of results while loading the new\n * list (intead of displaying a blank page each time the list params change).\n *\n * @see useListController\n *\n */\nvar idsReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = []; }\n if (action.meta && action.meta.optimistic) {\n if (action.meta.fetch === DELETE) {\n var index = previousState\n .map(function (el) { return el === action.payload.id; }) // eslint-disable-line eqeqeq\n .indexOf(true);\n if (index === -1) {\n return previousState;\n }\n return __spreadArrays(previousState.slice(0, index), previousState.slice(index + 1));\n }\n if (action.meta.fetch === DELETE_MANY) {\n var newState = previousState.filter(function (el) { return !action.payload.ids.includes(el); });\n return newState;\n }\n }\n switch (action.type) {\n case CRUD_GET_LIST_SUCCESS:\n return action.payload.data.map(function (_a) {\n var id = _a.id;\n return id;\n });\n case CRUD_CREATE_SUCCESS:\n return uniq(__spreadArrays([action.payload.data.id], previousState));\n default:\n return previousState;\n }\n};\nexport default idsReducer;\nexport var getIds = function (state) { return state; };\n","import { CREATE } from '../../core';\nexport var crudCreate = function (resource, data, basePath, redirectTo) {\n if (redirectTo === void 0) { redirectTo = 'edit'; }\n return ({\n type: CRUD_CREATE,\n payload: { data: data },\n meta: {\n resource: resource,\n fetch: CREATE,\n onSuccess: {\n notification: {\n body: 'ra.notification.created',\n level: 'info',\n messageArgs: {\n smart_count: 1,\n },\n },\n redirectTo: redirectTo,\n basePath: basePath,\n },\n onFailure: {\n notification: {\n body: 'ra.notification.http_error',\n level: 'warning',\n },\n },\n },\n });\n};\nexport var CRUD_CREATE = 'RA/CRUD_CREATE';\nexport var CRUD_CREATE_LOADING = 'RA/CRUD_CREATE_LOADING';\nexport var CRUD_CREATE_FAILURE = 'RA/CRUD_CREATE_FAILURE';\nexport var CRUD_CREATE_SUCCESS = 'RA/CRUD_CREATE_SUCCESS';\n","import { CRUD_GET_LIST_SUCCESS } from '../../../../actions/dataActions';\n/**\n * This resource reducer is false until the list loads successfully\n */\nvar loadedOnce = function (previousState, _a) {\n if (previousState === void 0) { previousState = false; }\n var type = _a.type;\n // early return\n if (previousState === true) {\n return previousState;\n }\n if (type === CRUD_GET_LIST_SUCCESS) {\n return true;\n }\n return previousState;\n};\nexport default loadedOnce;\n","import { CRUD_CHANGE_LIST_PARAMS, } from '../../../../actions/listActions';\nvar defaultState = {\n sort: null,\n order: null,\n page: 1,\n perPage: null,\n filter: {},\n};\nvar paramsReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = defaultState; }\n switch (action.type) {\n case CRUD_CHANGE_LIST_PARAMS:\n return action.payload;\n default:\n return previousState;\n }\n};\nexport default paramsReducer;\n","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { SET_LIST_SELECTED_IDS, TOGGLE_LIST_ITEM, CRUD_DELETE_SUCCESS, } from '../../../../actions';\nimport { DELETE, DELETE_MANY } from '../../../../core';\nvar initialState = [];\nvar selectedIdsReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = initialState; }\n if (action.type === SET_LIST_SELECTED_IDS) {\n return action.payload;\n }\n if (action.type === TOGGLE_LIST_ITEM) {\n var index = previousState.indexOf(action.payload);\n if (index > -1) {\n return __spreadArrays(previousState.slice(0, index), previousState.slice(index + 1));\n }\n else {\n return __spreadArrays(previousState, [action.payload]);\n }\n }\n if (action.type === CRUD_DELETE_SUCCESS) {\n var index = previousState.indexOf(action.payload.data.id);\n if (index > -1) {\n return __spreadArrays(previousState.slice(0, index), previousState.slice(index + 1));\n }\n }\n if (action.meta && action.meta.optimistic) {\n if (action.meta.fetch === DELETE) {\n var index = previousState.indexOf(action.payload.id);\n if (index === -1) {\n return previousState;\n }\n return __spreadArrays(previousState.slice(0, index), previousState.slice(index + 1));\n }\n if (action.meta.fetch === DELETE_MANY) {\n return previousState.filter(function (id) { return !action.payload.ids.includes(id); });\n }\n }\n return action.meta && action.meta.unselectAll\n ? initialState\n : previousState;\n};\nexport default selectedIdsReducer;\n","import { CRUD_GET_LIST_SUCCESS, } from '../../../../actions/dataActions';\nimport { DELETE, DELETE_MANY } from '../../../../core';\nvar totalReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = 0; }\n if (action.type === CRUD_GET_LIST_SUCCESS) {\n return action.payload.total;\n }\n if (action.meta && action.meta.optimistic) {\n if (action.meta.fetch === DELETE) {\n return previousState - 1;\n }\n if (action.meta.fetch === DELETE_MANY) {\n return previousState - action.payload.ids.length;\n }\n }\n return previousState;\n};\nexport default totalReducer;\n","import { combineReducers } from 'redux';\nimport cachedRequests from './cachedRequests';\nimport expanded from './expanded';\nimport ids from './ids';\nimport loadedOnce from './loadedOnce';\nimport params from './params';\nimport selectedIds from './selectedIds';\nimport total from './total';\nvar defaultReducer = function () { return null; };\nexport default combineReducers({\n /**\n * ts-jest does some aggressive module mocking when unit testing reducers individually.\n * To avoid 'No reducer provided for key \"...\"' warnings,\n * we pass default reducers. Sorry for legibility.\n *\n * @see https://stackoverflow.com/questions/43375079/redux-warning-only-appearing-in-tests\n */\n cachedRequests: cachedRequests || defaultReducer,\n expanded: expanded || defaultReducer,\n ids: ids || defaultReducer,\n loadedOnce: loadedOnce || defaultReducer,\n params: params || defaultReducer,\n selectedIds: selectedIds || defaultReducer,\n total: total || defaultReducer,\n});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { FETCH_END, REFRESH_VIEW } from '../../../actions';\nimport { CREATE, DELETE, DELETE_MANY, GET_LIST, GET_MANY, GET_MANY_REFERENCE, GET_ONE, UPDATE, UPDATE_MANY, } from '../../../core';\nvar initialState = {};\nvar validityReducer = function (previousState, _a) {\n if (previousState === void 0) { previousState = initialState; }\n var type = _a.type, payload = _a.payload, requestPayload = _a.requestPayload, meta = _a.meta;\n if (type === REFRESH_VIEW) {\n return initialState;\n }\n if (!meta ||\n !meta.fetchResponse ||\n meta.fetchStatus !== FETCH_END ||\n meta.fromCache === true) {\n return previousState;\n }\n if (payload.validUntil) {\n // store the validity date\n switch (meta.fetchResponse) {\n case GET_LIST:\n case GET_MANY:\n case GET_MANY_REFERENCE:\n return addIds(payload.data.map(function (record) { return record.id; }), payload.validUntil, previousState);\n case UPDATE_MANY:\n return addIds(payload.data, payload.validUntil, previousState);\n case UPDATE:\n case CREATE:\n case GET_ONE:\n return addIds([payload.data.id], payload.validUntil, previousState);\n case DELETE:\n case DELETE_MANY:\n throw new Error('Responses to dataProvider.delete() or dataProvider.deleteMany() should not contain a validUntil param');\n default:\n return previousState;\n }\n }\n else {\n // remove the validity date\n switch (meta.fetchResponse) {\n case GET_LIST:\n case GET_MANY:\n case GET_MANY_REFERENCE:\n return removeIds(payload.data.map(function (record) { return record.id; }), previousState);\n case UPDATE:\n case CREATE:\n case GET_ONE:\n return removeIds([payload.data.id], previousState);\n case UPDATE_MANY:\n return removeIds(payload.data, previousState);\n case DELETE:\n return removeIds([requestPayload.id], previousState);\n case DELETE_MANY:\n return removeIds(requestPayload.ids, previousState);\n default:\n return previousState;\n }\n }\n};\nvar addIds = function (ids, validUntil, oldValidityRegistry) {\n if (ids === void 0) { ids = []; }\n var validityRegistry = __assign({}, oldValidityRegistry);\n ids.forEach(function (id) {\n validityRegistry[id] = validUntil;\n });\n return validityRegistry;\n};\nvar removeIds = function (ids, oldValidityRegistry) {\n if (ids === void 0) { ids = []; }\n var validityRegistry = __assign({}, oldValidityRegistry);\n ids.forEach(function (id) {\n delete validityRegistry[id];\n });\n return validityRegistry;\n};\nexport default validityReducer;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { REGISTER_RESOURCE, UNREGISTER_RESOURCE, REFRESH_VIEW, } from '../../../actions';\nimport data from './data';\nimport list from './list';\nimport validity from './validity';\nvar initialState = {};\nexport default (function (previousState, action) {\n var _a;\n if (previousState === void 0) { previousState = initialState; }\n if (action.type === REGISTER_RESOURCE) {\n var resourceState = {\n props: action.payload,\n data: data(undefined, action),\n list: list(undefined, action),\n validity: validity(undefined, action),\n };\n return __assign(__assign({}, previousState), (_a = {}, _a[action.payload.name] = resourceState, _a));\n }\n if (action.type === UNREGISTER_RESOURCE) {\n return Object.keys(previousState).reduce(function (acc, key) {\n var _a;\n if (key === action.payload) {\n return acc;\n }\n return __assign(__assign({}, acc), (_a = {}, _a[key] = previousState[key], _a));\n }, {});\n }\n if (action.type !== REFRESH_VIEW &&\n (!action.meta || !action.meta.resource)) {\n return previousState;\n }\n var resources = Object.keys(previousState);\n var newState = resources.reduce(function (acc, resource) {\n var _a;\n return (__assign(__assign({}, acc), (_a = {}, _a[resource] = action.type === REFRESH_VIEW ||\n action.meta.resource === resource\n ? {\n props: previousState[resource].props,\n data: data(previousState[resource].data, action),\n list: list(previousState[resource].list, action),\n validity: validity(previousState[resource].validity, action),\n }\n : previousState[resource], _a)));\n }, {});\n return newState;\n});\nexport var getResources = function (state) {\n return Object.keys(state).map(function (key) { return state[key].props; });\n};\nexport var getReferenceResource = function (state, props) { return state[props.reference]; };\n","import { FETCH_START, FETCH_END, FETCH_ERROR, FETCH_CANCEL, } from '../../actions/fetchActions';\nvar loadingReducer = function (previousState, _a) {\n if (previousState === void 0) { previousState = 0; }\n var type = _a.type;\n switch (type) {\n case FETCH_START:\n return previousState + 1;\n case FETCH_END:\n case FETCH_ERROR:\n case FETCH_CANCEL:\n return Math.max(previousState - 1, 0);\n default:\n return previousState;\n }\n};\nexport default loadingReducer;\n","import { SHOW_NOTIFICATION, HIDE_NOTIFICATION, } from '../../actions/notificationActions';\nimport { UNDO } from '../../actions/undoActions';\nvar notificationsReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = []; }\n switch (action.type) {\n case SHOW_NOTIFICATION:\n return previousState.concat(action.payload);\n case HIDE_NOTIFICATION:\n case UNDO:\n return previousState.slice(1);\n default:\n return previousState;\n }\n};\nexport default notificationsReducer;\n/**\n * Returns the first available notification to show\n * @param {Object} state - Redux state\n */\nexport var getNotification = function (state) { return state.admin.notifications[0]; };\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { CRUD_GET_MANY_REFERENCE_SUCCESS, } from '../../../actions';\nimport { DELETE, DELETE_MANY } from '../../../core';\nvar initialState = {};\nvar oneToManyReducer = function (previousState, action) {\n var _a;\n if (previousState === void 0) { previousState = initialState; }\n if (action.meta && action.meta.optimistic) {\n var relatedTo = getRelatedReferences(previousState, action.meta.resource);\n if (action.meta.fetch === DELETE) {\n return relatedTo.reduce(removeDeletedReferences([action.payload.id]), previousState);\n }\n if (action.meta.fetch === DELETE_MANY) {\n return relatedTo.reduce(removeDeletedReferences(action.payload.ids), previousState);\n }\n }\n switch (action.type) {\n case CRUD_GET_MANY_REFERENCE_SUCCESS:\n return __assign(__assign({}, previousState), (_a = {}, _a[action.meta.relatedTo] = {\n ids: action.payload.data.map(function (record) { return record.id; }),\n total: action.payload.total,\n }, _a));\n default:\n return previousState;\n }\n};\nexport var getIds = function (state, relatedTo) {\n return state.admin.references.oneToMany[relatedTo] &&\n state.admin.references.oneToMany[relatedTo].ids;\n};\nexport var getTotal = function (state, relatedTo) {\n return state.admin.references.oneToMany[relatedTo] &&\n state.admin.references.oneToMany[relatedTo].total;\n};\nexport var getReferences = function (state, reference, relatedTo) {\n var ids = getIds(state, relatedTo);\n if (typeof ids === 'undefined') {\n return undefined;\n }\n if (!state.admin.resources[reference]) {\n // eslint-disable-next-line no-console\n console.error(\"Invalid Resource \\\"\" + reference + \"\\\"\\n\" +\n (\"You are trying to display or edit a field of a resource called \\\"\" + reference + \"\\\", \") +\n 'but it has not been declared.\\n' +\n \"Declare this resource in the Admin or check the 'reference' prop of ReferenceArrayField and ReferenceManyField.\", { ids: ids });\n }\n return ids\n .map(function (id) {\n var resource = state.admin.resources[reference];\n if (!resource) {\n return undefined;\n }\n return resource.data[id];\n })\n .filter(function (r) { return typeof r !== 'undefined'; })\n .reduce(function (prev, record) {\n prev[record.id] = record; // eslint-disable-line no-param-reassign\n return prev;\n }, {});\n};\nexport var getReferencesByIds = function (state, reference, ids) {\n if (ids.length === 0) {\n return {};\n }\n if (!state.admin.resources[reference]) {\n // eslint-disable-next-line no-console\n console.error(\"Invalid Resource \\\"\" + reference + \"\\\"\\n\" +\n (\"You are trying to display or edit a field of a resource called \\\"\" + reference + \"\\\", \") +\n 'but it has not been declared.\\n' +\n \"Declare this resource in the Admin or check the 'reference' prop of ReferenceArrayField.\", { ids: ids });\n }\n var references = ids\n .map(function (id) {\n var resource = state.admin.resources[reference];\n if (!resource) {\n return undefined;\n }\n return resource.data[id];\n })\n .filter(function (r) { return typeof r !== 'undefined'; })\n .reduce(function (prev, record) {\n prev[record.id] = record; // eslint-disable-line no-param-reassign\n return prev;\n }, {});\n return Object.keys(references).length > 0 ? references : null;\n};\nvar getRelatedReferences = function (previousState, resource) { return Object.keys(previousState).filter(function (key) { return key.includes(resource); }); };\nvar removeDeletedReferences = function (removedIds) { return function (previousState, key) {\n var _a;\n var idsToKeep = previousState[key].ids.filter(function (id) { return !removedIds.includes(id); });\n if (idsToKeep.length === previousState[key].ids.length) {\n return previousState;\n }\n return __assign(__assign({}, previousState), (_a = {}, _a[key] = {\n ids: idsToKeep,\n total: idsToKeep.length,\n }, _a));\n}; };\nexport var nameRelatedTo = function (reference, id, resource, target, filter) {\n if (filter === void 0) { filter = {}; }\n var keys = Object.keys(filter);\n if (!keys.length) {\n return resource + \"_\" + reference + \"@\" + target + \"_\" + id;\n }\n return resource + \"_\" + reference + \"@\" + target + \"_\" + id + \"?\" + keys\n .map(function (key) { return key + \"=\" + JSON.stringify(filter[key]); })\n .join('&');\n};\nexport default oneToManyReducer;\n","import { GET_MANY_REFERENCE } from '../../core';\nexport var crudGetManyReference = function (reference, target, id, relatedTo, pagination, sort, filter, source) { return ({\n type: CRUD_GET_MANY_REFERENCE,\n payload: { target: target, id: id, pagination: pagination, sort: sort, filter: filter, source: source },\n meta: {\n resource: reference,\n relatedTo: relatedTo,\n fetch: GET_MANY_REFERENCE,\n onFailure: {\n notification: {\n body: 'ra.notification.http_error',\n level: 'warning',\n },\n },\n },\n}); };\nexport var CRUD_GET_MANY_REFERENCE = 'RA/CRUD_GET_MANY_REFERENCE';\nexport var CRUD_GET_MANY_REFERENCE_LOADING = 'RA/CRUD_GET_MANY_REFERENCE_LOADING';\nexport var CRUD_GET_MANY_REFERENCE_FAILURE = 'RA/CRUD_GET_MANY_REFERENCE_FAILURE';\nexport var CRUD_GET_MANY_REFERENCE_SUCCESS = 'RA/CRUD_GET_MANY_REFERENCE_SUCCESS';\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { CRUD_GET_MATCHING_SUCCESS, CRUD_GET_MATCHING_FAILURE, } from '../../../actions/dataActions';\nvar initialState = {};\nvar possibleValuesreducer = function (previousState, action) {\n var _a, _b;\n if (previousState === void 0) { previousState = initialState; }\n switch (action.type) {\n case CRUD_GET_MATCHING_SUCCESS:\n return __assign(__assign({}, previousState), (_a = {}, _a[action.meta.relatedTo] = action.payload.data.map(function (record) { return record.id; }), _a));\n case CRUD_GET_MATCHING_FAILURE:\n return __assign(__assign({}, previousState), (_b = {}, _b[action.meta.relatedTo] = { error: action.error }, _b));\n default:\n return previousState;\n }\n};\nexport var getPossibleReferenceValues = function (state, props) {\n return state[props.referenceSource(props.resource, props.source)];\n};\nexport var getPossibleReferences = function (referenceState, possibleValues, selectedIds) {\n if (selectedIds === void 0) { selectedIds = []; }\n if (!possibleValues) {\n return null;\n }\n if (possibleValues.error) {\n return possibleValues;\n }\n possibleValues = Array.from(possibleValues);\n selectedIds.forEach(function (id) {\n return possibleValues.some(function (value) { return value === id; }) ||\n possibleValues.unshift(id);\n });\n return possibleValues\n .map(function (id) { return referenceState.data[id]; })\n .filter(function (r) { return typeof r !== 'undefined'; });\n};\nexport default possibleValuesreducer;\n","import { GET_LIST } from '../../core';\nexport var crudGetMatching = function (reference, relatedTo, pagination, sort, filter) { return ({\n type: CRUD_GET_MATCHING,\n payload: { pagination: pagination, sort: sort, filter: filter },\n meta: {\n resource: reference,\n relatedTo: relatedTo,\n fetch: GET_LIST,\n onFailure: {\n notification: {\n body: 'ra.notification.http_error',\n level: 'warning',\n },\n },\n },\n}); };\nexport var CRUD_GET_MATCHING = 'RA/CRUD_GET_MATCHING';\nexport var CRUD_GET_MATCHING_LOADING = 'RA/CRUD_GET_MATCHING_LOADING';\nexport var CRUD_GET_MATCHING_FAILURE = 'RA/CRUD_GET_MATCHING_FAILURE';\nexport var CRUD_GET_MATCHING_SUCCESS = 'RA/CRUD_GET_MATCHING_SUCCESS';\n","import { combineReducers } from 'redux';\nimport oneToMany from './oneToMany';\nimport possibleValues, { getPossibleReferences as pvGetPossibleReferences, getPossibleReferenceValues as pvGetPossibleReferenceValues, } from './possibleValues';\nvar defaultReducer = function () { return null; };\nexport default combineReducers({\n /**\n * ts-jest does some aggressive module mocking when unit testing reducers individually.\n * To avoid 'No reducer provided for key \"...\"' warnings,\n * we pass default reducers. Sorry for legibility.\n *\n * @see https://stackoverflow.com/questions/43375079/redux-warning-only-appearing-in-tests\n */\n oneToMany: oneToMany || defaultReducer,\n possibleValues: possibleValues || defaultReducer,\n});\nexport var getPossibleReferenceValues = function (state, props) {\n return pvGetPossibleReferenceValues(state.possibleValues, props);\n};\nexport var getPossibleReferences = pvGetPossibleReferences;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { TOGGLE_SIDEBAR, SET_SIDEBAR_VISIBILITY, REFRESH_VIEW, START_OPTIMISTIC_MODE, STOP_OPTIMISTIC_MODE, } from '../../actions';\n// Match the medium breakpoint defined in the material-ui theme\n// See https://material-ui.com/customization/breakpoints/#breakpoints\nvar isDesktop = function () {\n // (min-width: 960px) => theme.breakpoints.up('md')\n return typeof window !== 'undefined' &&\n window.matchMedia &&\n typeof window.matchMedia === 'function'\n ? window.matchMedia('(min-width:960px)').matches\n : false;\n};\nvar defaultState = {\n sidebarOpen: isDesktop(),\n optimistic: false,\n viewVersion: 0,\n};\nvar uiReducer = function (previousState, action) {\n if (previousState === void 0) { previousState = defaultState; }\n switch (action.type) {\n case TOGGLE_SIDEBAR:\n return __assign(__assign({}, previousState), { sidebarOpen: !previousState.sidebarOpen });\n case SET_SIDEBAR_VISIBILITY:\n return __assign(__assign({}, previousState), { sidebarOpen: action.payload });\n case REFRESH_VIEW:\n return __assign(__assign({}, previousState), { viewVersion: previousState.viewVersion + 1 });\n case START_OPTIMISTIC_MODE:\n return __assign(__assign({}, previousState), { optimistic: true });\n case STOP_OPTIMISTIC_MODE:\n return __assign(__assign({}, previousState), { optimistic: false });\n default:\n return previousState;\n }\n};\nexport default uiReducer;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n// reducer for queries called via useQueryWithStore and without a custom action name\nvar customQueriesReducer = function (previousState, _a) {\n var _b;\n if (previousState === void 0) { previousState = {}; }\n var type = _a.type, requestPayload = _a.requestPayload, payload = _a.payload, meta = _a.meta;\n if (type !== 'CUSTOM_QUERY_SUCCESS') {\n return previousState;\n }\n var key = JSON.stringify({\n type: meta.fetchResponse,\n resource: meta.resource,\n payload: requestPayload,\n });\n return __assign(__assign({}, previousState), (_b = {}, _b[key] = payload, _b));\n};\nexport default customQueriesReducer;\n","import { combineReducers } from 'redux';\nimport resources, { getResources as resourceGetResources, getReferenceResource as resourceGetReferenceResource, } from './resource';\nimport loading from './loading';\nimport notifications from './notifications';\nimport references, { getPossibleReferenceValues as referencesGetPossibleReferenceValues, } from './references';\nimport ui from './ui';\nimport customQueries from './customQueries';\nvar defaultReducer = function () { return null; };\nexport default combineReducers({\n /**\n * ts-jest does some aggressive module mocking when unit testing reducers individually.\n * To avoid 'No reducer provided for key \"...\"' warnings,\n * we pass default reducers. Sorry for legibility.\n *\n * @see https://stackoverflow.com/questions/43375079/redux-warning-only-appearing-in-tests\n */\n resources: resources || defaultReducer,\n customQueries: customQueries || defaultReducer,\n loading: loading || defaultReducer,\n notifications: notifications || defaultReducer,\n references: references || defaultReducer,\n ui: ui || defaultReducer,\n});\nexport var getPossibleReferenceValues = function (state, props) {\n return referencesGetPossibleReferenceValues(state.references, props);\n};\nexport var getResources = function (state) { return resourceGetResources(state.resources); };\nexport var getReferenceResource = function (state, props) {\n return resourceGetReferenceResource(state.resources, props);\n};\nexport { getPossibleReferences } from './references';\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { combineReducers } from 'redux';\nimport { connectRouter } from 'connected-react-router';\nimport admin, { getResources as adminGetResources, getReferenceResource as adminGetReferenceResource, getPossibleReferenceValues as adminGetPossibleReferenceValues, } from './admin';\nexport { getNotification } from './admin/notifications';\nexport default (function (customReducers, history) {\n return combineReducers(__assign({ admin: admin, router: connectRouter(history) }, customReducers));\n});\nexport var getPossibleReferenceValues = function (state, props) {\n return adminGetPossibleReferenceValues(state.admin, props);\n};\nexport var getResources = function (state) { return adminGetResources(state.admin); };\nexport var getReferenceResource = function (state, props) {\n return adminGetReferenceResource(state.admin, props);\n};\nexport { getPossibleReferences } from './admin';\n","var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { all, put, call, select, takeLatest, takeEvery, } from 'redux-saga/effects';\nimport { push, replace } from 'connected-react-router';\nimport { showNotification, hideNotification, } from '../actions/notificationActions';\nimport { USER_LOGIN, USER_LOGIN_LOADING, USER_LOGIN_SUCCESS, USER_LOGIN_FAILURE, USER_CHECK, USER_LOGOUT, } from '../actions/authActions';\nimport { FETCH_ERROR } from '../actions/fetchActions';\nimport { clearState } from '../actions/clearActions';\nexport default (function (authProvider) {\n if (!authProvider) {\n return function () { return null; };\n }\n return function watchAuthActions() {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, all([\n takeEvery(USER_LOGIN, handleLogin(authProvider)),\n takeEvery(USER_CHECK, handleCheck(authProvider)),\n takeEvery(USER_LOGOUT, handleLogout(authProvider)),\n takeLatest(FETCH_ERROR, handleFetchError(authProvider)),\n ])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n };\n});\nvar nextPathnameSelector = function (state) {\n var locationState = state.router.location.state;\n return locationState && locationState.nextPathname;\n};\nvar currentPathnameSelector = function (state) { return state.router.location; };\nvar getErrorMessage = function (error, defaultMessage) {\n return typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? defaultMessage\n : error.message;\n};\nexport var handleLogin = function (authProvider) {\n return function (action) {\n var payload, meta, authPayload, redirectTo, e_1, errorMessage;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n payload = action.payload, meta = action.meta;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 7, , 10]);\n return [4 /*yield*/, put({ type: USER_LOGIN_LOADING })];\n case 2:\n _a.sent();\n return [4 /*yield*/, call([authProvider, 'login'], payload)];\n case 3:\n authPayload = _a.sent();\n return [4 /*yield*/, put({\n type: USER_LOGIN_SUCCESS,\n payload: authPayload,\n })];\n case 4:\n _a.sent();\n return [4 /*yield*/, meta.pathName ||\n select(nextPathnameSelector)];\n case 5:\n redirectTo = _a.sent();\n return [4 /*yield*/, put(push(redirectTo || '/'))];\n case 6:\n _a.sent();\n return [3 /*break*/, 10];\n case 7:\n e_1 = _a.sent();\n return [4 /*yield*/, put({\n type: USER_LOGIN_FAILURE,\n error: e_1,\n meta: { auth: true },\n })];\n case 8:\n _a.sent();\n errorMessage = getErrorMessage(e_1, 'ra.auth.sign_in_error');\n return [4 /*yield*/, put(showNotification(errorMessage, 'warning'))];\n case 9:\n _a.sent();\n return [3 /*break*/, 10];\n case 10: return [2 /*return*/];\n }\n });\n };\n};\nexport var handleCheck = function (authProvider) {\n return function (action) {\n var payload, meta, error_1, redirectTo, errorMessage;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n payload = action.payload, meta = action.meta;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 8]);\n return [4 /*yield*/, call([authProvider, 'checkAuth'], payload)];\n case 2:\n _a.sent();\n return [3 /*break*/, 8];\n case 3:\n error_1 = _a.sent();\n return [4 /*yield*/, call([authProvider, 'logout'], undefined)];\n case 4:\n redirectTo = _a.sent();\n return [4 /*yield*/, put(replace({\n pathname: (error_1 && error_1.redirectTo) || redirectTo || '/login',\n state: { nextPathname: meta.pathName },\n }))];\n case 5:\n _a.sent();\n // Clear the state before showing a notification as it would be dismissed immediately otherwise\n return [4 /*yield*/, put(clearState())];\n case 6:\n // Clear the state before showing a notification as it would be dismissed immediately otherwise\n _a.sent();\n errorMessage = getErrorMessage(error_1, 'ra.auth.auth_check_error');\n return [4 /*yield*/, put(showNotification(errorMessage, 'warning'))];\n case 7:\n _a.sent();\n return [3 /*break*/, 8];\n case 8: return [2 /*return*/];\n }\n });\n };\n};\nexport var handleLogout = function (authProvider) {\n return function (action) {\n var payload, redirectTo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n payload = action.payload;\n return [4 /*yield*/, call([authProvider, 'logout'], undefined)];\n case 1:\n redirectTo = _a.sent();\n return [4 /*yield*/, put(push((payload && payload.redirectTo) || redirectTo || '/login'))];\n case 2:\n _a.sent();\n return [4 /*yield*/, put(clearState())];\n case 3:\n _a.sent();\n return [2 /*return*/];\n }\n });\n };\n};\nexport var handleFetchError = function (authProvider) {\n return function (action) {\n var error, e_2, nextPathname, redirectTo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n error = action.error;\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 10]);\n return [4 /*yield*/, call([authProvider, 'checkError'], error)];\n case 2:\n _a.sent();\n return [3 /*break*/, 10];\n case 3:\n e_2 = _a.sent();\n return [4 /*yield*/, select(currentPathnameSelector)];\n case 4:\n nextPathname = _a.sent();\n return [4 /*yield*/, call([authProvider, 'logout'], undefined)];\n case 5:\n redirectTo = _a.sent();\n return [4 /*yield*/, put(push({\n pathname: redirectTo || '/login',\n state: { nextPathname: nextPathname },\n }))];\n case 6:\n _a.sent();\n // Clear the state before showing a notification as it would be dismissed immediately otherwise\n return [4 /*yield*/, put(clearState())];\n case 7:\n // Clear the state before showing a notification as it would be dismissed immediately otherwise\n _a.sent();\n return [4 /*yield*/, put(hideNotification())];\n case 8:\n _a.sent();\n return [4 /*yield*/, put(showNotification('ra.notification.logged_out', 'warning'))];\n case 9:\n _a.sent();\n return [3 /*break*/, 10];\n case 10: return [2 /*return*/];\n }\n });\n };\n};\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexport var USER_LOGIN = 'RA/USER_LOGIN';\nexport var USER_LOGIN_LOADING = 'RA/USER_LOGIN_LOADING';\nexport var USER_LOGIN_FAILURE = 'RA/USER_LOGIN_FAILURE';\nexport var USER_LOGIN_SUCCESS = 'RA/USER_LOGIN_SUCCESS';\nexport var userLogin = function (payload, pathName) { return ({\n type: USER_LOGIN,\n payload: payload,\n meta: { auth: true, pathName: pathName },\n}); };\nexport var USER_CHECK = 'RA/USER_CHECK';\nexport var USER_CHECK_SUCCESS = 'RA/USER_CHECK_SUCCESS';\nexport var userCheck = function (payload, pathName, routeParams) {\n if (routeParams === void 0) { routeParams = {}; }\n return ({\n type: USER_CHECK,\n payload: __assign(__assign({}, payload), { routeParams: routeParams }),\n meta: { auth: true, pathName: pathName },\n });\n};\nexport var USER_LOGOUT = 'RA/USER_LOGOUT';\n/**\n * Action to trigger logout of the current user. The entire redux state will be cleared\n * thanks to the resettableAppReducer in Admin.\n * @see: Admin.js\n * @param redirectTo Path to direct to after logout\n * @return {{type: string, payload: {redirectTo: string}, meta: {auth: boolean}}}\n */\nexport var userLogout = function (redirectTo) { return ({\n type: USER_LOGOUT,\n payload: { redirectTo: redirectTo },\n meta: { auth: true },\n}); };\n","var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { call, takeEvery } from 'redux-saga/effects';\n/**\n * Callback Side Effects\n */\nfunction handleCallback(_a) {\n var payload = _a.payload, requestPayload = _a.requestPayload, error = _a.error, callback = _a.meta.callback;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, call(callback, { payload: payload, requestPayload: requestPayload, error: error })];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n}\nexport default function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, takeEvery(function (action) { return action.meta && action.meta.callback; }, handleCallback)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { all, call, cancelled, put, select, takeEvery, } from 'redux-saga/effects';\nimport { FETCH_CANCEL, FETCH_END, FETCH_ERROR, FETCH_START } from '../actions';\nimport { fetchActionsWithRecordResponse, fetchActionsWithArrayOfIdentifiedRecordsResponse, fetchActionsWithArrayOfRecordsResponse, fetchActionsWithTotalResponse, sanitizeFetchType, } from '../core';\nfunction validateResponseFormat(response, type, logger // eslint-disable-line no-console\n) {\n if (logger === void 0) { logger = console.error; }\n if (!response.hasOwnProperty('data')) {\n logger(\"The response to '\" + type + \"' must be like { data: ... }, but the received response does not have a 'data' key. The dataProvider is probably wrong for '\" + type + \"'.\");\n throw new Error('ra.notification.data_provider_error');\n }\n if (fetchActionsWithArrayOfRecordsResponse.includes(type) &&\n !Array.isArray(response.data)) {\n logger(\"The response to '\" + type + \"' must be like { data : [...] }, but the received data is not an array. The dataProvider is probably wrong for '\" + type + \"'\");\n throw new Error('ra.notification.data_provider_error');\n }\n if (fetchActionsWithArrayOfIdentifiedRecordsResponse.includes(type) &&\n Array.isArray(response.data) &&\n response.data.length > 0 &&\n response.data.some(function (d) { return !d.hasOwnProperty('id'); })) {\n logger(\"The response to '\" + type + \"' must be like { data : [{ id: 123, ...}, ...] }, but at least one received data item do not have an 'id' key. The dataProvider is probably wrong for '\" + type + \"'\");\n throw new Error('ra.notification.data_provider_error');\n }\n if (fetchActionsWithRecordResponse.includes(type) &&\n !response.data.hasOwnProperty('id')) {\n logger(\"The response to '\" + type + \"' must be like { data: { id: 123, ... } }, but the received data does not have an 'id' key. The dataProvider is probably wrong for '\" + type + \"'\");\n throw new Error('ra.notification.data_provider_error');\n }\n if (fetchActionsWithTotalResponse.includes(type) &&\n !response.hasOwnProperty('total')) {\n logger(\"The response to '\" + type + \"' must be like { data: [...], total: 123 }, but the received response does not have a 'total' key. The dataProvider is probably wrong for '\" + type + \"'\");\n throw new Error('ra.notification.data_provider_error');\n }\n}\nexport function handleFetch(dataProvider, action) {\n var type, payload, _a, fetchMeta, onSuccess, onFailure, meta, restType, successSideEffects, failureSideEffects, isOptimistic, response, error_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n type = action.type, payload = action.payload, _a = action.meta, fetchMeta = _a.fetch, onSuccess = _a.onSuccess, onFailure = _a.onFailure, meta = __rest(_a, [\"fetch\", \"onSuccess\", \"onFailure\"]);\n restType = fetchMeta;\n successSideEffects = onSuccess instanceof Function ? {} : onSuccess;\n failureSideEffects = onFailure instanceof Function ? {} : onFailure;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 7, 10, 14]);\n return [4 /*yield*/, select(function (state) { return state.admin.ui.optimistic; })];\n case 2:\n isOptimistic = _b.sent();\n if (isOptimistic) {\n // in optimistic mode, all fetch actions are canceled,\n // so the admin uses the store without synchronization\n return [2 /*return*/];\n }\n return [4 /*yield*/, all([\n put({ type: type + \"_LOADING\", payload: payload, meta: meta }),\n put({ type: FETCH_START }),\n ])];\n case 3:\n _b.sent();\n return [4 /*yield*/, call(dataProvider[sanitizeFetchType(restType)], meta.resource, payload)];\n case 4:\n response = _b.sent();\n if (process.env.NODE_ENV !== 'production') {\n validateResponseFormat(response, restType);\n }\n return [4 /*yield*/, put({\n type: type + \"_SUCCESS\",\n payload: response,\n requestPayload: payload,\n meta: __assign(__assign(__assign({}, meta), successSideEffects), { fetchResponse: restType, fetchStatus: FETCH_END }),\n })];\n case 5:\n _b.sent();\n return [4 /*yield*/, put({ type: FETCH_END })];\n case 6:\n _b.sent();\n return [3 /*break*/, 14];\n case 7:\n error_1 = _b.sent();\n return [4 /*yield*/, put({\n type: type + \"_FAILURE\",\n error: error_1.message ? error_1.message : error_1,\n payload: error_1.body ? error_1.body : null,\n requestPayload: payload,\n meta: __assign(__assign(__assign({}, meta), failureSideEffects), { fetchResponse: restType, fetchStatus: FETCH_ERROR }),\n })];\n case 8:\n _b.sent();\n return [4 /*yield*/, put({ type: FETCH_ERROR, error: error_1 })];\n case 9:\n _b.sent();\n return [3 /*break*/, 14];\n case 10: return [4 /*yield*/, cancelled()];\n case 11:\n if (!_b.sent()) return [3 /*break*/, 13];\n return [4 /*yield*/, put({ type: FETCH_CANCEL })];\n case 12:\n _b.sent();\n return [2 /*return*/];\n case 13: return [7 /*endfinally*/];\n case 14: return [2 /*return*/];\n }\n });\n}\nexport var takeFetchAction = function (action) { return action.meta && action.meta.fetch; };\nvar fetch = function (dataProvider) {\n return function watchFetch() {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, takeEvery(takeFetchAction, handleFetch, dataProvider)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n };\n};\nexport default fetch;\n","var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { put, takeEvery } from 'redux-saga/effects';\nimport { showNotification, } from '../actions/notificationActions';\n/**\n * Notification Side Effects\n */\nfunction handleNotification(_a) {\n var body, level, _b, messageArgs;\n var error = _a.error, _c = _a.meta, notification = _c.notification, optimistic = _c.optimistic;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n body = notification.body, level = notification.level, _b = notification.messageArgs, messageArgs = _b === void 0 ? {} : _b;\n if (!error) return [3 /*break*/, 2];\n return [4 /*yield*/, put(showNotification(typeof error === 'string' ? error : error.message || body, level || 'warning', {\n messageArgs: messageArgs,\n undoable: false,\n }))];\n case 1: return [2 /*return*/, _d.sent()];\n case 2: return [4 /*yield*/, put(showNotification(body, level || 'info', {\n messageArgs: messageArgs,\n undoable: optimistic,\n }))];\n case 3:\n _d.sent();\n return [2 /*return*/];\n }\n });\n}\nexport default function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, takeEvery(\n // @ts-ignore\n function (action) { return action.meta && action.meta.notification; }, handleNotification)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n}\n","var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { put, takeEvery } from 'redux-saga/effects';\nimport { push } from 'connected-react-router';\nimport resolveRedirectTo from '../util/resolveRedirectTo';\nimport { refreshView } from '../actions/uiActions';\n/**\n * Redirection Side Effects\n */\nexport function handleRedirection(_a) {\n var payload = _a.payload, requestPayload = _a.requestPayload, _b = _a.meta, basePath = _b.basePath, redirectTo = _b.redirectTo;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!!redirectTo) return [3 /*break*/, 2];\n return [4 /*yield*/, put(refreshView())];\n case 1:\n _c.sent();\n return [2 /*return*/];\n case 2: return [4 /*yield*/, put(push(resolveRedirectTo(redirectTo, basePath, payload\n ? payload.id || (payload.data ? payload.data.id : null)\n : requestPayload\n ? requestPayload.id\n : null, payload && payload.data\n ? payload.data\n : requestPayload && requestPayload.data\n ? requestPayload.data\n : null)))];\n case 3:\n _c.sent();\n return [2 /*return*/];\n }\n });\n}\nexport default function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, takeEvery(\n // @ts-ignore\n function (action) { return action.meta && typeof action.meta.redirectTo !== 'undefined'; }, handleRedirection)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n}\n","var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { cancel, delay, fork, put, takeEvery } from 'redux-saga/effects';\n/**\n * Distinct reducer on ids\n *\n * @example\n * addIds([1, 2, 3], { payload: { ids: [3, 4] } })\n * => [1, 2, 3, 4]\n */\nvar addIds = function (oldIds, _a) {\n var ids = _a.payload.ids;\n // Using a Set ensure we only keep distinct values\n var oldIdsSet = new Set(oldIds);\n ids.forEach(function (id) { return oldIdsSet.add(id); });\n return Array.from(oldIdsSet);\n};\n// We need a factory for this saga in order to unit test it by providing its context (current tasks and accumulations)\nexport var finalizeFactory = function (tasks, accumulations) {\n /**\n * Fetch the accumulated value after a delay\n *\n * As this gets canceled by subsequent calls to accumulate(), only the last\n * call to finalize() will not be canceled. The delay acts as a\n * debounce.\n *\n * @see https://redux-saga.js.org/docs/recipes/#debouncing\n */\n return function finalize(key, actionCreator) {\n var accumulatedValue, action;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: \n // combined with cancel(), this debounces the calls\n return [4 /*yield*/, delay(50)];\n case 1:\n // combined with cancel(), this debounces the calls\n _a.sent();\n accumulatedValue = accumulations[key];\n // Remove the latest accumulated value so that they do not interfere with later calls\n delete accumulations[key];\n action = actionCreator(key, accumulatedValue);\n return [4 /*yield*/, put(action)];\n case 2:\n _a.sent();\n delete tasks[key];\n return [2 /*return*/];\n }\n });\n };\n};\n// We need a factory for this saga in order to unit test it by providing its context (current tasks and accumulations)\nexport var accumulateFactory = function (tasks, accumulations, finalize) {\n /**\n * Accumulate actions and eventually redispatch an action with the accumulated payload\n *\n * @example\n * accumulate({\n * type: CRUD_GET_MANY_ACCUMULATE,\n * payload: { ids: [1, 2, 3], resource: 'posts' },\n * meta: { accumulate: crudGetMany }\n * });\n * accumulate({\n * type: CRUD_GET_MANY_ACCUMULATE,\n * payload: { ids: [4, 5], resource: 'posts' },\n * meta: { accumulate: crudGetMany }\n * });\n * => crudGetMany({ ids: [1, 2, 3, 4, 5], resource: 'posts' })\n *\n * @example\n * accumulate({\n * type: CRUD_GET_MATCHING_ACCUMULATE,\n * meta: {\n * accumulate: crudGetMatching('posts', 'posts@comments[1].authorId', { page:1, perPage: 10 }, {field: 'id', order: 'DESC' }, {}),\n * accumulateValues: () => true,\n * accumulateKey: '{\"resource\":\"authors\", \"pagination\":{\"page\":1,\"perPage\":10},\"sort\":{\"field\":\"id\",\"order\":\"DESC\"},\"filter\":{}}'\n * }\n * });\n * accumulate({\n * type: CRUD_GET_MATCHING_ACCUMULATE,\n * meta: {\n * accumulate: crudGetMatching('posts', 'posts@comments[1].authorId', { page:1, perPage: 10 }, {field: 'id', order: 'DESC' }, {}),\n * accumulateValues: () => true,\n * accumulateKey: '{\"resource\":\"authors\", \"pagination\":{\"page\":1,\"perPage\":10},\"sort\":{\"field\":\"id\",\"order\":\"DESC\"},\"filter\":{}}'\n * }\n * });\n * => crudGetMatching('posts', 'posts@comments[1].authorId', { page:1, perPage: 10 }, {field: 'id', order: 'DESC' }, {})\n */\n return function accumulate(action) {\n var key, accumulateValues, _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n key = action.meta.accumulateKey || action.payload.resource;\n if (!tasks[key]) return [3 /*break*/, 2];\n return [4 /*yield*/, cancel(tasks[key])];\n case 1:\n _c.sent();\n _c.label = 2;\n case 2:\n accumulateValues = action.meta.accumulateValues || addIds;\n // accumulateValues is a reducer function, it receives the previous accumulatedValues for\n // the provided key, and must return the updated accumulatedValues\n accumulations[key] = accumulateValues(accumulations[key], action);\n _a = tasks;\n _b = key;\n return [4 /*yield*/, fork(finalize, key, action.meta.accumulate)];\n case 3:\n _a[_b] = _c.sent();\n return [2 /*return*/];\n }\n });\n };\n};\nexport default function () {\n var accumulations, tasks;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n accumulations = {};\n tasks = {};\n return [4 /*yield*/, takeEvery(function (action) { return action.meta && action.meta.accumulate; }, accumulateFactory(tasks, accumulations, finalizeFactory(tasks, accumulations)))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n}\n","var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { put, takeEvery } from 'redux-saga/effects';\nimport { refreshView } from '../actions/uiActions';\n/**\n * Refresh Side Effects\n */\nfunction handleRefresh() {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, put(refreshView())];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n}\nexport default function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, takeEvery(function (action) { return action.meta && action.meta.refresh; }, handleRefresh)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { take, takeEvery, put, race } from 'redux-saga/effects';\nimport { showNotification } from '../actions/notificationActions';\nimport { UNDOABLE, UNDO, COMPLETE, startOptimisticMode, stopOptimisticMode, } from '../actions/undoActions';\nimport { refreshView } from '../actions/uiActions';\nexport function handleUndoRace(undoableAction) {\n var action, _a, onSuccess, onFailure, metaWithoutSideEffects, complete;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n action = undoableAction.payload.action;\n _a = action.meta, onSuccess = _a.onSuccess, onFailure = _a.onFailure, metaWithoutSideEffects = __rest(_a, [\"onSuccess\", \"onFailure\"]);\n return [4 /*yield*/, put(startOptimisticMode())];\n case 1:\n _b.sent();\n // dispatch action in optimistic mode (no fetch), with success side effects\n return [4 /*yield*/, put(__assign(__assign({}, action), { type: action.type + \"_OPTIMISTIC\", meta: __assign(__assign(__assign({}, metaWithoutSideEffects), onSuccess), { optimistic: true }) }))];\n case 2:\n // dispatch action in optimistic mode (no fetch), with success side effects\n _b.sent();\n return [4 /*yield*/, race({\n undo: take(UNDO),\n complete: take(COMPLETE),\n })];\n case 3:\n complete = (_b.sent()).complete;\n return [4 /*yield*/, put(stopOptimisticMode())];\n case 4:\n _b.sent();\n if (!complete) return [3 /*break*/, 6];\n // if not cancelled, redispatch the action, this time immediate, and without success side effect\n return [4 /*yield*/, put(__assign(__assign({}, action), { meta: __assign(__assign({}, metaWithoutSideEffects), { onSuccess: { refresh: true }, onFailure: __assign(__assign({}, onFailure), { refresh: true }) }) }))];\n case 5:\n // if not cancelled, redispatch the action, this time immediate, and without success side effect\n _b.sent();\n return [3 /*break*/, 9];\n case 6: return [4 /*yield*/, put(showNotification('ra.notification.canceled'))];\n case 7:\n _b.sent();\n return [4 /*yield*/, put(refreshView())];\n case 8:\n _b.sent();\n _b.label = 9;\n case 9: return [2 /*return*/];\n }\n });\n}\nexport default function watchUndoable() {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: \n // @ts-ignore\n return [4 /*yield*/, takeEvery(UNDOABLE, handleUndoRace)];\n case 1:\n // @ts-ignore\n _a.sent();\n return [2 /*return*/];\n }\n });\n}\n","var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { all } from 'redux-saga/effects';\nimport auth from './auth';\nimport callback from './callback';\nimport fetch from './fetch';\nimport notification from './notification';\nimport redirection from './redirection';\nimport accumulate from './accumulate';\nimport refresh from './refresh';\nimport undo from './undo';\n/**\n * @param {Object} dataProvider A Data Provider function\n * @param {Function} authProvider An Authentication Provider object\n */\nexport default (function (dataProvider, authProvider) {\n return function admin() {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, all([\n auth(authProvider)(),\n undo(),\n fetch(dataProvider)(),\n accumulate(),\n redirection(),\n refresh(),\n notification(),\n callback(),\n ])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n };\n});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { createStore, compose, applyMiddleware } from 'redux';\nimport { routerMiddleware } from 'connected-react-router';\nimport createSagaMiddleware from 'redux-saga';\nimport { all, fork } from 'redux-saga/effects';\nimport createAppReducer from '../reducer';\nimport { adminSaga } from '../sideEffect';\nimport { CLEAR_STATE } from '../actions/clearActions';\nexport default (function (_a) {\n var dataProvider = _a.dataProvider, history = _a.history, _b = _a.customReducers, customReducers = _b === void 0 ? {} : _b, _c = _a.authProvider, authProvider = _c === void 0 ? null : _c, _d = _a.customSagas, customSagas = _d === void 0 ? [] : _d, initialState = _a.initialState;\n var appReducer = createAppReducer(customReducers, history);\n var resettableAppReducer = function (state, action) {\n return appReducer(action.type !== CLEAR_STATE\n ? state\n : // Erase data from the store but keep location, notifications, ui prefs, etc.\n __assign(__assign({}, state), { admin: __assign(__assign({}, state.admin), { loading: 0, resources: {}, customQueries: {}, references: { oneToMany: {}, possibleValues: {} } }) }), action);\n };\n var saga = function rootSaga() {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, all(__spreadArrays([adminSaga(dataProvider, authProvider)], customSagas).map(fork))];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n };\n var sagaMiddleware = createSagaMiddleware();\n var typedWindow = typeof window !== 'undefined' && window;\n var composeEnhancers = (process.env.NODE_ENV === 'development' &&\n typeof typedWindow !== 'undefined' &&\n typedWindow.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ &&\n typedWindow.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n trace: true,\n traceLimit: 25,\n })) ||\n compose;\n var store = createStore(resettableAppReducer, typeof initialState === 'function' ? initialState() : initialState, composeEnhancers(applyMiddleware(sagaMiddleware, routerMiddleware(history))));\n sagaMiddleware.run(saga);\n return store;\n});\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { useCallback, useMemo, Children, } from 'react';\nimport { useSafeSetState } from '../util/hooks';\nimport { TranslationContext } from './TranslationContext';\n/**\n * Creates a translation context, available to its children\n *\n * @example\n * const MyApp = () => (\n * \n * \n * \n * \n * \n * );\n */\nvar TranslationProvider = function (props) {\n var i18nProvider = props.i18nProvider, children = props.children;\n var _a = useSafeSetState({\n locale: i18nProvider ? i18nProvider.getLocale() : 'en',\n i18nProvider: i18nProvider,\n }), state = _a[0], setState = _a[1];\n var setLocale = useCallback(function (newLocale) {\n return setState(function (state) { return (__assign(__assign({}, state), { locale: newLocale })); });\n }, [setState]);\n // Allow locale modification by including setLocale in the context\n // This can't be done in the initial state because setState doesn't exist yet\n var value = useMemo(function () { return (__assign(__assign({}, state), { setLocale: setLocale })); }, [setLocale, state]);\n return (React.createElement(TranslationContext.Provider, { value: value }, Children.only(children)));\n};\nexport default TranslationProvider;\n","import * as React from 'react';\nimport { useContext } from 'react';\nimport { Provider, ReactReduxContext } from 'react-redux';\nimport { createHashHistory } from 'history';\nimport { ConnectedRouter } from 'connected-react-router';\nimport { AuthContext, convertLegacyAuthProvider } from '../auth';\nimport { DataProviderContext, convertLegacyDataProvider, } from '../dataProvider';\nimport createAdminStore from './createAdminStore';\nimport TranslationProvider from '../i18n/TranslationProvider';\nvar CoreAdminContext = function (_a) {\n var authProvider = _a.authProvider, dataProvider = _a.dataProvider, i18nProvider = _a.i18nProvider, children = _a.children, history = _a.history, customReducers = _a.customReducers, customSagas = _a.customSagas, initialState = _a.initialState;\n var reduxIsAlreadyInitialized = !!useContext(ReactReduxContext);\n if (!dataProvider) {\n throw new Error(\"Missing dataProvider prop.\\nReact-admin requires a valid dataProvider function to work.\");\n }\n var finalAuthProvider = authProvider instanceof Function\n ? convertLegacyAuthProvider(authProvider)\n : authProvider;\n var finalDataProvider = dataProvider instanceof Function\n ? convertLegacyDataProvider(dataProvider)\n : dataProvider;\n var finalHistory = history || createHashHistory();\n var renderCore = function () {\n return (React.createElement(AuthContext.Provider, { value: finalAuthProvider },\n React.createElement(DataProviderContext.Provider, { value: finalDataProvider },\n React.createElement(TranslationProvider, { i18nProvider: i18nProvider }, typeof window !== 'undefined' ? (React.createElement(ConnectedRouter, { history: finalHistory }, children)) : (children)))));\n };\n if (reduxIsAlreadyInitialized) {\n if (!history) {\n throw new Error(\"Missing history prop.\\nWhen integrating react-admin inside an existing redux Provider, you must provide the same 'history' prop to the as the one used to bootstrap your routerMiddleware.\\nReact-admin uses this history for its own ConnectedRouter.\");\n }\n return renderCore();\n }\n else {\n return (React.createElement(Provider, { store: createAdminStore({\n authProvider: finalAuthProvider,\n customReducers: customReducers,\n customSagas: customSagas,\n dataProvider: finalDataProvider,\n initialState: initialState,\n history: finalHistory,\n }) }, renderCore()));\n }\n};\nexport default CoreAdminContext;\n","import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_CHECK, AUTH_ERROR, AUTH_GET_PERMISSIONS, } from './types';\n/**\n * Turn a function-based authProvider to an object-based one\n *\n * Allows using legacy authProviders transparently.\n *\n * @param {Function} legacyAuthProvider A legacy authProvider (type, params) => Promise\n *\n * @returns {Object} An authProvider that react-admin can use\n */\nexport default (function (legacyAuthProvider) {\n var authProvider = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return legacyAuthProvider.apply(null, args);\n };\n authProvider.login = function (params) { return legacyAuthProvider(AUTH_LOGIN, params); };\n authProvider.logout = function (params) { return legacyAuthProvider(AUTH_LOGOUT, params); };\n authProvider.checkAuth = function (params) { return legacyAuthProvider(AUTH_CHECK, params); };\n authProvider.checkError = function (error) { return legacyAuthProvider(AUTH_ERROR, error); };\n authProvider.getPermissions = function (params) {\n return legacyAuthProvider(AUTH_GET_PERMISSIONS, params);\n };\n return authProvider;\n});\n","export var AUTH_LOGIN = 'AUTH_LOGIN';\nexport var AUTH_CHECK = 'AUTH_CHECK';\nexport var AUTH_ERROR = 'AUTH_ERROR';\nexport var AUTH_LOGOUT = 'AUTH_LOGOUT';\nexport var AUTH_GET_PERMISSIONS = 'AUTH_GET_PERMISSIONS';\n","var englishMessages = {\n ra: {\n action: {\n add_filter: 'Add filter',\n add: 'Add',\n back: 'Go Back',\n bulk_actions: '1 item selected |||| %{smart_count} items selected',\n cancel: 'Cancel',\n clear_input_value: 'Clear value',\n clone: 'Clone',\n confirm: 'Confirm',\n create: 'Create',\n delete: 'Delete',\n edit: 'Edit',\n export: 'Export',\n list: 'List',\n refresh: 'Refresh',\n remove_filter: 'Remove this filter',\n remove: 'Remove',\n save: 'Save',\n search: 'Search',\n show: 'Show',\n sort: 'Sort',\n undo: 'Undo',\n unselect: 'Unselect',\n expand: 'Expand',\n close: 'Close',\n open_menu: 'Open menu',\n close_menu: 'Close menu',\n },\n boolean: {\n true: 'Yes',\n false: 'No',\n null: '',\n },\n page: {\n create: 'Create %{name}',\n dashboard: 'Dashboard',\n edit: '%{name} #%{id}',\n error: 'Something went wrong',\n list: '%{name}',\n loading: 'Loading',\n not_found: 'Not Found',\n show: '%{name} #%{id}',\n empty: 'No %{name} yet.',\n invite: 'Do you want to add one?',\n },\n input: {\n file: {\n upload_several: 'Drop some files to upload, or click to select one.',\n upload_single: 'Drop a file to upload, or click to select it.',\n },\n image: {\n upload_several: 'Drop some pictures to upload, or click to select one.',\n upload_single: 'Drop a picture to upload, or click to select it.',\n },\n references: {\n all_missing: 'Unable to find references data.',\n many_missing: 'At least one of the associated references no longer appears to be available.',\n single_missing: 'Associated reference no longer appears to be available.',\n },\n password: {\n toggle_visible: 'Hide password',\n toggle_hidden: 'Show password',\n },\n },\n message: {\n about: 'About',\n are_you_sure: 'Are you sure?',\n bulk_delete_content: 'Are you sure you want to delete this %{name}? |||| Are you sure you want to delete these %{smart_count} items?',\n bulk_delete_title: 'Delete %{name} |||| Delete %{smart_count} %{name}',\n delete_content: 'Are you sure you want to delete this item?',\n delete_title: 'Delete %{name} #%{id}',\n details: 'Details',\n error: \"A client error occurred and your request couldn't be completed.\",\n invalid_form: 'The form is not valid. Please check for errors',\n loading: 'The page is loading, just a moment please',\n no: 'No',\n not_found: 'Either you typed a wrong URL, or you followed a bad link.',\n yes: 'Yes',\n unsaved_changes: \"Some of your changes weren't saved. Are you sure you want to ignore them?\",\n },\n navigation: {\n no_results: 'No results found',\n no_more_results: 'The page number %{page} is out of boundaries. Try the previous page.',\n page_out_of_boundaries: 'Page number %{page} out of boundaries',\n page_out_from_end: 'Cannot go after last page',\n page_out_from_begin: 'Cannot go before page 1',\n page_range_info: '%{offsetBegin}-%{offsetEnd} of %{total}',\n page_rows_per_page: 'Rows per page:',\n next: 'Next',\n prev: 'Prev',\n },\n auth: {\n auth_check_error: 'Please login to continue',\n user_menu: 'Profile',\n username: 'Username',\n password: 'Password',\n sign_in: 'Sign in',\n sign_in_error: 'Authentication failed, please retry',\n logout: 'Logout',\n },\n notification: {\n updated: 'Element updated |||| %{smart_count} elements updated',\n created: 'Element created',\n deleted: 'Element deleted |||| %{smart_count} elements deleted',\n bad_item: 'Incorrect element',\n item_doesnt_exist: 'Element does not exist',\n http_error: 'Server communication error',\n data_provider_error: 'dataProvider error. Check the console for details.',\n i18n_error: 'Cannot load the translations for the specified language',\n canceled: 'Action cancelled',\n logged_out: 'Your session has ended, please reconnect.',\n },\n validation: {\n required: 'Required',\n minLength: 'Must be %{min} characters at least',\n maxLength: 'Must be %{max} characters or less',\n minValue: 'Must be at least %{min}',\n maxValue: 'Must be %{max} or less',\n number: 'Must be a number',\n email: 'Must be a valid email',\n oneOf: 'Must be one of: %{options}',\n regex: 'Must match a specific format (regexp): %{pattern}',\n },\n },\n};\nexport default englishMessages;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport Polyglot from 'node-polyglot';\n/**\n * Build a polyglot-based i18nProvider based on a function returning the messages for a locale\n *\n * @example\n *\n * import { Admin, Resource, polyglotI18nProvider } from 'react-admin';\n * import englishMessages from 'ra-language-english';\n * import frenchMessages from 'ra-language-french';\n *\n * const messages = {\n * fr: frenchMessages,\n * en: englishMessages,\n * };\n * const i18nProvider = polyglotI18nProvider(locale => messages[locale])\n */\nexport default (function (getMessages, initialLocale, polyglotOptions) {\n if (initialLocale === void 0) { initialLocale = 'en'; }\n if (polyglotOptions === void 0) { polyglotOptions = {}; }\n var locale = initialLocale;\n var messages = getMessages(initialLocale);\n if (messages instanceof Promise) {\n throw new Error(\"The i18nProvider returned a Promise for the messages of the default locale (\" + initialLocale + \"). Please update your i18nProvider to return the messages of the default locale in a synchronous way.\");\n }\n var polyglot = new Polyglot(__assign({ locale: locale, phrases: __assign({ '': '' }, messages) }, polyglotOptions));\n var translate = polyglot.t.bind(polyglot);\n return {\n translate: function (key, options) {\n if (options === void 0) { options = {}; }\n return translate(key, options);\n },\n changeLocale: function (newLocale) {\n // We systematically return a Promise for the messages because\n // getMessages may return a Promise\n return Promise.resolve(getMessages(newLocale)).then(function (messages) {\n locale = newLocale;\n var newPolyglot = new Polyglot(__assign({ locale: newLocale, phrases: __assign({ '': '' }, messages) }, polyglotOptions));\n translate = newPolyglot.t.bind(newPolyglot);\n });\n },\n getLocale: function () { return locale; },\n };\n});\n","import defaultMessages from 'ra-language-english';\nimport polyglotI18nProvider from 'ra-i18n-polyglot';\nexport default polyglotI18nProvider(function () { return defaultMessages; });\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nimport { CoreAdminContext } from 'ra-core';\nimport defaultI18nProvider from './defaultI18nProvider';\nvar AdminContext = function (props) { return (React.createElement(CoreAdminContext, __assign({}, props))); };\nAdminContext.defaultProps = {\n i18nProvider: defaultI18nProvider,\n};\nAdminContext.displayName = 'AdminContext';\nexport default AdminContext;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport React, { Children, cloneElement, createElement, } from 'react';\nimport { Redirect, Route, Switch } from 'react-router-dom';\nimport WithPermissions from '../auth/WithPermissions';\nvar RoutesWithLayout = function (_a) {\n var catchAll = _a.catchAll, children = _a.children, customRoutes = _a.customRoutes, dashboard = _a.dashboard, title = _a.title;\n var childrenAsArray = React.Children.toArray(children);\n var firstChild = childrenAsArray.length > 0\n ? childrenAsArray[0]\n : null;\n return (React.createElement(Switch, null,\n customRoutes &&\n customRoutes.map(function (route, key) { return cloneElement(route, { key: key }); }),\n Children.map(children, function (child) { return (React.createElement(Route, { key: child.props.name, path: \"/\" + child.props.name, render: function (props) {\n return cloneElement(child, __assign({ \n // The context prop instruct the Resource component to\n // render itself as a standard component\n intent: 'route' }, props));\n } })); }),\n dashboard ? (React.createElement(Route, { exact: true, path: \"/\", render: function (routeProps) { return (React.createElement(WithPermissions, __assign({ authParams: {\n route: 'dashboard',\n }, component: dashboard }, routeProps))); } })) : firstChild ? (React.createElement(Route, { exact: true, path: \"/\", render: function () { return React.createElement(Redirect, { to: \"/\" + firstChild.props.name }); } })) : null,\n React.createElement(Route, { render: function (routeProps) {\n return createElement(catchAll, __assign(__assign({}, routeProps), { title: title }));\n } })));\n};\nexport default RoutesWithLayout;\n","import { useEffect } from 'react';\nimport useCheckAuth from './useCheckAuth';\nimport { useSafeSetState } from '../util/hooks';\nvar emptyParams = {};\n/**\n * Hook for getting the authentication status and restricting access to authenticated users\n *\n * Calls the authProvider.checkAuth() method asynchronously.\n * If the authProvider returns a rejected promise, logs the user out.\n *\n * The return value updates according to the authProvider request state:\n *\n * - start: { authenticated: false, loading: true, loaded: false }\n * - success: { authenticated: true, loading: false, loaded: true }\n * - error: { authenticated: false, loading: false, loaded: true }\n *\n * Useful in custom page components that can work both for connected and\n * anonymous users. For pages that can only work for connected users,\n * prefer the useAuthenticated() hook.\n *\n * @see useAuthenticated()\n *\n * @param {Object} params Any params you want to pass to the authProvider\n *\n * @returns The current auth check state. Destructure as { authenticated, error, loading, loaded }.\n *\n * @example\n * import { useAuthState } from 'react-admin';\n *\n * const CustomRoutes = [\n * {\n * const { authenticated } = useAuthState({ myContext: 'foobar' });\n * return authenticated ? : ;\n * }} />,\n * ];\n * const App = () => (\n * \n * ...\n * \n * );\n */\nvar useAuthState = function (params) {\n if (params === void 0) { params = emptyParams; }\n var _a = useSafeSetState({\n loading: true,\n loaded: false,\n authenticated: true,\n }), state = _a[0], setState = _a[1];\n var checkAuth = useCheckAuth();\n useEffect(function () {\n checkAuth(params, false)\n .then(function () {\n return setState({ loading: false, loaded: true, authenticated: true });\n })\n .catch(function () {\n return setState({ loading: false, loaded: true, authenticated: false });\n });\n }, [checkAuth, params, setState]);\n return state;\n};\nexport default useAuthState;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport React, { Children, useEffect, cloneElement, createElement, } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport RoutesWithLayout from './RoutesWithLayout';\nimport { useLogout, useGetPermissions, useAuthState } from '../auth';\nimport { Ready, useTimeout, useSafeSetState } from '../util';\nvar CoreAdminRouter = function (props) {\n var getPermissions = useGetPermissions();\n var doLogout = useLogout();\n var authenticated = useAuthState().authenticated;\n var oneSecondHasPassed = useTimeout(1000);\n var _a = useSafeSetState([]), computedChildren = _a[0], setComputedChildren = _a[1];\n useEffect(function () {\n if (typeof props.children === 'function') {\n initializeResources();\n }\n }, [authenticated]); // eslint-disable-line react-hooks/exhaustive-deps\n var initializeResources = function () { return __awaiter(void 0, void 0, void 0, function () {\n var permissions, resolveChildren, childrenFuncResult, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, getPermissions()];\n case 1:\n permissions = _a.sent();\n resolveChildren = props.children;\n childrenFuncResult = resolveChildren(permissions);\n if (childrenFuncResult.then) {\n childrenFuncResult.then(function (resolvedChildren) {\n return setComputedChildren(resolvedChildren\n .filter(function (child) { return child; })\n .map(function (child) { return (__assign(__assign({}, child), { props: __assign(__assign({}, child.props), { key: child.props.name }) })); }));\n });\n }\n else {\n setComputedChildren(childrenFuncResult.filter(function (child) { return child; }));\n }\n return [3 /*break*/, 3];\n case 2:\n error_1 = _a.sent();\n console.error(error_1);\n doLogout();\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n }); };\n var renderCustomRoutesWithoutLayout = function (route, routeProps) {\n if (route.props.render) {\n return route.props.render(__assign(__assign({}, routeProps), { title: props.title }));\n }\n if (route.props.component) {\n return createElement(route.props.component, __assign(__assign({}, routeProps), { title: props.title }));\n }\n };\n var layout = props.layout, catchAll = props.catchAll, children = props.children, customRoutes = props.customRoutes, dashboard = props.dashboard, loading = props.loading, logout = props.logout, menu = props.menu, theme = props.theme, title = props.title;\n if (process.env.NODE_ENV !== 'production' &&\n typeof children !== 'function' &&\n !children) {\n return React.createElement(Ready, null);\n }\n if (typeof children === 'function' &&\n (!computedChildren || computedChildren.length === 0)) {\n if (oneSecondHasPassed) {\n return React.createElement(Route, { path: \"/\", key: \"loading\", component: loading });\n }\n else {\n return null;\n }\n }\n var childrenToRender = (typeof children === 'function'\n ? computedChildren\n : children);\n return (React.createElement(\"div\", null,\n // as we need all of them and not just the one rendered\n Children.map(childrenToRender, function (child) {\n return cloneElement(child, {\n key: child.props.name,\n // The context prop instructs the Resource component to not render anything\n // but simply to register itself as a known resource\n intent: 'registration',\n });\n }),\n React.createElement(Switch, null,\n customRoutes\n .filter(function (route) { return route.props.noLayout; })\n .map(function (route, key) {\n return cloneElement(route, {\n key: key,\n render: function (routeProps) {\n return renderCustomRoutesWithoutLayout(route, routeProps);\n },\n });\n }),\n React.createElement(Route, { path: \"/\", render: function () {\n return createElement(layout, {\n dashboard: dashboard,\n logout: logout,\n menu: menu,\n theme: theme,\n title: title,\n }, React.createElement(RoutesWithLayout, { catchAll: catchAll, customRoutes: customRoutes.filter(function (route) { return !route.props.noLayout; }), dashboard: dashboard, title: title }, Children.map(childrenToRender, function (child) {\n return cloneElement(child, {\n key: child.props.name,\n intent: 'route',\n });\n })));\n } }))));\n};\nCoreAdminRouter.defaultProps = {\n customRoutes: [],\n};\nexport default CoreAdminRouter;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nimport { createElement } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport CoreAdminRouter from './CoreAdminRouter';\nvar DefaultLayout = function (_a) {\n var children = _a.children;\n return (React.createElement(React.Fragment, null, children));\n};\nvar CoreAdminUI = function (_a) {\n var _b = _a.catchAll, catchAll = _b === void 0 ? Noop : _b, children = _a.children, _c = _a.customRoutes, customRoutes = _c === void 0 ? [] : _c, dashboard = _a.dashboard, _d = _a.layout, layout = _d === void 0 ? DefaultLayout : _d, _e = _a.loading, loading = _e === void 0 ? Noop : _e, _f = _a.loginPage, loginPage = _f === void 0 ? false : _f, logout = _a.logout, menu = _a.menu, // deprecated, use a custom layout instead\n theme = _a.theme, _g = _a.title, title = _g === void 0 ? 'React Admin' : _g;\n return (React.createElement(Switch, null,\n loginPage !== false && loginPage !== true ? (React.createElement(Route, { exact: true, path: \"/login\", render: function (props) {\n return createElement(loginPage, __assign(__assign({}, props), { title: title,\n theme: theme }));\n } })) : null,\n React.createElement(Route, { path: \"/\", render: function (props) { return (React.createElement(CoreAdminRouter, __assign({ catchAll: catchAll, customRoutes: customRoutes, dashboard: dashboard, layout: layout, loading: loading, logout: logout && createElement(logout), menu: menu, theme: theme, title: title }, props), children)); } })));\n};\nvar Noop = function () { return null; };\nexport default CoreAdminUI;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nimport ThemeContext from '../useTheme/ThemeContext';\nimport useTheme from '../useTheme';\nimport nested from './nested'; // To support composition of theme.\n\nfunction mergeOuterLocalTheme(outerTheme, localTheme) {\n if (typeof localTheme === 'function') {\n var mergedTheme = localTheme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production') {\n if (!mergedTheme) {\n console.error(['Material-UI: You should return an object from your theme function, i.e.', ' ({})} />'].join('\\n'));\n }\n }\n\n return mergedTheme;\n }\n\n return _extends(_extends({}, outerTheme), localTheme);\n}\n/**\n * This component takes a `theme` prop.\n * It makes the `theme` available down the React tree thanks to React context.\n * This component should preferably be used at **the root of your component tree**.\n */\n\n\nfunction ThemeProvider(props) {\n var children = props.children,\n localTheme = props.theme;\n var outerTheme = useTheme();\n\n if (process.env.NODE_ENV !== 'production') {\n if (outerTheme === null && typeof localTheme === 'function') {\n console.error(['Material-UI: You are providing a theme function prop to the ThemeProvider component:', ' outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n }\n }\n\n var theme = React.useMemo(function () {\n var output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme);\n\n if (output != null) {\n output[nested] = outerTheme !== null;\n }\n\n return output;\n }, [localTheme, outerTheme]);\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = {\n /**\n * Your component tree.\n */\n children: PropTypes.node.isRequired,\n\n /**\n * A theme object. You can provide a function to extend the outer theme.\n */\n theme: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = exactProp(ThemeProvider.propTypes) : void 0;\n}\n\nexport default ThemeProvider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport Paper from '../Paper';\nexport var styles = function styles(theme) {\n var backgroundColorDefault = theme.palette.type === 'light' ? theme.palette.grey[100] : theme.palette.grey[900];\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n boxSizing: 'border-box',\n // Prevent padding issue with the Modal and fixed positioned AppBar.\n zIndex: theme.zIndex.appBar,\n flexShrink: 0\n },\n\n /* Styles applied to the root element if `position=\"fixed\"`. */\n positionFixed: {\n position: 'fixed',\n top: 0,\n left: 'auto',\n right: 0,\n '@media print': {\n // Prevent the app bar to be visible on each printed page.\n position: 'absolute'\n }\n },\n\n /* Styles applied to the root element if `position=\"absolute\"`. */\n positionAbsolute: {\n position: 'absolute',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if `position=\"sticky\"`. */\n positionSticky: {\n // ⚠️ sticky is not supported by IE 11.\n position: 'sticky',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if `position=\"static\"`. */\n positionStatic: {\n position: 'static'\n },\n\n /* Styles applied to the root element if `position=\"relative\"`. */\n positionRelative: {\n position: 'relative'\n },\n\n /* Styles applied to the root element if `color=\"default\"`. */\n colorDefault: {\n backgroundColor: backgroundColorDefault,\n color: theme.palette.getContrastText(backgroundColorDefault)\n },\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText\n },\n\n /* Styles applied to the root element if `color=\"inherit\"`. */\n colorInherit: {\n color: 'inherit'\n },\n\n /* Styles applied to the root element if `color=\"transparent\"`. */\n colorTransparent: {\n backgroundColor: 'transparent',\n color: 'inherit'\n }\n };\n};\nvar AppBar = /*#__PURE__*/React.forwardRef(function AppBar(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? 'primary' : _props$color,\n _props$position = props.position,\n position = _props$position === void 0 ? 'fixed' : _props$position,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"position\"]);\n\n return /*#__PURE__*/React.createElement(Paper, _extends({\n square: true,\n component: \"header\",\n elevation: 4,\n className: clsx(classes.root, classes[\"position\".concat(capitalize(position))], classes[\"color\".concat(capitalize(color))], className, position === 'fixed' && 'mui-fixed'),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? AppBar.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary', 'transparent']),\n\n /**\n * The positioning type. The behavior of the different options is described\n * [in the MDN web docs](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning).\n * Note: `sticky` is not universally supported and will fall back to `static` when unavailable.\n */\n position: PropTypes.oneOf(['absolute', 'fixed', 'relative', 'static', 'sticky'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiAppBar'\n})(AppBar);","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport NavigationRefresh from '@material-ui/icons/Refresh';\nimport { refreshView, useTranslate } from 'ra-core';\nvar RefreshIconButton = function (_a) {\n var _b = _a.label, label = _b === void 0 ? 'ra.action.refresh' : _b, _c = _a.icon, icon = _c === void 0 ? defaultIcon : _c, onClick = _a.onClick, className = _a.className, rest = __rest(_a, [\"label\", \"icon\", \"onClick\", \"className\"]);\n var dispatch = useDispatch();\n var translate = useTranslate();\n var handleClick = useCallback(function (event) {\n event.preventDefault();\n dispatch(refreshView());\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [dispatch, onClick]);\n return (React.createElement(Tooltip, { title: label && translate(label, { _: label }) },\n React.createElement(IconButton, __assign({ \"aria-label\": label && translate(label, { _: label }), className: className, color: \"inherit\", onClick: handleClick }, rest), icon)));\n};\nvar defaultIcon = React.createElement(NavigationRefresh, null);\nRefreshIconButton.propTypes = {\n className: PropTypes.string,\n label: PropTypes.string,\n icon: PropTypes.element,\n};\nexport default RefreshIconButton;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useSelector } from 'react-redux';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useRefreshWhenVisible } from 'ra-core';\nimport RefreshIconButton from '../button/RefreshIconButton';\nvar useStyles = makeStyles({\n loader: {\n margin: 14,\n },\n}, { name: 'RaLoadingIndicator' });\nvar LoadingIndicator = function (props) {\n var classesOverride = props.classes, className = props.className, rest = __rest(props, [\"classes\", \"className\"]);\n useRefreshWhenVisible();\n var loading = useSelector(function (state) { return state.admin.loading > 0; });\n var classes = useStyles(props);\n return loading ? (React.createElement(CircularProgress, __assign({ className: classNames('app-loader', classes.loader, className), color: \"inherit\", size: 18, thickness: 5 }, rest))) : (React.createElement(RefreshIconButton, null));\n};\nLoadingIndicator.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n width: PropTypes.string,\n};\nexport default LoadingIndicator;\n","import * as React from 'react';\nimport { Children, cloneElement, isValidElement, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslate } from 'ra-core';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport AccountCircle from '@material-ui/icons/AccountCircle';\nvar UserMenu = function (props) {\n var _a = useState(null), anchorEl = _a[0], setAnchorEl = _a[1];\n var translate = useTranslate();\n var children = props.children, label = props.label, icon = props.icon, logout = props.logout;\n if (!logout && !children)\n return null;\n var open = Boolean(anchorEl);\n var handleMenu = function (event) { return setAnchorEl(event.currentTarget); };\n var handleClose = function () { return setAnchorEl(null); };\n return (React.createElement(\"div\", null,\n React.createElement(Tooltip, { title: label && translate(label, { _: label }) },\n React.createElement(IconButton, { \"aria-label\": label && translate(label, { _: label }), \"aria-owns\": open ? 'menu-appbar' : null, \"aria-haspopup\": true, color: \"inherit\", onClick: handleMenu }, icon)),\n React.createElement(Menu, { id: \"menu-appbar\", anchorEl: anchorEl, anchorOrigin: {\n vertical: 'top',\n horizontal: 'right',\n }, transformOrigin: {\n vertical: 'top',\n horizontal: 'right',\n }, open: open, onClose: handleClose },\n Children.map(children, function (menuItem) {\n return isValidElement(menuItem)\n ? cloneElement(menuItem, {\n onClick: handleClose,\n })\n : null;\n }),\n logout)));\n};\nUserMenu.propTypes = {\n children: PropTypes.node,\n label: PropTypes.string.isRequired,\n logout: PropTypes.element,\n icon: PropTypes.node,\n};\nUserMenu.defaultProps = {\n label: 'ra.auth.user_menu',\n icon: React.createElement(AccountCircle, null),\n};\nexport default UserMenu;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\n\nfunction defaultTrigger(store, options) {\n var _options$disableHyste = options.disableHysteresis,\n disableHysteresis = _options$disableHyste === void 0 ? false : _options$disableHyste,\n _options$threshold = options.threshold,\n threshold = _options$threshold === void 0 ? 100 : _options$threshold,\n target = options.target;\n var previous = store.current;\n\n if (target) {\n // Get vertical scroll\n store.current = target.pageYOffset !== undefined ? target.pageYOffset : target.scrollTop;\n }\n\n if (!disableHysteresis && previous !== undefined) {\n if (store.current < previous) {\n return false;\n }\n }\n\n return store.current > threshold;\n}\n\nvar defaultTarget = typeof window !== 'undefined' ? window : null;\nexport default function useScrollTrigger() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _options$getTrigger = options.getTrigger,\n getTrigger = _options$getTrigger === void 0 ? defaultTrigger : _options$getTrigger,\n _options$target = options.target,\n target = _options$target === void 0 ? defaultTarget : _options$target,\n other = _objectWithoutProperties(options, [\"getTrigger\", \"target\"]);\n\n var store = React.useRef();\n\n var _React$useState = React.useState(function () {\n return getTrigger(store, other);\n }),\n trigger = _React$useState[0],\n setTrigger = _React$useState[1];\n\n React.useEffect(function () {\n var handleScroll = function handleScroll() {\n setTrigger(getTrigger(store, _extends({\n target: target\n }, other)));\n };\n\n handleScroll(); // Re-evaluate trigger when dependencies change\n\n target.addEventListener('scroll', handleScroll);\n return function () {\n target.removeEventListener('scroll', handleScroll);\n }; // See Option 3. https://github.com/facebook/react/issues/14476#issuecomment-471199055\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [target, getTrigger, JSON.stringify(other)]);\n return trigger;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport * as ReactDOM from 'react-dom';\nimport debounce from '../utils/debounce';\nimport { Transition } from 'react-transition-group';\nimport { elementAcceptingRef } from '@material-ui/utils';\nimport useForkRef from '../utils/useForkRef';\nimport useTheme from '../styles/useTheme';\nimport { duration } from '../styles/transitions';\nimport { reflow, getTransitionProps } from '../transitions/utils'; // Translate the node so he can't be seen on the screen.\n// Later, we gonna translate back the node to his original location\n// with `none`.`\n\nfunction getTranslateValue(direction, node) {\n var rect = node.getBoundingClientRect();\n var transform;\n\n if (node.fakeTransform) {\n transform = node.fakeTransform;\n } else {\n var computedStyle = window.getComputedStyle(node);\n transform = computedStyle.getPropertyValue('-webkit-transform') || computedStyle.getPropertyValue('transform');\n }\n\n var offsetX = 0;\n var offsetY = 0;\n\n if (transform && transform !== 'none' && typeof transform === 'string') {\n var transformValues = transform.split('(')[1].split(')')[0].split(',');\n offsetX = parseInt(transformValues[4], 10);\n offsetY = parseInt(transformValues[5], 10);\n }\n\n if (direction === 'left') {\n return \"translateX(\".concat(window.innerWidth, \"px) translateX(\").concat(offsetX - rect.left, \"px)\");\n }\n\n if (direction === 'right') {\n return \"translateX(-\".concat(rect.left + rect.width - offsetX, \"px)\");\n }\n\n if (direction === 'up') {\n return \"translateY(\".concat(window.innerHeight, \"px) translateY(\").concat(offsetY - rect.top, \"px)\");\n } // direction === 'down'\n\n\n return \"translateY(-\".concat(rect.top + rect.height - offsetY, \"px)\");\n}\n\nexport function setTranslateValue(direction, node) {\n var transform = getTranslateValue(direction, node);\n\n if (transform) {\n node.style.webkitTransform = transform;\n node.style.transform = transform;\n }\n}\nvar defaultTimeout = {\n enter: duration.enteringScreen,\n exit: duration.leavingScreen\n};\n/**\n * The Slide transition is used by the [Drawer](/components/drawers/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\n\nvar Slide = /*#__PURE__*/React.forwardRef(function Slide(props, ref) {\n var children = props.children,\n _props$direction = props.direction,\n direction = _props$direction === void 0 ? 'down' : _props$direction,\n inProp = props.in,\n onEnter = props.onEnter,\n onEntered = props.onEntered,\n onEntering = props.onEntering,\n onExit = props.onExit,\n onExited = props.onExited,\n onExiting = props.onExiting,\n style = props.style,\n _props$timeout = props.timeout,\n timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Transition : _props$TransitionComp,\n other = _objectWithoutProperties(props, [\"children\", \"direction\", \"in\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"style\", \"timeout\", \"TransitionComponent\"]);\n\n var theme = useTheme();\n var childrenRef = React.useRef(null);\n /**\n * used in cloneElement(children, { ref: handleRef })\n */\n\n var handleOwnRef = React.useCallback(function (instance) {\n // #StrictMode ready\n childrenRef.current = ReactDOM.findDOMNode(instance);\n }, []);\n var handleRefIntermediary = useForkRef(children.ref, handleOwnRef);\n var handleRef = useForkRef(handleRefIntermediary, ref);\n\n var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {\n return function (isAppearing) {\n if (callback) {\n // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n if (isAppearing === undefined) {\n callback(childrenRef.current);\n } else {\n callback(childrenRef.current, isAppearing);\n }\n }\n };\n };\n\n var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {\n setTranslateValue(direction, node);\n reflow(node);\n\n if (onEnter) {\n onEnter(node, isAppearing);\n }\n });\n var handleEntering = normalizedTransitionCallback(function (node, isAppearing) {\n var transitionProps = getTransitionProps({\n timeout: timeout,\n style: style\n }, {\n mode: 'enter'\n });\n node.style.webkitTransition = theme.transitions.create('-webkit-transform', _extends({}, transitionProps, {\n easing: theme.transitions.easing.easeOut\n }));\n node.style.transition = theme.transitions.create('transform', _extends({}, transitionProps, {\n easing: theme.transitions.easing.easeOut\n }));\n node.style.webkitTransform = 'none';\n node.style.transform = 'none';\n\n if (onEntering) {\n onEntering(node, isAppearing);\n }\n });\n var handleEntered = normalizedTransitionCallback(onEntered);\n var handleExiting = normalizedTransitionCallback(onExiting);\n var handleExit = normalizedTransitionCallback(function (node) {\n var transitionProps = getTransitionProps({\n timeout: timeout,\n style: style\n }, {\n mode: 'exit'\n });\n node.style.webkitTransition = theme.transitions.create('-webkit-transform', _extends({}, transitionProps, {\n easing: theme.transitions.easing.sharp\n }));\n node.style.transition = theme.transitions.create('transform', _extends({}, transitionProps, {\n easing: theme.transitions.easing.sharp\n }));\n setTranslateValue(direction, node);\n\n if (onExit) {\n onExit(node);\n }\n });\n var handleExited = normalizedTransitionCallback(function (node) {\n // No need for transitions when the component is hidden\n node.style.webkitTransition = '';\n node.style.transition = '';\n\n if (onExited) {\n onExited(node);\n }\n });\n var updatePosition = React.useCallback(function () {\n if (childrenRef.current) {\n setTranslateValue(direction, childrenRef.current);\n }\n }, [direction]);\n React.useEffect(function () {\n // Skip configuration where the position is screen size invariant.\n if (inProp || direction === 'down' || direction === 'right') {\n return undefined;\n }\n\n var handleResize = debounce(function () {\n if (childrenRef.current) {\n setTranslateValue(direction, childrenRef.current);\n }\n });\n window.addEventListener('resize', handleResize);\n return function () {\n handleResize.clear();\n window.removeEventListener('resize', handleResize);\n };\n }, [direction, inProp]);\n React.useEffect(function () {\n if (!inProp) {\n // We need to update the position of the drawer when the direction change and\n // when it's hidden.\n updatePosition();\n }\n }, [inProp, updatePosition]);\n return /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n nodeRef: childrenRef,\n onEnter: handleEnter,\n onEntered: handleEntered,\n onEntering: handleEntering,\n onExit: handleExit,\n onExited: handleExited,\n onExiting: handleExiting,\n appear: true,\n in: inProp,\n timeout: timeout\n }, other), function (state, childProps) {\n return /*#__PURE__*/React.cloneElement(children, _extends({\n ref: handleRef,\n style: _extends({\n visibility: state === 'exited' && !inProp ? 'hidden' : undefined\n }, style, children.props.style)\n }, childProps));\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Slide.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * A single child content element.\n */\n children: elementAcceptingRef,\n\n /**\n * Direction the child node will enter from.\n */\n direction: PropTypes.oneOf(['down', 'left', 'right', 'up']),\n\n /**\n * If `true`, show the component; triggers the enter or exit animation.\n */\n in: PropTypes.bool,\n\n /**\n * @ignore\n */\n onEnter: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntered: PropTypes.func,\n\n /**\n * @ignore\n */\n onEntering: PropTypes.func,\n\n /**\n * @ignore\n */\n onExit: PropTypes.func,\n\n /**\n * @ignore\n */\n onExited: PropTypes.func,\n\n /**\n * @ignore\n */\n onExiting: PropTypes.func,\n\n /**\n * @ignore\n */\n style: PropTypes.object,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })])\n} : void 0;\nexport default Slide;","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport useScrollTrigger from '@material-ui/core/useScrollTrigger';\nimport Slide from '@material-ui/core/Slide';\nfunction HideOnScroll(props) {\n var children = props.children;\n var trigger = useScrollTrigger();\n return (React.createElement(Slide, { appear: false, direction: \"down\", in: !trigger }, children));\n}\nHideOnScroll.propTypes = {\n children: PropTypes.node.isRequired,\n};\nexport default HideOnScroll;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport classNames from 'classnames';\nimport { AppBar as MuiAppBar, IconButton, Toolbar, Tooltip, Typography, makeStyles, useMediaQuery, } from '@material-ui/core';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport { toggleSidebar, useTranslate } from 'ra-core';\nimport LoadingIndicator from './LoadingIndicator';\nimport DefaultUserMenu from './UserMenu';\nimport HideOnScroll from './HideOnScroll';\nvar useStyles = makeStyles(function (theme) { return ({\n toolbar: {\n paddingRight: 24,\n },\n menuButton: {\n marginLeft: '0.5em',\n marginRight: '0.5em',\n },\n menuButtonIconClosed: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(0deg)',\n },\n menuButtonIconOpen: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(180deg)',\n },\n title: {\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n}); }, { name: 'RaAppBar' });\n/**\n * The AppBar component renders a custom MuiAppBar.\n *\n * @param {ReactNode} children React node/s to be render as children of the AppBar\n * @param {Object} classes CSS class names\n * @param {string} className CSS class applied to the MuiAppBar component\n * @param {string} color The color of the AppBar\n * @param {Component} logout The logout button component that will be pass to the UserMenu component\n * @param {boolean} open State of the Sidebar\n * @param {Element} userMenu A custom user menu component for the AppBar. component by default\n *\n * @example\n *\n * const MyAppBar = props => {\n * const classes = useStyles();\n * return (\n * \n * \n * \n * );\n *};\n */\nvar AppBar = function (props) {\n var children = props.children, classesOverride = props.classes, className = props.className, _a = props.color, color = _a === void 0 ? 'secondary' : _a, logo = props.logo, logout = props.logout, open = props.open, title = props.title, userMenu = props.userMenu, rest = __rest(props, [\"children\", \"classes\", \"className\", \"color\", \"logo\", \"logout\", \"open\", \"title\", \"userMenu\"]);\n var classes = useStyles(props);\n var dispatch = useDispatch();\n var isXSmall = useMediaQuery(function (theme) { return theme.breakpoints.down('xs'); });\n var translate = useTranslate();\n return (React.createElement(HideOnScroll, null,\n React.createElement(MuiAppBar, __assign({ className: className, color: color }, rest),\n React.createElement(Toolbar, { disableGutters: true, variant: isXSmall ? 'regular' : 'dense', className: classes.toolbar },\n React.createElement(Tooltip, { title: translate(open\n ? 'ra.action.close_menu'\n : 'ra.action.open_menu', {\n _: 'Open/Close menu',\n }), enterDelay: 500 },\n React.createElement(IconButton, { color: \"inherit\", onClick: function () { return dispatch(toggleSidebar()); }, className: classNames(classes.menuButton) },\n React.createElement(MenuIcon, { classes: {\n root: open\n ? classes.menuButtonIconOpen\n : classes.menuButtonIconClosed,\n } }))),\n Children.count(children) === 0 ? (React.createElement(Typography, { variant: \"h6\", color: \"inherit\", className: classes.title, id: \"react-admin-title\" })) : (children),\n React.createElement(LoadingIndicator, null),\n cloneElement(userMenu, { logout: logout })))));\n};\nAppBar.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n color: PropTypes.oneOf([\n 'default',\n 'inherit',\n 'primary',\n 'secondary',\n 'transparent',\n ]),\n logout: PropTypes.element,\n open: PropTypes.bool,\n userMenu: PropTypes.element,\n};\nAppBar.defaultProps = {\n userMenu: React.createElement(DefaultUserMenu, null),\n};\nexport default AppBar;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Modal from '../Modal';\nimport Backdrop from '../Backdrop';\nimport withStyles from '../styles/withStyles';\nimport Slide from '../Slide';\nimport Paper from '../Paper';\nimport capitalize from '../utils/capitalize';\nimport { duration } from '../styles/transitions';\nimport useTheme from '../styles/useTheme';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {},\n\n /* Styles applied to the root element if `variant=\"permanent or persistent\"`. */\n docked: {\n flex: '0 0 auto'\n },\n\n /* Styles applied to the `Paper` component. */\n paper: {\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n flex: '1 0 auto',\n zIndex: theme.zIndex.drawer,\n WebkitOverflowScrolling: 'touch',\n // Add iOS momentum scrolling.\n // temporary style\n position: 'fixed',\n top: 0,\n // We disable the focus ring for mouse, touch and keyboard users.\n // At some point, it would be better to keep it for keyboard users.\n // :focus-ring CSS pseudo-class will help.\n outline: 0\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"left\"`. */\n paperAnchorLeft: {\n left: 0,\n right: 'auto'\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"right\"`. */\n paperAnchorRight: {\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"top\"`. */\n paperAnchorTop: {\n top: 0,\n left: 0,\n bottom: 'auto',\n right: 0,\n height: 'auto',\n maxHeight: '100%'\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"bottom\"`. */\n paperAnchorBottom: {\n top: 'auto',\n left: 0,\n bottom: 0,\n right: 0,\n height: 'auto',\n maxHeight: '100%'\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"left\"` and `variant` is not \"temporary\". */\n paperAnchorDockedLeft: {\n borderRight: \"1px solid \".concat(theme.palette.divider)\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"top\"` and `variant` is not \"temporary\". */\n paperAnchorDockedTop: {\n borderBottom: \"1px solid \".concat(theme.palette.divider)\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"right\"` and `variant` is not \"temporary\". */\n paperAnchorDockedRight: {\n borderLeft: \"1px solid \".concat(theme.palette.divider)\n },\n\n /* Styles applied to the `Paper` component if `anchor=\"bottom\"` and `variant` is not \"temporary\". */\n paperAnchorDockedBottom: {\n borderTop: \"1px solid \".concat(theme.palette.divider)\n },\n\n /* Styles applied to the `Modal` component. */\n modal: {}\n };\n};\nvar oppositeDirection = {\n left: 'right',\n right: 'left',\n top: 'down',\n bottom: 'up'\n};\nexport function isHorizontal(anchor) {\n return ['left', 'right'].indexOf(anchor) !== -1;\n}\nexport function getAnchor(theme, anchor) {\n return theme.direction === 'rtl' && isHorizontal(anchor) ? oppositeDirection[anchor] : anchor;\n}\nvar defaultTransitionDuration = {\n enter: duration.enteringScreen,\n exit: duration.leavingScreen\n};\n/**\n * The props of the [Modal](/api/modal/) component are available\n * when `variant=\"temporary\"` is set.\n */\n\nvar Drawer = /*#__PURE__*/React.forwardRef(function Drawer(props, ref) {\n var _props$anchor = props.anchor,\n anchorProp = _props$anchor === void 0 ? 'left' : _props$anchor,\n BackdropProps = props.BackdropProps,\n children = props.children,\n classes = props.classes,\n className = props.className,\n _props$elevation = props.elevation,\n elevation = _props$elevation === void 0 ? 16 : _props$elevation,\n _props$ModalProps = props.ModalProps;\n _props$ModalProps = _props$ModalProps === void 0 ? {} : _props$ModalProps;\n\n var BackdropPropsProp = _props$ModalProps.BackdropProps,\n ModalProps = _objectWithoutProperties(_props$ModalProps, [\"BackdropProps\"]),\n onClose = props.onClose,\n _props$open = props.open,\n open = _props$open === void 0 ? false : _props$open,\n _props$PaperProps = props.PaperProps,\n PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n SlideProps = props.SlideProps,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Slide : _props$TransitionComp,\n _props$transitionDura = props.transitionDuration,\n transitionDuration = _props$transitionDura === void 0 ? defaultTransitionDuration : _props$transitionDura,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'temporary' : _props$variant,\n other = _objectWithoutProperties(props, [\"anchor\", \"BackdropProps\", \"children\", \"classes\", \"className\", \"elevation\", \"ModalProps\", \"onClose\", \"open\", \"PaperProps\", \"SlideProps\", \"TransitionComponent\", \"transitionDuration\", \"variant\"]);\n\n var theme = useTheme(); // Let's assume that the Drawer will always be rendered on user space.\n // We use this state is order to skip the appear transition during the\n // initial mount of the component.\n\n var mounted = React.useRef(false);\n React.useEffect(function () {\n mounted.current = true;\n }, []);\n var anchor = getAnchor(theme, anchorProp);\n var drawer = /*#__PURE__*/React.createElement(Paper, _extends({\n elevation: variant === 'temporary' ? elevation : 0,\n square: true\n }, PaperProps, {\n className: clsx(classes.paper, classes[\"paperAnchor\".concat(capitalize(anchor))], PaperProps.className, variant !== 'temporary' && classes[\"paperAnchorDocked\".concat(capitalize(anchor))])\n }), children);\n\n if (variant === 'permanent') {\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, classes.docked, className),\n ref: ref\n }, other), drawer);\n }\n\n var slidingDrawer = /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n in: open,\n direction: oppositeDirection[anchor],\n timeout: transitionDuration,\n appear: mounted.current\n }, SlideProps), drawer);\n\n if (variant === 'persistent') {\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, classes.docked, className),\n ref: ref\n }, other), slidingDrawer);\n } // variant === temporary\n\n\n return /*#__PURE__*/React.createElement(Modal, _extends({\n BackdropProps: _extends({}, BackdropProps, BackdropPropsProp, {\n transitionDuration: transitionDuration\n }),\n BackdropComponent: Backdrop,\n className: clsx(classes.root, classes.modal, className),\n open: open,\n onClose: onClose,\n ref: ref\n }, other, ModalProps), slidingDrawer);\n});\nprocess.env.NODE_ENV !== \"production\" ? Drawer.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Side from which the drawer will appear.\n */\n anchor: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),\n\n /**\n * @ignore\n */\n BackdropProps: PropTypes.object,\n\n /**\n * The contents of the drawer.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The elevation of the drawer.\n */\n elevation: PropTypes.number,\n\n /**\n * Props applied to the [`Modal`](/api/modal/) element.\n */\n ModalProps: PropTypes.object,\n\n /**\n * Callback fired when the component requests to be closed.\n *\n * @param {object} event The event source of the callback.\n */\n onClose: PropTypes.func,\n\n /**\n * If `true`, the drawer is open.\n */\n open: PropTypes.bool,\n\n /**\n * Props applied to the [`Paper`](/api/paper/) element.\n */\n PaperProps: PropTypes.object,\n\n /**\n * Props applied to the [`Slide`](/api/slide/) element.\n */\n SlideProps: PropTypes.object,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })]),\n\n /**\n * The variant to use.\n */\n variant: PropTypes.oneOf(['permanent', 'persistent', 'temporary'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiDrawer',\n flip: false\n})(Drawer);","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Drawer, makeStyles, useMediaQuery } from '@material-ui/core';\nimport lodashGet from 'lodash/get';\nimport { setSidebarVisibility } from 'ra-core';\nexport var DRAWER_WIDTH = 240;\nexport var CLOSED_DRAWER_WIDTH = 55;\nvar useStyles = makeStyles(function (theme) {\n var _a;\n return ({\n drawerPaper: (_a = {\n position: 'relative',\n height: 'auto',\n overflowX: 'hidden',\n width: function (props) {\n return props.open\n ? lodashGet(theme, 'sidebar.width', DRAWER_WIDTH)\n : lodashGet(theme, 'sidebar.closedWidth', CLOSED_DRAWER_WIDTH);\n },\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n backgroundColor: 'transparent',\n marginTop: '0.5em',\n borderRight: 'none'\n },\n _a[theme.breakpoints.only('xs')] = {\n marginTop: 0,\n height: '100vh',\n position: 'inherit',\n backgroundColor: theme.palette.background.default,\n },\n _a[theme.breakpoints.up('md')] = {\n border: 'none',\n marginTop: '1.5em',\n },\n _a.zIndex = 'inherit',\n _a),\n });\n}, { name: 'RaSidebar' });\nvar Sidebar = function (props) {\n var children = props.children, closedSize = props.closedSize, size = props.size, classesOverride = props.classes, rest = __rest(props, [\"children\", \"closedSize\", \"size\", \"classes\"]);\n var dispatch = useDispatch();\n var isXSmall = useMediaQuery(function (theme) { return theme.breakpoints.down('xs'); });\n var isSmall = useMediaQuery(function (theme) { return theme.breakpoints.down('sm'); });\n var open = useSelector(function (state) { return state.admin.ui.sidebarOpen; });\n useSelector(function (state) { return state.locale; }); // force redraw on locale change\n var handleClose = function () { return dispatch(setSidebarVisibility(false)); };\n var toggleSidebar = function () { return dispatch(setSidebarVisibility(!open)); };\n var classes = useStyles(__assign(__assign({}, props), { open: open }));\n return isXSmall ? (React.createElement(Drawer, __assign({ variant: \"temporary\", open: open, PaperProps: {\n className: classes.drawerPaper,\n }, onClose: toggleSidebar }, rest), cloneElement(Children.only(children), {\n onMenuClick: handleClose,\n }))) : isSmall ? (React.createElement(Drawer, __assign({ variant: \"permanent\", open: open, PaperProps: {\n className: classes.drawerPaper,\n }, onClose: toggleSidebar }, rest), cloneElement(Children.only(children), {\n onMenuClick: handleClose,\n }))) : (React.createElement(Drawer, __assign({ variant: \"permanent\", open: open, PaperProps: {\n className: classes.drawerPaper,\n }, onClose: toggleSidebar }, rest), children));\n};\nSidebar.propTypes = {\n children: PropTypes.node.isRequired,\n};\nexport default Sidebar;\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ListContext from '../List/ListContext';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n minWidth: 56,\n color: theme.palette.action.active,\n flexShrink: 0,\n display: 'inline-flex'\n },\n\n /* Styles applied to the root element when the parent `ListItem` uses `alignItems=\"flex-start\"`. */\n alignItemsFlexStart: {\n marginTop: 8\n }\n };\n};\n/**\n * A simple wrapper to apply `List` styles to an `Icon` or `SvgIcon`.\n */\n\nvar ListItemIcon = /*#__PURE__*/React.forwardRef(function ListItemIcon(props, ref) {\n var classes = props.classes,\n className = props.className,\n other = _objectWithoutProperties(props, [\"classes\", \"className\"]);\n\n var context = React.useContext(ListContext);\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, className, context.alignItems === 'flex-start' && classes.alignItemsFlexStart),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemIcon.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component, normally `Icon`, `SvgIcon`,\n * or a `@material-ui/icons` SVG icon element.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiListItemIcon'\n})(ListItemIcon);","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { forwardRef, cloneElement, useCallback, } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { NavLink } from 'react-router-dom';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { makeStyles } from '@material-ui/core/styles';\nvar NavLinkRef = forwardRef(function (props, ref) { return (React.createElement(NavLink, __assign({ innerRef: ref }, props))); });\nvar useStyles = makeStyles(function (theme) { return ({\n root: {\n color: theme.palette.text.secondary,\n },\n active: {\n color: theme.palette.text.primary,\n },\n icon: { minWidth: theme.spacing(5) },\n}); }, { name: 'RaMenuItemLink' });\nvar MenuItemLink = forwardRef(function (props, ref) {\n var classesOverride = props.classes, className = props.className, primaryText = props.primaryText, leftIcon = props.leftIcon, onClick = props.onClick, sidebarIsOpen = props.sidebarIsOpen, rest = __rest(props, [\"classes\", \"className\", \"primaryText\", \"leftIcon\", \"onClick\", \"sidebarIsOpen\"]);\n var classes = useStyles(props);\n var handleMenuTap = useCallback(function (e) {\n onClick && onClick(e);\n }, [onClick]);\n var renderMenuItem = function () {\n return (React.createElement(MenuItem, __assign({ className: classnames(classes.root, className), activeClassName: classes.active, component: NavLinkRef, ref: ref }, rest, { onClick: handleMenuTap }),\n leftIcon && (React.createElement(ListItemIcon, { className: classes.icon }, cloneElement(leftIcon, {\n titleAccess: primaryText,\n }))),\n primaryText));\n };\n if (sidebarIsOpen) {\n return renderMenuItem();\n }\n return (React.createElement(Tooltip, { title: primaryText, placement: \"right\" }, renderMenuItem()));\n});\nMenuItemLink.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n leftIcon: PropTypes.element,\n onClick: PropTypes.func,\n primaryText: PropTypes.node,\n staticContext: PropTypes.object,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n sidebarIsOpen: PropTypes.bool,\n};\nexport default MenuItemLink;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport { useTranslate } from 'ra-core';\nimport MenuItemLink from './MenuItemLink';\nvar DashboardMenuItem = function (_a) {\n var locale = _a.locale, onClick = _a.onClick, props = __rest(_a, [\"locale\", \"onClick\"]);\n var translate = useTranslate();\n return (React.createElement(MenuItemLink, __assign({ onClick: onClick, to: \"/\", primaryText: translate('ra.page.dashboard'), leftIcon: React.createElement(DashboardIcon, null), exact: true }, props)));\n};\nDashboardMenuItem.propTypes = {\n classes: PropTypes.object,\n locale: PropTypes.string,\n onClick: PropTypes.func,\n dense: PropTypes.bool,\n sidebarIsOpen: PropTypes.bool,\n};\nexport default DashboardMenuItem;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { shallowEqual, useSelector } from 'react-redux';\n// @ts-ignore\nimport inflection from 'inflection';\nimport { makeStyles, useMediaQuery } from '@material-ui/core';\nimport DefaultIcon from '@material-ui/icons/ViewList';\nimport classnames from 'classnames';\nimport { getResources, useTranslate } from 'ra-core';\nimport DashboardMenuItem from './DashboardMenuItem';\nimport MenuItemLink from './MenuItemLink';\nvar useStyles = makeStyles({\n main: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-start',\n },\n}, { name: 'RaMenu' });\nvar translatedResourceName = function (resource, translate) {\n return translate(\"resources.\" + resource.name + \".name\", {\n smart_count: 2,\n _: resource.options && resource.options.label\n ? translate(resource.options.label, {\n smart_count: 2,\n _: resource.options.label,\n })\n : inflection.humanize(inflection.pluralize(resource.name)),\n });\n};\nvar Menu = function (props) {\n var classesOverride = props.classes, className = props.className, dense = props.dense, hasDashboard = props.hasDashboard, onMenuClick = props.onMenuClick, logout = props.logout, rest = __rest(props, [\"classes\", \"className\", \"dense\", \"hasDashboard\", \"onMenuClick\", \"logout\"]);\n var translate = useTranslate();\n var classes = useStyles(props);\n var isXSmall = useMediaQuery(function (theme) {\n return theme.breakpoints.down('xs');\n });\n var open = useSelector(function (state) { return state.admin.ui.sidebarOpen; });\n var resources = useSelector(getResources, shallowEqual);\n // Used to force redraw on navigation\n useSelector(function (state) { return state.router.location.pathname; });\n return (React.createElement(\"div\", __assign({ className: classnames(classes.main, className) }, rest),\n hasDashboard && (React.createElement(DashboardMenuItem, { onClick: onMenuClick, dense: dense, sidebarIsOpen: open })),\n resources\n .filter(function (r) { return r.hasList; })\n .map(function (resource) { return (React.createElement(MenuItemLink, { key: resource.name, to: \"/\" + resource.name, primaryText: translatedResourceName(resource, translate), leftIcon: resource.icon ? React.createElement(resource.icon, null) : React.createElement(DefaultIcon, null), onClick: onMenuClick, dense: dense, sidebarIsOpen: open })); }),\n isXSmall && logout));\n};\nMenu.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n dense: PropTypes.bool,\n hasDashboard: PropTypes.bool,\n logout: PropTypes.element,\n onMenuClick: PropTypes.func,\n};\nMenu.defaultProps = {\n onMenuClick: function () { return null; },\n};\nexport default Menu;\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport ownerDocument from '../utils/ownerDocument';\nimport useForkRef from '../utils/useForkRef';\nimport useEventCallback from '../utils/useEventCallback';\nimport { elementAcceptingRef, exactProp } from '@material-ui/utils';\n\nfunction mapEventPropToEvent(eventProp) {\n return eventProp.substring(2).toLowerCase();\n}\n\nfunction clickedRootScrollbar(event) {\n return document.documentElement.clientWidth < event.clientX || document.documentElement.clientHeight < event.clientY;\n}\n/**\n * Listen for click events that occur somewhere in the document, outside of the element itself.\n * For instance, if you need to hide a menu when people click anywhere else on your page.\n */\n\n\nfunction ClickAwayListener(props) {\n var children = props.children,\n _props$disableReactTr = props.disableReactTree,\n disableReactTree = _props$disableReactTr === void 0 ? false : _props$disableReactTr,\n _props$mouseEvent = props.mouseEvent,\n mouseEvent = _props$mouseEvent === void 0 ? 'onClick' : _props$mouseEvent,\n onClickAway = props.onClickAway,\n _props$touchEvent = props.touchEvent,\n touchEvent = _props$touchEvent === void 0 ? 'onTouchEnd' : _props$touchEvent;\n var movedRef = React.useRef(false);\n var nodeRef = React.useRef(null);\n var mountedRef = React.useRef(false);\n var syntheticEventRef = React.useRef(false);\n React.useEffect(function () {\n mountedRef.current = true;\n return function () {\n mountedRef.current = false;\n };\n }, []); // can be removed once we drop support for non ref forwarding class components\n\n var handleOwnRef = React.useCallback(function (instance) {\n // #StrictMode ready\n nodeRef.current = ReactDOM.findDOMNode(instance);\n }, []);\n var handleRef = useForkRef(children.ref, handleOwnRef); // The handler doesn't take event.defaultPrevented into account:\n //\n // event.preventDefault() is meant to stop default behaviours like\n // clicking a checkbox to check it, hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default behaviors.\n\n var handleClickAway = useEventCallback(function (event) {\n // Given developers can stop the propagation of the synthetic event,\n // we can only be confident with a positive value.\n var insideReactTree = syntheticEventRef.current;\n syntheticEventRef.current = false; // 1. IE 11 support, which trigger the handleClickAway even after the unbind\n // 2. The child might render null.\n // 3. Behave like a blur listener.\n\n if (!mountedRef.current || !nodeRef.current || clickedRootScrollbar(event)) {\n return;\n } // Do not act if user performed touchmove\n\n\n if (movedRef.current) {\n movedRef.current = false;\n return;\n }\n\n var insideDOM; // If not enough, can use https://github.com/DieterHolvoet/event-propagation-path/blob/master/propagationPath.js\n\n if (event.composedPath) {\n insideDOM = event.composedPath().indexOf(nodeRef.current) > -1;\n } else {\n // TODO v6 remove dead logic https://caniuse.com/#search=composedPath.\n var doc = ownerDocument(nodeRef.current);\n insideDOM = !doc.documentElement.contains(event.target) || nodeRef.current.contains(event.target);\n }\n\n if (!insideDOM && (disableReactTree || !insideReactTree)) {\n onClickAway(event);\n }\n }); // Keep track of mouse/touch events that bubbled up through the portal.\n\n var createHandleSynthetic = function createHandleSynthetic(handlerName) {\n return function (event) {\n syntheticEventRef.current = true;\n var childrenPropsHandler = children.props[handlerName];\n\n if (childrenPropsHandler) {\n childrenPropsHandler(event);\n }\n };\n };\n\n var childrenProps = {\n ref: handleRef\n };\n\n if (touchEvent !== false) {\n childrenProps[touchEvent] = createHandleSynthetic(touchEvent);\n }\n\n React.useEffect(function () {\n if (touchEvent !== false) {\n var mappedTouchEvent = mapEventPropToEvent(touchEvent);\n var doc = ownerDocument(nodeRef.current);\n\n var handleTouchMove = function handleTouchMove() {\n movedRef.current = true;\n };\n\n doc.addEventListener(mappedTouchEvent, handleClickAway);\n doc.addEventListener('touchmove', handleTouchMove);\n return function () {\n doc.removeEventListener(mappedTouchEvent, handleClickAway);\n doc.removeEventListener('touchmove', handleTouchMove);\n };\n }\n\n return undefined;\n }, [handleClickAway, touchEvent]);\n\n if (mouseEvent !== false) {\n childrenProps[mouseEvent] = createHandleSynthetic(mouseEvent);\n }\n\n React.useEffect(function () {\n if (mouseEvent !== false) {\n var mappedMouseEvent = mapEventPropToEvent(mouseEvent);\n var doc = ownerDocument(nodeRef.current);\n doc.addEventListener(mappedMouseEvent, handleClickAway);\n return function () {\n doc.removeEventListener(mappedMouseEvent, handleClickAway);\n };\n }\n\n return undefined;\n }, [handleClickAway, mouseEvent]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.cloneElement(children, childrenProps));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ClickAwayListener.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The wrapped element.\n */\n children: elementAcceptingRef.isRequired,\n\n /**\n * If `true`, the React tree is ignored and only the DOM tree is considered.\n * This prop changes how portaled elements are handled.\n */\n disableReactTree: PropTypes.bool,\n\n /**\n * The mouse event to listen to. You can disable the listener by providing `false`.\n */\n mouseEvent: PropTypes.oneOf(['onClick', 'onMouseDown', 'onMouseUp', false]),\n\n /**\n * Callback fired when a \"click away\" event is detected.\n */\n onClickAway: PropTypes.func.isRequired,\n\n /**\n * The touch event to listen to. You can disable the listener by providing `false`.\n */\n touchEvent: PropTypes.oneOf(['onTouchEnd', 'onTouchStart', false])\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line\n ClickAwayListener['propTypes' + ''] = exactProp(ClickAwayListener.propTypes);\n}\n\nexport default ClickAwayListener;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Paper from '../Paper';\nimport { emphasize } from '../styles/colorManipulator';\nexport var styles = function styles(theme) {\n var emphasis = theme.palette.type === 'light' ? 0.8 : 0.98;\n var backgroundColor = emphasize(theme.palette.background.default, emphasis);\n return {\n /* Styles applied to the root element. */\n root: _extends({}, theme.typography.body2, _defineProperty({\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n padding: '6px 16px',\n borderRadius: theme.shape.borderRadius,\n flexGrow: 1\n }, theme.breakpoints.up('sm'), {\n flexGrow: 'initial',\n minWidth: 288\n })),\n\n /* Styles applied to the message wrapper element. */\n message: {\n padding: '8px 0'\n },\n\n /* Styles applied to the action wrapper element if `action` is provided. */\n action: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: 'auto',\n paddingLeft: 16,\n marginRight: -8\n }\n };\n};\nvar SnackbarContent = /*#__PURE__*/React.forwardRef(function SnackbarContent(props, ref) {\n var action = props.action,\n classes = props.classes,\n className = props.className,\n message = props.message,\n _props$role = props.role,\n role = _props$role === void 0 ? 'alert' : _props$role,\n other = _objectWithoutProperties(props, [\"action\", \"classes\", \"className\", \"message\", \"role\"]);\n\n return /*#__PURE__*/React.createElement(Paper, _extends({\n role: role,\n square: true,\n elevation: 6,\n className: clsx(classes.root, className),\n ref: ref\n }, other), /*#__PURE__*/React.createElement(\"div\", {\n className: classes.message\n }, message), action ? /*#__PURE__*/React.createElement(\"div\", {\n className: classes.action\n }, action) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? SnackbarContent.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The action to display. It renders after the message, at the end of the snackbar.\n */\n action: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The message to display.\n */\n message: PropTypes.node,\n\n /**\n * The ARIA role attribute of the element.\n */\n role: PropTypes.string\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiSnackbarContent'\n})(SnackbarContent);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport { duration } from '../styles/transitions';\nimport ClickAwayListener from '../ClickAwayListener';\nimport useEventCallback from '../utils/useEventCallback';\nimport capitalize from '../utils/capitalize';\nimport createChainedFunction from '../utils/createChainedFunction';\nimport Grow from '../Grow';\nimport SnackbarContent from '../SnackbarContent';\nexport var styles = function styles(theme) {\n var top1 = {\n top: 8\n };\n var bottom1 = {\n bottom: 8\n };\n var right = {\n justifyContent: 'flex-end'\n };\n var left = {\n justifyContent: 'flex-start'\n };\n var top3 = {\n top: 24\n };\n var bottom3 = {\n bottom: 24\n };\n var right3 = {\n right: 24\n };\n var left3 = {\n left: 24\n };\n var center = {\n left: '50%',\n right: 'auto',\n transform: 'translateX(-50%)'\n };\n return {\n /* Styles applied to the root element. */\n root: {\n zIndex: theme.zIndex.snackbar,\n position: 'fixed',\n display: 'flex',\n left: 8,\n right: 8,\n justifyContent: 'center',\n alignItems: 'center'\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'top', 'center' }}`. */\n anchorOriginTopCenter: _extends({}, top1, _defineProperty({}, theme.breakpoints.up('sm'), _extends({}, top3, center))),\n\n /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'center' }}`. */\n anchorOriginBottomCenter: _extends({}, bottom1, _defineProperty({}, theme.breakpoints.up('sm'), _extends({}, bottom3, center))),\n\n /* Styles applied to the root element if `anchorOrigin={{ 'top', 'right' }}`. */\n anchorOriginTopRight: _extends({}, top1, right, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n left: 'auto'\n }, top3, right3))),\n\n /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'right' }}`. */\n anchorOriginBottomRight: _extends({}, bottom1, right, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n left: 'auto'\n }, bottom3, right3))),\n\n /* Styles applied to the root element if `anchorOrigin={{ 'top', 'left' }}`. */\n anchorOriginTopLeft: _extends({}, top1, left, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n right: 'auto'\n }, top3, left3))),\n\n /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'left' }}`. */\n anchorOriginBottomLeft: _extends({}, bottom1, left, _defineProperty({}, theme.breakpoints.up('sm'), _extends({\n right: 'auto'\n }, bottom3, left3)))\n };\n};\nvar Snackbar = /*#__PURE__*/React.forwardRef(function Snackbar(props, ref) {\n var action = props.action,\n _props$anchorOrigin = props.anchorOrigin;\n _props$anchorOrigin = _props$anchorOrigin === void 0 ? {\n vertical: 'bottom',\n horizontal: 'center'\n } : _props$anchorOrigin;\n\n var vertical = _props$anchorOrigin.vertical,\n horizontal = _props$anchorOrigin.horizontal,\n _props$autoHideDurati = props.autoHideDuration,\n autoHideDuration = _props$autoHideDurati === void 0 ? null : _props$autoHideDurati,\n children = props.children,\n classes = props.classes,\n className = props.className,\n ClickAwayListenerProps = props.ClickAwayListenerProps,\n ContentProps = props.ContentProps,\n _props$disableWindowB = props.disableWindowBlurListener,\n disableWindowBlurListener = _props$disableWindowB === void 0 ? false : _props$disableWindowB,\n message = props.message,\n onClose = props.onClose,\n onEnter = props.onEnter,\n onEntered = props.onEntered,\n onEntering = props.onEntering,\n onExit = props.onExit,\n onExited = props.onExited,\n onExiting = props.onExiting,\n onMouseEnter = props.onMouseEnter,\n onMouseLeave = props.onMouseLeave,\n open = props.open,\n resumeHideDuration = props.resumeHideDuration,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? Grow : _props$TransitionComp,\n _props$transitionDura = props.transitionDuration,\n transitionDuration = _props$transitionDura === void 0 ? {\n enter: duration.enteringScreen,\n exit: duration.leavingScreen\n } : _props$transitionDura,\n TransitionProps = props.TransitionProps,\n other = _objectWithoutProperties(props, [\"action\", \"anchorOrigin\", \"autoHideDuration\", \"children\", \"classes\", \"className\", \"ClickAwayListenerProps\", \"ContentProps\", \"disableWindowBlurListener\", \"message\", \"onClose\", \"onEnter\", \"onEntered\", \"onEntering\", \"onExit\", \"onExited\", \"onExiting\", \"onMouseEnter\", \"onMouseLeave\", \"open\", \"resumeHideDuration\", \"TransitionComponent\", \"transitionDuration\", \"TransitionProps\"]);\n\n var timerAutoHide = React.useRef();\n\n var _React$useState = React.useState(true),\n exited = _React$useState[0],\n setExited = _React$useState[1];\n\n var handleClose = useEventCallback(function () {\n if (onClose) {\n onClose.apply(void 0, arguments);\n }\n });\n var setAutoHideTimer = useEventCallback(function (autoHideDurationParam) {\n if (!onClose || autoHideDurationParam == null) {\n return;\n }\n\n clearTimeout(timerAutoHide.current);\n timerAutoHide.current = setTimeout(function () {\n handleClose(null, 'timeout');\n }, autoHideDurationParam);\n });\n React.useEffect(function () {\n if (open) {\n setAutoHideTimer(autoHideDuration);\n }\n\n return function () {\n clearTimeout(timerAutoHide.current);\n };\n }, [open, autoHideDuration, setAutoHideTimer]); // Pause the timer when the user is interacting with the Snackbar\n // or when the user hide the window.\n\n var handlePause = function handlePause() {\n clearTimeout(timerAutoHide.current);\n }; // Restart the timer when the user is no longer interacting with the Snackbar\n // or when the window is shown back.\n\n\n var handleResume = React.useCallback(function () {\n if (autoHideDuration != null) {\n setAutoHideTimer(resumeHideDuration != null ? resumeHideDuration : autoHideDuration * 0.5);\n }\n }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);\n\n var handleMouseEnter = function handleMouseEnter(event) {\n if (onMouseEnter) {\n onMouseEnter(event);\n }\n\n handlePause();\n };\n\n var handleMouseLeave = function handleMouseLeave(event) {\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n\n handleResume();\n };\n\n var handleClickAway = function handleClickAway(event) {\n if (onClose) {\n onClose(event, 'clickaway');\n }\n };\n\n var handleExited = function handleExited() {\n setExited(true);\n };\n\n var handleEnter = function handleEnter() {\n setExited(false);\n };\n\n React.useEffect(function () {\n if (!disableWindowBlurListener && open) {\n window.addEventListener('focus', handleResume);\n window.addEventListener('blur', handlePause);\n return function () {\n window.removeEventListener('focus', handleResume);\n window.removeEventListener('blur', handlePause);\n };\n }\n\n return undefined;\n }, [disableWindowBlurListener, handleResume, open]); // So we only render active snackbars.\n\n if (!open && exited) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(ClickAwayListener, _extends({\n onClickAway: handleClickAway\n }, ClickAwayListenerProps), /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, classes[\"anchorOrigin\".concat(capitalize(vertical)).concat(capitalize(horizontal))], className),\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n ref: ref\n }, other), /*#__PURE__*/React.createElement(TransitionComponent, _extends({\n appear: true,\n in: open,\n onEnter: createChainedFunction(handleEnter, onEnter),\n onEntered: onEntered,\n onEntering: onEntering,\n onExit: onExit,\n onExited: createChainedFunction(handleExited, onExited),\n onExiting: onExiting,\n timeout: transitionDuration,\n direction: vertical === 'top' ? 'down' : 'up'\n }, TransitionProps), children || /*#__PURE__*/React.createElement(SnackbarContent, _extends({\n message: message,\n action: action\n }, ContentProps)))));\n});\nprocess.env.NODE_ENV !== \"production\" ? Snackbar.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The action to display. It renders after the message, at the end of the snackbar.\n */\n action: PropTypes.node,\n\n /**\n * The anchor of the `Snackbar`.\n */\n anchorOrigin: PropTypes.shape({\n horizontal: PropTypes.oneOf(['center', 'left', 'right']).isRequired,\n vertical: PropTypes.oneOf(['bottom', 'top']).isRequired\n }),\n\n /**\n * The number of milliseconds to wait before automatically calling the\n * `onClose` function. `onClose` should then set the state of the `open`\n * prop to hide the Snackbar. This behavior is disabled by default with\n * the `null` value.\n */\n autoHideDuration: PropTypes.number,\n\n /**\n * Replace the `SnackbarContent` component.\n */\n children: PropTypes.element,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * Props applied to the `ClickAwayListener` element.\n */\n ClickAwayListenerProps: PropTypes.object,\n\n /**\n * Props applied to the [`SnackbarContent`](/api/snackbar-content/) element.\n */\n ContentProps: PropTypes.object,\n\n /**\n * If `true`, the `autoHideDuration` timer will expire even if the window is not focused.\n */\n disableWindowBlurListener: PropTypes.bool,\n\n /**\n * When displaying multiple consecutive Snackbars from a parent rendering a single\n * , add the key prop to ensure independent treatment of each message.\n * e.g. , otherwise, the message may update-in-place and\n * features such as autoHideDuration may be canceled.\n */\n key: PropTypes.any,\n\n /**\n * The message to display.\n */\n message: PropTypes.node,\n\n /**\n * Callback fired when the component requests to be closed.\n * Typically `onClose` is used to set state in the parent component,\n * which is used to control the `Snackbar` `open` prop.\n * The `reason` parameter can optionally be used to control the response to `onClose`,\n * for example ignoring `clickaway`.\n *\n * @param {object} event The event source of the callback.\n * @param {string} reason Can be: `\"timeout\"` (`autoHideDuration` expired), `\"clickaway\"`.\n */\n onClose: PropTypes.func,\n\n /**\n * Callback fired before the transition is entering.\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired when the transition has entered.\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired when the transition is entering.\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired before the transition is exiting.\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired when the transition has exited.\n */\n onExited: PropTypes.func,\n\n /**\n * Callback fired when the transition is exiting.\n */\n onExiting: PropTypes.func,\n\n /**\n * @ignore\n */\n onMouseEnter: PropTypes.func,\n\n /**\n * @ignore\n */\n onMouseLeave: PropTypes.func,\n\n /**\n * If `true`, `Snackbar` is open.\n */\n open: PropTypes.bool,\n\n /**\n * The number of milliseconds to wait before dismissing after user interaction.\n * If `autoHideDuration` prop isn't specified, it does nothing.\n * If `autoHideDuration` prop is specified but `resumeHideDuration` isn't,\n * we default to `autoHideDuration / 2` ms.\n */\n resumeHideDuration: PropTypes.number,\n\n /**\n * The component used for the transition.\n * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n */\n TransitionComponent: PropTypes.elementType,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n appear: PropTypes.number,\n enter: PropTypes.number,\n exit: PropTypes.number\n })]),\n\n /**\n * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n */\n TransitionProps: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n flip: false,\n name: 'MuiSnackbar'\n})(Snackbar);","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { useState, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { hideNotification, getNotification, undo, complete, undoableEventEmitter, useTranslate, } from 'ra-core';\nvar useStyles = makeStyles(function (theme) { return ({\n error: {\n backgroundColor: theme.palette.error.dark,\n color: theme.palette.error.contrastText,\n },\n warning: {\n backgroundColor: theme.palette.error.light,\n color: theme.palette.error.contrastText,\n },\n undo: {\n color: theme.palette.primary.light,\n },\n}); }, { name: 'RaNotification' });\nvar Notification = function (props) {\n var classesOverride = props.classes, type = props.type, className = props.className, autoHideDuration = props.autoHideDuration, rest = __rest(props, [\"classes\", \"type\", \"className\", \"autoHideDuration\"]);\n var _a = useState(false), open = _a[0], setOpen = _a[1];\n var notification = useSelector(getNotification);\n var dispatch = useDispatch();\n var translate = useTranslate();\n var styles = useStyles(props);\n useEffect(function () {\n setOpen(!!notification);\n }, [notification]);\n var handleRequestClose = useCallback(function () {\n setOpen(false);\n }, [setOpen]);\n var handleExited = useCallback(function () {\n if (notification && notification.undoable) {\n dispatch(complete());\n undoableEventEmitter.emit('end', { isUndo: false });\n }\n dispatch(hideNotification());\n }, [dispatch, notification]);\n var handleUndo = useCallback(function () {\n dispatch(undo());\n undoableEventEmitter.emit('end', { isUndo: true });\n }, [dispatch]);\n return (React.createElement(Snackbar, __assign({ open: open, message: notification &&\n notification.message &&\n translate(notification.message, notification.messageArgs), autoHideDuration: (notification && notification.autoHideDuration) ||\n autoHideDuration, disableWindowBlurListener: notification && notification.undoable, onExited: handleExited, onClose: handleRequestClose, ContentProps: {\n className: classnames(styles[(notification && notification.type) || type], className),\n }, action: notification && notification.undoable ? (React.createElement(Button, { color: \"primary\", className: styles.undo, size: \"small\", onClick: handleUndo }, translate('ra.action.undo'))) : null }, rest)));\n};\nNotification.propTypes = {\n type: PropTypes.string,\n};\nNotification.defaultProps = {\n type: 'info',\n autoHideDuration: 4000,\n};\nexport default Notification;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport Button from '@material-ui/core/Button';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ErrorIcon from '@material-ui/icons/Report';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport History from '@material-ui/icons/History';\nimport Title, { TitlePropType } from './Title';\nimport { useTranslate } from 'ra-core';\nvar useStyles = makeStyles(function (theme) {\n var _a;\n return ({\n container: (_a = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: '1em',\n },\n _a.fontFamily = 'Roboto, sans-serif',\n _a.opacity = 0.5,\n _a),\n title: {\n display: 'flex',\n alignItems: 'center',\n },\n icon: {\n width: '2em',\n height: '2em',\n marginRight: '0.5em',\n },\n panel: {\n marginTop: '1em',\n },\n panelDetails: {\n whiteSpace: 'pre-wrap',\n },\n toolbar: {\n marginTop: '2em',\n },\n });\n}, { name: 'RaError' });\nfunction goBack() {\n window.history.go(-1);\n}\nvar Error = function (props) {\n var error = props.error, errorInfo = props.errorInfo, classesOverride = props.classes, className = props.className, title = props.title, rest = __rest(props, [\"error\", \"errorInfo\", \"classes\", \"className\", \"title\"]);\n var classes = useStyles(props);\n var translate = useTranslate();\n return (React.createElement(Fragment, null,\n React.createElement(Title, { defaultTitle: title }),\n React.createElement(\"div\", __assign({ className: classnames(classes.container, className) }, rest),\n React.createElement(\"h1\", { className: classes.title, role: \"alert\" },\n React.createElement(ErrorIcon, { className: classes.icon }),\n translate('ra.page.error')),\n React.createElement(\"div\", null, translate('ra.message.error')),\n process.env.NODE_ENV !== 'production' && (React.createElement(ExpansionPanel, { className: classes.panel },\n React.createElement(ExpansionPanelSummary, { expandIcon: React.createElement(ExpandMoreIcon, null) }, translate('ra.message.details')),\n React.createElement(ExpansionPanelDetails, { className: classes.panelDetails },\n React.createElement(\"div\", null,\n React.createElement(\"h2\", null, translate(error.toString())),\n errorInfo.componentStack)))),\n React.createElement(\"div\", { className: classes.toolbar },\n React.createElement(Button, { variant: \"contained\", icon: React.createElement(History, null), onClick: goBack }, translate('ra.action.back'))))));\n};\nError.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n error: PropTypes.object.isRequired,\n errorInfo: PropTypes.object,\n title: TitlePropType,\n};\nexport default Error;\n","export default {\n palette: {\n secondary: {\n light: '#6ec6ff',\n main: '#2196f3',\n dark: '#0069c0',\n contrastText: '#fff',\n },\n },\n typography: {\n title: {\n fontWeight: 400,\n },\n },\n sidebar: {\n width: 240,\n closedWidth: 55,\n },\n overrides: {\n MuiFilledInput: {\n root: {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n '&$disabled': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n },\n },\n },\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { Component, createElement, useEffect, useRef, useState, } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport classnames from 'classnames';\nimport { withRouter } from 'react-router-dom';\nimport { createMuiTheme, withStyles, createStyles, } from '@material-ui/core/styles';\nimport { ThemeProvider } from '@material-ui/styles';\nimport compose from 'recompose/compose';\nimport DefaultAppBar from './AppBar';\nimport DefaultSidebar from './Sidebar';\nimport DefaultMenu from './Menu';\nimport DefaultNotification from './Notification';\nimport DefaultError from './Error';\nimport defaultTheme from '../defaultTheme';\nimport { ComponentPropType } from 'ra-core';\nvar styles = function (theme) {\n var _a, _b;\n return createStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n zIndex: 1,\n minHeight: '100vh',\n backgroundColor: theme.palette.background.default,\n position: 'relative',\n minWidth: 'fit-content',\n width: '100%',\n },\n appFrame: (_a = {\n display: 'flex',\n flexDirection: 'column'\n },\n _a[theme.breakpoints.up('xs')] = {\n marginTop: theme.spacing(6),\n },\n _a[theme.breakpoints.down('xs')] = {\n marginTop: theme.spacing(7),\n },\n _a),\n contentWithSidebar: {\n display: 'flex',\n flexGrow: 1,\n },\n content: (_b = {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n flexBasis: 0,\n padding: theme.spacing(3),\n paddingTop: theme.spacing(1),\n paddingLeft: 0\n },\n _b[theme.breakpoints.up('xs')] = {\n paddingLeft: 5,\n },\n _b[theme.breakpoints.down('sm')] = {\n padding: 0,\n },\n _b),\n });\n};\nvar sanitizeRestProps = function (_a) {\n var staticContext = _a.staticContext, history = _a.history, location = _a.location, match = _a.match, props = __rest(_a, [\"staticContext\", \"history\", \"location\", \"match\"]);\n return props;\n};\nvar Layout = /** @class */ (function (_super) {\n __extends(Layout, _super);\n function Layout(props) {\n var _this = _super.call(this, props) || this;\n _this.state = { hasError: false, errorMessage: null, errorInfo: null };\n /**\n * Reset the error state upon navigation\n *\n * @see https://stackoverflow.com/questions/48121750/browser-navigation-broken-by-use-of-react-error-boundaries\n */\n props.history.listen(function () {\n if (_this.state.hasError) {\n _this.setState({ hasError: false });\n }\n });\n return _this;\n }\n Layout.prototype.componentDidCatch = function (errorMessage, errorInfo) {\n this.setState({ hasError: true, errorMessage: errorMessage, errorInfo: errorInfo });\n };\n Layout.prototype.render = function () {\n var _a = this.props, appBar = _a.appBar, children = _a.children, classes = _a.classes, className = _a.className, customRoutes = _a.customRoutes, error = _a.error, dashboard = _a.dashboard, logout = _a.logout, menu = _a.menu, notification = _a.notification, open = _a.open, sidebar = _a.sidebar, title = _a.title, props = __rest(_a, [\"appBar\", \"children\", \"classes\", \"className\", \"customRoutes\", \"error\", \"dashboard\", \"logout\", \"menu\", \"notification\", \"open\", \"sidebar\", \"title\"]);\n var _b = this.state, hasError = _b.hasError, errorMessage = _b.errorMessage, errorInfo = _b.errorInfo;\n return (React.createElement(\"div\", __assign({ className: classnames('layout', classes.root, className) }, sanitizeRestProps(props)),\n React.createElement(\"div\", { className: classes.appFrame },\n createElement(appBar, { title: title, open: open, logout: logout }),\n React.createElement(\"main\", { className: classes.contentWithSidebar },\n createElement(sidebar, {\n children: createElement(menu, {\n logout: logout,\n hasDashboard: !!dashboard,\n }),\n }),\n React.createElement(\"div\", { className: classes.content }, hasError\n ? createElement(error, {\n error: errorMessage,\n errorInfo: errorInfo,\n title: title,\n })\n : children)),\n createElement(notification))));\n };\n return Layout;\n}(Component));\nLayout.propTypes = {\n appBar: ComponentPropType,\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n classes: PropTypes.object,\n className: PropTypes.string,\n customRoutes: PropTypes.array,\n dashboard: ComponentPropType,\n error: ComponentPropType,\n history: PropTypes.object.isRequired,\n logout: PropTypes.element,\n menu: ComponentPropType,\n notification: ComponentPropType,\n open: PropTypes.bool,\n sidebar: ComponentPropType,\n title: PropTypes.node.isRequired,\n};\nLayout.defaultProps = {\n appBar: DefaultAppBar,\n error: DefaultError,\n menu: DefaultMenu,\n notification: DefaultNotification,\n sidebar: DefaultSidebar,\n};\nvar mapStateToProps = function (state) { return ({\n open: state.admin.ui.sidebarOpen,\n}); };\nvar EnhancedLayout = compose(connect(mapStateToProps, {} // Avoid connect passing dispatch in props\n), withRouter, withStyles(styles, { name: 'RaLayout' }))(Layout);\nvar LayoutWithTheme = function (_a) {\n var themeOverride = _a.theme, props = __rest(_a, [\"theme\"]);\n var themeProp = useRef(themeOverride);\n var _b = useState(createMuiTheme(themeOverride)), theme = _b[0], setTheme = _b[1];\n useEffect(function () {\n if (themeProp.current !== themeOverride) {\n themeProp.current = themeOverride;\n setTheme(createMuiTheme(themeOverride));\n }\n }, [themeOverride, themeProp, theme, setTheme]);\n return (React.createElement(ThemeProvider, { theme: theme },\n React.createElement(EnhancedLayout, __assign({}, props))));\n};\nLayoutWithTheme.propTypes = {\n theme: PropTypes.object,\n};\nLayoutWithTheme.defaultProps = {\n theme: defaultTheme,\n};\nexport default LayoutWithTheme;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport HotTub from '@material-ui/icons/HotTub';\nimport History from '@material-ui/icons/History';\nimport classnames from 'classnames';\nimport { useAuthenticated, useTranslate } from 'ra-core';\nimport Title from './Title';\nvar useStyles = makeStyles(function (theme) {\n var _a;\n return ({\n container: (_a = {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n _a[theme.breakpoints.up('md')] = {\n height: '100%',\n },\n _a[theme.breakpoints.down('sm')] = {\n height: '100vh',\n marginTop: '-3em',\n },\n _a),\n icon: {\n width: '9em',\n height: '9em',\n },\n message: {\n textAlign: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n margin: '0 1em',\n },\n toolbar: {\n textAlign: 'center',\n marginTop: '2em',\n },\n });\n}, { name: 'RaNotFound' });\nfunction goBack() {\n window.history.go(-1);\n}\nvar NotFound = function (props) {\n var className = props.className, classesOverride = props.classes, title = props.title, rest = __rest(props, [\"className\", \"classes\", \"title\"]);\n var classes = useStyles(props);\n var translate = useTranslate();\n useAuthenticated();\n return (React.createElement(\"div\", __assign({ className: classnames(classes.container, className) }, sanitizeRestProps(rest)),\n React.createElement(Title, { defaultTitle: title }),\n React.createElement(\"div\", { className: classes.message },\n React.createElement(HotTub, { className: classes.icon }),\n React.createElement(\"h1\", null, translate('ra.page.not_found')),\n React.createElement(\"div\", null,\n translate('ra.message.not_found'),\n \".\")),\n React.createElement(\"div\", { className: classes.toolbar },\n React.createElement(Button, { variant: \"contained\", icon: React.createElement(History, null), onClick: goBack }, translate('ra.action.back')))));\n};\nvar sanitizeRestProps = function (_a) {\n var staticContext = _a.staticContext, history = _a.history, location = _a.location, match = _a.match, rest = __rest(_a, [\"staticContext\", \"history\", \"location\", \"match\"]);\n return rest;\n};\nNotFound.propTypes = {\n className: PropTypes.string,\n classes: PropTypes.object,\n title: PropTypes.string,\n location: PropTypes.object,\n};\nexport default NotFound;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useTranslate } from 'ra-core';\nvar useStyles = makeStyles(function (theme) {\n var _a;\n return ({\n container: (_a = {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n _a[theme.breakpoints.up('md')] = {\n height: '100%',\n },\n _a[theme.breakpoints.down('lg')] = {\n height: '100vh',\n marginTop: '-3em',\n },\n _a),\n icon: {\n width: '9em',\n height: '9em',\n },\n message: {\n textAlign: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n margin: '0 1em',\n },\n });\n}, { name: 'RaLoading' });\nvar Loading = function (props) {\n var className = props.className, _a = props.loadingPrimary, loadingPrimary = _a === void 0 ? 'ra.page.loading' : _a, _b = props.loadingSecondary, loadingSecondary = _b === void 0 ? 'ra.message.loading' : _b;\n var classes = useStyles(props);\n var translate = useTranslate();\n return (React.createElement(\"div\", { className: classnames(classes.container, className) },\n React.createElement(\"div\", { className: classes.message },\n React.createElement(CircularProgress, { className: classes.icon, color: \"primary\" }),\n React.createElement(\"h1\", null, translate(loadingPrimary)),\n React.createElement(\"div\", null,\n translate(loadingSecondary),\n \".\"))));\n};\nLoading.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n loadingPrimary: PropTypes.string,\n loadingSecondary: PropTypes.string,\n};\nLoading.defaultProps = {\n loadingPrimary: 'ra.page.loading',\n loadingSecondary: 'ra.message.loading',\n};\nexport default Loading;\n","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}), 'Person');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport Person from '../internal/svg-icons/Person';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: 40,\n height: 40,\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(20),\n lineHeight: 1,\n borderRadius: '50%',\n overflow: 'hidden',\n userSelect: 'none'\n },\n\n /* Styles applied to the root element if not `src` or `srcSet`. */\n colorDefault: {\n color: theme.palette.background.default,\n backgroundColor: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]\n },\n\n /* Styles applied to the root element if `variant=\"circle\"`. */\n circle: {},\n\n /* Styles applied to the root element if `variant=\"rounded\"`. */\n rounded: {\n borderRadius: theme.shape.borderRadius\n },\n\n /* Styles applied to the root element if `variant=\"square\"`. */\n square: {\n borderRadius: 0\n },\n\n /* Styles applied to the img element if either `src` or `srcSet` is defined. */\n img: {\n width: '100%',\n height: '100%',\n textAlign: 'center',\n // Handle non-square image. The property isn't supported by IE 11.\n objectFit: 'cover',\n // Hide alt text.\n color: 'transparent',\n // Hide the image broken icon, only works on Chrome.\n textIndent: 10000\n },\n\n /* Styles applied to the fallback icon */\n fallback: {\n width: '75%',\n height: '75%'\n }\n };\n};\n\nfunction useLoaded(_ref) {\n var src = _ref.src,\n srcSet = _ref.srcSet;\n\n var _React$useState = React.useState(false),\n loaded = _React$useState[0],\n setLoaded = _React$useState[1];\n\n React.useEffect(function () {\n if (!src && !srcSet) {\n return undefined;\n }\n\n setLoaded(false);\n var active = true;\n var image = new Image();\n image.src = src;\n image.srcSet = srcSet;\n\n image.onload = function () {\n if (!active) {\n return;\n }\n\n setLoaded('loaded');\n };\n\n image.onerror = function () {\n if (!active) {\n return;\n }\n\n setLoaded('error');\n };\n\n return function () {\n active = false;\n };\n }, [src, srcSet]);\n return loaded;\n}\n\nvar Avatar = /*#__PURE__*/React.forwardRef(function Avatar(props, ref) {\n var alt = props.alt,\n childrenProp = props.children,\n classes = props.classes,\n className = props.className,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n imgProps = props.imgProps,\n sizes = props.sizes,\n src = props.src,\n srcSet = props.srcSet,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'circle' : _props$variant,\n other = _objectWithoutProperties(props, [\"alt\", \"children\", \"classes\", \"className\", \"component\", \"imgProps\", \"sizes\", \"src\", \"srcSet\", \"variant\"]);\n\n var children = null; // Use a hook instead of onError on the img element to support server-side rendering.\n\n var loaded = useLoaded({\n src: src,\n srcSet: srcSet\n });\n var hasImg = src || srcSet;\n var hasImgNotFailing = hasImg && loaded !== 'error';\n\n if (hasImgNotFailing) {\n children = /*#__PURE__*/React.createElement(\"img\", _extends({\n alt: alt,\n src: src,\n srcSet: srcSet,\n sizes: sizes,\n className: classes.img\n }, imgProps));\n } else if (childrenProp != null) {\n children = childrenProp;\n } else if (hasImg && alt) {\n children = alt[0];\n } else {\n children = /*#__PURE__*/React.createElement(Person, {\n className: classes.fallback\n });\n }\n\n return /*#__PURE__*/React.createElement(Component, _extends({\n className: clsx(classes.root, classes.system, classes[variant], className, !hasImgNotFailing && classes.colorDefault),\n ref: ref\n }, other), children);\n});\nprocess.env.NODE_ENV !== \"production\" ? Avatar.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Used in combination with `src` or `srcSet` to\n * provide an alt attribute for the rendered `img` element.\n */\n alt: PropTypes.string,\n\n /**\n * Used to render icon or text elements inside the Avatar if `src` is not set.\n * This can be an element, or just a string.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * Attributes applied to the `img` element if the component is used to display an image.\n * It can be used to listen for the loading error event.\n */\n imgProps: PropTypes.object,\n\n /**\n * The `sizes` attribute for the `img` element.\n */\n sizes: PropTypes.string,\n\n /**\n * The `src` attribute for the `img` element.\n */\n src: PropTypes.string,\n\n /**\n * The `srcSet` attribute for the `img` element.\n * Use this attribute for responsive image display.\n */\n srcSet: PropTypes.string,\n\n /**\n * The shape of the avatar.\n */\n variant: PropTypes.oneOf(['circle', 'rounded', 'square'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiAvatar'\n})(Avatar);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n alignItems: 'center',\n padding: 8\n },\n\n /* Styles applied to the root element if `disableSpacing={false}`. */\n spacing: {\n '& > :not(:first-child)': {\n marginLeft: 8\n }\n }\n};\nvar CardActions = /*#__PURE__*/React.forwardRef(function CardActions(props, ref) {\n var _props$disableSpacing = props.disableSpacing,\n disableSpacing = _props$disableSpacing === void 0 ? false : _props$disableSpacing,\n classes = props.classes,\n className = props.className,\n other = _objectWithoutProperties(props, [\"disableSpacing\", \"classes\", \"className\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: clsx(classes.root, className, !disableSpacing && classes.spacing),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? CardActions.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the actions do not have additional margin.\n */\n disableSpacing: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiCardActions'\n})(CardActions);","import { useCallback } from 'react';\nimport useAuthProvider, { defaultAuthParams } from './useAuthProvider';\nimport { useLocation, useHistory } from 'react-router-dom';\n/**\n * Get a callback for calling the authProvider.login() method\n * and redirect to the previous authenticated page (or the home page) on success.\n *\n * @see useAuthProvider\n *\n * @returns {Function} login callback\n *\n * @example\n *\n * import { useLogin } from 'react-admin';\n *\n * const LoginButton = () => {\n * const [loading, setLoading] = useState(false);\n * const login = useLogin();\n * const handleClick = {\n * setLoading(true);\n * login({ username: 'john', password: 'p@ssw0rd' }, '/posts')\n * .then(() => setLoading(false));\n * }\n * return ;\n * }\n */\nvar useLogin = function () {\n var authProvider = useAuthProvider();\n var location = useLocation();\n var locationState = location.state;\n var history = useHistory();\n var nextPathName = locationState && locationState.nextPathname;\n var login = useCallback(function (params, pathName) {\n if (params === void 0) { params = {}; }\n if (pathName === void 0) { pathName = defaultAuthParams.afterLoginUrl; }\n return authProvider.login(params).then(function (ret) {\n history.push(nextPathName || pathName);\n return ret;\n });\n }, [authProvider, history, nextPathName]);\n var loginWithoutProvider = useCallback(function (_, __) {\n history.push(defaultAuthParams.afterLoginUrl);\n return Promise.resolve();\n }, [history]);\n return authProvider ? login : loginWithoutProvider;\n};\nexport default useLogin;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field, Form } from 'react-final-form';\nimport CardActions from '@material-ui/core/CardActions';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, useLogin, useNotify, useSafeSetState } from 'ra-core';\nvar useStyles = makeStyles(function (theme) { return ({\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n button: {\n width: '100%',\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n}); }, { name: 'RaLoginForm' });\nvar Input = function (_a) {\n var _b = _a.meta, touched = _b.touched, error = _b.error, // eslint-disable-line react/prop-types\n inputProps = _a.input, // eslint-disable-line react/prop-types\n props = __rest(_a, [\"meta\", \"input\"]);\n return (React.createElement(TextField, __assign({ error: !!(touched && error), helperText: touched && error }, inputProps, props, { fullWidth: true })));\n};\nvar LoginForm = function (props) {\n var redirectTo = props.redirectTo;\n var _a = useSafeSetState(false), loading = _a[0], setLoading = _a[1];\n var login = useLogin();\n var translate = useTranslate();\n var notify = useNotify();\n var classes = useStyles(props);\n var validate = function (values) {\n var errors = { username: undefined, password: undefined };\n if (!values.username) {\n errors.username = translate('ra.validation.required');\n }\n if (!values.password) {\n errors.password = translate('ra.validation.required');\n }\n return errors;\n };\n var submit = function (values) {\n setLoading(true);\n login(values, redirectTo)\n .then(function () {\n setLoading(false);\n })\n .catch(function (error) {\n setLoading(false);\n notify(typeof error === 'string'\n ? error\n : typeof error === 'undefined' || !error.message\n ? 'ra.auth.sign_in_error'\n : error.message, 'warning');\n });\n };\n return (React.createElement(Form, { onSubmit: submit, validate: validate, render: function (_a) {\n var handleSubmit = _a.handleSubmit;\n return (React.createElement(\"form\", { onSubmit: handleSubmit, noValidate: true },\n React.createElement(\"div\", { className: classes.form },\n React.createElement(\"div\", { className: classes.input },\n React.createElement(Field, { autoFocus: true, id: \"username\", name: \"username\", component: Input, label: translate('ra.auth.username'), disabled: loading })),\n React.createElement(\"div\", { className: classes.input },\n React.createElement(Field, { id: \"password\", name: \"password\", component: Input, label: translate('ra.auth.password'), type: \"password\", disabled: loading, autoComplete: \"current-password\" }))),\n React.createElement(CardActions, null,\n React.createElement(Button, { variant: \"contained\", type: \"submit\", color: \"primary\", disabled: loading, className: classes.button },\n loading && (React.createElement(CircularProgress, { className: classes.icon, size: 18, thickness: 2 })),\n translate('ra.auth.sign_in')))));\n } }));\n};\nLoginForm.propTypes = {\n redirectTo: PropTypes.string,\n};\nexport default LoginForm;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React, { useRef, useEffect, useMemo, } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Card, Avatar, createMuiTheme, makeStyles, } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/styles';\nimport LockIcon from '@material-ui/icons/Lock';\nimport { useHistory } from 'react-router-dom';\nimport { useCheckAuth } from 'ra-core';\nimport defaultTheme from '../defaultTheme';\nimport Notification from '../layout/Notification';\nimport DefaultLoginForm from './LoginForm';\nvar useStyles = makeStyles(function (theme) { return ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n height: '1px',\n alignItems: 'center',\n justifyContent: 'flex-start',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundImage: 'radial-gradient(circle at 50% 14em, #313264 0%, #00023b 60%, #00023b 100%)',\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n icon: {\n backgroundColor: theme.palette.secondary[500],\n },\n}); }, { name: 'RaLogin' });\n/**\n * A standalone login page, to serve as authentication gate to the admin\n *\n * Expects the user to enter a login and a password, which will be checked\n * by the `authProvider.login()` method. Redirects to the root page (/)\n * upon success, otherwise displays an authentication error message.\n *\n * Copy and adapt this component to implement your own login logic\n * (e.g. to authenticate via email or facebook or anything else).\n *\n * @example\n * import MyLoginPage from './MyLoginPage';\n * const App = () => (\n * \n * ...\n * \n * );\n */\nvar Login = function (props) {\n var theme = props.theme, classesOverride = props.classes, className = props.className, children = props.children, staticContext = props.staticContext, backgroundImage = props.backgroundImage, rest = __rest(props, [\"theme\", \"classes\", \"className\", \"children\", \"staticContext\", \"backgroundImage\"]);\n var containerRef = useRef();\n var classes = useStyles(props);\n var muiTheme = useMemo(function () { return createMuiTheme(theme); }, [theme]);\n var backgroundImageLoaded = false;\n var checkAuth = useCheckAuth();\n var history = useHistory();\n useEffect(function () {\n checkAuth({}, false)\n .then(function () {\n // already authenticated, redirect to the home page\n history.push('/');\n })\n .catch(function () {\n // not authenticated, stay on the login page\n });\n }, [checkAuth, history]);\n var updateBackgroundImage = function () {\n if (!backgroundImageLoaded && containerRef.current) {\n containerRef.current.style.backgroundImage = \"url(\" + backgroundImage + \")\";\n backgroundImageLoaded = true;\n }\n };\n // Load background image asynchronously to speed up time to interactive\n var lazyLoadBackgroundImage = function () {\n if (backgroundImage) {\n var img = new Image();\n img.onload = updateBackgroundImage;\n img.src = backgroundImage;\n }\n };\n useEffect(function () {\n if (!backgroundImageLoaded) {\n lazyLoadBackgroundImage();\n }\n });\n return (React.createElement(ThemeProvider, { theme: muiTheme },\n React.createElement(\"div\", __assign({ className: classnames(classes.main, className) }, rest, { ref: containerRef }),\n React.createElement(Card, { className: classes.card },\n React.createElement(\"div\", { className: classes.avatar },\n React.createElement(Avatar, { className: classes.icon },\n React.createElement(LockIcon, null))),\n children),\n React.createElement(Notification, null))));\n};\nLogin.propTypes = {\n backgroundImage: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n theme: PropTypes.object,\n staticContext: PropTypes.object,\n};\nLogin.defaultProps = {\n theme: defaultTheme,\n children: React.createElement(DefaultLoginForm, null),\n};\nexport default Login;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { ListItemIcon, MenuItem, makeStyles } from '@material-ui/core';\nimport ExitIcon from '@material-ui/icons/PowerSettingsNew';\nimport classnames from 'classnames';\nimport { useTranslate, useLogout } from 'ra-core';\nvar useStyles = makeStyles(function (theme) { return ({\n menuItem: {\n color: theme.palette.text.secondary,\n },\n icon: { minWidth: theme.spacing(5) },\n}); }, { name: 'RaLogout' });\n/**\n * Logout button component, to be passed to the Admin component\n *\n * Used for the Logout Menu item in the sidebar\n */\nvar LogoutWithRef = React.forwardRef(function Logout(props, ref) {\n var className = props.className, classesOverride = props.classes, redirectTo = props.redirectTo, icon = props.icon, rest = __rest(props, [\"className\", \"classes\", \"redirectTo\", \"icon\"]);\n var classes = useStyles(props);\n var translate = useTranslate();\n var logout = useLogout();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n var handleClick = useCallback(function () { return logout(redirectTo); }, [\n redirectTo,\n logout,\n ]);\n return (React.createElement(MenuItem, __assign({ className: classnames('logout', classes.menuItem, className), onClick: handleClick, ref: ref }, rest),\n React.createElement(ListItemIcon, { className: classes.icon }, icon ? icon : React.createElement(ExitIcon, null)),\n translate('ra.auth.logout')));\n});\nLogoutWithRef.propTypes = {\n className: PropTypes.string,\n redirectTo: PropTypes.string,\n icon: PropTypes.element,\n};\nexport default LogoutWithRef;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nimport { CoreAdminUI } from 'ra-core';\nimport { Layout as DefaultLayout, Loading, Login, Logout, NotFound, } from 'ra-ui-materialui';\nvar AdminUI = function (props) { return React.createElement(CoreAdminUI, __assign({}, props)); };\nAdminUI.defaultProps = {\n layout: DefaultLayout,\n catchAll: NotFound,\n loading: Loading,\n loginPage: Login,\n logout: Logout,\n};\nexport default AdminUI;\n","import * as React from 'react';\nimport AdminContext from './AdminContext';\nimport AdminUI from './AdminUI';\n/**\n * Main admin component, entry point to the application.\n *\n * Initializes the various contexts (auth, data, i18n, redux, router)\n * and defines the main routes.\n *\n * Expects a list of resources as children, or a function returning a list of\n * resources based on the permissions.\n *\n * @example\n *\n * // static list of resources\n *\n * import {\n * Admin,\n * Resource,\n * ListGuesser,\n * useDataProvider,\n * } from 'react-admin';\n *\n * const App = () => (\n * \n * \n * \n * );\n *\n * // dynamic list of resources based on permissions\n *\n * import {\n * Admin,\n * Resource,\n * ListGuesser,\n * useDataProvider,\n * } from 'react-admin';\n *\n * const App = () => (\n * \n * {permissions => [\n * ,\n * ]}\n * \n * );\n *\n * // If you have to build a dynamic list of resources using a side effect,\n * // you can't use . But as it delegates to sub components,\n * // it's relatively straightforward to replace it:\n *\n * import * as React from 'react';\nimport { useEffect, useState } from 'react';\n * import {\n * AdminContext,\n * AdminUI,\n * Resource,\n * ListGuesser,\n * useDataProvider,\n * } from 'react-admin';\n *\n * const App = () => (\n * \n * \n * \n * );\n *\n * const Resources = () => {\n * const [resources, setResources] = useState([]);\n * const dataProvider = useDataProvider();\n * useEffect(() => {\n * dataProvider.introspect().then(r => setResources(r));\n * }, []);\n *\n * return (\n * \n * {resources.map(resource => (\n * \n * ))}\n * \n * );\n * };\n */\nvar Admin = function (_a) {\n var appLayout = _a.appLayout, authProvider = _a.authProvider, catchAll = _a.catchAll, children = _a.children, customReducers = _a.customReducers, _b = _a.customRoutes, customRoutes = _b === void 0 ? [] : _b, customSagas = _a.customSagas, dashboard = _a.dashboard, dataProvider = _a.dataProvider, history = _a.history, i18nProvider = _a.i18nProvider, initialState = _a.initialState, layout = _a.layout, loading = _a.loading, locale = _a.locale, loginPage = _a.loginPage, logoutButton = _a.logoutButton, menu = _a.menu, // deprecated, use a custom layout instead\n theme = _a.theme, _c = _a.title, title = _c === void 0 ? 'React Admin' : _c;\n if (appLayout && process.env.NODE_ENV !== 'production') {\n console.warn('You are using deprecated prop \"appLayout\", it was replaced by \"layout\", see https://github.com/marmelab/react-admin/issues/2918');\n }\n if (loginPage === true && process.env.NODE_ENV !== 'production') {\n console.warn('You passed true to the loginPage prop. You must either pass false to disable it or a component class to customize it');\n }\n if (locale && process.env.NODE_ENV !== 'production') {\n console.warn('You are using deprecated prop \"locale\". You must now pass the initial locale to your i18nProvider');\n }\n return (React.createElement(AdminContext, { authProvider: authProvider, dataProvider: dataProvider, i18nProvider: i18nProvider, history: history, customReducers: customReducers, customSagas: customSagas, initialState: initialState },\n React.createElement(AdminUI, { layout: appLayout || layout, customRoutes: customRoutes, dashboard: dashboard, menu: menu, catchAll: catchAll, theme: theme, title: title, loading: loading, loginPage: loginPage, logout: authProvider ? logoutButton : undefined }, children)));\n};\nexport default Admin;\n","import jsonExport from 'jsonexport/dist';\nimport downloadCSV from './downloadCSV';\nvar defaultExporter = function (data, _, __, resource) {\n return jsonExport(data, function (err, csv) { return downloadCSV(csv, resource); });\n};\nexport default defaultExporter;\n","export default (function (csv, filename) {\n var fakeLink = document.createElement('a');\n fakeLink.style.display = 'none';\n document.body.appendChild(fakeLink);\n var blob = new Blob([csv], { type: 'text/csv' });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n // Manage IE11+ & Edge\n window.navigator.msSaveOrOpenBlob(blob, filename + \".csv\");\n }\n else {\n fakeLink.setAttribute('href', URL.createObjectURL(blob));\n fakeLink.setAttribute('download', filename + \".csv\");\n fakeLink.click();\n }\n});\n","import { createContext } from 'react';\nimport defaultExporter from './defaultExporter';\nvar ExporterContext = createContext(defaultExporter);\nExporterContext.displayName = 'ExporterContext';\nexport default ExporterContext;\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport { makeStyles } from '@material-ui/core/styles';\nvar useStyles = makeStyles(function (theme) {\n var _a, _b;\n return ({\n toolbar: (_a = {\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n paddingRight: 0\n },\n _a[theme.breakpoints.up('xs')] = {\n paddingLeft: 0,\n },\n _a[theme.breakpoints.down('xs')] = {\n paddingLeft: theme.spacing(2),\n backgroundColor: theme.palette.background.paper,\n },\n _a),\n actions: (_b = {\n paddingTop: theme.spacing(3),\n minHeight: theme.spacing(5)\n },\n _b[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n },\n _b),\n });\n}, { name: 'RaListToolbar' });\nvar ListToolbar = function (props) {\n var classesOverride = props.classes, filters = props.filters, filterValues = props.filterValues, // dynamically set via the UI by the user\n permanentFilter = props.permanentFilter, // set in the List component by the developer\n actions = props.actions, exporter = props.exporter, rest = __rest(props, [\"classes\", \"filters\", \"filterValues\", \"permanentFilter\", \"actions\", \"exporter\"]);\n var classes = useStyles(props);\n return (React.createElement(Toolbar, { className: classes.toolbar },\n filters &&\n React.cloneElement(filters, __assign(__assign({}, rest), { filterValues: filterValues, context: 'form' })),\n React.createElement(\"span\", null),\n actions &&\n React.cloneElement(actions, __assign(__assign(__assign({}, rest), { className: classes.actions, exporter: exporter,\n filters: filters,\n filterValues: filterValues,\n permanentFilter: permanentFilter }), actions.props))));\n};\nListToolbar.propTypes = {\n classes: PropTypes.object,\n filters: PropTypes.element,\n permanentFilter: PropTypes.object,\n actions: PropTypes.element,\n exporter: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n};\nexport default React.memo(ListToolbar);\n","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"\n}), 'KeyboardArrowLeft');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"\n}), 'KeyboardArrowRight');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';\nimport KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';\nimport useTheme from '../styles/useTheme';\nimport IconButton from '../IconButton';\n/**\n * @ignore - internal component.\n */\n\nvar _ref = /*#__PURE__*/React.createElement(KeyboardArrowRight, null);\n\nvar _ref2 = /*#__PURE__*/React.createElement(KeyboardArrowLeft, null);\n\nvar _ref3 = /*#__PURE__*/React.createElement(KeyboardArrowLeft, null);\n\nvar _ref4 = /*#__PURE__*/React.createElement(KeyboardArrowRight, null);\n\nvar TablePaginationActions = /*#__PURE__*/React.forwardRef(function TablePaginationActions(props, ref) {\n var backIconButtonProps = props.backIconButtonProps,\n count = props.count,\n nextIconButtonProps = props.nextIconButtonProps,\n onChangePage = props.onChangePage,\n page = props.page,\n rowsPerPage = props.rowsPerPage,\n other = _objectWithoutProperties(props, [\"backIconButtonProps\", \"count\", \"nextIconButtonProps\", \"onChangePage\", \"page\", \"rowsPerPage\"]);\n\n var theme = useTheme();\n\n var handleBackButtonClick = function handleBackButtonClick(event) {\n onChangePage(event, page - 1);\n };\n\n var handleNextButtonClick = function handleNextButtonClick(event) {\n onChangePage(event, page + 1);\n };\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: ref\n }, other), /*#__PURE__*/React.createElement(IconButton, _extends({\n onClick: handleBackButtonClick,\n disabled: page === 0,\n color: \"inherit\"\n }, backIconButtonProps), theme.direction === 'rtl' ? _ref : _ref2), /*#__PURE__*/React.createElement(IconButton, _extends({\n onClick: handleNextButtonClick,\n disabled: count !== -1 ? page >= Math.ceil(count / rowsPerPage) - 1 : false,\n color: \"inherit\"\n }, nextIconButtonProps), theme.direction === 'rtl' ? _ref3 : _ref4));\n});\nprocess.env.NODE_ENV !== \"production\" ? TablePaginationActions.propTypes = {\n /**\n * Props applied to the back arrow [`IconButton`](/api/icon-button/) element.\n */\n backIconButtonProps: PropTypes.object,\n\n /**\n * The total number of rows.\n */\n count: PropTypes.number.isRequired,\n\n /**\n * Props applied to the next arrow [`IconButton`](/api/icon-button/) element.\n */\n nextIconButtonProps: PropTypes.object,\n\n /**\n * Callback fired when the page is changed.\n *\n * @param {object} event The event source of the callback.\n * @param {number} page The page selected.\n */\n onChangePage: PropTypes.func.isRequired,\n\n /**\n * The zero-based index of the current page.\n */\n page: PropTypes.number.isRequired,\n\n /**\n * The number of rows per page.\n */\n rowsPerPage: PropTypes.number.isRequired\n} : void 0;\nexport default TablePaginationActions;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { chainPropTypes } from '@material-ui/utils';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport InputBase from '../InputBase';\nimport MenuItem from '../MenuItem';\nimport Select from '../Select';\nimport TableCell from '../TableCell';\nimport Toolbar from '../Toolbar';\nimport Typography from '../Typography';\nimport TablePaginationActions from './TablePaginationActions';\nimport useId from '../utils/unstable_useId';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n color: theme.palette.text.primary,\n fontSize: theme.typography.pxToRem(14),\n overflow: 'auto',\n // Increase the specificity to override TableCell.\n '&:last-child': {\n padding: 0\n }\n },\n\n /* Styles applied to the Toolbar component. */\n toolbar: {\n minHeight: 52,\n paddingRight: 2\n },\n\n /* Styles applied to the spacer element. */\n spacer: {\n flex: '1 1 100%'\n },\n\n /* Styles applied to the caption Typography components if `variant=\"caption\"`. */\n caption: {\n flexShrink: 0\n },\n // TODO v5: `.selectRoot` should be merged with `.input`\n\n /* Styles applied to the Select component root element. */\n selectRoot: {\n marginRight: 32,\n marginLeft: 8\n },\n\n /* Styles applied to the Select component `select` class. */\n select: {\n paddingLeft: 8,\n paddingRight: 24,\n textAlign: 'right',\n textAlignLast: 'right' // Align |