@oc-digital/react-component-library 3.5.1-beta.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/globals/index.ts","../src/styles/spacing.ts","../src/styles/font.ts","../src/styles/layout.ts","../src/Button/Button.tsx","../src/ContentLabel/ContentLabel.tsx","../src/ContentBox/ContentBox.tsx","../src/LoadingSpinner/LoadingSpinner.tsx","../src/StaticTable/StaticTable.tsx","../src/Breadcrumbs/Breadcrumbs.tsx","../src/EntityList/EntityList.tsx","../src/ErrorIndicator/ErrorIndicator.tsx","../src/LeftNavigation/NavListItem.tsx","../src/utils/index.ts","../src/LeftNavigation/SecondaryLeftNavigation.tsx","../src/LeftNavigation/PrimaryLeftNavigation.tsx","../src/LeftNavigation/LeftNavigation.tsx","../src/MainLayout/MainLayout.tsx","../src/hooks/useDebounceEffect.tsx","../src/hooks/useInterval.ts","../src/hooks/useWhyDidYouUpdate.tsx","../src/Tooltip/OptionalTooltip.tsx","../src/AlphabeticalList/AlphabeticalList.tsx","../src/SearchBar/SearchBar.tsx","../src/TextField/TextField.tsx","../src/Select/Select.tsx","../src/DatePicker/DatePicker.tsx","../src/KeyboardDatePicker/KeyboardDatePicker.tsx","../src/ButtonWithConfirm/ButtonWithConfirm.tsx","../src/EditableTable/defaultCells.tsx","../src/EditableTable/EditableTable.tsx","../src/Alert/Alert.tsx","../src/ImageDisplayAndUpload/ImageDisplayAndUpload.tsx","../src/NavbarLayout/Navbar.tsx","../src/NavbarLayout/NavbarLayout.tsx","../src/MobileDatePicker/MobileDatePicker.tsx","../src/AutoSave/Text/index.tsx","../src/AutoSave/Select/index.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { string } from \"yup\";\n\nexport const HALF_REM = \"0.5rem\";\nexport const ONE_REM = \"1rem\";\nexport const ONE_AND_HALF_REM = \"1.5rem\";\nexport const TWO_REM = \"3rem\";\nexport const THREE_REM = \"3rem\";\n\nexport const EDITED_STATUS = \"EDITED\";\nexport const NEW_STATUS = \"NEW\";\n\nexport const VALIDATION_MESSAGE_REQUIRED = \"Required\";\nexport const REGEX_NUMBER_WITH_DECIMALS = /^\\d*\\.?\\d*$/;\n\nexport const YUP_REQUIRED_STRING_SHORT_MESSAGE = string()\n .trim()\n .required(VALIDATION_MESSAGE_REQUIRED);\n\nexport const YUP_STRING_NUMBER_WITH_DECIMALS = string()\n .trim()\n .required(VALIDATION_MESSAGE_REQUIRED)\n .matches(REGEX_NUMBER_WITH_DECIMALS, \"Must be a Number\");\n\nexport const FORM_SUCCESS = \"success\";\nexport const FORM_ERROR = \"error\";\nexport const FORM_LOADING = \"loading\";\nexport const FORM_ENABLED = \"enabled\";\nexport const FORM_WARNING = \"warning\";\nexport const FORM_DELETING = \"deleting\";\n\nexport type FormStatuses =\n | typeof FORM_SUCCESS\n | typeof FORM_ERROR\n | typeof FORM_LOADING\n | typeof FORM_ENABLED\n | typeof FORM_WARNING\n | typeof FORM_DELETING;\n\nexport const READ_LEVEL = \"read\";\nexport const WRITE_LEVEL = \"write\";\nexport const NO_ACCESS_LEVEL = \"noAccess\";\n\nexport type AccessLevels =\n | typeof READ_LEVEL\n | typeof WRITE_LEVEL\n | typeof NO_ACCESS_LEVEL;\n\nexport interface IAuthoriserProp {\n accessLevel?: AccessLevels;\n}\n\nexport const BORDER_RADIUS = \"14px\";\n","import makeStyles from \"@mui/styles/makeStyles\";\nimport { HALF_REM, ONE_AND_HALF_REM, THREE_REM, ONE_REM } from \"../globals\";\n\nexport const useSpacingStyles = makeStyles(\n {\n labelBreak: {\n marginBottom: HALF_REM,\n },\n contentBreak: {\n marginBottom: ONE_REM,\n },\n sectionBreak: {\n marginBottom: ONE_AND_HALF_REM,\n },\n doubleSectionBreak: {\n marginBottom: THREE_REM,\n },\n rightSpacer1: {\n marginRight: HALF_REM,\n },\n rightSpacer2: {\n marginRight: ONE_REM,\n },\n leftSpacer1: {\n marginLeft: HALF_REM,\n },\n leftSpacer2: {\n marginLeft: ONE_REM,\n },\n buttonSpacing: {\n marginLeft: HALF_REM,\n marginRight: HALF_REM,\n marginBottom: ONE_REM,\n },\n leftRightPadding1: {\n paddingLeft: HALF_REM,\n paddingRight: HALF_REM,\n },\n leftRightPadding2: {\n paddingLeft: ONE_REM,\n paddingRight: ONE_REM,\n },\n topBottomPadding1: {\n paddingTop: HALF_REM,\n paddingBottom: HALF_REM,\n },\n topBottomPadding2: {\n paddingTop: ONE_REM,\n paddingBottom: ONE_REM,\n },\n },\n { classNamePrefix: \"spacing\", index: 2 }\n);\n","import makeStyles from \"@mui/styles/makeStyles\";\n\nexport const useFontStyles = makeStyles(\n (theme) => ({\n boldText: {\n fontWeight: 700,\n },\n bolderText: {\n fontWeight: 500,\n },\n smallText: {\n fontSize: \"0.7rem\",\n },\n warningColor: {\n color: theme.palette.warning.main,\n },\n centerText: {\n textAlign: \"center\",\n },\n }),\n { classNamePrefix: \"font\" }\n);\n","import makeStyles from \"@mui/styles/makeStyles\";\nimport { BORDER_RADIUS, ONE_REM, THREE_REM } from \"../globals\";\n\nexport const useLayoutStyles = makeStyles(\n {\n contentBox: {\n background: \"white\",\n borderRadius: BORDER_RADIUS,\n marginBottom: ONE_REM,\n padding: THREE_REM,\n },\n limitWidth60rem: {\n maxWidth: \"60rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth50rem: {\n maxWidth: \"50rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth45rem: {\n maxWidth: \"45rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth40rem: {\n maxWidth: \"40rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth35rem: {\n maxWidth: \"35rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth30rem: {\n maxWidth: \"30rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth25rem: {\n maxWidth: \"25rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n centeredText: {\n textAlign: \"center\",\n },\n startAlignedText: {\n textAlign: \"start\",\n },\n width20: {\n width: \"20%\",\n },\n width49: {\n width: \"49%\",\n },\n width50: {\n width: \"50%\",\n },\n width60: {\n width: \"60%\",\n },\n width100: {\n width: \"100%\",\n },\n flexCenter: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n centerJustify: {\n justifyContent: \"center\",\n },\n leftJustify: {\n justifyContent: \"left\",\n },\n rightJustify: {\n justifyContent: \"right\",\n },\n },\n { classNamePrefix: \"layout\", index: 2 }\n);\n","import React from \"react\";\nimport MaterialButton from \"@mui/material/Button\";\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { useSpacingStyles } from \"../styles\";\nimport { IButtonProps } from \"./Button.types\";\nimport { NO_ACCESS_LEVEL, ONE_AND_HALF_REM, READ_LEVEL } from \"../globals\";\n\nconst useButtonStyles = makeStyles((theme) => ({\n submitButton: {\n borderRadius: ONE_AND_HALF_REM,\n padding: `0.4rem 1rem`,\n textTransform: \"none\",\n },\n containedText: {\n color: \"white\",\n },\n spinnerColour: {\n color: theme.palette.grey[500],\n },\n}));\n\nfunction Button<C extends React.ElementType>({\n loading = false,\n children,\n errors = false,\n type = \"submit\",\n onClick,\n disabled = false,\n variant = \"outlined\",\n styling = \"\",\n color = \"primary\",\n accessLevel,\n ...rest\n}: IButtonProps<C>) {\n const classes = { ...useSpacingStyles(), ...useButtonStyles() };\n\n if (accessLevel && [NO_ACCESS_LEVEL, READ_LEVEL].includes(accessLevel)) return null;\n\n let disabledProp = disabled;\n\n if (!disabled && (loading || errors)) {\n disabledProp = true;\n }\n\n return (\n <MaterialButton\n {...rest}\n variant={variant}\n color={color}\n type={type}\n className={`${classes.submitButton} ${\n variant === \"contained\" && classes.containedText\n } ${styling}`}\n disabled={disabledProp}\n onClick={onClick}\n >\n {children}\n {loading ? (\n <CircularProgress\n className={`${classes.leftSpacer1} ${classes.spinnerColour}`}\n size=\"1.1rem\"\n thickness={6}\n />\n ) : (\n \"\"\n )}\n </MaterialButton>\n );\n}\n\nexport default Button;\n","import React from \"react\";\nimport { Typography } from \"@mui/material\";\nimport { useFontStyles } from \"../styles\";\nimport { IContentLabelProps } from \"./ContentLabel.types\";\n\nconst ContentLabel: React.FC<IContentLabelProps> = ({ children, styling = null }) => {\n const classes = useFontStyles();\n return (\n <Typography variant=\"h6\" className={`${classes.bolderText} ${styling || \"\"}`}>\n {children}\n </Typography>\n );\n};\n\nexport default ContentLabel;\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { IContentBoxProps } from \"./ContentBox.types\";\n\nconst ContentBox: React.FC<IContentBoxProps> = ({\n limitWidth = false,\n children,\n styling,\n id,\n}) => {\n const classes = { ...useSpacingStyles(), ...useLayoutStyles() };\n return (\n <Box id={id} boxShadow={3} className={`${classes.contentBox} ${styling || \"\"}`}>\n <Box\n className={`${classes.centeredText} ${limitWidth ? classes.limitWidth50rem : \"\"}`}\n >\n {children}\n </Box>\n </Box>\n );\n};\nexport default ContentBox;\n","import React from \"react\";\nimport { Box, Typography, CircularProgress } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { ILoadingSpinnerProps } from \"./LoadingSpinner.types\";\n\nconst LoadingSpinner: React.FC<ILoadingSpinnerProps> = ({\n text = \"Loading data...\",\n styling,\n}) => {\n const classes = { ...useSpacingStyles(), ...useLayoutStyles() };\n\n return (\n <Box className={`${classes.flexCenter} ${styling || \"\"}`}>\n <Typography variant=\"body2\" color=\"textSecondary\" className={classes.rightSpacer1}>\n {text}\n </Typography>\n <CircularProgress size=\"1.5rem\" />\n </Box>\n );\n};\n\nexport default LoadingSpinner;\n","import React, { memo, ReactNode, useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n Table,\n TableBody,\n TableCell as MUITableCell,\n TableHead,\n TableRow as MUITableRow,\n TableRowProps,\n TableCellProps,\n} from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n cellAlignmentOptions,\n headerColours,\n IStaticTableProps,\n} from \"./StaticTable.types\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport { BORDER_RADIUS } from \"../globals\";\nimport { Pagination } from \"@mui/material\";\n\nconst StyledTableRow = withStyles(\n createStyles({\n root: {\n \"&:hover td\": {\n backgroundColor: \"rgba(0, 0, 0, 0.06)\",\n },\n },\n })\n)(MUITableRow);\n\nconst ShadedTableRow = withStyles(\n createStyles({\n root: {\n \"&:nth-of-type(even) td\": {\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n \"&:hover td\": {\n backgroundColor: \"rgba(0, 0, 0, 0.06)\",\n },\n },\n })\n)(MUITableRow);\n\nconst useTableCellStyles = makeStyles((theme) => ({\n root: {\n borderBottom: \"none\",\n paddingTop: \"8px\",\n paddingBottom: \"8px\",\n \"&:first-child\": {\n borderTopLeftRadius: BORDER_RADIUS,\n borderBottomLeftRadius: BORDER_RADIUS,\n },\n \"&:last-child\": {\n borderTopRightRadius: BORDER_RADIUS,\n borderBottomRightRadius: BORDER_RADIUS,\n },\n },\n head: ({ background, border, text }: headerColours) => ({\n backgroundColor: background || \"HSLA(204, 58.3%, 81.2%, 0.1)\",\n borderTop: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n borderBottom: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n color: text || theme.palette.text.primary,\n fontWeight: 500,\n \"&:first-child\": {\n borderLeft: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n },\n \"&:last-child\": {\n borderRight: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n },\n }),\n}));\n\ninterface ITableCellProps extends Omit<TableCellProps, \"align\"> {\n align?: cellAlignmentOptions;\n headerColours?: headerColours;\n withoutHeaders?: boolean;\n}\n\nconst TableCell = ({\n children,\n align = \"centerJustify\",\n headerColours,\n ...rest\n}: ITableCellProps) => {\n const classes = {\n ...useLayoutStyles(),\n ...useTableCellStyles({ ...(headerColours || {}) }),\n };\n return (\n <MUITableCell\n {...rest}\n classes={{\n root: classes.root,\n head: classes.head,\n }}\n >\n <div className={`${classes.flexCenter} ${classes[align]}`}>{children}</div>\n </MUITableCell>\n );\n};\n\ninterface ITableRow extends TableRowProps {\n rowBorderSeparation?: boolean;\n}\n\nconst TableRow = ({ rowBorderSeparation = false, children, ...rest }: ITableRow) => {\n if (rowBorderSeparation) {\n return <StyledTableRow {...rest}>{children}</StyledTableRow>;\n }\n return <ShadedTableRow {...rest}>{children}</ShadedTableRow>;\n};\n\ninterface ISingleCellRowProps {\n colSpan: number;\n children: ReactNode;\n}\n\nconst SingleCellRow = ({ colSpan, children }: ISingleCellRowProps) => {\n const classes = useStaticTableStyles();\n return (\n <TableRow>\n <TableCell className={classes.adjustedCellPadding} colSpan={colSpan}>\n {children}\n </TableCell>\n </TableRow>\n );\n};\n\nconst useStaticTableStyles = makeStyles({\n tableStyles: {\n borderCollapse: \"separate\",\n borderBottom: \"1px solid rgb(224, 224, 224)\",\n },\n pointer: {\n cursor: \"pointer\",\n },\n bottomBorder: {\n borderBottom: \"1px solid rgba(224, 224, 224, 1)\",\n },\n noShading: {\n backgroundColor: \"transparent !important\",\n },\n adjustedCellPadding: {\n paddingTop: \"11px\",\n paddingBottom: \"11px\",\n },\n});\n\ntype StaticTableHeadersProps = Pick<\n IStaticTableProps,\n \"headers\" | \"headerCellAlignment\" | \"headerColours\"\n>;\n\nconst StaticTableHeaders: React.FC<StaticTableHeadersProps> = memo(\n ({ headers, headerCellAlignment = [], headerColours }) => {\n if (!headers) return null;\n\n return (\n <TableHead>\n <MUITableRow>\n {headers.map((header: ReactNode, i) => (\n <TableCell\n align={headerCellAlignment[i] || \"centerJustify\"}\n key={`header-cell-${i}`}\n headerColours={headerColours}\n >\n {header}\n </TableCell>\n ))}\n </MUITableRow>\n </TableHead>\n );\n }\n);\n\nconst StaticTable: React.FC<IStaticTableProps> = memo(\n ({\n rowBorderSeparation = false,\n headers,\n rows,\n headerCellAlignment = [],\n rowCellAlignment = [],\n styling,\n headerColours,\n paginate = false,\n itemsPerPage = 30,\n }) => {\n const classes = {\n ...useLayoutStyles(),\n ...useSpacingStyles(),\n ...useStaticTableStyles(),\n };\n const [page, setPage] = useState(1);\n\n const hasRowsAndPaginated = useMemo(\n () => !!(paginate && (rows?.length || 0) > itemsPerPage),\n [itemsPerPage, paginate, rows]\n );\n\n const [visibleRows, setVisibleRows] = useState<typeof rows>(\n hasRowsAndPaginated ? rows!.slice(0, itemsPerPage) : rows\n );\n\n const handlePageChange = useCallback(\n (event: React.ChangeEvent<unknown>, value: number) => {\n setPage(value);\n },\n []\n );\n\n useEffect(() => {\n setVisibleRows(\n hasRowsAndPaginated\n ? rows!.slice(itemsPerPage * (page - 1), itemsPerPage * page)\n : rows\n );\n }, [hasRowsAndPaginated, itemsPerPage, page, rows]);\n\n return (\n <>\n <Table\n className={`${classes.tableStyles} ${\n hasRowsAndPaginated ? classes.contentBreak : \"\"\n } ${styling || \"\"}`}\n >\n <StaticTableHeaders\n headers={headers}\n headerCellAlignment={headerCellAlignment}\n headerColours={headerColours}\n />\n\n <TableBody>\n {visibleRows ? (\n visibleRows.length ? (\n visibleRows.map((data, i) => {\n const containsOnClick = !!data.onClick;\n return (\n <TableRow\n rowBorderSeparation={rowBorderSeparation}\n className={containsOnClick ? classes.pointer : undefined}\n key={`row-${i}`}\n onClick={containsOnClick ? data.onClick : undefined}\n >\n {data.row.map((cell: ReactNode, n) => (\n <TableCell\n align={rowCellAlignment[n] || \"centerJustify\"}\n className={\n rowBorderSeparation && visibleRows.length !== i + 1\n ? classes.bottomBorder\n : undefined\n }\n key={`row-${i}-cell-${n}`}\n >\n {cell}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n ) : (\n <SingleCellRow colSpan={headers?.length || 0}>\n Table is empty\n </SingleCellRow>\n )\n ) : (\n <SingleCellRow colSpan={headers?.length || 0}>\n <LoadingSpinner />\n </SingleCellRow>\n )}\n </TableBody>\n </Table>\n {hasRowsAndPaginated ? (\n <Pagination\n className={classes.flexCenter}\n count={Math.ceil(rows!.length / itemsPerPage)}\n page={page}\n onChange={handlePageChange}\n shape=\"rounded\"\n showFirstButton\n showLastButton\n />\n ) : null}\n </>\n );\n }\n);\n\nexport default StaticTable;\n","import React from \"react\";\nimport { Typography, Link, Box, ButtonBase } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { IBreadcrumbColors, IBreadcrumbsProps } from \"./Breadcrumbs.types\";\n\nconst useStyles = makeStyles((theme) => ({\n logoContainer: {\n width: \"3rem\",\n height: \"3rem\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n logo: {\n width: \"100%\",\n height: \"100%\",\n \"& > div\": {\n width: \"100%\",\n height: \"100%\",\n },\n \"& > svg\": {\n width: \"100%\",\n height: \"100%\",\n },\n },\n logoInBreadcrumb: {\n width: \"2rem\",\n height: \"2rem\",\n margin: \"0.125rem 0 0.125rem 0.313rem\",\n },\n logoSpacing: {\n marginRight: theme.spacing(1),\n },\n flexItemsCenter: {\n display: \"flex\",\n alignItems: \"center\",\n },\n nonPrimaryBreadcrumbOffset: {\n marginLeft: \"2.5rem\",\n },\n BreadcrumbsContainer: {\n height: \"2.25rem\",\n marginLeft: \"0.875rem\",\n marginRight: \"1.5rem\",\n },\n primaryBreadcrumbItem: ({ primary }: IBreadcrumbColors) => ({\n backgroundColor: primary?.background || theme.palette.common.white,\n color: primary?.color || theme.palette.text.primary,\n borderRadius: \"2rem\",\n zIndex: 3,\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n }),\n secondaryBreadcrumbItem: ({ secondary }: IBreadcrumbColors) => ({\n height: \"2.25rem\",\n backgroundColor: secondary?.background || \"#D7D4E4\",\n borderRadius: \"2rem\",\n zIndex: 2,\n marginLeft: \"-2rem\",\n color: secondary?.color || theme.palette.text.primary,\n }),\n tertiaryBreadcrumbItem: ({ tertiary }: IBreadcrumbColors) => ({\n height: \"2.25rem\",\n backgroundColor: tertiary?.background || \"#D7D4E4\",\n borderRadius: \"2rem\",\n zIndex: 1,\n marginLeft: \"-2rem\",\n color: tertiary?.color || theme.palette.common.white,\n }),\n breadCrumbShadow: {\n boxShadow: theme.shadows[2],\n },\n breadcrumbRightMargin: {\n marginRight: \"1rem\",\n },\n breadcrumbTextOverflow: {\n display: \"block\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxWidth: \"12rem\",\n },\n boldText: {\n fontWeight: 500,\n },\n activeBreadcrumb: ({ tertiary }: IBreadcrumbColors) => ({\n backgroundColor: tertiary?.background || \"#D7D4E4\",\n color: tertiary?.color || theme.palette.common.white,\n }),\n noWrap: {\n whiteSpace: \"nowrap\",\n },\n fullBorderRadius: {\n borderRadius: \"100%\",\n },\n}));\n\nconst Breadcrumbs: React.FC<IBreadcrumbsProps> = ({ logo, content, colors }) => {\n const classes = useStyles({ ...(colors || {}) });\n\n const { first = null, second = null, third = null } = content;\n\n return (\n <Box className={`${classes.BreadcrumbsContainer} ${classes.flexItemsCenter}`}>\n <Box\n className={`${\n first ? `${classes.primaryBreadcrumbItem} ${classes.breadCrumbShadow}` : \"\"\n } ${classes.flexItemsCenter}`}\n >\n <Link component={RouterLink} to=\"/\" className={classes.logoSpacing}>\n <Box\n className={`${classes.logoContainer} \n ${first ? classes.logoInBreadcrumb : \"\"}`}\n >\n <ButtonBase className={`${classes.logo} ${classes.fullBorderRadius}`}>\n {logo}\n </ButtonBase>\n </Box>\n </Link>\n {first && (\n <Typography\n color=\"textPrimary\"\n className={`${classes.boldText} ${classes.noWrap} ${classes.primaryBreadcrumbItem}`}\n >\n <Link\n underline=\"none\"\n component={RouterLink}\n to={first.link}\n color=\"inherit\"\n className={`${classes.breadcrumbRightMargin} ${classes.breadcrumbTextOverflow}`}\n >\n {first.name}\n </Link>\n </Typography>\n )}\n </Box>\n\n {second && (\n <Box\n className={`${classes.flexItemsCenter} ${classes.secondaryBreadcrumbItem} ${\n classes.breadCrumbShadow\n } ${!third ? classes.activeBreadcrumb : \"\"}`}\n >\n <Typography color=\"inherit\" className={`${classes.boldText} ${classes.noWrap}`}>\n <Link\n component={RouterLink}\n underline=\"none\"\n to={second.link}\n color=\"inherit\"\n className={`${classes.nonPrimaryBreadcrumbOffset} ${classes.breadcrumbRightMargin} ${classes.breadcrumbTextOverflow}`}\n >\n {second.name}\n </Link>\n </Typography>\n </Box>\n )}\n {third && (\n <Box\n className={`${classes.flexItemsCenter} ${classes.tertiaryBreadcrumbItem} ${classes.breadCrumbShadow}`}\n >\n <Typography color=\"inherit\" className={`${classes.boldText} ${classes.noWrap}`}>\n <Link\n component={RouterLink}\n underline=\"none\"\n to={third.link}\n color=\"inherit\"\n className={`${classes.nonPrimaryBreadcrumbOffset} ${classes.breadcrumbRightMargin} ${classes.breadcrumbTextOverflow}`}\n >\n {third.name}\n </Link>\n </Typography>\n </Box>\n )}\n </Box>\n );\n};\n\nexport default Breadcrumbs;\n","import { Box, Button, Grid, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport React from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { useFontStyles, useSpacingStyles } from \"../styles\";\nimport { IEntityListProps } from \"./EntityList.types\";\nimport { BORDER_RADIUS } from \"../globals\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n marginRight: theme.spacing(-1.5),\n marginLeft: theme.spacing(-1.5),\n },\n svgContainer: {\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n button: {\n display: \"block\",\n textDecoration: \"none\",\n borderRadius: BORDER_RADIUS,\n height: \"100%\",\n width: \"100%\",\n textAlign: \"center\",\n color: theme.palette.text.primary,\n },\n orgLabel: {\n padding: theme.spacing(1),\n paddingTop: 0,\n },\n}));\n\nconst EntityList: React.FC<IEntityListProps> = ({\n entities,\n icon,\n loadingMessage = \"Loading list...\",\n emptyMessage = \"List is empty\",\n onClick,\n}) => {\n const classes = {\n ...useStyles(),\n ...useSpacingStyles(),\n ...useFontStyles(),\n };\n\n return (\n <Box className={classes.container}>\n {!entities ? (\n <LoadingSpinner text={loadingMessage} />\n ) : entities.length ? (\n <Grid container spacing={3}>\n {entities.map((entity, index) => (\n <Grid key={`${entity.name}-${index}`} item xs={4} md={3}>\n <Button\n className={classes.button}\n key={entity.name}\n {...(onClick\n ? { onClick: () => onClick(entity) }\n : {\n component: RouterLink,\n to: entity.link,\n })}\n >\n <Box className={`${classes.svgContainer} ${classes.labelBreak}`}>\n {icon(entity)}\n </Box>\n <Typography className={classes.orgLabel} variant=\"body1\">\n {entity.name}\n </Typography>\n </Button>\n </Grid>\n ))}\n </Grid>\n ) : (\n <Typography className={classes.centerText} variant=\"body2\" color=\"text.primary\">\n {emptyMessage}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default EntityList;\n","import React from \"react\";\nimport ErrorIcon from \"@mui/icons-material/Error\";\nimport { Typography, Box } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { IErrorIndicatorProps } from \"./ErrorIndicator.types\";\n\nconst ErrorIndicator: React.FC<IErrorIndicatorProps> = ({\n text = \"Something went wrong\",\n}) => {\n const classes = { ...useSpacingStyles(), ...useLayoutStyles() };\n\n return (\n <Box className={classes.flexCenter}>\n <ErrorIcon fontSize=\"medium\" className={classes.rightSpacer1} color=\"error\" />\n <Typography variant=\"body2\" color=\"textSecondary\">\n {text}\n </Typography>\n </Box>\n );\n};\n\nexport default ErrorIndicator;\n","import React, { useState } from \"react\";\nimport {\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Collapse,\n Typography,\n Box,\n} from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\nimport { useLocation, Link as RouterLink } from \"react-router-dom\";\nimport { useFontStyles, useSpacingStyles } from \"../styles\";\nimport { IListItemProps, INavListItemStyleProps } from \"./LeftNavigation.types\";\n\nconst useNavListStyles = makeStyles((theme) => ({\n listIcon: {\n minWidth: \"auto\",\n paddingRight: \"0.25rem\",\n },\n mainIconSize: {\n fontSize: \"1rem\",\n },\n mainIconMarginAdjustment: {\n marginTop: \"3px\",\n },\n textOverflowEllipsis: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n mainListItem: (props: INavListItemStyleProps) => ({\n padding: \"8px 24px 8px 16px\",\n alignItems: \"flex-start\",\n backgroundColor: props.mainBackground || theme.palette.common.white,\n color: props.mainText || theme.palette.text.primary,\n borderRadius: theme.spacing(0.6),\n \"&:hover\": {\n backgroundColor: props.mainHover || theme.palette.action.hover,\n },\n }),\n mainIconColor: (props: INavListItemStyleProps) => ({\n color: props.mainIcon || theme.palette.grey[500],\n }),\n\n activeMainIconColor: (props: INavListItemStyleProps) => ({\n color: props.mainActiveText || \"#8FC1FF\",\n }),\n\n subListItem: (props: INavListItemStyleProps) => ({\n backgroundColor: props.subItemBackground || \"#FFFFFF\",\n color: props.subItemText || theme.palette.text.secondary,\n borderRadius: \"8px\",\n \"&:hover\": {\n backgroundColor: props.subItemHover || \"rgba(143,193,255,0.3)\",\n },\n }),\n\n activeSubListItem: (props: INavListItemStyleProps) => ({\n backgroundColor: props.subItemActiveBackground || \"#FFFFFF\",\n color: props.subItemActiveText || \"#8FC1FF\",\n \"&:hover\": {\n backgroundColor: props.subItemActiveHover || \"rgba(143,193,255,0.3)\",\n },\n }),\n\n subItemBorder: {\n borderLeft: `1px solid ${theme.palette.grey[600]}`,\n marginLeft: \"1px\",\n marginRight: \"1px\",\n width: \"100%\",\n height: \"100%\",\n },\n relativeWrapper: {\n position: \"relative\",\n },\n subItemBorderMask: (props: INavListItemStyleProps) => ({\n borderLeft: `3px solid ${props.subItemActiveText || \"#8FC1FF\"}`,\n borderRadius: \"1px\",\n position: \"absolute\",\n top: \"50%\",\n bottom: \"50%\",\n transition: \"all 0.2s ease-in-out\",\n }),\n activeSubItemBorder: {\n top: \"0 !important\",\n bottom: \"0 !important\",\n },\n subItemWrapper: {\n display: \"flex\",\n marginLeft: \"13px\",\n marginRight: \"16px\",\n },\n noYMargin: {\n marginTop: \"unset\",\n marginBottom: \"unset\",\n },\n}));\n\nconst isItemActive = (currentPathname: string, id: string) => {\n if (currentPathname.split(\"/\").includes(id)) {\n return true;\n }\n return false;\n};\n\nconst NavListItem: React.FC<IListItemProps> = ({ mainItem, subItems, config, Icon }) => {\n const classes = {\n ...useFontStyles(),\n ...useSpacingStyles(),\n ...useNavListStyles({\n ...(config.secondary?.mainItemColors || {}),\n ...(config.secondary?.subItemColors || {}),\n }),\n };\n const location = useLocation();\n\n const activeMainItem = isItemActive(location.pathname, mainItem.id);\n const [subExpanded, setSubExpanded] = useState<boolean>(\n subItems?.length ? activeMainItem : false\n );\n\n return (\n <>\n <ListItem\n button\n dense\n className={classes.mainListItem}\n component={RouterLink}\n to={mainItem.route}\n >\n <ListItemIcon\n className={`${classes.listIcon} ${classes.mainIconMarginAdjustment} ${classes.rightSpacer1}`}\n >\n <Icon\n id=\"second-nav-item\"\n styling={`${classes.mainIconSize} ${classes.mainIconColor} ${\n activeMainItem ? classes.activeMainIconColor : \"\"\n }`}\n />\n </ListItemIcon>\n <ListItemText\n disableTypography\n className={classes.noYMargin}\n primary={\n <Typography\n variant=\"body2\"\n className={`${classes.bolderText} ${classes.textOverflowEllipsis}`}\n color=\"inherit\"\n >\n {mainItem.name}\n {subItems?.length ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={classes.bolderText}\n color=\"inherit\"\n >\n {\" \"}\n ({subItems.length})\n </Typography>\n ) : null}\n </Typography>\n }\n />\n {subItems?.length ? (\n <ListItemIcon\n className={classes.listIcon}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubExpanded((expanded) => !expanded);\n }}\n >\n {subExpanded ? <ExpandLess /> : <ExpandMore />}\n </ListItemIcon>\n ) : null}\n </ListItem>\n {subItems?.length ? (\n <Collapse in={subExpanded} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {subItems.map(({ name, route, id }) => (\n <Box key={id} className={classes.subItemWrapper}>\n <Box className={`${classes.relativeWrapper} ${classes.rightSpacer1}`}>\n <Box className={`${classes.subItemBorder} `} />\n <Box\n className={`${classes.subItemBorderMask} ${\n isItemActive(location.pathname, id)\n ? classes.activeSubItemBorder\n : \"\"\n } `}\n />\n </Box>\n\n <ListItem\n key={route}\n component={RouterLink}\n to={route}\n button\n dense\n className={`${classes.subListItem} ${\n isItemActive(location.pathname, id) ? classes.activeSubListItem : \"\"\n }`}\n >\n <ListItemText\n disableTypography\n primary={\n <Typography\n variant=\"body2\"\n className={classes.textOverflowEllipsis}\n color=\"inherit\"\n >\n {name}\n </Typography>\n }\n />\n </ListItem>\n </Box>\n ))}\n </List>\n </Collapse>\n ) : null}\n </>\n );\n};\n\nexport default NavListItem;\n","import { isValid } from \"date-fns\";\nimport { TableCellValues } from \"../EditableTable/EditableTable.types\";\n\nexport function sortDescendingStartDateString<T extends { startDate: string }>(\n array: T[]\n): T[] {\n return array.sort(\n (a, b) =>\n +b.startDate.split(\"T\")[0].replaceAll(\"-\", \"\") -\n +a.startDate.split(\"T\")[0].replaceAll(\"-\", \"\")\n );\n}\n\nexport const didCellValueChange = (\n oldVal: TableCellValues,\n newVal: TableCellValues,\n isDateValue?: boolean\n) =>\n isDateValue\n ? ((oldVal && isValid(oldVal) ? oldVal : new Date(0)) as Date).getTime() ===\n ((newVal && isValid(newVal) ? newVal : new Date(0)) as Date).getTime()\n : oldVal === newVal;\n","import React from \"react\";\nimport { Box, IconButton, Typography, List } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport NavListItem from \"./NavListItem\";\nimport { useHistory } from \"react-router-dom\";\nimport {\n ISecondaryLeftNavContainerProps,\n ISecondaryNavigationItem,\n} from \"./LeftNavigation.types\";\nimport { sortDescendingStartDateString } from \"../utils\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport AddBoxOutlinedIcon from \"@mui/icons-material/AddBoxOutlined\";\nimport { useFontStyles, useSpacingStyles } from \"../styles\";\nimport { BORDER_RADIUS } from \"../globals\";\n\ntype SecondaryNavStyles = {\n titleColor?: string;\n titleIconColor?: string;\n};\n\nconst useSecondaryNavStyles = makeStyles((theme) => ({\n secondaryNavWrapper: {\n height: \"100%\",\n width: \"300px\",\n background: \"white\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n borderTopRightRadius: BORDER_RADIUS,\n borderBottomRightRadius: BORDER_RADIUS,\n marginLeft: \"-16px\",\n paddingLeft: \"16px\",\n border: `1px solid ${theme.palette.grey[300]}`,\n boxShadow: \"0 2px 4px 0 rgba(0, 0, 0, 0.3)\",\n boxSizing: \"border-box\",\n },\n titleWrapper: {\n marginTop: \"24px\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n },\n title: {\n fontSize: \"18px\",\n fontWeight: 500,\n color: (props: SecondaryNavStyles) => props.titleColor || \"#8FC1FF\",\n },\n titleIcons: {\n color: (props: SecondaryNavStyles) => props.titleIconColor || \"#8FC1FF\",\n },\n closeButton: {\n marginLeft: \"auto\",\n },\n archivedSeparator: {\n paddingLeft: \"8px\",\n color: theme.palette.grey[500],\n },\n archivedBorder: {\n marginTop: \"3rem\",\n border: `1px solid ${theme.palette.grey[200]}`,\n width: \"33%\",\n marginLeft: \"8px\",\n },\n listWrapper: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n}));\n\nconst SecondaryLeftNavContainer: React.FC<ISecondaryLeftNavContainerProps> = ({\n secondaryNavItems,\n primaryNavItems,\n expandedOptions,\n setExpandedOptions,\n config,\n}) => {\n const stylesProps = {\n titleColor: config.secondary?.titleColor,\n titleIconColor: config.secondary?.titleIconColor,\n };\n const classes = {\n ...useSpacingStyles(),\n ...useFontStyles(),\n ...useSecondaryNavStyles(stylesProps),\n };\n const history = useHistory();\n\n const navItem = secondaryNavItems[expandedOptions.view];\n\n if (!navItem) return null;\n\n const mainItemIcon = primaryNavItems.find(\n (item) => item.field === expandedOptions.view\n )!.Icon;\n\n return (\n <Box className={classes.secondaryNavWrapper}>\n <Box className={classes.titleWrapper}>\n <Typography className={`${classes.rightSpacer1} ${classes.title}`}>\n {expandedOptions.view}\n </Typography>\n {navItem.button ? (\n <IconButton\n className={classes.titleIcons}\n size=\"small\"\n type=\"button\"\n onClick={() => history.push(navItem.button!.url)}\n >\n <AddBoxOutlinedIcon />\n </IconButton>\n ) : null}\n <IconButton\n className={`${classes.titleIcons} ${classes.closeButton}`}\n size=\"small\"\n type=\"button\"\n onClick={() => setExpandedOptions({ view: \"\", expanded: false })}\n >\n {config.secondary?.closeButtonSvg || <CloseIcon />}\n </IconButton>\n </Box>\n\n <List className={classes.listWrapper} component=\"div\">\n {sortDescendingStartDateString<ISecondaryNavigationItem>(navItem.items).map(\n (item) => (\n <NavListItem\n key={item.mainItem.route}\n {...item}\n config={config}\n Icon={mainItemIcon}\n />\n )\n )}\n {navItem.archivedItems?.length ? (\n <>\n <Box className={`${classes.archivedBorder} ${classes.contentBreak}`} />\n <Typography\n variant=\"body2\"\n className={`${classes.archivedSeparator} ${classes.bolderText}`}\n >\n Archived {expandedOptions.view}\n </Typography>\n {sortDescendingStartDateString<ISecondaryNavigationItem>(\n navItem.archivedItems\n ).map((item) => (\n <NavListItem\n key={item.mainItem.route}\n {...item}\n config={config}\n Icon={mainItemIcon}\n />\n ))}\n </>\n ) : null}\n </List>\n </Box>\n );\n};\n\nexport default SecondaryLeftNavContainer;\n","import React from \"react\";\nimport { useLocation, Link as RouterLink } from \"react-router-dom\";\nimport { Box, List, ListItem, ListItemIcon, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { IPrimaryConfig, IPrimaryLeftNavContainerProps } from \"./LeftNavigation.types\";\nimport { BORDER_RADIUS } from \"../globals\";\n\nconst usePrimaryLeftNavStyles = makeStyles((theme) => ({\n primaryNavContainer: (props: IPrimaryConfig) => ({\n background: props.background || \"linear-gradient(to bottom, #253a68 40%, #73c4ca)\",\n border: `2px solid ${props.activeBorderColor || \"#8FC1FF\"}`,\n borderLeft: \"none\",\n borderTopRightRadius: BORDER_RADIUS,\n borderBottomRightRadius: BORDER_RADIUS,\n minWidth: \"4.5rem\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n }),\n listWrapper: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingTop: 0,\n },\n itemWrapper: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"0.75rem 0.5rem 0.5rem 0.5rem\",\n },\n itemBorder: {\n borderRight: (props: IPrimaryConfig) =>\n `6px solid ${props.activeBorderColor || \"#8FC1FF\"}`,\n position: \"absolute\",\n bottom: \"50%\",\n top: \"50%\",\n transition: \"all 0.2s ease-in-out\",\n right: \"-3px\",\n },\n activeBorder: {\n top: \"15%\",\n bottom: \"15%\",\n },\n iconWrapper: {\n minWidth: 0,\n marginBottom: \"4px\",\n position: \"relative\",\n },\n itemName: {\n fontSize: \"0.7rem\",\n maxWidth: \"3.5rem\",\n textAlign: \"center\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n },\n textColour: {\n color: (props: IPrimaryConfig) => props.text || \"#FFFFFF\",\n },\n activeTextColour: {\n color: (props: IPrimaryConfig) => props.activeText || \"#8FC1FF\",\n },\n lastItem: {\n marginTop: \"auto\",\n },\n}));\n\nconst PrimaryLeftNavContainer: React.FC<IPrimaryLeftNavContainerProps> = ({\n expandedOptions,\n setExpandedOptions,\n navigationLinks,\n config,\n}) => {\n const location = useLocation();\n const classes = usePrimaryLeftNavStyles({ ...(config.primary || {}) });\n\n const applyActiveBackground = (fieldName: string, path: string) => {\n if (expandedOptions.view === \"\") {\n if (location.pathname === path) {\n return true;\n } else if (\n fieldName !== config.rootRouteName &&\n location.pathname.startsWith(path)\n ) {\n return true;\n } else return false;\n } else if (expandedOptions.view === fieldName) {\n return true;\n } else return false;\n };\n\n return (\n <List className={`${classes.primaryNavContainer} ${classes.listWrapper}`}>\n {navigationLinks.map((item, index, arr) => (\n <ListItem\n key={item.field}\n button\n className={`${classes.itemWrapper} ${classes.textColour} ${\n config.primary?.moveLastItemToBottom && index === arr.length - 1\n ? classes.lastItem\n : \"\"\n }`}\n {...(!!item.hasSecondary ? {} : { component: RouterLink, to: item.path })}\n onClick={() => {\n setExpandedOptions({ view: item.field, expanded: !!item.hasSecondary });\n }}\n >\n <ListItemIcon className={classes.iconWrapper}>\n <item.Icon\n styling={`${classes.textColour} ${\n applyActiveBackground(item.field, item.path)\n ? classes.activeTextColour\n : \"\"\n }`}\n />\n </ListItemIcon>\n <Typography\n variant=\"caption\"\n className={`${classes.itemName} ${classes.textColour} ${\n applyActiveBackground(item.field, item.path) ? classes.activeTextColour : \"\"\n }`}\n >\n {item.field}\n </Typography>\n <Box\n className={`${classes.itemBorder} ${\n applyActiveBackground(item.field, item.path) ? classes.activeBorder : \"\"\n }`}\n />\n </ListItem>\n ))}\n </List>\n );\n};\n\nexport default PrimaryLeftNavContainer;\n","import React, { useState, useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport SecondaryLeftNavContainer from \"./SecondaryLeftNavigation\";\nimport PrimaryLeftNavContainer from \"./PrimaryLeftNavigation\";\nimport { Box } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { ILeftNavigationProps } from \"./LeftNavigation.types\";\n\nconst useLeftNavStyles = makeStyles({\n leftNavContainer: {\n height: \"100%\",\n display: \"flex\",\n position: \"relative\",\n width: \"max-content\",\n },\n});\n\nconst LeftNavigation: React.FC<ILeftNavigationProps> = ({\n primaryNavItems,\n secondaryNavItems,\n config,\n}) => {\n const [expandedOptions, setExpandedOptions] = useState({\n view: \"\",\n expanded: false,\n });\n\n const styles = useLeftNavStyles();\n const location = useLocation();\n\n const navsWithSecondary = primaryNavItems.reduce(\n (navs, nav) => (nav.hasSecondary ? [...navs, nav.field] : navs),\n [] as string[]\n );\n\n useEffect(() => {\n setExpandedOptions((prev) => {\n if (navsWithSecondary.includes(prev.view) && prev.expanded === true) {\n return prev;\n } else return { view: \"\", expanded: false };\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname]);\n\n return (\n <Box component=\"nav\" className={styles.leftNavContainer}>\n <PrimaryLeftNavContainer\n expandedOptions={expandedOptions}\n setExpandedOptions={setExpandedOptions}\n navigationLinks={primaryNavItems}\n config={config}\n />\n\n {expandedOptions.expanded && (\n <SecondaryLeftNavContainer\n secondaryNavItems={secondaryNavItems}\n primaryNavItems={primaryNavItems}\n expandedOptions={expandedOptions}\n setExpandedOptions={setExpandedOptions}\n config={config}\n />\n )}\n </Box>\n );\n};\nexport default LeftNavigation;\n","import React from \"react\";\nimport { Box, Container } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { IMainLayoutProps, IMainLayoutStyleProps } from \"./MainLayout.types\";\n\nconst useMainLayoutStyles = makeStyles((theme) => ({\n remainingHeightBox: {\n position: \"absolute\",\n top: (props: IMainLayoutStyleProps) => props.topOffset ?? \"4rem\",\n bottom: 0,\n left: 0,\n right: 0,\n display: \"flex\",\n },\n fullHeightFlexbox: {\n display: \"flex\",\n height: \"100%\",\n },\n relativeContainer: {\n position: \"relative\",\n },\n scrollWrapper: {\n overflow: \"auto\",\n overflowX: \"hidden\",\n },\n componentWrapper: {\n padding: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n position: \"relative\",\n },\n}));\n\nconst MainLayout: React.FC<IMainLayoutProps> = ({\n sideNavigation,\n children,\n desktopWidth,\n topOffset,\n id,\n}) => {\n const classes = useMainLayoutStyles({ topOffset });\n return (\n <Box className={classes.remainingHeightBox}>\n {sideNavigation ? (\n <Box className={`${classes.fullHeightFlexbox} ${classes.relativeContainer}`}>\n {sideNavigation}\n </Box>\n ) : null}\n <Container\n id={id}\n disableGutters\n maxWidth={false}\n className={classes.scrollWrapper}\n >\n <Container\n disableGutters\n maxWidth={desktopWidth ? \"xl\" : \"lg\"}\n className={classes.componentWrapper}\n >\n {children}\n </Container>\n </Container>\n </Box>\n );\n};\n\nexport default MainLayout;\n","import { useCallback, useEffect } from \"react\";\n\nconst useDebounceEffect = (\n effect: (query: string) => void,\n deps: any[],\n delay: number = 250\n) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const callback = useCallback(effect, deps);\n\n useEffect(() => {\n const timeout = setTimeout(callback, delay);\n return () => clearTimeout(timeout);\n }, [callback, delay]);\n};\n\nexport default useDebounceEffect;\n","import { useEffect, useRef } from \"react\";\n\nconst useInterval = (callback: () => void, delay: number | null) => {\n const savedCallback = useRef<() => void | undefined>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n const tick = () => {\n if (savedCallback.current) savedCallback.current();\n };\n\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n};\n\nexport default useInterval;\n","import { isEqual } from \"lodash\";\nimport { useRef, useEffect } from \"react\";\n\nexport default function useWhyDidYouUpdate(name: string, props: Record<string, any>) {\n const latestProps = useRef(props);\n\n useEffect(() => {\n const allKeys = Object.keys({ ...latestProps.current, ...props });\n\n const changesObj: Record<\n string,\n { from: any; to: any; isDeepEqual: boolean; changedKeys?: string[] }\n > = {};\n allKeys.forEach((key) => {\n if (latestProps.current[key] !== props[key]) {\n changesObj[key] = {\n from: latestProps.current[key],\n to: props[key],\n changedKeys:\n props[key] && typeof props[key] === \"object\"\n ? Object.keys(latestProps.current[key])\n .map((k) => (latestProps.current[key][k] === props[key][k] ? \"\" : k))\n .filter(Boolean)\n : undefined,\n isDeepEqual: isEqual(latestProps.current[key], props[key]),\n };\n }\n });\n\n if (Object.keys(changesObj).length) {\n console.log(\"[why-did-you-update]\", name, {\n changes: changesObj,\n props: { from: latestProps.current, to: props },\n });\n }\n\n latestProps.current = props;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, Object.values(props));\n}\n","import { Tooltip } from \"@mui/material\";\nimport React from \"react\";\n\ninterface IOptionalTooltipProps {\n showTooltip: boolean;\n tooltipText: string;\n children: JSX.Element;\n}\n\nexport const OptionalTooltip: React.FC<IOptionalTooltipProps> = ({\n showTooltip,\n tooltipText,\n children,\n}) => {\n if (showTooltip) {\n // The <div> is important because Tooltip requires a ref-able child\n return (\n <Tooltip title={tooltipText} arrow>\n <div>{children}</div>\n </Tooltip>\n );\n }\n return children;\n};\n","import { Divider, List, ListItem, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { BORDER_RADIUS } from \"../globals\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { IAlphabeticalListProps } from \"./AlphabeticalList.types\";\nimport { OptionalTooltip } from \"../Tooltip\";\n\nconst useAlphabeticalListStyles = makeStyles((theme) => ({\n divider: {\n background: theme.palette.primary.main,\n height: \"0.2rem\",\n },\n letterHeader: {\n cursor: \"default\",\n color: theme.palette.primary.main,\n marginTop: \"1rem\",\n },\n listItem: {\n borderRadius: BORDER_RADIUS,\n border: `1px solid ${theme.palette.grey[300]}`,\n marginBottom: \"0.5rem\",\n paddingLeft: \"24px\",\n boxShadow: theme.shadows[1],\n },\n disabledListItem: {\n \"& > p\": {\n color: \"#b4b4b4\",\n },\n background: \"white !important\",\n pointerEvents: \"none\",\n },\n topMargin: {\n marginTop: theme.spacing(2),\n display: \"block\",\n },\n}));\n\nconst AlphabeticalList: React.FC<IAlphabeticalListProps> = ({\n array,\n sortFn,\n sortKey = \"name\",\n buttonClick,\n linkTo,\n ItemTemplate,\n arrayKey = \"id\",\n loading = false,\n loadingMessage = \"Loading list...\",\n emptyMessage = \"List is empty\",\n alphabetisedHeader = true,\n isItemDisabled,\n}) => {\n const classes = {\n ...useAlphabeticalListStyles(),\n ...useSpacingStyles(),\n ...useLayoutStyles(),\n };\n\n if (array === undefined || loading) {\n return <LoadingSpinner styling={classes.topMargin} text={loadingMessage} />;\n }\n\n if (!array?.length) {\n return (\n <Typography\n className={classes.topMargin}\n align=\"center\"\n variant=\"body2\"\n color=\"textSecondary\"\n >\n {emptyMessage}\n </Typography>\n );\n }\n\n const result = sortFn ? [...array].sort(sortFn) : array;\n let lastSection = \"\";\n\n return (\n <List className={classes.limitWidth50rem}>\n {result.map((item, index) => {\n let showHeader = false;\n if (alphabetisedHeader) {\n const currentKey = (item[sortKey]?.[0] || \"???\").toLowerCase();\n\n if (currentKey !== lastSection) {\n lastSection = currentKey;\n showHeader = true;\n }\n }\n\n const disabledResult = {\n reason: \"\",\n ...(isItemDisabled?.(item) ?? {}),\n } as { disabled: boolean; reason: string };\n\n return (\n <React.Fragment key={item[arrayKey] || `alphabetical-list-${index}`}>\n {alphabetisedHeader && showHeader ? (\n <>\n <Typography className={`${classes.letterHeader}`} align=\"left\">\n {lastSection.toUpperCase()}\n </Typography>\n <Divider className={`${classes.contentBreak} ${classes.divider}`} />\n </>\n ) : null}\n\n <OptionalTooltip\n showTooltip={disabledResult.disabled}\n tooltipText={disabledResult.reason}\n >\n <ListItem\n className={\n disabledResult.disabled\n ? `${classes.listItem} ${classes.disabledListItem}`\n : classes.listItem\n }\n alignItems=\"flex-start\"\n button={(buttonClick || linkTo ? true : undefined) as true & undefined}\n onClick={\n buttonClick && !disabledResult.disabled\n ? () => buttonClick(item)\n : undefined\n }\n {...(linkTo && !buttonClick && !disabledResult.disabled\n ? { component: RouterLink, to: linkTo(item) }\n : {})}\n >\n <ItemTemplate item={item} />\n </ListItem>\n </OptionalTooltip>\n </React.Fragment>\n );\n })}\n </List>\n );\n};\n\nexport default AlphabeticalList;\n","import React, { useEffect, useState } from \"react\";\nimport { Box, InputBase, InputAdornment } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { useDebounceEffect } from \"../hooks\";\nimport { ISearchBarProps } from \"./SearchBar.types\";\nimport { BORDER_RADIUS } from \"../globals\";\nimport AlphabeticalList from \"../AlphabeticalList/AlphabeticalList\";\n\ntype StylesProps = {\n background: string | undefined;\n};\n\nconst useSearchBarStyles = makeStyles((theme) => ({\n searchBox: {\n display: \"flex\",\n alignContent: \"center\",\n alignItems: \"center\",\n padding: \"8px\",\n border: `2px solid ${theme.palette.grey[300]}`,\n borderRadius: BORDER_RADIUS,\n },\n searchField: {\n borderRadius: BORDER_RADIUS,\n width: \"100%\",\n background: ({ background }: StylesProps) => background || \"RGBA(179, 213, 235, 0.1)\",\n height: \"46px\",\n paddingLeft: \"24px\",\n color: theme.palette.grey[600],\n },\n searchIcon: {\n color: theme.palette.grey[600],\n },\n}));\n\nconst SearchBar: React.FC<ISearchBarProps> = ({\n array,\n sortFn,\n sortKey = \"name\",\n buttonClick,\n linkTo,\n ItemTemplate,\n arrayKey = \"id\",\n loading = false,\n loadingMessage = \"Loading list...\",\n emptyMessage = \"List is empty\",\n dynamicEmptyMessage,\n inputBackgroundColor,\n placeholder,\n disabledSearch,\n delay = 500,\n minQueryLength = 3,\n handleOnChange,\n searchKeys = [\"name\"],\n alphabetisedHeader = true,\n initialSearchQuery = \"\",\n isResultDisabled,\n}) => {\n const classes = {\n ...useSpacingStyles(),\n ...useLayoutStyles(),\n ...useSearchBarStyles({ background: inputBackgroundColor }),\n };\n const [searchInput, setSearchInput] = useState(initialSearchQuery);\n const [blockSearch, setBlockSearch] = useState(false);\n const [result, setResult] = useState(array);\n\n useDebounceEffect(\n () => {\n if (!handleOnChange && !blockSearch && searchInput.length >= minQueryLength) {\n setResult(\n array?.filter((item) => {\n const itemIsFound = searchKeys.some((key) =>\n item[key]?.toLowerCase().includes(searchInput.toLowerCase())\n );\n return itemIsFound;\n })\n );\n }\n },\n [searchInput, array],\n delay\n );\n\n useDebounceEffect(\n () => {\n if (handleOnChange && !blockSearch && searchInput.length >= minQueryLength) {\n handleOnChange(searchInput);\n }\n },\n [searchInput],\n delay\n );\n\n useEffect(() => {\n setResult(array);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [array]);\n\n return (\n <>\n <Box className={`${classes.searchBox} ${classes.limitWidth50rem}`}>\n <InputBase\n disabled={disabledSearch}\n type=\"text\"\n value={searchInput}\n placeholder={placeholder || \"Enter to search\"}\n onChange={(event) => {\n if (blockSearch) setBlockSearch(false);\n setSearchInput(event.target.value);\n }}\n className={classes.searchField}\n endAdornment={\n <InputAdornment position=\"end\" className={classes.rightSpacer2}>\n <SearchIcon className={classes.searchIcon} />\n </InputAdornment>\n }\n />\n </Box>\n {array !== null && (\n <AlphabeticalList\n array={result}\n sortFn={sortFn}\n sortKey={sortKey}\n buttonClick={buttonClick}\n linkTo={linkTo}\n ItemTemplate={ItemTemplate}\n arrayKey={arrayKey}\n loading={loading}\n loadingMessage={loadingMessage}\n emptyMessage={\n dynamicEmptyMessage ? dynamicEmptyMessage(searchInput) : emptyMessage\n }\n alphabetisedHeader={alphabetisedHeader}\n isItemDisabled={isResultDisabled}\n />\n )}\n </>\n );\n};\n\nexport default SearchBar;\n","import React from \"react\";\nimport { TextField as MaterialTextField } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport NumberFormat, { NumberFormatProps } from \"react-number-format\";\nimport { ITextFieldProps } from \"./TextField.types\";\nimport { BORDER_RADIUS, NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\n\nconst useStyles = makeStyles((theme) => ({\n inputField: ({ size }: { size: \"small\" | \"medium\" }) => ({\n borderRadius: BORDER_RADIUS,\n ...(size === \"small\" ? theme.typography.body2 : {}),\n }),\n labelStyles: ({ size }: { size: \"small\" | \"medium\" }) => ({\n ...(size === \"small\"\n ? {\n transform: \"translate(14px, 9px) scale(1) !important\",\n ...theme.typography.body2,\n \"&.MuiInputLabel-outlined.MuiInputLabel-shrink\": {\n transform: \"translate(15px, -9px) scale(0.75) !important\",\n },\n }\n : {}),\n }),\n}));\n\nconst TextField: React.FC<ITextFieldProps> = ({\n size = \"small\",\n styling,\n numberField,\n inputProps = {},\n InputProps = {},\n accessLevel,\n disabled,\n fixedDecimalScale,\n ...rest\n}) => {\n const classes = useStyles({ size });\n\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n const inputPropsForNumberField = {\n ...(numberField && { fixedDecimalScale: !!fixedDecimalScale }),\n };\n\n return (\n <MaterialTextField\n className={styling || \"\"}\n disabled={disabledProp}\n variant=\"outlined\"\n {...rest}\n inputProps={{\n ...inputProps,\n ...inputPropsForNumberField,\n }}\n InputProps={{\n ...InputProps,\n className: classes.inputField,\n inputComponent: numberField ? (NumberFormatField as any) : undefined,\n }}\n InputLabelProps={{\n className: classes.labelStyles,\n }}\n size={size}\n />\n );\n};\n\nexport default TextField;\n\ninterface INumberFormatProps extends Omit<NumberFormatProps, \"onChange\"> {\n onChange: (event: { target: { name: string; value: string } }) => void;\n fixedDecimalScale: boolean;\n}\n\nexport const NumberFormatField = (props: INumberFormatProps) => {\n const { onChange, ...other } = props;\n\n return (\n <NumberFormat\n {...other}\n onValueChange={(values) => {\n onChange({\n target: {\n name: props.name || \"\",\n value: values.value,\n },\n });\n }}\n thousandSeparator\n decimalScale={2}\n isNumericString\n />\n );\n};\n","import ExpandMoreRoundedIcon from \"@mui/icons-material/ExpandMoreRounded\";\nimport { MenuItem, Theme } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React, { useState } from \"react\";\nimport TextField from \"../TextField/TextField\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport { ISelectProps } from \"./Select.types\";\n\ninterface IStyleProps {\n open: boolean;\n maxListHeight?: number;\n variant: \"standard\" | \"outlined\";\n disabled?: boolean;\n}\n\nconst useSelectStyles = makeStyles<Theme, IStyleProps>((theme) => ({\n wrapper: {\n \"& .MuiFormLabel-root\": {\n background: \"white\",\n paddingLeft: 4,\n paddingRight: 4,\n },\n },\n root: {\n \"& fieldset\": {\n border: \"0 !important\",\n },\n \"& .MuiSelect-icon\": {\n display: ({ disabled }) => (disabled ? \"none\" : \"block\"),\n transform: ({ open }) => (open ? \"rotateX(180deg)\" : \"rotateX(0deg)\"),\n fill: ({ open }: { open: boolean }) =>\n open ? theme.palette.primary.main : \"#B4B4B4\",\n },\n },\n listWrapper: {\n marginTop: 6,\n ...theme.typography.body2,\n borderRadius: `15px !important`,\n padding: \"0 !important\",\n border: \"solid 1px #D5D5D5\",\n },\n list: {\n padding: \"0 !important\",\n maxHeight: ({ maxListHeight }) => maxListHeight,\n overflowY: \"auto\",\n },\n listItem: {\n ...theme.typography.body2,\n overflow: \"auto\",\n scrollbarWidth: \"thin\",\n paddingTop: 9.5,\n paddingBottom: 9.5,\n paddingLeft: 15,\n paddingRight: 20,\n color: \"#B4B4B4\",\n fontWeight: 500,\n\n \"&:hover\": {\n background: \"#F5F5F5\",\n color: \"#1F1F27\",\n },\n },\n selectedListItem: {\n background: \"white !important\",\n\n \"&:hover\": {\n background: \"#F5F5F5 !important\",\n color: \"#1F1F27 !important\",\n },\n },\n input: {\n ...theme.typography.body2,\n borderRadius: ({ variant }) =>\n variant === \"outlined\" ? `15px !important` : \"0 !important\",\n border: ({ variant }) => (variant === \"outlined\" ? \"solid 1px #D5D5D5\" : undefined),\n borderBottom: ({ variant, disabled }) =>\n variant === \"standard\" && !disabled ? \"solid 1px #D5D5D5\" : undefined,\n borderColor: ({ open }) => (open ? theme.palette.primary.main : \"#D5D5D5\"),\n fontWeight: 500,\n\n paddingLeft: ({ variant }) => (variant === \"standard\" ? 0 : undefined),\n paddingTop: ({ variant }) => (variant === \"standard\" ? 4 : undefined),\n paddingBottom: ({ variant }) => (variant === \"standard\" ? 4 : undefined),\n paddingRight: ({ variant, disabled }) =>\n variant === \"standard\" && disabled ? 0 : undefined,\n\n width: \"100%\",\n },\n}));\n\nconst Select: React.FC<ISelectProps> = ({\n selectOptions,\n styling,\n disabled,\n accessLevel,\n maxListHeight,\n variant = \"outlined\",\n onOpen,\n onClose,\n itemClassName,\n ...rest\n}) => {\n const [open, setOpen] = useState<boolean>(false);\n const classes = useSelectStyles({ open, maxListHeight, variant, disabled });\n\n if (accessLevel === NO_ACCESS_LEVEL) {\n return null;\n }\n\n if (accessLevel === READ_LEVEL) {\n disabled = true;\n }\n\n return (\n <TextField\n {...rest}\n className={[classes.wrapper, styling, rest.className].filter((x) => x).join(\" \")}\n disabled={disabled}\n SelectProps={{\n MenuProps: {\n classes: { root: classes.root, paper: classes.listWrapper, list: classes.list },\n },\n inputProps: {\n className: classes.input,\n },\n IconComponent: ExpandMoreRoundedIcon,\n open,\n onOpen() {\n if (selectOptions.length === 0) return;\n setOpen(true);\n onOpen?.();\n },\n onClose() {\n setOpen(false);\n onClose?.();\n },\n }}\n classes={{\n root: classes.root,\n }}\n select\n >\n {selectOptions.map((option) => (\n <MenuItem\n key={option.value}\n value={option.value}\n disabled={option.disabled ?? false}\n className={[classes.listItem, itemClassName].filter((x) => x).join(\" \")}\n classes={{ selected: classes.selectedListItem }}\n >\n {option.description}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nexport default Select;\n","import React from \"react\";\nimport { DatePicker as MaterialDatePicker } from \"@mui/x-date-pickers/DatePicker\";\nimport { IDatePickerProps } from \"./DatePicker.types\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport TextField from \"../TextField/TextField\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\n\nconst DatePicker: React.FC<IDatePickerProps> = ({\n styling,\n format = \"dd MMM yyyy\",\n minDate = new Date(\"1856-09-25\"),\n accessLevel,\n disabled,\n slots,\n ...rest\n}) => {\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n return (\n <MaterialDatePicker\n className={styling || \"\"}\n {...rest}\n disabled={disabledProp}\n format={format}\n minDate={minDate}\n slots={{\n textField: TextField as React.ElementType<TextFieldProps>,\n ...(slots || {}),\n }}\n />\n );\n};\n\nexport default DatePicker;\n","import React from \"react\";\nimport { DatePicker as MaterialDatePicker } from \"@mui/x-date-pickers/DatePicker\";\nimport TextField from \"../TextField/TextField\";\nimport { IDatePickerProps } from \"./KeyboardDatePicker.types\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\n\nconst KeyboardDatePicker: React.FC<IDatePickerProps> = ({\n styling,\n format = \"dd/MM/yyyy\",\n minDate = new Date(\"1856-09-25\"),\n accessLevel,\n disabled,\n slots,\n ...rest\n}) => {\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n return (\n <MaterialDatePicker\n className={styling || \"\"}\n {...rest}\n disabled={disabledProp}\n format={format}\n minDate={minDate}\n slots={{\n textField: TextField as React.ElementType<TextFieldProps>,\n ...(slots || {}),\n }}\n />\n );\n};\n\nexport default KeyboardDatePicker;\n","import { Box, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React, { useEffect, useState } from \"react\";\nimport Button from \"../Button/Button\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport { useInterval } from \"../hooks\";\nimport { useSpacingStyles } from \"../styles\";\nimport { IButtonWithConfirmProps } from \"./ButtonWithConfirm.types\";\n\nconst useButtonWithConfirmStyles = makeStyles((theme) => ({\n confirmWrapper: {\n display: \"inline-block\",\n },\n confirmContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n whiteText: {\n color: theme.palette.common.white,\n },\n}));\n\nconst ButtonWithConfirm: React.FC<IButtonWithConfirmProps> = ({\n children,\n onClick,\n styling,\n disabled = false,\n variant = \"outlined\",\n color = \"primary\",\n accessLevel = \"\",\n confirmButtonLabel = \"Are you sure?\",\n ...rest\n}) => {\n const classes = { ...useSpacingStyles(), ...useButtonWithConfirmStyles() };\n const [confirmView, setConfirmView] = useState(false);\n const [stopInterval, setStopInterval] = useState<boolean>(false);\n\n useInterval(() => setConfirmView(false), !confirmView || stopInterval ? null : 4500);\n\n useEffect(() => {\n setStopInterval(rest.loading);\n setConfirmView(rest.loading);\n }, [rest.loading]);\n\n if ([NO_ACCESS_LEVEL, READ_LEVEL].includes(accessLevel)) return null;\n\n if (confirmView)\n return (\n <Box className={classes.confirmWrapper}>\n <Box className={classes.confirmContainer}>\n <Typography className={classes.rightSpacer1} variant=\"body1\">\n {confirmButtonLabel}\n </Typography>\n <Button\n {...rest}\n type=\"button\"\n onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setStopInterval(true);\n onClick(e);\n }}\n variant={\"contained\"}\n styling={[classes.whiteText, styling].filter((x) => x).join(\" \")}\n disabled={disabled}\n color={color}\n >\n Confirm{rest.loading ? \"ing\" : \"\"}\n </Button>\n </Box>\n </Box>\n );\n\n return (\n <Button\n type=\"button\"\n variant={variant}\n disabled={disabled}\n styling={styling}\n color={color}\n onClick={() => setConfirmView(true)}\n >\n {children}\n </Button>\n );\n};\n\nexport default ButtonWithConfirm;\n","import React, { ReactChild, ReactNode } from \"react\";\nimport {\n Box,\n Checkbox,\n FormControl,\n FormHelperText,\n InputAdornment,\n MenuItem,\n TextField,\n Typography,\n Select as MuiSelect,\n} from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NumberFormatField } from \"../TextField/TextField\";\nimport {\n IAlignment,\n ICustomRenderFnProps,\n IEssentialRenderFnProps,\n} from \"./EditableTable.types\";\nimport NumberFormat from \"react-number-format\";\nimport { MobileDatePicker } from \"@mui/x-date-pickers/MobileDatePicker\";\nimport Select from \"../Select/Select\";\n\nconst determineWidth = (value: string | number, fixedDecimalScale: boolean) => {\n const valueLength = fixedDecimalScale\n ? (+value).toFixed(2).length\n : value.toString().length;\n\n if (!valueLength) return \"6ch\";\n\n return `${valueLength + 1 + Math.floor(valueLength / 3) / 3}ch`;\n};\n\nconst useDefaultTableCellsStyles = makeStyles((theme) => ({\n inputBase: ({ textAlign }: { textAlign?: IAlignment }) => ({\n height: \"unset\",\n padding: 0,\n textAlign: textAlign || \"center\",\n }),\n input: ({ textAlign }: { textAlign?: IAlignment }) => ({\n textAlign: textAlign || \"center\",\n marginRight: \"0.4rem\",\n marginLeft: \"0.4rem\",\n }),\n startAdornment: {\n color: theme.palette.text.secondary,\n },\n modifiedUnderline: {\n \"&:not(.Mui-disabled):before\": {\n borderBottom: \"none\",\n transition: \"none\",\n },\n \"&:hover:not(.Mui-disabled):before\": {\n borderBottom: `1px solid ${theme.palette.grey[\"500\"]} !important`,\n },\n },\n body2Text: {\n ...theme.typography.body2,\n },\n dateFieldWidth: {\n width: \"8ch\",\n },\n fullDateWidth: {\n width: \"11ch\",\n },\n justifyStart: {\n justifyContent: \"flex-start\",\n },\n justifyCenter: {\n justifyContent: \"center\",\n },\n justifyEnd: {\n justifyContent: \"flex-end\",\n },\n totalContainer: {\n display: \"flex\",\n alignItems: \"center\",\n cursor: \"default\",\n },\n selectFocusBackground: {\n \"&:focus\": {\n backgroundColor: \"unset\",\n },\n },\n}));\n\nexport const TableTextField: React.FC<\n IEssentialRenderFnProps & {\n inputStyling?: string;\n wrapperStyling?: string;\n widthOverride?: string | undefined;\n name?: string | undefined;\n }\n> = ({\n error,\n disabled,\n value,\n onBlur,\n onChange,\n prefix,\n suffix,\n numberField = false,\n textAlign,\n fixedDecimalScale,\n inputStyling = \"\",\n wrapperStyling = \"\",\n widthOverride = undefined,\n name = undefined,\n}) => {\n const classes = useDefaultTableCellsStyles({ textAlign });\n\n const inputPropsForNumberField = {\n ...(numberField && { fixedDecimalScale: !!fixedDecimalScale }),\n };\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return (\n <TextField\n variant=\"standard\"\n name={name}\n className={wrapperStyling}\n error={!!error}\n inputProps={{\n className: `${classes.inputBase} ${inputStyling}`,\n style: { width: widthOverride || determineWidth(value, !!fixedDecimalScale) },\n ...inputPropsForNumberField,\n }}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n InputProps={{\n startAdornment: prefix ? (\n <InputAdornment position=\"end\" className={classes.startAdornment}>\n {prefix}\n </InputAdornment>\n ) : null,\n endAdornment: suffix ? (\n <InputAdornment position=\"start\" className={classes.startAdornment}>\n {suffix}\n </InputAdornment>\n ) : null,\n inputComponent: numberField ? (NumberFormatField as any) : undefined,\n className: `${classes.body2Text} ${classes.modifiedUnderline}`,\n classes: { input: classes.input },\n }}\n helperText={error || undefined}\n disabled={disabled}\n />\n );\n } else return <Typography variant=\"body2\">Incorrect value type</Typography>;\n};\n\nexport const tableTextField = (tableProps: ICustomRenderFnProps) => {\n return <TableTextField {...{ ...tableProps }} />;\n};\n\nexport const tableNumericStringField = (tableProps: ICustomRenderFnProps) => {\n return <TableTextField {...{ ...tableProps, numberField: true }} />;\n};\n\nexport const tableNumericStringFixedDecimalField = (tableProps: ICustomRenderFnProps) => {\n return (\n <TableTextField {...{ ...tableProps, numberField: true, fixedDecimalScale: true }} />\n );\n};\n\nexport const SelectionCheckbox = withStyles(\n createStyles({\n root: {\n padding: \"3px\",\n },\n })\n)(Checkbox);\n\ninterface ITableDatePicker extends IEssentialRenderFnProps {\n fullDate?: boolean;\n}\n\nexport const TableDatePicker: React.FC<ITableDatePicker> = ({\n disabled,\n fullDate = false,\n value,\n error,\n onChange,\n onBlur,\n textAlign,\n}) => {\n const classes = useDefaultTableCellsStyles({ textAlign });\n\n return (\n <MobileDatePicker\n disabled={disabled}\n views={fullDate ? undefined : [\"year\", \"month\"]}\n value={value as string | Date}\n format={fullDate ? \"dd MMM yyyy\" : \"MMM yyyy\"}\n onChange={onChange}\n slotProps={{\n textField: {\n helperText: error || undefined,\n error: !!error,\n InputProps: {\n className: `${classes.body2Text} ${classes.modifiedUnderline}`,\n },\n inputProps: {\n className: `${classes.inputBase} ${\n fullDate ? classes.fullDateWidth : classes.dateFieldWidth\n }`,\n classes: { input: classes.input },\n },\n variant: \"standard\",\n },\n }}\n />\n );\n};\n\nexport const tableDateField = (tableProps: ICustomRenderFnProps) => {\n return <TableDatePicker fullDate {...tableProps} />;\n};\n\nconst TableCheckbox: React.FC<IEssentialRenderFnProps> = ({\n value,\n disabled,\n onChange,\n}) => {\n return (\n <Checkbox\n disabled={disabled}\n checked={value as boolean}\n onChange={onChange}\n color=\"primary\"\n size=\"small\"\n />\n );\n};\n\nexport const tableCheckbox = (tableProps: ICustomRenderFnProps) => {\n return <TableCheckbox {...tableProps} />;\n};\n\ninterface INonEditableField\n extends Pick<\n IEssentialRenderFnProps,\n \"numberField\" | \"prefix\" | \"suffix\" | \"textAlign\" | \"fixedDecimalScale\"\n > {\n text: React.ReactText;\n styling?: string;\n inputStyling?: string;\n widthOverride?: string | undefined;\n}\n\nexport const NonEditableField: React.FC<INonEditableField> = ({\n text,\n numberField = false,\n prefix = null,\n suffix = null,\n textAlign,\n fixedDecimalScale,\n styling = \"\",\n inputStyling = \"\",\n widthOverride = undefined,\n}) => {\n const classes = useDefaultTableCellsStyles({});\n return (\n <Box\n className={`${classes.totalContainer} ${classes.body2Text} ${\n textAlign === \"left\"\n ? classes.justifyStart\n : textAlign === \"right\"\n ? classes.justifyEnd\n : classes.justifyCenter\n } ${styling}`}\n style={{\n width: widthOverride,\n }}\n >\n {prefix && prefix}\n <Box className={classes.body2Text} style={{ width: widthOverride }}>\n {numberField ? (\n <NumberFormat\n className={inputStyling}\n value={text}\n displayType={\"text\"}\n thousandSeparator\n isNumericString\n decimalScale={2}\n fixedDecimalScale={fixedDecimalScale}\n />\n ) : (\n text\n )}\n </Box>\n {suffix && suffix}\n </Box>\n );\n};\n\ninterface ITableSelect extends IEssentialRenderFnProps {\n selectOptions: { [key: string]: ReactChild };\n}\n\nexport const TableSelect: React.FC<ITableSelect> = ({\n error,\n value,\n onBlur,\n onChange,\n selectOptions,\n disabled,\n}) => {\n const classes = useDefaultTableCellsStyles({});\n return (\n <FormControl variant=\"standard\" margin=\"none\" error={!!error}>\n <Select\n variant=\"standard\"\n className={`${classes.body2Text} ${classes.modifiedUnderline}`}\n inputProps={{ className: classes.selectFocusBackground }}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n disabled={disabled}\n selectOptions={Object.entries(selectOptions).map(([value, description]) => ({\n value,\n description,\n }))}\n />\n {error && <FormHelperText>{error}</FormHelperText>}\n </FormControl>\n );\n};\n\ninterface IMultipleTableSelect extends Omit<IEssentialRenderFnProps, \"value\"> {\n selectOptions: { [key: string]: ReactChild };\n value: string[];\n renderValue?: (value: any) => ReactNode;\n}\n\nexport const TableMultipleSelect: React.FC<IMultipleTableSelect> = ({\n error,\n value,\n onBlur,\n onChange,\n selectOptions,\n disabled,\n renderValue,\n}) => {\n const classes = useDefaultTableCellsStyles({});\n return (\n <FormControl variant=\"standard\" margin=\"none\" error={!!error}>\n <MuiSelect\n variant=\"standard\"\n className={`${classes.body2Text} ${classes.modifiedUnderline}`}\n inputProps={{ className: classes.selectFocusBackground }}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n disabled={disabled}\n renderValue={renderValue}\n multiple={true}\n >\n {Object.entries(selectOptions).map(([key, value]) => (\n <MenuItem className={classes.body2Text} key={key} value={key}>\n {value}\n </MenuItem>\n ))}\n </MuiSelect>\n {error && <FormHelperText>{error}</FormHelperText>}\n </FormControl>\n );\n};\n","import React, {\n FC,\n forwardRef,\n Fragment,\n memo,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n useTable,\n useRowSelect,\n useFilters,\n CellProps,\n HeaderProps,\n HeaderGroup,\n usePagination,\n useGlobalFilter,\n useAsyncDebounce,\n} from \"react-table\";\nimport {\n Table as MUITable,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n Box,\n Tooltip,\n InputBase,\n} from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport { EDITED_STATUS, NEW_STATUS } from \"../globals\";\nimport { SelectionCheckbox, tableTextField } from \"./defaultCells\";\nimport { didCellValueChange } from \"../utils\";\nimport {\n IEditableTableProps,\n RowData,\n ExtendedCellProps,\n TableCellValues,\n ITableContentProps,\n IGlobalFilterProps,\n} from \"./EditableTable.types\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport { Pagination } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { useVirtual } from \"react-virtual\";\n\nconst useStyles = makeStyles((theme) => ({\n newRowHighlight: {\n backgroundColor: \"#73c4ca30\",\n },\n editedCellHighlight: {\n backgroundColor: \"#5840f52e !important\",\n backgroundClip: \"padding-box\",\n },\n editedBorder: {\n border: \"3px solid #5840f52e\",\n borderWidth: \"2px 4px\",\n },\n errorBorder: {\n border: `3px solid ${theme.palette.error.light}`,\n borderWidth: \"2px 4px\",\n },\n emptyLoadingPadding: {\n paddingTop: \"0.75rem\",\n paddingBottom: \"0.75rem\",\n },\n centeredText: {\n textAlign: \"center\",\n },\n disabled: {\n backgroundColor: theme.palette.action.hover,\n },\n pagination: {\n marginTop: \"1rem\",\n marginBottom: \"1rem\",\n },\n virtualisationContainer: {\n maxHeight: \"500px\",\n overflow: \"auto\",\n },\n cellPadding: {\n padding: \".5rem .75rem\",\n },\n shadedHeader: {\n \"&:nth-of-type(even).shadedHeader\": {\n backgroundColor: \"#eeeeee\",\n },\n },\n shadedBodyCell: {\n \"&:nth-of-type(even).shadedBodyCell\": {\n backgroundColor: \"rgba(0, 0, 0, 0.07)\",\n backgroundClip: \"padding-box\",\n },\n },\n shadedHeaderGroupParent: {\n \"&:nth-of-type(even).shadedHeaderGroupParent\": {\n backgroundColor: \"#eeeeee\",\n },\n },\n shadedHeaderGroup2Children: {\n \"&:nth-of-type(4n-2).shadedHeaderGroup2Children\": {\n backgroundColor: \"#eeeeee\",\n },\n \"&:nth-of-type(4n-1).shadedHeaderGroup2Children\": {\n backgroundColor: \"#eeeeee\",\n },\n },\n shadedBody2CellsInsideGroup: {\n \"&:nth-of-type(4n-2).shadedBody2CellsInsideGroup\": {\n backgroundColor: \"rgba(0, 0, 0, 0.07)\",\n backgroundClip: \"padding-box\",\n },\n \"&:nth-of-type(4n-1).shadedBody2CellsInsideGroup\": {\n backgroundColor: \"rgba(0, 0, 0, 0.07)\",\n backgroundClip: \"padding-box\",\n },\n },\n offsetStickyPosition: {\n top: 0,\n left: \"-3px\",\n zIndex: 2,\n position: \"sticky\",\n },\n stickyHeaderZIndex: {\n zIndex: 3,\n },\n headerCellColour: {\n backgroundColor: theme.palette.grey[50],\n },\n rowCellColour: {\n backgroundColor: theme.palette.common.white,\n backgroundClip: \"padding-box\",\n },\n rowHoverForStickyCell: {\n \"&:hover .stickyRowCell\": {\n backgroundColor: \"rgb(245,245,245)\",\n },\n },\n headerBorders: {\n \"& :not(tr:last-child th)\": {\n border: \"none\",\n },\n },\n}));\n\nconst EditableCell: FC<ExtendedCellProps> = ({\n value: initialValue = \"\",\n row: { index, values, original },\n column: { id },\n syncCellWithState,\n setRows,\n fieldConfig,\n disabled,\n}) => {\n const {\n validationRule,\n dependentValidationRule,\n isCheckbox,\n isDateField,\n customRenderFn,\n prefix,\n suffix,\n textAlign,\n onBlur: configOnBlur,\n onChangeValueModifier,\n } = fieldConfig[id];\n const [error, setError] = useState<false | string>(false);\n // We need to keep and update the state of the cell normally\n const [value, setValue] = useState<TableCellValues>(initialValue);\n const checkbox = isCheckbox;\n\n const validateValue = (value: TableCellValues) => {\n let returnValue = false;\n if (validationRule) {\n try {\n validationRule.validateSync(value);\n if (error) setError(false);\n } catch (e) {\n returnValue = true;\n !error && setError(e.message);\n }\n }\n if (dependentValidationRule) {\n try {\n dependentValidationRule(values).validateSync(value);\n if (error) setError(false);\n } catch (e) {\n returnValue = true;\n !error && setError(e.message);\n }\n }\n return returnValue;\n };\n\n // We'll only update the external data when the input is blurred\n const onBlur = async (fieldValue: TableCellValues, dateFieldError?: boolean) => {\n if (checkbox) {\n syncCellWithState(index, id, fieldValue, false);\n } else if (isDateField) {\n syncCellWithState(index, id, fieldValue, !!dateFieldError);\n } else {\n syncCellWithState(index, id, value, !!error);\n }\n if (\n configOnBlur &&\n setRows &&\n !error &&\n !didCellValueChange(values[id], value, isDateField)\n ) {\n await configOnBlur!({\n rowIndex: index,\n value: value as string,\n setRows,\n values: original,\n });\n }\n };\n\n const onChange = (e: string | React.ChangeEvent<HTMLInputElement>) => {\n let event;\n if (isDateField) {\n event = e as string;\n const adjustedDateValue = onChangeValueModifier\n ? onChangeValueModifier(event)\n : event;\n setValue(adjustedDateValue);\n const dateValidity = validateValue(adjustedDateValue);\n onBlur(adjustedDateValue, dateValidity);\n return;\n }\n event = e as React.ChangeEvent<HTMLInputElement>;\n const eventValue = checkbox ? event.target.checked : event.target.value;\n\n if (checkbox) {\n setValue(eventValue);\n onBlur(eventValue);\n } else {\n setValue(eventValue);\n validateValue(eventValue);\n }\n };\n\n // If the initialValue is changed external, sync it up with our state\n useEffect(() => {\n setValue(initialValue);\n const errorStatus = validateValue(initialValue);\n if (error !== errorStatus) {\n syncCellWithState(index, id, initialValue, errorStatus, true);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialValue]);\n\n useEffect(() => {\n if (original.errors && !!original.errors[id] !== !!error) {\n validateValue(initialValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [original.errors]);\n\n const renderFnProps = {\n value,\n values,\n disabled: disabled || original.disabledRow,\n error,\n onChange,\n onBlur,\n prefix,\n suffix,\n textAlign,\n originalValues: original,\n };\n\n if (customRenderFn) {\n return customRenderFn(renderFnProps);\n } else return tableTextField(renderFnProps);\n};\n\ninterface ITableRowContentsProps {\n row: RowData;\n classes: ReturnType<typeof useStyles>;\n disabled: boolean;\n includeRowSelect: boolean;\n}\n\nconst TableRowContents = forwardRef<HTMLTableRowElement, ITableRowContentsProps>(\n ({ row, classes, disabled, includeRowSelect, ...rest }, ref) => (\n <TableRow\n {...rest}\n ref={ref}\n hover={true}\n className={`${\n row.original.rowStatus === NEW_STATUS ? classes.newRowHighlight : \"\"\n } ${row.original.rowStatus === EDITED_STATUS ? classes.editedBorder : \"\"}\n${Object.values(row.original.errors || {}).includes(true) ? classes.errorBorder : \"\"} ${\n row.original.disabledRow || disabled ? classes.disabled : \"\"\n }\n ${classes.rowHoverForStickyCell}`}\n >\n {row.cells.map((cell: any, n: number) => (\n <TableCell\n {...cell.getCellProps()}\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n align={cell.column.textAlign || \"center\"}\n className={`${\n cell.row.original.rowStatus === EDITED_STATUS &&\n cell.row.original.edited[cell.column.id]\n ? classes.editedCellHighlight\n : \"\"\n } ${classes.cellPadding}\n ${\n cell.column.shadedHeaderGroup\n ? `${classes.shadedBody2CellsInsideGroup} shadedBody2CellsInsideGroup`\n : \"\"\n }\n ${cell.column.shadedHeader ? `${classes.shadedBodyCell} shadedBodyCell` : \"\"}\n ${\n cell.column.stickyCell\n ? `${classes.offsetStickyPosition} ${classes.rowCellColour} stickyRowCell`\n : \"\"\n }\n `}\n padding={includeRowSelect && n === 0 ? \"checkbox\" : \"normal\"}\n >\n {cell.render(\"Cell\")}\n </TableCell>\n ))}\n </TableRow>\n )\n);\n\n// emptyRows is needed for when incoming data is null (loading state).\n// useTable requires memoised row data to be defined at all times.\nconst emptyRows: RowData[] = [];\n\nconst EditableTable: React.FC<IEditableTableProps> = memo(\n ({\n tableRows,\n tableHeaders,\n syncCellWithState,\n setRows = undefined,\n skipPageReset = false,\n fieldConfig,\n disabled = false,\n setSelectedRows,\n includeRowSelect = true,\n filterData,\n filterTypes,\n emptyTableText = \"Table is empty\",\n paginate = false,\n defaultPageSize = 50,\n virtContainerStyling,\n overscan,\n rowHeight,\n includeGlobalSearch,\n disableHeaderSelect,\n }) => {\n const classes = { ...useStyles(), ...useLayoutStyles() };\n const parentRef = React.useRef<HTMLDivElement | null>(null);\n\n // Set our editable cell renderer as the default Cell renderer\n const defaultColumn = React.useMemo(\n () => ({\n Cell: EditableCell,\n }),\n []\n );\n\n const {\n getTableProps, // props to use in table, supplied by react-table\n getTableBodyProps, // props to use in table, supplied by react-table\n headerGroups, // headers enriched with methods by react-table\n rows, // rows enriched with methods by react-table\n page, // selected slice of data subset of rows. Visible paginated data\n prepareRow, // row optimisation function that must be called when rendering rows\n state: { selectedRowIds, pageIndex }, // ids of selected rows and page index from internal table state\n state,\n setFilter, // manipulate filter criteria\n pageCount,\n gotoPage,\n preGlobalFilteredRows,\n setGlobalFilter,\n isAllRowsSelected, // used only to induce re-render in the header and update checkbox state\n selectedFlatRows, // used only to induce re-render in the rows and update checkbox state\n } = useTable<RowData>(\n {\n columns: tableHeaders,\n data: tableRows || emptyRows,\n defaultColumn, // custom cell renderer, that we defined above\n autoResetPage: paginate ? !skipPageReset : false, // value that is used internally to control page number resets\n filterTypes, // fileting config for useFilters hook\n initialState: { pageSize: paginate ? defaultPageSize : undefined }, // setting up initial state for\n\n // below are custom methods and variables that will be supplied to EditableCell\n syncCellWithState, // state function used that controls the state of table\n setRows, // similar to syncCellWithState but you can manipulate whole state\n fieldConfig, //configuration for each of the cells\n disabled,\n autoResetGlobalFilter: false,\n },\n useFilters, // plugging in useFilters hook\n useGlobalFilter, // plugging in useGlobalFilters hook\n usePagination, // plugging in usePagination hook\n useRowSelect, // plugging in useRowSelect hook\n (hooks) => {\n if (includeRowSelect) {\n hooks.visibleColumns.push((columns) => [\n // Let's make a column for selection\n {\n id: \"selection\",\n // The header can use the table's getToggleAllRowsSelectedProps method\n // to render a checkbox\n Header: ({\n getToggleAllRowsSelectedProps,\n getToggleAllPageRowsSelectedProps,\n }: HeaderProps<RowData>) =>\n !disableHeaderSelect ? (\n <SelectionCheckbox\n {...(paginate\n ? getToggleAllPageRowsSelectedProps()\n : getToggleAllRowsSelectedProps())}\n disabled={disabled}\n size=\"small\"\n />\n ) : (\n \"Select\"\n ),\n // The cell can use the individual row's getToggleRowSelectedProps method\n // to the render a checkbox\n Cell: ({ row }: CellProps<RowData>) => (\n <SelectionCheckbox\n {...row.getToggleRowSelectedProps()}\n disabled={disabled || row.original.disableSelection}\n size=\"small\"\n />\n ),\n },\n ...columns,\n ]);\n }\n }\n );\n\n /* Few resources that helped the most with virtualisation work\n * https://github.com/TanStack/virtual/issues/10\n * https://codesandbox.io/s/poc-react-virtual-table-forked-857kdi?file=/src/index.js:2037-2101\n */\n const rowVirtualizer = useVirtual({\n size: (paginate ? page : rows).length,\n parentRef,\n // amount of rows to render above and below visible rows\n overscan: overscan || 5,\n // estimated row size to determine how many rows are visible\n estimateSize: useCallback(() => rowHeight || 54, [rowHeight]),\n });\n\n const rowsToRender = paginate ? page : rows;\n\n const items = rowVirtualizer.virtualItems;\n const paddingTop = items.length > 0 ? items[0].start : 0;\n const paddingBottom =\n items.length > 0 ? rowVirtualizer.totalSize - items[items.length - 1].end : 0;\n\n const handlePageChange = useCallback(\n (event: React.ChangeEvent<unknown>, value: number) => {\n gotoPage(value - 1);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n // provide the data to filter on, if filter types is not present the default filter will be used\n useEffect(() => {\n if (filterData) {\n setFilter(filterData.filterRow, filterData.filterValues);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterData]);\n\n useEffect(() => {\n if (setSelectedRows) {\n setSelectedRows(Object.keys(selectedRowIds).map((id) => +id));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedRowIds]);\n\n return (\n <>\n {includeGlobalSearch ? (\n <GlobalSearch\n preGlobalFilteredRows={preGlobalFilteredRows}\n globalFilter={\n (state as unknown as { globalFilter: string | undefined }).globalFilter\n }\n setGlobalFilter={setGlobalFilter}\n />\n ) : null}\n <div\n ref={parentRef}\n className={virtContainerStyling || classes.virtualisationContainer}\n >\n <TableContent\n {...{\n disabled,\n includeRowSelect,\n getTableProps,\n headerGroups,\n getTableBodyProps,\n rowsToRender,\n prepareRow,\n paddingTop,\n paddingBottom,\n virtualRows: items,\n isAllRowsSelected,\n selectedFlatRows,\n }}\n />\n </div>\n {tableRows === null ? (\n <Box className={classes.emptyLoadingPadding}>\n <LoadingSpinner />\n </Box>\n ) : null}\n {tableRows && !tableRows.length ? (\n <Box className={`${classes.emptyLoadingPadding} ${classes.centeredText}`}>\n <Typography variant=\"body2\">{emptyTableText}</Typography>\n </Box>\n ) : null}\n {paginate && tableRows?.length ? (\n <Pagination\n className={`${classes.flexCenter} ${classes.pagination}`}\n count={pageCount}\n page={pageIndex + 1}\n onChange={handlePageChange}\n shape=\"rounded\"\n showFirstButton\n showLastButton\n />\n ) : null}\n </>\n );\n }\n);\n\nexport default EditableTable;\n\nconst useGlobalSearchStyles = makeStyles((theme) => ({\n container: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n border: `1px solid ${theme.palette.grey[600]}`,\n borderRadius: \"8px\",\n width: \"100%\",\n maxWidth: \"20rem\",\n marginInline: \"auto\",\n color: theme.palette.grey[600],\n \"&:hover\": {\n borderColor: theme.palette.grey[800],\n color: theme.palette.grey[800],\n },\n \"&:focus-within\": {\n borderColor: theme.palette.grey[800],\n color: theme.palette.grey[800],\n },\n },\n input: {\n width: \"100%\",\n maxWidth: \"18rem\",\n color: \"inherit\",\n ...theme.typography.body2,\n },\n}));\n\nconst GlobalSearch: React.FC<IGlobalFilterProps> = memo(\n ({ preGlobalFilteredRows, globalFilter, setGlobalFilter }) => {\n const [value, setValue] = useState(globalFilter);\n\n const classes = { ...useSpacingStyles(), ...useGlobalSearchStyles() };\n\n const onChange = useAsyncDebounce((value: string) => {\n setGlobalFilter(value || undefined);\n }, 200);\n\n const count = preGlobalFilteredRows.length;\n\n return (\n <div className={`${classes.container} ${classes.contentBreak}`}>\n <SearchIcon className={`${classes.rightSpacer1} ${classes.leftSpacer1}`} />\n\n <InputBase\n className={`${classes.input}`}\n value={value || \"\"}\n onChange={(e) => {\n setValue(e.target.value);\n onChange(e.target.value);\n }}\n placeholder={`Search ${count} records...`}\n inputProps={{ \"aria-label\": \"search\" }}\n />\n </div>\n );\n }\n);\n\nconst TableContent: FC<ITableContentProps> = memo(\n ({\n disabled,\n includeRowSelect,\n getTableProps,\n headerGroups,\n getTableBodyProps,\n rowsToRender,\n prepareRow,\n paddingTop,\n paddingBottom,\n virtualRows,\n isAllRowsSelected,\n selectedFlatRows,\n }) => {\n return (\n <MUITable {...getTableProps()} style={{ borderCollapse: \"collapse\" }}>\n <TableHeaderContent\n headerGroups={headerGroups}\n includeRowSelect={includeRowSelect}\n isAllRowsSelected={isAllRowsSelected}\n />\n <TableBody {...getTableBodyProps()}>\n {paddingTop > 0 && (\n <tr>\n <td style={{ height: `${paddingTop}px` }} />\n </tr>\n )}\n\n <TableRows\n {...{\n disabled,\n includeRowSelect,\n rowsToRender,\n prepareRow,\n virtualRows,\n selectedFlatRows,\n }}\n />\n\n {paddingBottom > 0 && (\n <tr>\n <td style={{ height: `${paddingBottom}px` }} />\n </tr>\n )}\n </TableBody>\n </MUITable>\n );\n }\n);\n\nconst TableHeaderContent: FC<\n Pick<ITableContentProps, \"headerGroups\" | \"includeRowSelect\" | \"isAllRowsSelected\">\n> = memo(({ headerGroups, includeRowSelect, isAllRowsSelected }) => {\n const classes = useStyles();\n return (\n <TableHead\n className={`${classes.offsetStickyPosition} ${classes.stickyHeaderZIndex} ${classes.headerBorders}`}\n >\n {headerGroups.map((headerGroup: HeaderGroup<RowData>) => (\n <TableRow {...headerGroup.getHeaderGroupProps()}>\n {headerGroup.headers.map((column, i) => (\n <TableCell\n {...column.getHeaderProps()}\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n align={column.textAlign || \"center\"}\n padding={includeRowSelect && i === 0 ? \"checkbox\" : \"normal\"}\n className={`${classes.headerCellColour}\n ${\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n !column.shadedHeaderGroup\n ? \"\"\n : column.columns\n ? `${classes.shadedHeaderGroupParent} shadedHeaderGroupParent`\n : column.parent\n ? `${classes.shadedHeaderGroup2Children} shadedHeaderGroup2Children`\n : \"\"\n } ${\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n column.shadedHeader ? `${classes.shadedHeader} shadedHeader` : \"\"\n }\n ${\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n column.stickyCell || column.placeholderOf?.stickyCell\n ? `${classes.offsetStickyPosition} ${classes.stickyHeaderZIndex}`\n : \"\"\n }`}\n >\n {column.render(\"Header\")}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableHead>\n );\n});\n\nconst TableRows: FC<\n Pick<\n ITableContentProps,\n | \"rowsToRender\"\n | \"prepareRow\"\n | \"disabled\"\n | \"includeRowSelect\"\n | \"virtualRows\"\n | \"selectedFlatRows\"\n >\n> = memo(({ rowsToRender, virtualRows, prepareRow, ...rest }) => {\n const classes = { ...useStyles(), ...useLayoutStyles() };\n\n return (\n <>\n {virtualRows.map((virtualRow) => {\n const row = rowsToRender[virtualRow.index];\n prepareRow(row);\n return (\n <Fragment key={row.original.rowKey || row.getRowProps().key}>\n {row.original.disabledRow ? (\n //At the moment disabledRow prop is only passed on xero costs so this check is fine\n // If this changes will need to change the check to be more specific\n <Tooltip title={row.original.tooltipText || \"This row is disabled\"} arrow>\n <TableRowContents {...{ ...rest, row, classes }} />\n </Tooltip>\n ) : (\n <TableRowContents {...{ ...rest, row, classes }} />\n )}\n </Fragment>\n );\n })}\n </>\n );\n});\n","import React from \"react\";\nimport { Collapse, Button } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Alert as MUIAlert } from \"@mui/material\";\nimport { useSpacingStyles } from \"../styles\";\nimport { BORDER_RADIUS, FORM_ERROR, FORM_SUCCESS, FORM_WARNING } from \"../globals\";\nimport { IAlertProps } from \"./Alert.types\";\n\nconst useAlertStyles = makeStyles((theme) => ({\n alertStyling: {\n borderRadius: BORDER_RADIUS,\n },\n closeButton: {\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(2),\n },\n showCursor: {\n cursor: \"pointer\",\n },\n}));\n\nconst Alert: React.FC<IAlertProps> = ({\n alertActionHandler,\n formStatus,\n actionButton,\n alertMessage,\n addBreak = true,\n styling,\n}) => {\n const classes = { ...useSpacingStyles(), ...useAlertStyles() };\n return (\n <Collapse in={[FORM_SUCCESS, FORM_ERROR, FORM_WARNING].includes(formStatus)}>\n <MUIAlert\n onClick={alertActionHandler}\n className={`${classes.alertStyling} ${addBreak ? classes.sectionBreak : \"\"} ${\n styling || \"\"\n } ${alertActionHandler ? classes.showCursor : \"\"}`}\n severity={\n formStatus === FORM_ERROR\n ? FORM_ERROR\n : formStatus === FORM_SUCCESS\n ? FORM_SUCCESS\n : FORM_WARNING\n }\n action={\n actionButton ? (\n <Button\n className={classes.closeButton}\n aria-label=\"close\"\n color=\"inherit\"\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n actionButton.handler();\n }}\n >\n {actionButton.text}\n </Button>\n ) : null\n }\n >\n {alertMessage}\n </MUIAlert>\n </Collapse>\n );\n};\n\nexport default Alert;\n","import {\n Box,\n IconButton,\n Typography,\n Button as MUIButton,\n CircularProgress,\n Avatar,\n} from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React, { useEffect, useState } from \"react\";\nimport { CloudUpload, Forward } from \"@mui/icons-material\";\nimport { useSpacingStyles } from \"../styles\";\nimport { IImageDisplayAndUploadProps } from \"./ImageDisplayAndUpload.types\";\nimport Alert from \"../Alert/Alert\";\nimport {\n BORDER_RADIUS,\n FormStatuses,\n FORM_ENABLED,\n FORM_ERROR,\n FORM_LOADING,\n FORM_SUCCESS,\n NO_ACCESS_LEVEL,\n READ_LEVEL,\n} from \"../globals\";\n\nconst useImageDisplayAndUploadStyles = makeStyles((theme) => ({\n greyBox: {\n backgroundColor: theme.palette.grey[200],\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: \"1.5rem\",\n borderRadius: BORDER_RADIUS,\n position: \"relative\",\n height: \"13.25rem\",\n },\n widthLimiter: {\n width: \"100%\",\n maxWidth: \"28rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n hiddenInput: {\n display: \"none\",\n },\n buttonColor: {\n backgroundColor: theme.palette.primary.main,\n },\n iconStyling: {\n color: theme.palette.common.white,\n fontSize: \"3rem\",\n },\n sectionBreak: {\n marginBottom: theme.spacing(3),\n },\n dropBox: {\n height: \"100%\",\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n dropArrowStyling: {\n color: theme.palette.text.secondary,\n fontSize: \"3rem\",\n },\n topLeftArrow: {\n position: \"absolute\",\n top: 0,\n left: 0,\n transform: \"rotate(45deg)\",\n },\n topRightArrow: {\n position: \"absolute\",\n top: 0,\n right: 0,\n transform: \"rotate(135deg)\",\n },\n bottomLeftArrow: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n transform: \"rotate(-45deg)\",\n },\n bottomRightArrow: {\n position: \"absolute\",\n bottom: 0,\n right: 0,\n transform: \"rotate(225deg)\",\n },\n hiddenDisplay: {\n display: \"none\",\n },\n loadingCircle: {\n marginLeft: theme.spacing(1),\n },\n roundedAvatarButton: {\n borderRadius: \"100%\",\n },\n roundedAvatar: {\n width: \"16vmax\",\n height: \"16vmax\",\n maxWidth: \"13rem\",\n maxHeight: \"13rem\",\n },\n organisationImage: {\n maxWidth: \"8rem\",\n minWidth: \"5rem\",\n maxHeight: \"8rem\",\n },\n}));\n\nconst DRAG_ENTER = \"dragEnter\";\nconst INPUT = \"input\";\nconst DRAG_DROP = \"dragDrop\";\n\nconst ImageDisplayAndUpload: React.FC<IImageDisplayAndUploadProps> = ({\n id = \"image-upload\",\n url,\n roundedAvatar = false,\n handleSaveImage,\n alt,\n accessLevel,\n}) => {\n const classes = { ...useImageDisplayAndUploadStyles(), ...useSpacingStyles() };\n const [displayImage, setDisplayImage] = useState<boolean>(!!url);\n const [uploadState, setUploadState] = useState<FormStatuses | typeof DRAG_ENTER>(\n FORM_ENABLED\n );\n const [infoMessage, setInfoMessage] = useState<null | string>(null);\n\n useEffect(() => {\n if (!!url) {\n setDisplayImage(true);\n }\n }, [url]);\n\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = false;\n if (accessLevel === READ_LEVEL) disabledProp = true;\n\n const handleImageUpload = async (\n type: typeof INPUT | typeof DRAG_DROP,\n e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLElement>\n ) => {\n if (disabledProp) return;\n setInfoMessage(null);\n if (type === INPUT) {\n const target = (e as React.ChangeEvent<HTMLInputElement>).target;\n if (target.files && target.files[0]) {\n await imageUpload(target.files[0]);\n } else {\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n }\n } else if (type === DRAG_DROP) {\n const dataTransfer = (e as React.DragEvent<HTMLElement>).dataTransfer;\n if (dataTransfer.files && dataTransfer.files[0]) {\n await imageUpload(dataTransfer.files[0]);\n } else {\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n }\n }\n };\n\n const imageUpload = async (file: File) => {\n setUploadState(FORM_LOADING);\n if (file.size >= 1024 * 1024 * 0.5) {\n setInfoMessage(\"Image size should be less than 0.5MB\");\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n return;\n }\n const format = file.name.split(\".\")[1].toLowerCase();\n\n if (![\"png\", \"jpg\", \"jpeg\"].includes(format)) {\n setInfoMessage(\"Please provide an image in png, jpg or jpeg format\");\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n\n return;\n }\n const buffer = await file.arrayBuffer();\n try {\n await handleSaveImage(format, buffer, file);\n setUploadState(FORM_SUCCESS);\n setDisplayImage(true);\n } catch (e) {\n console.log(e);\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n }\n };\n\n let htmlToDisplay;\n switch (uploadState) {\n case DRAG_ENTER:\n htmlToDisplay = (\n <Box className={classes.dropBox} style={{ pointerEvents: \"none\" }}>\n <Forward className={`${classes.dropArrowStyling} ${classes.topLeftArrow}`} />\n <Forward className={`${classes.dropArrowStyling} ${classes.topRightArrow}`} />\n <Typography variant=\"h5\" color=\"textSecondary\">\n Drop Here\n </Typography>\n <Forward className={`${classes.dropArrowStyling} ${classes.bottomLeftArrow}`} />\n <Forward\n className={`${classes.dropArrowStyling} ${classes.bottomRightArrow}`}\n />\n </Box>\n );\n break;\n\n case FORM_LOADING:\n htmlToDisplay = (\n <Box className={classes.dropBox}>\n <Typography color=\"textSecondary\">Loading...</Typography>\n <CircularProgress className={classes.loadingCircle} size={25} />\n </Box>\n );\n break;\n\n default:\n htmlToDisplay = (\n <label htmlFor={id}>\n <IconButton\n className={`${classes.buttonColor} ${classes.sectionBreak}`}\n aria-label=\"upload picture\"\n component=\"span\"\n size=\"large\"\n >\n <CloudUpload className={classes.iconStyling} />\n </IconButton>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Drag and drop or browse to upload your image or logo.\n </Typography>\n </label>\n );\n break;\n }\n\n return (\n <Box\n className={classes.labelBreak}\n onDragEnter={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setDisplayImage(false);\n }}\n onDragOver={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setDisplayImage(false);\n }}\n >\n {displayImage && (\n <Box className={classes.labelBreak}>\n <label htmlFor={id}>\n <MUIButton\n className={`${roundedAvatar ? classes.roundedAvatarButton : \"\"}`}\n aria-label=\"upload picture\"\n component=\"span\"\n >\n {roundedAvatar ? (\n <Avatar\n className={classes.roundedAvatar}\n src={url!}\n alt={alt || \"Profile Avatar\"}\n />\n ) : (\n <img\n className={classes.organisationImage}\n src={url!}\n alt={alt || \"Company Logo\"}\n />\n )}\n </MUIButton>\n </label>\n </Box>\n )}\n\n <Box\n className={`${classes.greyBox} ${classes.widthLimiter} ${classes.sectionBreak} ${\n displayImage ? classes.hiddenDisplay : \"\"\n }`}\n onDragEnter={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setUploadState(DRAG_ENTER);\n }}\n onDragLeave={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setUploadState(FORM_ENABLED);\n setDisplayImage(url ? true : false);\n }}\n onDragOver={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setUploadState(DRAG_ENTER);\n }}\n onDrop={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n handleImageUpload(DRAG_DROP, e);\n }}\n >\n <input\n id={id}\n className={classes.hiddenInput}\n type=\"file\"\n accept=\".png, .jpg, .jpeg\"\n disabled={disabledProp}\n onChange={(e) => handleImageUpload(INPUT, e)}\n />\n\n {htmlToDisplay}\n </Box>\n\n <Box className={classes.widthLimiter}>\n <Alert\n formStatus={uploadState as FormStatuses}\n alertMessage={\n infoMessage ||\n (uploadState === FORM_SUCCESS\n ? \"Uploaded successfully!\"\n : \"Something went wrong.\")\n }\n />\n </Box>\n </Box>\n );\n};\n\nexport default ImageDisplayAndUpload;\n","import React, { FC } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { ISvgComponentProps } from \"../SvgComponents/types\";\nimport makeStyles from \"@mui/styles/makeStyles\";\n\nexport type NavbarProps = {\n tabs: Array<{\n Icon: FC<ISvgComponentProps>;\n field: string;\n path: string;\n separate?: boolean;\n }>;\n};\n\nconst useNavbarStyles = makeStyles((theme) => ({\n container: {\n minWidth: \"4.5rem\",\n height: \"100%\",\n background: \"linear-gradient(180deg, #B3D6EC 0%, #B3D6EC 40%, #E97FAB 100%)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n borderTopRightRadius: \"1rem\",\n borderBottomRightRadius: \"1rem\",\n border: \"solid 2px rgb(188, 172, 242)\",\n borderLeft: \"none\",\n boxSize: \"border-box\",\n\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"row\",\n justifyContent: \"center\",\n background: \"linear-gradient(90deg, #B3D6EC 0%, #B3D6EC 40%, #E97FAB 100%)\",\n borderRadius: 0,\n borderTopLeftRadius: \"1rem\",\n borderTopRightRadius: \"1rem\",\n width: \"100dvw\",\n margin: \"auto\",\n border: \"solid 2px rgb(188, 172, 242)\",\n borderBottom: \"none\",\n overflowY: \"hidden\",\n overflowX: \"scroll\",\n },\n },\n item: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n textAlign: \"center\",\n color: \"black\",\n textDecoration: \"none\",\n fontSize: \"0.725rem\",\n padding: \"0.75rem 0.5rem\",\n gap: \"0.25rem\",\n\n backgroundColor: \"transparent\",\n transition: \"background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\n \"&:hover\": {\n backgroundColor: \"rgba(0, 0, 0, 0.04)\",\n },\n\n \"&::after\": {\n content: '\" \"',\n position: \"absolute\",\n top: \"15%\",\n bottom: \"15%\",\n right: 0,\n width: 3,\n zIndex: 1,\n transition: \"background-color 80ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\n },\n\n [theme.breakpoints.down(\"sm\")]: {\n padding: \"0.5rem 1.0rem\",\n\n \"&::after\": {\n top: 0,\n left: \"15%\",\n right: \"15%\",\n bottom: \"auto\",\n height: 4,\n width: \"auto\",\n },\n },\n },\n itemActive: {\n \"&::after\": {\n backgroundColor: \"rgb(188, 172, 242)\",\n },\n },\n separateItem: {\n marginTop: \"auto\",\n },\n}));\n\nconst Navbar = ({ tabs }: NavbarProps) => {\n const classes = useNavbarStyles();\n const location = useLocation();\n\n return (\n <div className={classes.container}>\n {tabs.map(({ Icon, field, path, separate = false }) => (\n <Link\n key={path}\n to={path}\n className={[\n classes.item,\n separate ? classes.separateItem : null,\n location.pathname === path ? classes.itemActive : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <>\n <Icon />\n {field}\n </>\n </Link>\n ))}\n </div>\n );\n};\n\nexport default Navbar;\n","import React, { FC } from \"react\";\nimport { ISvgComponentProps } from \"../SvgComponents/types\";\nimport { Container } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport Navbar from \"./Navbar\";\n\nexport type NavbarLayoutTabs = Array<{\n Icon: FC<ISvgComponentProps>;\n field: string;\n path: string;\n separate?: boolean;\n}>;\n\nexport type NavbarLayoutProps = {\n tabs: NavbarLayoutTabs;\n hideTabs?: boolean;\n leaveHeightForMenu?: boolean;\n children: React.ReactNode;\n};\n\ntype NavbarLayoutStyleVariables = {\n hideTabs: boolean;\n leaveHeightForMenu: boolean;\n};\n\nconst useNavbarLayoutStyles = makeStyles((theme) => ({\n tablessGrid: {},\n grid: ({ hideTabs, leaveHeightForMenu }: NavbarLayoutStyleVariables) =>\n hideTabs\n ? {}\n : {\n display: \"grid\",\n gridTemplateRows: \"auto 1fr\",\n gridTemplateColumns: \"auto 1fr\",\n height: leaveHeightForMenu ? \"calc(100dvh - 4rem)\" : \"100dvh\",\n boxSize: \"border-box\",\n\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n gridTemplateRows: \"1fr auto\",\n },\n },\n tabs: {\n height: ({ leaveHeightForMenu }: NavbarLayoutStyleVariables) =>\n leaveHeightForMenu ? \"calc(100dvh - 4rem)\" : \"100dvh\",\n\n [theme.breakpoints.down(\"sm\")]: {\n order: 1,\n height: \"max-content !important\",\n },\n },\n content: {\n padding: \"1rem\",\n boxSizing: \"border-box\",\n height: \"100%\",\n overflowY: \"scroll\",\n },\n}));\n\nconst NavbarLayout = ({\n tabs,\n hideTabs = false,\n leaveHeightForMenu = true,\n children,\n}: NavbarLayoutProps) => {\n const classes = useNavbarLayoutStyles({ hideTabs, leaveHeightForMenu });\n\n return (\n <div className={`${classes.grid}`}>\n <div className={classes.tabs}>\n <Navbar tabs={tabs} />\n </div>\n\n <div className={classes.content}>\n <Container disableGutters>\n <>{children}</>\n </Container>\n </div>\n </div>\n );\n};\n\nexport default NavbarLayout;\n","import React from \"react\";\nimport { MobileDatePicker as MobileMaterialDatePicker } from \"@mui/x-date-pickers/MobileDatePicker\";\nimport { IMobileDatePickerProps } from \"./MobileDatePicker.types\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport TextField from \"../TextField/TextField\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\n\nconst MobileDatePicker: React.FC<IMobileDatePickerProps> = ({\n styling,\n format = \"dd MMM yyyy\",\n minDate = new Date(\"1856-09-25\"),\n accessLevel,\n disabled,\n slots,\n ...rest\n}) => {\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n return (\n <MobileMaterialDatePicker\n className={styling || \"\"}\n closeOnSelect\n {...rest}\n disabled={disabledProp}\n format={format}\n minDate={minDate}\n slots={{\n textField: TextField as React.ElementType<TextFieldProps>,\n ...(slots || {}),\n }}\n />\n );\n};\n\nexport default MobileDatePicker;\n","import React, { useState } from \"react\";\nimport { CheckCircleOutline, ErrorOutline } from \"@mui/icons-material\";\nimport {\n FORM_ENABLED,\n FORM_ERROR,\n FORM_LOADING,\n FORM_SUCCESS,\n FormStatuses,\n} from \"../../globals\";\nimport LoadingSpinner from \"../../LoadingSpinner/LoadingSpinner\";\nimport { useInterval } from \"../../hooks\";\nimport TextField from \"../../TextField/TextField\";\nimport { AutoSaveTextFieldProps } from \"./AutoSave.types\";\nimport { Tooltip } from \"@mui/material\";\n\nexport const AutoSaveTextField: React.FC<AutoSaveTextFieldProps> = ({\n autoSave,\n onBlur: _onBlur,\n ...props\n}) => {\n const [wrapFocus, setWrapFocus] = useState(false);\n const [formStatus, setFormStatus] = useState<FormStatuses | typeof FORM_LOADING>(\n FORM_ENABLED\n );\n const [timerRunning, setTimerRunning] = useState(false);\n\n useInterval(\n async () => {\n setFormStatus(FORM_LOADING);\n try {\n !props.error && (await autoSave(props.value));\n setFormStatus(FORM_SUCCESS);\n } catch (error) {\n setFormStatus(FORM_ERROR);\n }\n\n setWrapFocus(false);\n },\n wrapFocus && timerRunning ? 10000 : null\n );\n return (\n <>\n <TextField\n InputProps={{\n endAdornment:\n wrapFocus &&\n (formStatus === FORM_LOADING ? (\n <LoadingSpinner text={\"\"} />\n ) : formStatus === FORM_SUCCESS ? (\n <Tooltip title=\"Successfully saved updates\">\n <CheckCircleOutline color=\"primary\" />\n </Tooltip>\n ) : formStatus === FORM_ERROR ? (\n <Tooltip title={`Failed to save updates`}>\n <ErrorOutline color=\"primary\" />\n </Tooltip>\n ) : null),\n }}\n onFocus={() => {\n setWrapFocus(true);\n }}\n onChange={() => {\n // Setting it to false and then true causes the timer running to reset on every editor changes\n setTimerRunning(false);\n setTimerRunning(true);\n }}\n onBlur={async () => {\n setTimerRunning(false);\n setWrapFocus(false);\n setFormStatus(FORM_LOADING);\n try {\n !props.error && autoSave && (await autoSave(props.value));\n setFormStatus(FORM_SUCCESS);\n } catch (error) {\n setFormStatus(FORM_ERROR);\n }\n }}\n {...props}\n />\n </>\n );\n};\n","import React from \"react\";\nimport Select from \"../../Select/Select\";\nimport type { AutoSaveSelectFieldProps } from \"./AutoSave.types\";\n\nexport const AutoSaveSelectField: React.FC<AutoSaveSelectFieldProps> = ({\n autoSave,\n selectOptions,\n ...props\n}) => {\n return (\n <Select\n selectOptions={selectOptions}\n {...props}\n onChange={(newValue) => {\n autoSave && autoSave(newValue.target.value);\n }}\n />\n );\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","pack","ar","l","Array","slice","concat","string","trim","required","matches","FORM_SUCCESS","FORM_ERROR","FORM_LOADING","FORM_ENABLED","FORM_WARNING","FORM_DELETING","READ_LEVEL","NO_ACCESS_LEVEL","useSpacingStyles","makeStyles","labelBreak","marginBottom","contentBreak","sectionBreak","doubleSectionBreak","rightSpacer1","marginRight","rightSpacer2","leftSpacer1","marginLeft","leftSpacer2","buttonSpacing","leftRightPadding1","paddingLeft","paddingRight","leftRightPadding2","topBottomPadding1","paddingTop","paddingBottom","topBottomPadding2","classNamePrefix","index","useFontStyles","theme","boldText","fontWeight","bolderText","smallText","fontSize","warningColor","color","palette","warning","main","centerText","textAlign","useLayoutStyles","contentBox","background","borderRadius","padding","limitWidth60rem","maxWidth","limitWidth50rem","limitWidth45rem","limitWidth40rem","limitWidth35rem","limitWidth30rem","limitWidth25rem","centeredText","startAlignedText","width20","width","width49","width50","width60","width100","flexCenter","display","alignItems","justifyContent","centerJustify","leftJustify","rightJustify","useButtonStyles","submitButton","textTransform","containedText","spinnerColour","grey","Button","_a","_b","loading","children","_c","errors","_d","type","onClick","_e","disabled","_f","variant","_g","styling","_h","accessLevel","rest","classes","includes","disabledProp","React","createElement","MaterialButton","className","CircularProgress","size","thickness","ContentLabel","Typography","ContentBox","limitWidth","id","Box","boxShadow","LoadingSpinner","text","StyledTableRow","withStyles","createStyles","root","backgroundColor","MUITableRow","ShadedTableRow","useTableCellStyles","borderBottom","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","head","border","borderTop","primary","borderLeft","borderRight","TableCell","align","headerColours","MUITableCell","TableRow","rowBorderSeparation","SingleCellRow","colSpan","useStaticTableStyles","adjustedCellPadding","tableStyles","borderCollapse","pointer","cursor","bottomBorder","noShading","StaticTableHeaders","memo","headers","headerCellAlignment","TableHead","map","header","key","StaticTable","rows","rowCellAlignment","paginate","itemsPerPage","useState","page","setPage","hasRowsAndPaginated","useMemo","visibleRows","setVisibleRows","handlePageChange","useCallback","event","useEffect","Fragment","Table","TableBody","data","containsOnClick","undefined","row","cell","Pagination","count","Math","ceil","onChange","shape","showFirstButton","showLastButton","useStyles","logoContainer","height","logo","logoInBreadcrumb","margin","logoSpacing","spacing","flexItemsCenter","nonPrimaryBreadcrumbOffset","BreadcrumbsContainer","primaryBreadcrumbItem","common","white","zIndex","secondaryBreadcrumbItem","secondary","tertiaryBreadcrumbItem","tertiary","breadCrumbShadow","shadows","breadcrumbRightMargin","breadcrumbTextOverflow","overflow","textOverflow","activeBreadcrumb","noWrap","whiteSpace","fullBorderRadius","Breadcrumbs","content","colors","first","second","third","Link","component","RouterLink","ButtonBase","underline","link","name","container","svgContainer","button","textDecoration","orgLabel","EntityList","entities","icon","loadingMessage","emptyMessage","Grid","entity","item","xs","md","ErrorIndicator","ErrorIcon","useNavListStyles","listIcon","minWidth","mainIconSize","mainIconMarginAdjustment","marginTop","textOverflowEllipsis","mainListItem","props","mainBackground","mainText","mainHover","action","hover","mainIconColor","mainIcon","activeMainIconColor","mainActiveText","subListItem","subItemBackground","subItemText","subItemHover","activeSubListItem","subItemActiveBackground","subItemActiveText","subItemActiveHover","subItemBorder","relativeWrapper","position","subItemBorderMask","top","bottom","transition","activeSubItemBorder","subItemWrapper","noYMargin","isItemActive","currentPathname","split","NavListItem","mainItem","subItems","config","Icon","mainItemColors","subItemColors","location","useLocation","activeMainItem","pathname","subExpanded","setSubExpanded","ListItem","dense","route","ListItemIcon","ListItemText","disableTypography","preventDefault","stopPropagation","expanded","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","List","disablePadding","sortDescendingStartDateString","array","sort","a","b","startDate","replaceAll","didCellValueChange","oldVal","newVal","isDateValue","isValid","Date","getTime","useSecondaryNavStyles","secondaryNavWrapper","overflowY","overflowX","boxSizing","titleWrapper","title","titleColor","titleIcons","titleIconColor","closeButton","archivedSeparator","archivedBorder","listWrapper","SecondaryLeftNavContainer","secondaryNavItems","primaryNavItems","expandedOptions","setExpandedOptions","stylesProps","history","useHistory","navItem","view","mainItemIcon","find","field","IconButton","url","AddBoxOutlinedIcon","closeButtonSvg","CloseIcon","items","archivedItems","usePrimaryLeftNavStyles","primaryNavContainer","activeBorderColor","flexDirection","itemWrapper","itemBorder","right","activeBorder","iconWrapper","itemName","textColour","activeTextColour","activeText","lastItem","PrimaryLeftNavContainer","navigationLinks","applyActiveBackground","fieldName","path","rootRouteName","startsWith","arr","moveLastItemToBottom","hasSecondary","useLeftNavStyles","leftNavContainer","LeftNavigation","styles","navsWithSecondary","reduce","navs","nav","prev","useMainLayoutStyles","remainingHeightBox","topOffset","left","fullHeightFlexbox","relativeContainer","scrollWrapper","componentWrapper","MainLayout","sideNavigation","desktopWidth","Container","disableGutters","useDebounceEffect","effect","deps","delay","callback","setTimeout","clearTimeout","useInterval","savedCallback","useRef","current","id_1","setInterval","clearInterval","useWhyDidYouUpdate","latestProps","allKeys","keys","changesObj","forEach","changedKeys","k","filter","Boolean","isDeepEqual","isEqual","console","log","changes","values","OptionalTooltip","showTooltip","tooltipText","Tooltip","arrow","useAlphabeticalListStyles","divider","letterHeader","listItem","disabledListItem","pointerEvents","topMargin","AlphabeticalList","sortFn","sortKey","buttonClick","linkTo","ItemTemplate","arrayKey","alphabetisedHeader","isItemDisabled","lastSection","showHeader","currentKey","toLowerCase","disabledResult","reason","toUpperCase","Divider","useSearchBarStyles","searchBox","alignContent","searchField","searchIcon","SearchBar","dynamicEmptyMessage","inputBackgroundColor","placeholder","disabledSearch","minQueryLength","handleOnChange","_j","searchKeys","_k","_l","initialSearchQuery","isResultDisabled","_m","searchInput","setSearchInput","_o","blockSearch","setBlockSearch","_p","setResult","itemIsFound","some","InputBase","target","endAdornment","InputAdornment","SearchIcon","inputField","typography","body2","labelStyles","transform","TextField","numberField","inputProps","InputProps","fixedDecimalScale","inputPropsForNumberField","MaterialTextField","inputComponent","NumberFormatField","InputLabelProps","other","NumberFormat","onValueChange","thousandSeparator","decimalScale","isNumericString","useSelectStyles","wrapper","open","fill","list","maxHeight","maxListHeight","scrollbarWidth","selectedListItem","input","borderColor","Select","selectOptions","onOpen","onClose","itemClassName","setOpen","x","join","SelectProps","MenuProps","paper","IconComponent","ExpandMoreRoundedIcon","select","option","MenuItem","selected","description","DatePicker","format","minDate","slots","MaterialDatePicker","textField","KeyboardDatePicker","useButtonWithConfirmStyles","confirmWrapper","confirmContainer","whiteText","ButtonWithConfirm","confirmButtonLabel","confirmView","setConfirmView","stopInterval","setStopInterval","determineWidth","valueLength","toFixed","toString","floor","useDefaultTableCellsStyles","inputBase","startAdornment","modifiedUnderline","body2Text","dateFieldWidth","fullDateWidth","justifyStart","justifyCenter","justifyEnd","totalContainer","selectFocusBackground","TableTextField","error","onBlur","prefix","suffix","inputStyling","wrapperStyling","widthOverride","style","helperText","tableNumericStringField","tableProps","tableNumericStringFixedDecimalField","SelectionCheckbox","Checkbox","TableDatePicker","fullDate","MobileDatePicker","views","slotProps","tableDateField","TableCheckbox","checked","tableCheckbox","NonEditableField","displayType","TableSelect","FormControl","entries","FormHelperText","TableMultipleSelect","renderValue","MuiSelect","multiple","newRowHighlight","editedCellHighlight","backgroundClip","editedBorder","borderWidth","errorBorder","light","emptyLoadingPadding","pagination","virtualisationContainer","cellPadding","shadedHeader","shadedBodyCell","shadedHeaderGroupParent","shadedHeaderGroup2Children","shadedBody2CellsInsideGroup","offsetStickyPosition","stickyHeaderZIndex","headerCellColour","rowCellColour","rowHoverForStickyCell","headerBorders","EditableCell","initialValue","original","column","syncCellWithState","setRows","fieldConfig","validationRule","dependentValidationRule","isCheckbox","isDateField","customRenderFn","configOnBlur","onChangeValueModifier","setError","setValue","checkbox","validateValue","returnValue","validateSync","message","fieldValue","dateFieldError","rowIndex","errorStatus","renderFnProps","disabledRow","adjustedDateValue","dateValidity","eventValue","originalValues","TableRowContents","forwardRef","ref","includeRowSelect","rowStatus","cells","getCellProps","edited","shadedHeaderGroup","stickyCell","render","emptyRows","EditableTable","tableRows","tableHeaders","skipPageReset","setSelectedRows","filterData","filterTypes","emptyTableText","defaultPageSize","virtContainerStyling","overscan","rowHeight","includeGlobalSearch","disableHeaderSelect","parentRef","defaultColumn","Cell","useTable","columns","autoResetPage","initialState","pageSize","autoResetGlobalFilter","useFilters","useGlobalFilter","usePagination","useRowSelect","hooks","visibleColumns","Header","getToggleAllRowsSelectedProps","getToggleAllPageRowsSelectedProps","getToggleRowSelectedProps","disableSelection","getTableProps","getTableBodyProps","headerGroups","prepareRow","state","selectedRowIds","pageIndex","setFilter","pageCount","gotoPage","preGlobalFilteredRows","setGlobalFilter","isAllRowsSelected","selectedFlatRows","rowVirtualizer","useVirtual","estimateSize","rowsToRender","virtualItems","start","totalSize","end","filterRow","filterValues","GlobalSearch","globalFilter","TableContent","virtualRows","useGlobalSearchStyles","marginInline","useAsyncDebounce","MUITable","TableHeaderContent","TableRows","headerGroup","getHeaderGroupProps","getHeaderProps","parent","placeholderOf","virtualRow","rowKey","getRowProps","useAlertStyles","alertStyling","showCursor","Alert","alertActionHandler","formStatus","actionButton","alertMessage","addBreak","MUIAlert","severity","handler","useImageDisplayAndUploadStyles","greyBox","widthLimiter","hiddenInput","buttonColor","iconStyling","dropBox","dropArrowStyling","topLeftArrow","topRightArrow","bottomLeftArrow","bottomRightArrow","hiddenDisplay","loadingCircle","roundedAvatarButton","roundedAvatar","organisationImage","ImageDisplayAndUpload","handleSaveImage","alt","displayImage","setDisplayImage","uploadState","setUploadState","infoMessage","setInfoMessage","htmlToDisplay","handleImageUpload","files","imageUpload","dataTransfer","file","arrayBuffer","buffer","e_1","Forward","htmlFor","CloudUpload","onDragEnter","onDragOver","MUIButton","Avatar","src","onDragLeave","onDrop","accept","useNavbarStyles","boxSize","breakpoints","down","gap","itemActive","separateItem","Navbar","tabs","separate","useNavbarLayoutStyles","tablessGrid","grid","hideTabs","leaveHeightForMenu","gridTemplateRows","gridTemplateColumns","order","NavbarLayout","MobileMaterialDatePicker","closeOnSelect","AutoSaveTextField","autoSave","wrapFocus","setWrapFocus","setFormStatus","timerRunning","setTimerRunning","CheckCircleOutline","ErrorOutline","onFocus","AutoSaveSelectField","newValue"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/globals/index.ts","../src/styles/spacing.ts","../src/styles/font.ts","../src/styles/layout.ts","../src/Button/Button.tsx","../src/ContentLabel/ContentLabel.tsx","../src/ContentBox/ContentBox.tsx","../src/LoadingSpinner/LoadingSpinner.tsx","../src/StaticTable/StaticTable.tsx","../src/Breadcrumbs/Breadcrumbs.tsx","../src/EntityList/EntityList.tsx","../src/ErrorIndicator/ErrorIndicator.tsx","../src/LeftNavigation/NavListItem.tsx","../src/utils/index.ts","../src/LeftNavigation/SecondaryLeftNavigation.tsx","../src/LeftNavigation/PrimaryLeftNavigation.tsx","../src/LeftNavigation/LeftNavigation.tsx","../src/MainLayout/MainLayout.tsx","../src/hooks/useDebounceEffect.tsx","../src/hooks/useInterval.ts","../src/hooks/useWhyDidYouUpdate.tsx","../src/Tooltip/OptionalTooltip.tsx","../src/AlphabeticalList/AlphabeticalList.tsx","../src/SearchBar/SearchBar.tsx","../src/TextField/TextField.tsx","../src/Select/Select.tsx","../src/DatePicker/DatePicker.tsx","../src/KeyboardDatePicker/KeyboardDatePicker.tsx","../src/ButtonWithConfirm/ButtonWithConfirm.tsx","../src/EditableTable/defaultCells.tsx","../src/EditableTable/EditableTable.tsx","../src/Alert/Alert.tsx","../src/ImageDisplayAndUpload/ImageDisplayAndUpload.tsx","../src/NavbarLayout/Navbar.tsx","../src/NavbarLayout/NavbarLayout.tsx","../src/MobileDatePicker/MobileDatePicker.tsx","../src/AutoSave/Text/index.tsx","../src/AutoSave/Select/index.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { string } from \"yup\";\n\nexport const HALF_REM = \"0.5rem\";\nexport const ONE_REM = \"1rem\";\nexport const ONE_AND_HALF_REM = \"1.5rem\";\nexport const TWO_REM = \"3rem\";\nexport const THREE_REM = \"3rem\";\n\nexport const EDITED_STATUS = \"EDITED\";\nexport const NEW_STATUS = \"NEW\";\n\nexport const VALIDATION_MESSAGE_REQUIRED = \"Required\";\nexport const REGEX_NUMBER_WITH_DECIMALS = /^\\d*\\.?\\d*$/;\n\nexport const YUP_REQUIRED_STRING_SHORT_MESSAGE = string()\n .trim()\n .required(VALIDATION_MESSAGE_REQUIRED);\n\nexport const YUP_STRING_NUMBER_WITH_DECIMALS = string()\n .trim()\n .required(VALIDATION_MESSAGE_REQUIRED)\n .matches(REGEX_NUMBER_WITH_DECIMALS, \"Must be a Number\");\n\nexport const FORM_SUCCESS = \"success\";\nexport const FORM_ERROR = \"error\";\nexport const FORM_LOADING = \"loading\";\nexport const FORM_ENABLED = \"enabled\";\nexport const FORM_WARNING = \"warning\";\nexport const FORM_DELETING = \"deleting\";\n\nexport type FormStatuses =\n | typeof FORM_SUCCESS\n | typeof FORM_ERROR\n | typeof FORM_LOADING\n | typeof FORM_ENABLED\n | typeof FORM_WARNING\n | typeof FORM_DELETING;\n\nexport const READ_LEVEL = \"read\";\nexport const WRITE_LEVEL = \"write\";\nexport const NO_ACCESS_LEVEL = \"noAccess\";\n\nexport type AccessLevels =\n | typeof READ_LEVEL\n | typeof WRITE_LEVEL\n | typeof NO_ACCESS_LEVEL;\n\nexport interface IAuthoriserProp {\n accessLevel?: AccessLevels;\n}\n\nexport const BORDER_RADIUS = \"14px\";\n","import makeStyles from \"@mui/styles/makeStyles\";\nimport { HALF_REM, ONE_AND_HALF_REM, THREE_REM, ONE_REM } from \"../globals\";\n\nexport const useSpacingStyles = makeStyles(\n {\n labelBreak: {\n marginBottom: HALF_REM,\n },\n contentBreak: {\n marginBottom: ONE_REM,\n },\n sectionBreak: {\n marginBottom: ONE_AND_HALF_REM,\n },\n doubleSectionBreak: {\n marginBottom: THREE_REM,\n },\n rightSpacer1: {\n marginRight: HALF_REM,\n },\n rightSpacer2: {\n marginRight: ONE_REM,\n },\n leftSpacer1: {\n marginLeft: HALF_REM,\n },\n leftSpacer2: {\n marginLeft: ONE_REM,\n },\n buttonSpacing: {\n marginLeft: HALF_REM,\n marginRight: HALF_REM,\n marginBottom: ONE_REM,\n },\n leftRightPadding1: {\n paddingLeft: HALF_REM,\n paddingRight: HALF_REM,\n },\n leftRightPadding2: {\n paddingLeft: ONE_REM,\n paddingRight: ONE_REM,\n },\n topBottomPadding1: {\n paddingTop: HALF_REM,\n paddingBottom: HALF_REM,\n },\n topBottomPadding2: {\n paddingTop: ONE_REM,\n paddingBottom: ONE_REM,\n },\n },\n { classNamePrefix: \"spacing\", index: 2 }\n);\n","import makeStyles from \"@mui/styles/makeStyles\";\n\nexport const useFontStyles = makeStyles(\n (theme) => ({\n boldText: {\n fontWeight: 700,\n },\n bolderText: {\n fontWeight: 500,\n },\n smallText: {\n fontSize: \"0.7rem\",\n },\n warningColor: {\n color: theme.palette.warning.main,\n },\n centerText: {\n textAlign: \"center\",\n },\n }),\n { classNamePrefix: \"font\" }\n);\n","import makeStyles from \"@mui/styles/makeStyles\";\nimport { BORDER_RADIUS, ONE_REM, THREE_REM } from \"../globals\";\n\nexport const useLayoutStyles = makeStyles(\n {\n contentBox: {\n background: \"white\",\n borderRadius: BORDER_RADIUS,\n marginBottom: ONE_REM,\n padding: THREE_REM,\n },\n limitWidth60rem: {\n maxWidth: \"60rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth50rem: {\n maxWidth: \"50rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth45rem: {\n maxWidth: \"45rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth40rem: {\n maxWidth: \"40rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth35rem: {\n maxWidth: \"35rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth30rem: {\n maxWidth: \"30rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n limitWidth25rem: {\n maxWidth: \"25rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n centeredText: {\n textAlign: \"center\",\n },\n startAlignedText: {\n textAlign: \"start\",\n },\n width20: {\n width: \"20%\",\n },\n width49: {\n width: \"49%\",\n },\n width50: {\n width: \"50%\",\n },\n width60: {\n width: \"60%\",\n },\n width100: {\n width: \"100%\",\n },\n flexCenter: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n centerJustify: {\n justifyContent: \"center\",\n },\n leftJustify: {\n justifyContent: \"left\",\n },\n rightJustify: {\n justifyContent: \"right\",\n },\n },\n { classNamePrefix: \"layout\", index: 2 }\n);\n","import React from \"react\";\nimport MaterialButton from \"@mui/material/Button\";\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { useSpacingStyles } from \"../styles\";\nimport { IButtonProps } from \"./Button.types\";\nimport { NO_ACCESS_LEVEL, ONE_AND_HALF_REM, READ_LEVEL } from \"../globals\";\n\nconst useButtonStyles = makeStyles((theme) => ({\n submitButton: {\n borderRadius: ONE_AND_HALF_REM,\n padding: `0.4rem 1rem`,\n textTransform: \"none\",\n },\n containedText: {\n color: \"white\",\n },\n spinnerColour: {\n color: theme.palette.grey[500],\n },\n}));\n\nfunction Button<C extends React.ElementType>({\n loading = false,\n children,\n errors = false,\n type = \"submit\",\n onClick,\n disabled = false,\n variant = \"outlined\",\n styling = \"\",\n color = \"primary\",\n accessLevel,\n ...rest\n}: IButtonProps<C>) {\n const classes = { ...useSpacingStyles(), ...useButtonStyles() };\n\n if (accessLevel && [NO_ACCESS_LEVEL, READ_LEVEL].includes(accessLevel)) return null;\n\n let disabledProp = disabled;\n\n if (!disabled && (loading || errors)) {\n disabledProp = true;\n }\n\n return (\n <MaterialButton\n {...rest}\n variant={variant}\n color={color}\n type={type}\n className={`${classes.submitButton} ${\n variant === \"contained\" && classes.containedText\n } ${styling}`}\n disabled={disabledProp}\n onClick={onClick}\n >\n {children}\n {loading ? (\n <CircularProgress\n className={`${classes.leftSpacer1} ${classes.spinnerColour}`}\n size=\"1.1rem\"\n thickness={6}\n />\n ) : (\n \"\"\n )}\n </MaterialButton>\n );\n}\n\nexport default Button;\n","import React from \"react\";\nimport { Typography } from \"@mui/material\";\nimport { useFontStyles } from \"../styles\";\nimport { IContentLabelProps } from \"./ContentLabel.types\";\n\nconst ContentLabel: React.FC<IContentLabelProps> = ({ children, styling = null }) => {\n const classes = useFontStyles();\n return (\n <Typography variant=\"h6\" className={`${classes.bolderText} ${styling || \"\"}`}>\n {children}\n </Typography>\n );\n};\n\nexport default ContentLabel;\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { IContentBoxProps } from \"./ContentBox.types\";\n\nconst ContentBox: React.FC<IContentBoxProps> = ({\n limitWidth = false,\n children,\n styling,\n id,\n}) => {\n const classes = { ...useSpacingStyles(), ...useLayoutStyles() };\n return (\n <Box id={id} boxShadow={3} className={`${classes.contentBox} ${styling || \"\"}`}>\n <Box\n className={`${classes.centeredText} ${limitWidth ? classes.limitWidth50rem : \"\"}`}\n >\n {children}\n </Box>\n </Box>\n );\n};\nexport default ContentBox;\n","import React from \"react\";\nimport { Box, Typography, CircularProgress } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { ILoadingSpinnerProps } from \"./LoadingSpinner.types\";\n\nconst LoadingSpinner: React.FC<ILoadingSpinnerProps> = ({\n text = \"Loading data...\",\n styling,\n}) => {\n const classes = { ...useSpacingStyles(), ...useLayoutStyles() };\n\n return (\n <Box className={`${classes.flexCenter} ${styling || \"\"}`}>\n <Typography variant=\"body2\" color=\"textSecondary\" className={classes.rightSpacer1}>\n {text}\n </Typography>\n <CircularProgress size=\"1.5rem\" />\n </Box>\n );\n};\n\nexport default LoadingSpinner;\n","import React, { memo, ReactNode, useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n Table,\n TableBody,\n TableCell as MUITableCell,\n TableHead,\n TableRow as MUITableRow,\n TableRowProps,\n TableCellProps,\n} from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n cellAlignmentOptions,\n headerColours,\n IStaticTableProps,\n} from \"./StaticTable.types\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport { BORDER_RADIUS } from \"../globals\";\nimport { Pagination } from \"@mui/material\";\n\nconst StyledTableRow = withStyles(\n createStyles({\n root: {\n \"&:hover td\": {\n backgroundColor: \"rgba(0, 0, 0, 0.06)\",\n },\n },\n })\n)(MUITableRow);\n\nconst ShadedTableRow = withStyles(\n createStyles({\n root: {\n \"&:nth-of-type(even) td\": {\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n \"&:hover td\": {\n backgroundColor: \"rgba(0, 0, 0, 0.06)\",\n },\n },\n })\n)(MUITableRow);\n\nconst useTableCellStyles = makeStyles((theme) => ({\n root: {\n borderBottom: \"none\",\n paddingTop: \"8px\",\n paddingBottom: \"8px\",\n \"&:first-child\": {\n borderTopLeftRadius: BORDER_RADIUS,\n borderBottomLeftRadius: BORDER_RADIUS,\n },\n \"&:last-child\": {\n borderTopRightRadius: BORDER_RADIUS,\n borderBottomRightRadius: BORDER_RADIUS,\n },\n },\n head: ({ background, border, text }: headerColours) => ({\n backgroundColor: background || \"HSLA(204, 58.3%, 81.2%, 0.1)\",\n borderTop: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n borderBottom: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n color: text || theme.palette.text.primary,\n fontWeight: 500,\n \"&:first-child\": {\n borderLeft: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n },\n \"&:last-child\": {\n borderRight: `1px solid ${border || \"HSLA(204, 58.3%, 81.2%, 0.3)\"}`,\n },\n }),\n}));\n\ninterface ITableCellProps extends Omit<TableCellProps, \"align\"> {\n align?: cellAlignmentOptions;\n headerColours?: headerColours;\n withoutHeaders?: boolean;\n}\n\nconst TableCell = ({\n children,\n align = \"centerJustify\",\n headerColours,\n ...rest\n}: ITableCellProps) => {\n const classes = {\n ...useLayoutStyles(),\n ...useTableCellStyles({ ...(headerColours || {}) }),\n };\n return (\n <MUITableCell\n {...rest}\n classes={{\n root: classes.root,\n head: classes.head,\n }}\n >\n <div className={`${classes.flexCenter} ${classes[align]}`}>{children}</div>\n </MUITableCell>\n );\n};\n\ninterface ITableRow extends TableRowProps {\n rowBorderSeparation?: boolean;\n}\n\nconst TableRow = ({ rowBorderSeparation = false, children, ...rest }: ITableRow) => {\n if (rowBorderSeparation) {\n return <StyledTableRow {...rest}>{children}</StyledTableRow>;\n }\n return <ShadedTableRow {...rest}>{children}</ShadedTableRow>;\n};\n\ninterface ISingleCellRowProps {\n colSpan: number;\n children: ReactNode;\n}\n\nconst SingleCellRow = ({ colSpan, children }: ISingleCellRowProps) => {\n const classes = useStaticTableStyles();\n return (\n <TableRow>\n <TableCell className={classes.adjustedCellPadding} colSpan={colSpan}>\n {children}\n </TableCell>\n </TableRow>\n );\n};\n\nconst useStaticTableStyles = makeStyles({\n tableStyles: {\n borderCollapse: \"separate\",\n borderBottom: \"1px solid rgb(224, 224, 224)\",\n },\n pointer: {\n cursor: \"pointer\",\n },\n bottomBorder: {\n borderBottom: \"1px solid rgba(224, 224, 224, 1)\",\n },\n noShading: {\n backgroundColor: \"transparent !important\",\n },\n adjustedCellPadding: {\n paddingTop: \"11px\",\n paddingBottom: \"11px\",\n },\n});\n\ntype StaticTableHeadersProps = Pick<\n IStaticTableProps,\n \"headers\" | \"headerCellAlignment\" | \"headerColours\"\n>;\n\nconst StaticTableHeaders: React.FC<StaticTableHeadersProps> = memo(\n ({ headers, headerCellAlignment = [], headerColours }) => {\n if (!headers) return null;\n\n return (\n <TableHead>\n <MUITableRow>\n {headers.map((header: ReactNode, i) => (\n <TableCell\n align={headerCellAlignment[i] || \"centerJustify\"}\n key={`header-cell-${i}`}\n headerColours={headerColours}\n >\n {header}\n </TableCell>\n ))}\n </MUITableRow>\n </TableHead>\n );\n }\n);\n\nconst StaticTable: React.FC<IStaticTableProps> = memo(\n ({\n rowBorderSeparation = false,\n headers,\n rows,\n headerCellAlignment = [],\n rowCellAlignment = [],\n styling,\n headerColours,\n paginate = false,\n itemsPerPage = 30,\n }) => {\n const classes = {\n ...useLayoutStyles(),\n ...useSpacingStyles(),\n ...useStaticTableStyles(),\n };\n const [page, setPage] = useState(1);\n\n const hasRowsAndPaginated = useMemo(\n () => !!(paginate && (rows?.length || 0) > itemsPerPage),\n [itemsPerPage, paginate, rows]\n );\n\n const [visibleRows, setVisibleRows] = useState<typeof rows>(\n hasRowsAndPaginated ? rows!.slice(0, itemsPerPage) : rows\n );\n\n const handlePageChange = useCallback(\n (event: React.ChangeEvent<unknown>, value: number) => {\n setPage(value);\n },\n []\n );\n\n useEffect(() => {\n setVisibleRows(\n hasRowsAndPaginated\n ? rows!.slice(itemsPerPage * (page - 1), itemsPerPage * page)\n : rows\n );\n }, [hasRowsAndPaginated, itemsPerPage, page, rows]);\n\n return (\n <>\n <Table\n className={`${classes.tableStyles} ${\n hasRowsAndPaginated ? classes.contentBreak : \"\"\n } ${styling || \"\"}`}\n >\n <StaticTableHeaders\n headers={headers}\n headerCellAlignment={headerCellAlignment}\n headerColours={headerColours}\n />\n\n <TableBody>\n {visibleRows ? (\n visibleRows.length ? (\n visibleRows.map((data, i) => {\n const containsOnClick = !!data.onClick;\n return (\n <TableRow\n rowBorderSeparation={rowBorderSeparation}\n className={containsOnClick ? classes.pointer : undefined}\n key={`row-${i}`}\n onClick={containsOnClick ? data.onClick : undefined}\n >\n {data.row.map((cell: ReactNode, n) => (\n <TableCell\n align={rowCellAlignment[n] || \"centerJustify\"}\n className={\n rowBorderSeparation && visibleRows.length !== i + 1\n ? classes.bottomBorder\n : undefined\n }\n key={`row-${i}-cell-${n}`}\n >\n {cell}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n ) : (\n <SingleCellRow colSpan={headers?.length || 0}>\n Table is empty\n </SingleCellRow>\n )\n ) : (\n <SingleCellRow colSpan={headers?.length || 0}>\n <LoadingSpinner />\n </SingleCellRow>\n )}\n </TableBody>\n </Table>\n {hasRowsAndPaginated ? (\n <Pagination\n className={classes.flexCenter}\n count={Math.ceil(rows!.length / itemsPerPage)}\n page={page}\n onChange={handlePageChange}\n shape=\"rounded\"\n showFirstButton\n showLastButton\n />\n ) : null}\n </>\n );\n }\n);\n\nexport default StaticTable;\n","import React from \"react\";\nimport { Typography, Link, Box, ButtonBase } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { IBreadcrumbColors, IBreadcrumbsProps } from \"./Breadcrumbs.types\";\n\nconst useStyles = makeStyles((theme) => ({\n logoContainer: {\n width: \"3rem\",\n height: \"3rem\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n logo: {\n width: \"100%\",\n height: \"100%\",\n \"& > div\": {\n width: \"100%\",\n height: \"100%\",\n },\n \"& > svg\": {\n width: \"100%\",\n height: \"100%\",\n },\n },\n logoInBreadcrumb: {\n width: \"2rem\",\n height: \"2rem\",\n margin: \"0.125rem 0 0.125rem 0.313rem\",\n },\n logoSpacing: {\n marginRight: theme.spacing(1),\n },\n flexItemsCenter: {\n display: \"flex\",\n alignItems: \"center\",\n },\n nonPrimaryBreadcrumbOffset: {\n marginLeft: \"2.5rem\",\n },\n BreadcrumbsContainer: {\n height: \"2.25rem\",\n marginLeft: \"0.875rem\",\n marginRight: \"1.5rem\",\n },\n primaryBreadcrumbItem: ({ primary }: IBreadcrumbColors) => ({\n backgroundColor: primary?.background || theme.palette.common.white,\n color: primary?.color || theme.palette.text.primary,\n borderRadius: \"2rem\",\n zIndex: 3,\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n }),\n secondaryBreadcrumbItem: ({ secondary }: IBreadcrumbColors) => ({\n height: \"2.25rem\",\n backgroundColor: secondary?.background || \"#D7D4E4\",\n borderRadius: \"2rem\",\n zIndex: 2,\n marginLeft: \"-2rem\",\n color: secondary?.color || theme.palette.text.primary,\n }),\n tertiaryBreadcrumbItem: ({ tertiary }: IBreadcrumbColors) => ({\n height: \"2.25rem\",\n backgroundColor: tertiary?.background || \"#D7D4E4\",\n borderRadius: \"2rem\",\n zIndex: 1,\n marginLeft: \"-2rem\",\n color: tertiary?.color || theme.palette.common.white,\n }),\n breadCrumbShadow: {\n boxShadow: theme.shadows[2],\n },\n breadcrumbRightMargin: {\n marginRight: \"1rem\",\n },\n breadcrumbTextOverflow: {\n display: \"block\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxWidth: \"12rem\",\n },\n boldText: {\n fontWeight: 500,\n },\n activeBreadcrumb: ({ tertiary }: IBreadcrumbColors) => ({\n backgroundColor: tertiary?.background || \"#D7D4E4\",\n color: tertiary?.color || theme.palette.common.white,\n }),\n noWrap: {\n whiteSpace: \"nowrap\",\n },\n fullBorderRadius: {\n borderRadius: \"100%\",\n },\n}));\n\nconst Breadcrumbs: React.FC<IBreadcrumbsProps> = ({ logo, content, colors }) => {\n const classes = useStyles({ ...(colors || {}) });\n\n const { first = null, second = null, third = null } = content;\n\n return (\n <Box className={`${classes.BreadcrumbsContainer} ${classes.flexItemsCenter}`}>\n <Box\n className={`${\n first ? `${classes.primaryBreadcrumbItem} ${classes.breadCrumbShadow}` : \"\"\n } ${classes.flexItemsCenter}`}\n >\n <Link component={RouterLink} to=\"/\" className={classes.logoSpacing}>\n <Box\n className={`${classes.logoContainer} \n ${first ? classes.logoInBreadcrumb : \"\"}`}\n >\n <ButtonBase className={`${classes.logo} ${classes.fullBorderRadius}`}>\n {logo}\n </ButtonBase>\n </Box>\n </Link>\n {first && (\n <Typography\n color=\"textPrimary\"\n className={`${classes.boldText} ${classes.noWrap} ${classes.primaryBreadcrumbItem}`}\n >\n <Link\n underline=\"none\"\n component={RouterLink}\n to={first.link}\n color=\"inherit\"\n className={`${classes.breadcrumbRightMargin} ${classes.breadcrumbTextOverflow}`}\n >\n {first.name}\n </Link>\n </Typography>\n )}\n </Box>\n\n {second && (\n <Box\n className={`${classes.flexItemsCenter} ${classes.secondaryBreadcrumbItem} ${\n classes.breadCrumbShadow\n } ${!third ? classes.activeBreadcrumb : \"\"}`}\n >\n <Typography color=\"inherit\" className={`${classes.boldText} ${classes.noWrap}`}>\n <Link\n component={RouterLink}\n underline=\"none\"\n to={second.link}\n color=\"inherit\"\n className={`${classes.nonPrimaryBreadcrumbOffset} ${classes.breadcrumbRightMargin} ${classes.breadcrumbTextOverflow}`}\n >\n {second.name}\n </Link>\n </Typography>\n </Box>\n )}\n {third && (\n <Box\n className={`${classes.flexItemsCenter} ${classes.tertiaryBreadcrumbItem} ${classes.breadCrumbShadow}`}\n >\n <Typography color=\"inherit\" className={`${classes.boldText} ${classes.noWrap}`}>\n <Link\n component={RouterLink}\n underline=\"none\"\n to={third.link}\n color=\"inherit\"\n className={`${classes.nonPrimaryBreadcrumbOffset} ${classes.breadcrumbRightMargin} ${classes.breadcrumbTextOverflow}`}\n >\n {third.name}\n </Link>\n </Typography>\n </Box>\n )}\n </Box>\n );\n};\n\nexport default Breadcrumbs;\n","import { Box, Button, Grid, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport React from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { useFontStyles, useSpacingStyles } from \"../styles\";\nimport { IEntityListProps } from \"./EntityList.types\";\nimport { BORDER_RADIUS } from \"../globals\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n marginRight: theme.spacing(-1.5),\n marginLeft: theme.spacing(-1.5),\n },\n svgContainer: {\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n button: {\n display: \"block\",\n textDecoration: \"none\",\n borderRadius: BORDER_RADIUS,\n height: \"100%\",\n width: \"100%\",\n textAlign: \"center\",\n color: theme.palette.text.primary,\n },\n orgLabel: {\n padding: theme.spacing(1),\n paddingTop: 0,\n },\n}));\n\nconst EntityList: React.FC<IEntityListProps> = ({\n entities,\n icon,\n loadingMessage = \"Loading list...\",\n emptyMessage = \"List is empty\",\n onClick,\n}) => {\n const classes = {\n ...useStyles(),\n ...useSpacingStyles(),\n ...useFontStyles(),\n };\n\n return (\n <Box className={classes.container}>\n {!entities ? (\n <LoadingSpinner text={loadingMessage} />\n ) : entities.length ? (\n <Grid container spacing={3}>\n {entities.map((entity, index) => (\n <Grid key={`${entity.name}-${index}`} item xs={4} md={3}>\n <Button\n className={classes.button}\n key={entity.name}\n {...(onClick\n ? { onClick: () => onClick(entity) }\n : {\n component: RouterLink,\n to: entity.link,\n })}\n >\n <Box className={`${classes.svgContainer} ${classes.labelBreak}`}>\n {icon(entity)}\n </Box>\n <Typography className={classes.orgLabel} variant=\"body1\">\n {entity.name}\n </Typography>\n </Button>\n </Grid>\n ))}\n </Grid>\n ) : (\n <Typography className={classes.centerText} variant=\"body2\" color=\"text.primary\">\n {emptyMessage}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default EntityList;\n","import React from \"react\";\nimport ErrorIcon from \"@mui/icons-material/Error\";\nimport { Typography, Box } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { IErrorIndicatorProps } from \"./ErrorIndicator.types\";\n\nconst ErrorIndicator: React.FC<IErrorIndicatorProps> = ({\n text = \"Something went wrong\",\n}) => {\n const classes = { ...useSpacingStyles(), ...useLayoutStyles() };\n\n return (\n <Box className={classes.flexCenter}>\n <ErrorIcon fontSize=\"medium\" className={classes.rightSpacer1} color=\"error\" />\n <Typography variant=\"body2\" color=\"textSecondary\">\n {text}\n </Typography>\n </Box>\n );\n};\n\nexport default ErrorIndicator;\n","import React, { useState } from \"react\";\nimport {\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Collapse,\n Typography,\n Box,\n} from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { ExpandLess, ExpandMore } from \"@mui/icons-material\";\nimport { useLocation, Link as RouterLink } from \"react-router-dom\";\nimport { useFontStyles, useSpacingStyles } from \"../styles\";\nimport { IListItemProps, INavListItemStyleProps } from \"./LeftNavigation.types\";\n\nconst useNavListStyles = makeStyles((theme) => ({\n listIcon: {\n minWidth: \"auto\",\n paddingRight: \"0.25rem\",\n },\n mainIconSize: {\n fontSize: \"1rem\",\n },\n mainIconMarginAdjustment: {\n marginTop: \"3px\",\n },\n textOverflowEllipsis: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n mainListItem: (props: INavListItemStyleProps) => ({\n padding: \"8px 24px 8px 16px\",\n alignItems: \"flex-start\",\n backgroundColor: props.mainBackground || theme.palette.common.white,\n color: props.mainText || theme.palette.text.primary,\n borderRadius: theme.spacing(0.6),\n \"&:hover\": {\n backgroundColor: props.mainHover || theme.palette.action.hover,\n },\n }),\n mainIconColor: (props: INavListItemStyleProps) => ({\n color: props.mainIcon || theme.palette.grey[500],\n }),\n\n activeMainIconColor: (props: INavListItemStyleProps) => ({\n color: props.mainActiveText || \"#8FC1FF\",\n }),\n\n subListItem: (props: INavListItemStyleProps) => ({\n backgroundColor: props.subItemBackground || \"#FFFFFF\",\n color: props.subItemText || theme.palette.text.secondary,\n borderRadius: \"8px\",\n \"&:hover\": {\n backgroundColor: props.subItemHover || \"rgba(143,193,255,0.3)\",\n },\n }),\n\n activeSubListItem: (props: INavListItemStyleProps) => ({\n backgroundColor: props.subItemActiveBackground || \"#FFFFFF\",\n color: props.subItemActiveText || \"#8FC1FF\",\n \"&:hover\": {\n backgroundColor: props.subItemActiveHover || \"rgba(143,193,255,0.3)\",\n },\n }),\n\n subItemBorder: {\n borderLeft: `1px solid ${theme.palette.grey[600]}`,\n marginLeft: \"1px\",\n marginRight: \"1px\",\n width: \"100%\",\n height: \"100%\",\n },\n relativeWrapper: {\n position: \"relative\",\n },\n subItemBorderMask: (props: INavListItemStyleProps) => ({\n borderLeft: `3px solid ${props.subItemActiveText || \"#8FC1FF\"}`,\n borderRadius: \"1px\",\n position: \"absolute\",\n top: \"50%\",\n bottom: \"50%\",\n transition: \"all 0.2s ease-in-out\",\n }),\n activeSubItemBorder: {\n top: \"0 !important\",\n bottom: \"0 !important\",\n },\n subItemWrapper: {\n display: \"flex\",\n marginLeft: \"13px\",\n marginRight: \"16px\",\n },\n noYMargin: {\n marginTop: \"unset\",\n marginBottom: \"unset\",\n },\n}));\n\nconst isItemActive = (currentPathname: string, id: string) => {\n if (currentPathname.split(\"/\").includes(id)) {\n return true;\n }\n return false;\n};\n\nconst NavListItem: React.FC<IListItemProps> = ({ mainItem, subItems, config, Icon }) => {\n const classes = {\n ...useFontStyles(),\n ...useSpacingStyles(),\n ...useNavListStyles({\n ...(config.secondary?.mainItemColors || {}),\n ...(config.secondary?.subItemColors || {}),\n }),\n };\n const location = useLocation();\n\n const activeMainItem = isItemActive(location.pathname, mainItem.id);\n const [subExpanded, setSubExpanded] = useState<boolean>(\n subItems?.length ? activeMainItem : false\n );\n\n return (\n <>\n <ListItem\n button\n dense\n className={classes.mainListItem}\n component={RouterLink}\n to={mainItem.route}\n >\n <ListItemIcon\n className={`${classes.listIcon} ${classes.mainIconMarginAdjustment} ${classes.rightSpacer1}`}\n >\n <Icon\n id=\"second-nav-item\"\n styling={`${classes.mainIconSize} ${classes.mainIconColor} ${\n activeMainItem ? classes.activeMainIconColor : \"\"\n }`}\n />\n </ListItemIcon>\n <ListItemText\n disableTypography\n className={classes.noYMargin}\n primary={\n <Typography\n variant=\"body2\"\n className={`${classes.bolderText} ${classes.textOverflowEllipsis}`}\n color=\"inherit\"\n >\n {mainItem.name}\n {subItems?.length ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={classes.bolderText}\n color=\"inherit\"\n >\n {\" \"}\n ({subItems.length})\n </Typography>\n ) : null}\n </Typography>\n }\n />\n {subItems?.length ? (\n <ListItemIcon\n className={classes.listIcon}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubExpanded((expanded) => !expanded);\n }}\n >\n {subExpanded ? <ExpandLess /> : <ExpandMore />}\n </ListItemIcon>\n ) : null}\n </ListItem>\n {subItems?.length ? (\n <Collapse in={subExpanded} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {subItems.map(({ name, route, id }) => (\n <Box key={id} className={classes.subItemWrapper}>\n <Box className={`${classes.relativeWrapper} ${classes.rightSpacer1}`}>\n <Box className={`${classes.subItemBorder} `} />\n <Box\n className={`${classes.subItemBorderMask} ${\n isItemActive(location.pathname, id)\n ? classes.activeSubItemBorder\n : \"\"\n } `}\n />\n </Box>\n\n <ListItem\n key={route}\n component={RouterLink}\n to={route}\n button\n dense\n className={`${classes.subListItem} ${\n isItemActive(location.pathname, id) ? classes.activeSubListItem : \"\"\n }`}\n >\n <ListItemText\n disableTypography\n primary={\n <Typography\n variant=\"body2\"\n className={classes.textOverflowEllipsis}\n color=\"inherit\"\n >\n {name}\n </Typography>\n }\n />\n </ListItem>\n </Box>\n ))}\n </List>\n </Collapse>\n ) : null}\n </>\n );\n};\n\nexport default NavListItem;\n","import { isValid } from \"date-fns\";\nimport { TableCellValues } from \"../EditableTable/EditableTable.types\";\n\nexport function sortDescendingStartDateString<T extends { startDate: string }>(\n array: T[]\n): T[] {\n return array.sort(\n (a, b) =>\n +b.startDate.split(\"T\")[0].replaceAll(\"-\", \"\") -\n +a.startDate.split(\"T\")[0].replaceAll(\"-\", \"\")\n );\n}\n\nexport const didCellValueChange = (\n oldVal: TableCellValues,\n newVal: TableCellValues,\n isDateValue?: boolean\n) =>\n isDateValue\n ? ((oldVal && isValid(oldVal) ? oldVal : new Date(0)) as Date).getTime() ===\n ((newVal && isValid(newVal) ? newVal : new Date(0)) as Date).getTime()\n : oldVal === newVal;\n","import React from \"react\";\nimport { Box, IconButton, Typography, List } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport NavListItem from \"./NavListItem\";\nimport { useHistory } from \"react-router-dom\";\nimport {\n ISecondaryLeftNavContainerProps,\n ISecondaryNavigationItem,\n} from \"./LeftNavigation.types\";\nimport { sortDescendingStartDateString } from \"../utils\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport AddBoxOutlinedIcon from \"@mui/icons-material/AddBoxOutlined\";\nimport { useFontStyles, useSpacingStyles } from \"../styles\";\nimport { BORDER_RADIUS } from \"../globals\";\n\ntype SecondaryNavStyles = {\n titleColor?: string;\n titleIconColor?: string;\n};\n\nconst useSecondaryNavStyles = makeStyles((theme) => ({\n secondaryNavWrapper: {\n height: \"100%\",\n width: \"300px\",\n background: \"white\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n borderTopRightRadius: BORDER_RADIUS,\n borderBottomRightRadius: BORDER_RADIUS,\n marginLeft: \"-16px\",\n paddingLeft: \"16px\",\n border: `1px solid ${theme.palette.grey[300]}`,\n boxShadow: \"0 2px 4px 0 rgba(0, 0, 0, 0.3)\",\n boxSizing: \"border-box\",\n },\n titleWrapper: {\n marginTop: \"24px\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n },\n title: {\n fontSize: \"18px\",\n fontWeight: 500,\n color: (props: SecondaryNavStyles) => props.titleColor || \"#8FC1FF\",\n },\n titleIcons: {\n color: (props: SecondaryNavStyles) => props.titleIconColor || \"#8FC1FF\",\n },\n closeButton: {\n marginLeft: \"auto\",\n },\n archivedSeparator: {\n paddingLeft: \"8px\",\n color: theme.palette.grey[500],\n },\n archivedBorder: {\n marginTop: \"3rem\",\n border: `1px solid ${theme.palette.grey[200]}`,\n width: \"33%\",\n marginLeft: \"8px\",\n },\n listWrapper: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n}));\n\nconst SecondaryLeftNavContainer: React.FC<ISecondaryLeftNavContainerProps> = ({\n secondaryNavItems,\n primaryNavItems,\n expandedOptions,\n setExpandedOptions,\n config,\n}) => {\n const stylesProps = {\n titleColor: config.secondary?.titleColor,\n titleIconColor: config.secondary?.titleIconColor,\n };\n const classes = {\n ...useSpacingStyles(),\n ...useFontStyles(),\n ...useSecondaryNavStyles(stylesProps),\n };\n const history = useHistory();\n\n const navItem = secondaryNavItems[expandedOptions.view];\n\n if (!navItem) return null;\n\n const mainItemIcon = primaryNavItems.find(\n (item) => item.field === expandedOptions.view\n )!.Icon;\n\n return (\n <Box className={classes.secondaryNavWrapper}>\n <Box className={classes.titleWrapper}>\n <Typography className={`${classes.rightSpacer1} ${classes.title}`}>\n {expandedOptions.view}\n </Typography>\n {navItem.button ? (\n <IconButton\n className={classes.titleIcons}\n size=\"small\"\n type=\"button\"\n onClick={() => history.push(navItem.button!.url)}\n >\n <AddBoxOutlinedIcon />\n </IconButton>\n ) : null}\n <IconButton\n className={`${classes.titleIcons} ${classes.closeButton}`}\n size=\"small\"\n type=\"button\"\n onClick={() => setExpandedOptions({ view: \"\", expanded: false })}\n >\n {config.secondary?.closeButtonSvg || <CloseIcon />}\n </IconButton>\n </Box>\n\n <List className={classes.listWrapper} component=\"div\">\n {sortDescendingStartDateString<ISecondaryNavigationItem>(navItem.items).map(\n (item) => (\n <NavListItem\n key={item.mainItem.route}\n {...item}\n config={config}\n Icon={mainItemIcon}\n />\n )\n )}\n {navItem.archivedItems?.length ? (\n <>\n <Box className={`${classes.archivedBorder} ${classes.contentBreak}`} />\n <Typography\n variant=\"body2\"\n className={`${classes.archivedSeparator} ${classes.bolderText}`}\n >\n Archived {expandedOptions.view}\n </Typography>\n {sortDescendingStartDateString<ISecondaryNavigationItem>(\n navItem.archivedItems\n ).map((item) => (\n <NavListItem\n key={item.mainItem.route}\n {...item}\n config={config}\n Icon={mainItemIcon}\n />\n ))}\n </>\n ) : null}\n </List>\n </Box>\n );\n};\n\nexport default SecondaryLeftNavContainer;\n","import React from \"react\";\nimport { useLocation, Link as RouterLink } from \"react-router-dom\";\nimport { Box, List, ListItem, ListItemIcon, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { IPrimaryConfig, IPrimaryLeftNavContainerProps } from \"./LeftNavigation.types\";\nimport { BORDER_RADIUS } from \"../globals\";\n\nconst usePrimaryLeftNavStyles = makeStyles((theme) => ({\n primaryNavContainer: (props: IPrimaryConfig) => ({\n background: props.background || \"linear-gradient(to bottom, #253a68 40%, #73c4ca)\",\n border: `2px solid ${props.activeBorderColor || \"#8FC1FF\"}`,\n borderLeft: \"none\",\n borderTopRightRadius: BORDER_RADIUS,\n borderBottomRightRadius: BORDER_RADIUS,\n minWidth: \"4.5rem\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n }),\n listWrapper: {\n display: \"flex\",\n flexDirection: \"column\",\n paddingTop: 0,\n },\n itemWrapper: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"0.75rem 0.5rem 0.5rem 0.5rem\",\n },\n itemBorder: {\n borderRight: (props: IPrimaryConfig) =>\n `6px solid ${props.activeBorderColor || \"#8FC1FF\"}`,\n position: \"absolute\",\n bottom: \"50%\",\n top: \"50%\",\n transition: \"all 0.2s ease-in-out\",\n right: \"-3px\",\n },\n activeBorder: {\n top: \"15%\",\n bottom: \"15%\",\n },\n iconWrapper: {\n minWidth: 0,\n marginBottom: \"4px\",\n position: \"relative\",\n },\n itemName: {\n fontSize: \"0.7rem\",\n maxWidth: \"3.5rem\",\n textAlign: \"center\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n },\n textColour: {\n color: (props: IPrimaryConfig) => props.text || \"#FFFFFF\",\n },\n activeTextColour: {\n color: (props: IPrimaryConfig) => props.activeText || \"#8FC1FF\",\n },\n lastItem: {\n marginTop: \"auto\",\n },\n}));\n\nconst PrimaryLeftNavContainer: React.FC<IPrimaryLeftNavContainerProps> = ({\n expandedOptions,\n setExpandedOptions,\n navigationLinks,\n config,\n}) => {\n const location = useLocation();\n const classes = usePrimaryLeftNavStyles({ ...(config.primary || {}) });\n\n const applyActiveBackground = (fieldName: string, path: string) => {\n if (expandedOptions.view === \"\") {\n if (location.pathname === path) {\n return true;\n } else if (\n fieldName !== config.rootRouteName &&\n location.pathname.startsWith(path)\n ) {\n return true;\n } else return false;\n } else if (expandedOptions.view === fieldName) {\n return true;\n } else return false;\n };\n\n return (\n <List className={`${classes.primaryNavContainer} ${classes.listWrapper}`}>\n {navigationLinks.map((item, index, arr) => (\n <ListItem\n key={item.field}\n button\n className={`${classes.itemWrapper} ${classes.textColour} ${\n config.primary?.moveLastItemToBottom && index === arr.length - 1\n ? classes.lastItem\n : \"\"\n }`}\n {...(!!item.hasSecondary ? {} : { component: RouterLink, to: item.path })}\n onClick={() => {\n setExpandedOptions({ view: item.field, expanded: !!item.hasSecondary });\n }}\n >\n <ListItemIcon className={classes.iconWrapper}>\n <item.Icon\n styling={`${classes.textColour} ${\n applyActiveBackground(item.field, item.path)\n ? classes.activeTextColour\n : \"\"\n }`}\n />\n </ListItemIcon>\n <Typography\n variant=\"caption\"\n className={`${classes.itemName} ${classes.textColour} ${\n applyActiveBackground(item.field, item.path) ? classes.activeTextColour : \"\"\n }`}\n >\n {item.field}\n </Typography>\n <Box\n className={`${classes.itemBorder} ${\n applyActiveBackground(item.field, item.path) ? classes.activeBorder : \"\"\n }`}\n />\n </ListItem>\n ))}\n </List>\n );\n};\n\nexport default PrimaryLeftNavContainer;\n","import React, { useState, useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport SecondaryLeftNavContainer from \"./SecondaryLeftNavigation\";\nimport PrimaryLeftNavContainer from \"./PrimaryLeftNavigation\";\nimport { Box } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { ILeftNavigationProps } from \"./LeftNavigation.types\";\n\nconst useLeftNavStyles = makeStyles({\n leftNavContainer: {\n height: \"100%\",\n display: \"flex\",\n position: \"relative\",\n width: \"max-content\",\n },\n});\n\nconst LeftNavigation: React.FC<ILeftNavigationProps> = ({\n primaryNavItems,\n secondaryNavItems,\n config,\n}) => {\n const [expandedOptions, setExpandedOptions] = useState({\n view: \"\",\n expanded: false,\n });\n\n const styles = useLeftNavStyles();\n const location = useLocation();\n\n const navsWithSecondary = primaryNavItems.reduce(\n (navs, nav) => (nav.hasSecondary ? [...navs, nav.field] : navs),\n [] as string[]\n );\n\n useEffect(() => {\n setExpandedOptions((prev) => {\n if (navsWithSecondary.includes(prev.view) && prev.expanded === true) {\n return prev;\n } else return { view: \"\", expanded: false };\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname]);\n\n return (\n <Box component=\"nav\" className={styles.leftNavContainer}>\n <PrimaryLeftNavContainer\n expandedOptions={expandedOptions}\n setExpandedOptions={setExpandedOptions}\n navigationLinks={primaryNavItems}\n config={config}\n />\n\n {expandedOptions.expanded && (\n <SecondaryLeftNavContainer\n secondaryNavItems={secondaryNavItems}\n primaryNavItems={primaryNavItems}\n expandedOptions={expandedOptions}\n setExpandedOptions={setExpandedOptions}\n config={config}\n />\n )}\n </Box>\n );\n};\nexport default LeftNavigation;\n","import React from \"react\";\nimport { Box, Container } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { IMainLayoutProps, IMainLayoutStyleProps } from \"./MainLayout.types\";\n\nconst useMainLayoutStyles = makeStyles((theme) => ({\n remainingHeightBox: {\n position: \"absolute\",\n top: (props: IMainLayoutStyleProps) => props.topOffset ?? \"4rem\",\n bottom: 0,\n left: 0,\n right: 0,\n display: \"flex\",\n },\n fullHeightFlexbox: {\n display: \"flex\",\n height: \"100%\",\n },\n relativeContainer: {\n position: \"relative\",\n },\n scrollWrapper: {\n overflow: \"auto\",\n overflowX: \"hidden\",\n },\n componentWrapper: {\n padding: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n position: \"relative\",\n },\n}));\n\nconst MainLayout: React.FC<IMainLayoutProps> = ({\n sideNavigation,\n children,\n desktopWidth,\n topOffset,\n id,\n}) => {\n const classes = useMainLayoutStyles({ topOffset });\n return (\n <Box className={classes.remainingHeightBox}>\n {sideNavigation ? (\n <Box className={`${classes.fullHeightFlexbox} ${classes.relativeContainer}`}>\n {sideNavigation}\n </Box>\n ) : null}\n <Container\n id={id}\n disableGutters\n maxWidth={false}\n className={classes.scrollWrapper}\n >\n <Container\n disableGutters\n maxWidth={desktopWidth ? \"xl\" : \"lg\"}\n className={classes.componentWrapper}\n >\n {children}\n </Container>\n </Container>\n </Box>\n );\n};\n\nexport default MainLayout;\n","import { useCallback, useEffect } from \"react\";\n\nconst useDebounceEffect = (\n effect: (query: string) => void,\n deps: any[],\n delay: number = 250\n) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const callback = useCallback(effect, deps);\n\n useEffect(() => {\n const timeout = setTimeout(callback, delay);\n return () => clearTimeout(timeout);\n }, [callback, delay]);\n};\n\nexport default useDebounceEffect;\n","import { useEffect, useRef } from \"react\";\n\nconst useInterval = (callback: () => void, delay: number | null) => {\n const savedCallback = useRef<() => void | undefined>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n const tick = () => {\n if (savedCallback.current) savedCallback.current();\n };\n\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n};\n\nexport default useInterval;\n","import { isEqual } from \"lodash\";\nimport { useRef, useEffect } from \"react\";\n\nexport default function useWhyDidYouUpdate(name: string, props: Record<string, any>) {\n const latestProps = useRef(props);\n\n useEffect(() => {\n const allKeys = Object.keys({ ...latestProps.current, ...props });\n\n const changesObj: Record<\n string,\n { from: any; to: any; isDeepEqual: boolean; changedKeys?: string[] }\n > = {};\n allKeys.forEach((key) => {\n if (latestProps.current[key] !== props[key]) {\n changesObj[key] = {\n from: latestProps.current[key],\n to: props[key],\n changedKeys:\n props[key] && typeof props[key] === \"object\"\n ? Object.keys(latestProps.current[key])\n .map((k) => (latestProps.current[key][k] === props[key][k] ? \"\" : k))\n .filter(Boolean)\n : undefined,\n isDeepEqual: isEqual(latestProps.current[key], props[key]),\n };\n }\n });\n\n if (Object.keys(changesObj).length) {\n console.log(\"[why-did-you-update]\", name, {\n changes: changesObj,\n props: { from: latestProps.current, to: props },\n });\n }\n\n latestProps.current = props;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, Object.values(props));\n}\n","import { Tooltip } from \"@mui/material\";\nimport React from \"react\";\n\ninterface IOptionalTooltipProps {\n showTooltip: boolean;\n tooltipText: string;\n children: JSX.Element;\n}\n\nexport const OptionalTooltip: React.FC<IOptionalTooltipProps> = ({\n showTooltip,\n tooltipText,\n children,\n}) => {\n if (showTooltip) {\n // The <div> is important because Tooltip requires a ref-able child\n return (\n <Tooltip title={tooltipText} arrow>\n <div>{children}</div>\n </Tooltip>\n );\n }\n return children;\n};\n","import { Divider, List, ListItem, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { BORDER_RADIUS } from \"../globals\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { IAlphabeticalListProps } from \"./AlphabeticalList.types\";\nimport { OptionalTooltip } from \"../Tooltip\";\n\nconst useAlphabeticalListStyles = makeStyles((theme) => ({\n divider: {\n background: theme.palette.primary.main,\n height: \"0.2rem\",\n },\n letterHeader: {\n cursor: \"default\",\n color: theme.palette.primary.main,\n marginTop: \"1rem\",\n },\n listItem: {\n borderRadius: BORDER_RADIUS,\n border: `1px solid ${theme.palette.grey[300]}`,\n marginBottom: \"0.5rem\",\n paddingLeft: \"24px\",\n boxShadow: theme.shadows[1],\n },\n disabledListItem: {\n \"& > p\": {\n color: \"#b4b4b4\",\n },\n background: \"white !important\",\n pointerEvents: \"none\",\n },\n topMargin: {\n marginTop: theme.spacing(2),\n display: \"block\",\n },\n}));\n\nconst AlphabeticalList: React.FC<IAlphabeticalListProps> = ({\n array,\n sortFn,\n sortKey = \"name\",\n buttonClick,\n linkTo,\n ItemTemplate,\n arrayKey = \"id\",\n loading = false,\n loadingMessage = \"Loading list...\",\n emptyMessage = \"List is empty\",\n alphabetisedHeader = true,\n isItemDisabled,\n}) => {\n const classes = {\n ...useAlphabeticalListStyles(),\n ...useSpacingStyles(),\n ...useLayoutStyles(),\n };\n\n if (array === undefined || loading) {\n return <LoadingSpinner styling={classes.topMargin} text={loadingMessage} />;\n }\n\n if (!array?.length) {\n return (\n <Typography\n className={classes.topMargin}\n align=\"center\"\n variant=\"body2\"\n color=\"textSecondary\"\n >\n {emptyMessage}\n </Typography>\n );\n }\n\n const result = sortFn ? [...array].sort(sortFn) : array;\n let lastSection = \"\";\n\n return (\n <List className={classes.limitWidth50rem}>\n {result.map((item, index) => {\n let showHeader = false;\n if (alphabetisedHeader) {\n const currentKey = (item[sortKey]?.[0] || \"???\").toLowerCase();\n\n if (currentKey !== lastSection) {\n lastSection = currentKey;\n showHeader = true;\n }\n }\n\n const disabledResult = {\n reason: \"\",\n ...(isItemDisabled?.(item) ?? {}),\n } as { disabled: boolean; reason: string };\n\n return (\n <React.Fragment key={item[arrayKey] || `alphabetical-list-${index}`}>\n {alphabetisedHeader && showHeader ? (\n <>\n <Typography className={`${classes.letterHeader}`} align=\"left\">\n {lastSection.toUpperCase()}\n </Typography>\n <Divider className={`${classes.contentBreak} ${classes.divider}`} />\n </>\n ) : null}\n\n <OptionalTooltip\n showTooltip={disabledResult.disabled}\n tooltipText={disabledResult.reason}\n >\n <ListItem\n className={\n disabledResult.disabled\n ? `${classes.listItem} ${classes.disabledListItem}`\n : classes.listItem\n }\n alignItems=\"flex-start\"\n button={(buttonClick || linkTo ? true : undefined) as true & undefined}\n onClick={\n buttonClick && !disabledResult.disabled\n ? () => buttonClick(item)\n : undefined\n }\n {...(linkTo && !buttonClick && !disabledResult.disabled\n ? { component: RouterLink, to: linkTo(item) }\n : {})}\n >\n <ItemTemplate item={item} />\n </ListItem>\n </OptionalTooltip>\n </React.Fragment>\n );\n })}\n </List>\n );\n};\n\nexport default AlphabeticalList;\n","import React, { useEffect, useState } from \"react\";\nimport { Box, InputBase, InputAdornment } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { useDebounceEffect } from \"../hooks\";\nimport { ISearchBarProps } from \"./SearchBar.types\";\nimport { BORDER_RADIUS } from \"../globals\";\nimport AlphabeticalList from \"../AlphabeticalList/AlphabeticalList\";\n\ntype StylesProps = {\n background: string | undefined;\n};\n\nconst useSearchBarStyles = makeStyles((theme) => ({\n searchBox: {\n display: \"flex\",\n alignContent: \"center\",\n alignItems: \"center\",\n padding: \"8px\",\n border: `2px solid ${theme.palette.grey[300]}`,\n borderRadius: BORDER_RADIUS,\n },\n searchField: {\n borderRadius: BORDER_RADIUS,\n width: \"100%\",\n background: ({ background }: StylesProps) => background || \"RGBA(179, 213, 235, 0.1)\",\n height: \"46px\",\n paddingLeft: \"24px\",\n color: theme.palette.grey[600],\n },\n searchIcon: {\n color: theme.palette.grey[600],\n },\n}));\n\nconst SearchBar: React.FC<ISearchBarProps> = ({\n array,\n sortFn,\n sortKey = \"name\",\n buttonClick,\n linkTo,\n ItemTemplate,\n arrayKey = \"id\",\n loading = false,\n loadingMessage = \"Loading list...\",\n emptyMessage = \"List is empty\",\n dynamicEmptyMessage,\n inputBackgroundColor,\n placeholder,\n disabledSearch,\n delay = 500,\n minQueryLength = 3,\n handleOnChange,\n searchKeys = [\"name\"],\n alphabetisedHeader = true,\n initialSearchQuery = \"\",\n isResultDisabled,\n}) => {\n const classes = {\n ...useSpacingStyles(),\n ...useLayoutStyles(),\n ...useSearchBarStyles({ background: inputBackgroundColor }),\n };\n const [searchInput, setSearchInput] = useState(initialSearchQuery);\n const [blockSearch, setBlockSearch] = useState(false);\n const [result, setResult] = useState(array);\n\n useDebounceEffect(\n () => {\n if (!handleOnChange && !blockSearch && searchInput.length >= minQueryLength) {\n setResult(\n array?.filter((item) => {\n const itemIsFound = searchKeys.some((key) =>\n item[key]?.toLowerCase().includes(searchInput.toLowerCase())\n );\n return itemIsFound;\n })\n );\n }\n },\n [searchInput, array],\n delay\n );\n\n useDebounceEffect(\n () => {\n if (handleOnChange && !blockSearch && searchInput.length >= minQueryLength) {\n handleOnChange(searchInput);\n }\n },\n [searchInput],\n delay\n );\n\n useEffect(() => {\n setResult(array);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [array]);\n\n return (\n <>\n <Box className={`${classes.searchBox} ${classes.limitWidth50rem}`}>\n <InputBase\n disabled={disabledSearch}\n type=\"text\"\n value={searchInput}\n placeholder={placeholder || \"Enter to search\"}\n onChange={(event) => {\n if (blockSearch) setBlockSearch(false);\n setSearchInput(event.target.value);\n }}\n className={classes.searchField}\n endAdornment={\n <InputAdornment position=\"end\" className={classes.rightSpacer2}>\n <SearchIcon className={classes.searchIcon} />\n </InputAdornment>\n }\n />\n </Box>\n {array !== null && (\n <AlphabeticalList\n array={result}\n sortFn={sortFn}\n sortKey={sortKey}\n buttonClick={buttonClick}\n linkTo={linkTo}\n ItemTemplate={ItemTemplate}\n arrayKey={arrayKey}\n loading={loading}\n loadingMessage={loadingMessage}\n emptyMessage={\n dynamicEmptyMessage ? dynamicEmptyMessage(searchInput) : emptyMessage\n }\n alphabetisedHeader={alphabetisedHeader}\n isItemDisabled={isResultDisabled}\n />\n )}\n </>\n );\n};\n\nexport default SearchBar;\n","import React from \"react\";\nimport { TextField as MaterialTextField } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport NumberFormat, { NumberFormatProps } from \"react-number-format\";\nimport { ITextFieldProps } from \"./TextField.types\";\nimport { BORDER_RADIUS, NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\n\nconst useStyles = makeStyles((theme) => ({\n inputField: ({ size }: { size: \"small\" | \"medium\" }) => ({\n borderRadius: BORDER_RADIUS,\n ...(size === \"small\" ? theme.typography.body2 : {}),\n }),\n labelStyles: ({ size }: { size: \"small\" | \"medium\" }) => ({\n ...(size === \"small\"\n ? {\n transform: \"translate(14px, 9px) scale(1) !important\",\n ...theme.typography.body2,\n \"&.MuiInputLabel-outlined.MuiInputLabel-shrink\": {\n transform: \"translate(15px, -9px) scale(0.75) !important\",\n },\n }\n : {}),\n }),\n}));\n\nconst TextField: React.FC<ITextFieldProps> = ({\n size = \"small\",\n styling,\n numberField,\n inputProps = {},\n InputProps = {},\n accessLevel,\n disabled,\n fixedDecimalScale,\n ...rest\n}) => {\n const classes = useStyles({ size });\n\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n const inputPropsForNumberField = {\n ...(numberField && { fixedDecimalScale: !!fixedDecimalScale }),\n };\n\n return (\n <MaterialTextField\n className={styling || \"\"}\n disabled={disabledProp}\n {...rest}\n inputProps={{\n ...inputProps,\n ...inputPropsForNumberField,\n }}\n InputProps={{\n ...InputProps,\n className: classes.inputField,\n inputComponent: numberField ? (NumberFormatField as any) : undefined,\n }}\n InputLabelProps={{\n className: classes.labelStyles,\n }}\n variant=\"outlined\"\n size={size}\n />\n );\n};\n\nexport default TextField;\n\ninterface INumberFormatProps extends Omit<NumberFormatProps, \"onChange\"> {\n onChange: (event: { target: { name: string; value: string } }) => void;\n fixedDecimalScale: boolean;\n}\n\nexport const NumberFormatField = (props: INumberFormatProps) => {\n const { onChange, ...other } = props;\n\n return (\n <NumberFormat\n {...other}\n onValueChange={(values) => {\n onChange({\n target: {\n name: props.name || \"\",\n value: values.value,\n },\n });\n }}\n thousandSeparator\n decimalScale={2}\n isNumericString\n />\n );\n};\n","import ExpandMoreRoundedIcon from \"@mui/icons-material/ExpandMoreRounded\";\nimport { MenuItem, Theme } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React, { useState } from \"react\";\nimport TextField from \"../TextField/TextField\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport { ISelectProps } from \"./Select.types\";\n\ninterface IStyleProps {\n open: boolean;\n maxListHeight?: number;\n variant: \"standard\" | \"outlined\";\n disabled?: boolean;\n}\n\nconst useSelectStyles = makeStyles<Theme, IStyleProps>((theme) => ({\n wrapper: {\n \"& .MuiFormLabel-root\": {\n background: \"white\",\n paddingLeft: 4,\n paddingRight: 4,\n },\n },\n root: {\n \"& fieldset\": {\n border: \"0 !important\",\n },\n \"& .MuiSelect-icon\": {\n display: ({ disabled }) => (disabled ? \"none\" : \"block\"),\n transform: ({ open }) => (open ? \"rotateX(180deg)\" : \"rotateX(0deg)\"),\n fill: ({ open }: { open: boolean }) =>\n open ? theme.palette.primary.main : \"#B4B4B4\",\n },\n },\n listWrapper: {\n marginTop: 6,\n ...theme.typography.body2,\n borderRadius: `15px !important`,\n padding: \"0 !important\",\n border: \"solid 1px #D5D5D5\",\n },\n list: {\n padding: \"0 !important\",\n maxHeight: ({ maxListHeight }) => maxListHeight,\n overflowY: \"auto\",\n },\n listItem: {\n ...theme.typography.body2,\n overflow: \"auto\",\n scrollbarWidth: \"thin\",\n paddingTop: 9.5,\n paddingBottom: 9.5,\n paddingLeft: 15,\n paddingRight: 20,\n color: \"#B4B4B4\",\n fontWeight: 500,\n\n \"&:hover\": {\n background: \"#F5F5F5\",\n color: \"#1F1F27\",\n },\n },\n selectedListItem: {\n background: \"white !important\",\n\n \"&:hover\": {\n background: \"#F5F5F5 !important\",\n color: \"#1F1F27 !important\",\n },\n },\n input: {\n ...theme.typography.body2,\n borderRadius: ({ variant }) =>\n variant === \"outlined\" ? `15px !important` : \"0 !important\",\n border: ({ variant }) => (variant === \"outlined\" ? \"solid 1px #D5D5D5\" : undefined),\n borderBottom: ({ variant, disabled }) =>\n variant === \"standard\" && !disabled ? \"solid 1px #D5D5D5\" : undefined,\n borderColor: ({ open }) => (open ? theme.palette.primary.main : \"#D5D5D5\"),\n fontWeight: 500,\n\n paddingLeft: ({ variant }) => (variant === \"standard\" ? 0 : undefined),\n paddingTop: ({ variant }) => (variant === \"standard\" ? 4 : undefined),\n paddingBottom: ({ variant }) => (variant === \"standard\" ? 4 : undefined),\n paddingRight: ({ variant, disabled }) =>\n variant === \"standard\" && disabled ? 0 : undefined,\n\n width: \"100%\",\n },\n}));\n\nconst Select: React.FC<ISelectProps> = ({\n selectOptions,\n styling,\n disabled,\n accessLevel,\n maxListHeight,\n variant = \"outlined\",\n onOpen,\n onClose,\n itemClassName,\n ...rest\n}) => {\n const [open, setOpen] = useState<boolean>(false);\n const classes = useSelectStyles({ open, maxListHeight, variant, disabled });\n\n if (accessLevel === NO_ACCESS_LEVEL) {\n return null;\n }\n\n if (accessLevel === READ_LEVEL) {\n disabled = true;\n }\n\n return (\n <TextField\n {...rest}\n className={[classes.wrapper, styling, rest.className].filter((x) => x).join(\" \")}\n disabled={disabled}\n SelectProps={{\n MenuProps: {\n classes: { root: classes.root, paper: classes.listWrapper, list: classes.list },\n },\n inputProps: {\n className: classes.input,\n },\n IconComponent: ExpandMoreRoundedIcon,\n open,\n onOpen() {\n if (selectOptions.length === 0) return;\n setOpen(true);\n onOpen?.();\n },\n onClose() {\n setOpen(false);\n onClose?.();\n },\n }}\n classes={{\n root: classes.root,\n }}\n select\n >\n {selectOptions.map((option) => (\n <MenuItem\n key={option.value}\n value={option.value}\n disabled={option.disabled ?? false}\n className={[classes.listItem, itemClassName].filter((x) => x).join(\" \")}\n classes={{ selected: classes.selectedListItem }}\n >\n {option.description}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n\nexport default Select;\n","import React from \"react\";\nimport { DatePicker as MaterialDatePicker } from \"@mui/x-date-pickers/DatePicker\";\nimport { IDatePickerProps } from \"./DatePicker.types\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport TextField from \"../TextField/TextField\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\n\nconst DatePicker: React.FC<IDatePickerProps> = ({\n styling,\n format = \"dd MMM yyyy\",\n minDate = new Date(\"1856-09-25\"),\n accessLevel,\n disabled,\n slots,\n ...rest\n}) => {\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n return (\n <MaterialDatePicker\n className={styling || \"\"}\n {...rest}\n disabled={disabledProp}\n format={format}\n minDate={minDate}\n slots={{\n textField: TextField as React.ElementType<TextFieldProps>,\n ...(slots || {}),\n }}\n />\n );\n};\n\nexport default DatePicker;\n","import React from \"react\";\nimport { DatePicker as MaterialDatePicker } from \"@mui/x-date-pickers/DatePicker\";\nimport TextField from \"../TextField/TextField\";\nimport { IDatePickerProps } from \"./KeyboardDatePicker.types\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\n\nconst KeyboardDatePicker: React.FC<IDatePickerProps> = ({\n styling,\n format = \"dd/MM/yyyy\",\n minDate = new Date(\"1856-09-25\"),\n accessLevel,\n disabled,\n slots,\n ...rest\n}) => {\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n return (\n <MaterialDatePicker\n className={styling || \"\"}\n {...rest}\n disabled={disabledProp}\n format={format}\n minDate={minDate}\n slots={{\n textField: TextField as React.ElementType<TextFieldProps>,\n ...(slots || {}),\n }}\n />\n );\n};\n\nexport default KeyboardDatePicker;\n","import { Box, Typography } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React, { useEffect, useState } from \"react\";\nimport Button from \"../Button/Button\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport { useInterval } from \"../hooks\";\nimport { useSpacingStyles } from \"../styles\";\nimport { IButtonWithConfirmProps } from \"./ButtonWithConfirm.types\";\n\nconst useButtonWithConfirmStyles = makeStyles((theme) => ({\n confirmWrapper: {\n display: \"inline-block\",\n },\n confirmContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n whiteText: {\n color: theme.palette.common.white,\n },\n}));\n\nconst ButtonWithConfirm: React.FC<IButtonWithConfirmProps> = ({\n children,\n onClick,\n styling,\n disabled = false,\n variant = \"outlined\",\n color = \"primary\",\n accessLevel = \"\",\n confirmButtonLabel = \"Are you sure?\",\n ...rest\n}) => {\n const classes = { ...useSpacingStyles(), ...useButtonWithConfirmStyles() };\n const [confirmView, setConfirmView] = useState(false);\n const [stopInterval, setStopInterval] = useState<boolean>(false);\n\n useInterval(() => setConfirmView(false), !confirmView || stopInterval ? null : 4500);\n\n useEffect(() => {\n setStopInterval(rest.loading);\n setConfirmView(rest.loading);\n }, [rest.loading]);\n\n if ([NO_ACCESS_LEVEL, READ_LEVEL].includes(accessLevel)) return null;\n\n if (confirmView)\n return (\n <Box className={classes.confirmWrapper}>\n <Box className={classes.confirmContainer}>\n <Typography className={classes.rightSpacer1} variant=\"body1\">\n {confirmButtonLabel}\n </Typography>\n <Button\n {...rest}\n type=\"button\"\n onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setStopInterval(true);\n onClick(e);\n }}\n variant={\"contained\"}\n styling={[classes.whiteText, styling].filter((x) => x).join(\" \")}\n disabled={disabled}\n color={color}\n >\n Confirm{rest.loading ? \"ing\" : \"\"}\n </Button>\n </Box>\n </Box>\n );\n\n return (\n <Button\n type=\"button\"\n variant={variant}\n disabled={disabled}\n styling={styling}\n color={color}\n onClick={() => setConfirmView(true)}\n >\n {children}\n </Button>\n );\n};\n\nexport default ButtonWithConfirm;\n","import React, { ReactChild, ReactNode } from \"react\";\nimport {\n Box,\n Checkbox,\n FormControl,\n FormHelperText,\n InputAdornment,\n MenuItem,\n TextField,\n Typography,\n Select as MuiSelect,\n} from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NumberFormatField } from \"../TextField/TextField\";\nimport {\n IAlignment,\n ICustomRenderFnProps,\n IEssentialRenderFnProps,\n} from \"./EditableTable.types\";\nimport NumberFormat from \"react-number-format\";\nimport { MobileDatePicker } from \"@mui/x-date-pickers/MobileDatePicker\";\nimport Select from \"../Select/Select\";\n\nconst determineWidth = (value: string | number, fixedDecimalScale: boolean) => {\n const valueLength = fixedDecimalScale\n ? (+value).toFixed(2).length\n : value.toString().length;\n\n if (!valueLength) return \"6ch\";\n\n return `${valueLength + 1 + Math.floor(valueLength / 3) / 3}ch`;\n};\n\nconst useDefaultTableCellsStyles = makeStyles((theme) => ({\n inputBase: ({ textAlign }: { textAlign?: IAlignment }) => ({\n height: \"unset\",\n padding: 0,\n textAlign: textAlign || \"center\",\n }),\n input: ({ textAlign }: { textAlign?: IAlignment }) => ({\n textAlign: textAlign || \"center\",\n marginRight: \"0.4rem\",\n marginLeft: \"0.4rem\",\n }),\n startAdornment: {\n color: theme.palette.text.secondary,\n },\n modifiedUnderline: {\n \"&:not(.Mui-disabled):before\": {\n borderBottom: \"none\",\n transition: \"none\",\n },\n \"&:hover:not(.Mui-disabled):before\": {\n borderBottom: `1px solid ${theme.palette.grey[\"500\"]} !important`,\n },\n },\n body2Text: {\n ...theme.typography.body2,\n },\n dateFieldWidth: {\n width: \"8ch\",\n },\n fullDateWidth: {\n width: \"11ch\",\n },\n justifyStart: {\n justifyContent: \"flex-start\",\n },\n justifyCenter: {\n justifyContent: \"center\",\n },\n justifyEnd: {\n justifyContent: \"flex-end\",\n },\n totalContainer: {\n display: \"flex\",\n alignItems: \"center\",\n cursor: \"default\",\n whiteSpace: \"nowrap\",\n },\n selectFocusBackground: {\n \"&:focus\": {\n backgroundColor: \"unset\",\n },\n },\n}));\n\nexport const TableTextField: React.FC<\n IEssentialRenderFnProps & {\n inputStyling?: string;\n wrapperStyling?: string;\n widthOverride?: string | undefined;\n name?: string | undefined;\n }\n> = ({\n error,\n disabled,\n value,\n onBlur,\n onChange,\n prefix,\n suffix,\n numberField = false,\n textAlign,\n fixedDecimalScale,\n inputStyling = \"\",\n wrapperStyling = \"\",\n widthOverride = undefined,\n name = undefined,\n}) => {\n const classes = useDefaultTableCellsStyles({ textAlign });\n\n const inputPropsForNumberField = {\n ...(numberField && { fixedDecimalScale: !!fixedDecimalScale }),\n };\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return (\n <TextField\n variant=\"standard\"\n name={name}\n className={wrapperStyling}\n error={!!error}\n inputProps={{\n className: `${classes.inputBase} ${inputStyling}`,\n style: { width: widthOverride || determineWidth(value, !!fixedDecimalScale) },\n ...inputPropsForNumberField,\n }}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n InputProps={{\n startAdornment: prefix ? (\n <InputAdornment position=\"end\" className={classes.startAdornment}>\n {prefix}\n </InputAdornment>\n ) : null,\n endAdornment: suffix ? (\n <InputAdornment position=\"start\" className={classes.startAdornment}>\n {suffix}\n </InputAdornment>\n ) : null,\n inputComponent: numberField ? (NumberFormatField as any) : undefined,\n className: `${classes.body2Text} ${classes.modifiedUnderline}`,\n classes: { input: classes.input },\n }}\n helperText={error || undefined}\n disabled={disabled}\n />\n );\n } else return <Typography variant=\"body2\">Incorrect value type</Typography>;\n};\n\nexport const tableTextField = (tableProps: ICustomRenderFnProps) => {\n return <TableTextField {...{ ...tableProps }} />;\n};\n\nexport const tableNumericStringField = (tableProps: ICustomRenderFnProps) => {\n return <TableTextField {...{ ...tableProps, numberField: true }} />;\n};\n\nexport const tableNumericStringFixedDecimalField = (tableProps: ICustomRenderFnProps) => {\n return (\n <TableTextField {...{ ...tableProps, numberField: true, fixedDecimalScale: true }} />\n );\n};\n\nexport const SelectionCheckbox = withStyles(\n createStyles({\n root: {\n padding: \"3px\",\n },\n })\n)(Checkbox);\n\ninterface ITableDatePicker extends IEssentialRenderFnProps {\n fullDate?: boolean;\n}\n\nexport const TableDatePicker: React.FC<ITableDatePicker> = ({\n disabled,\n fullDate = false,\n value,\n error,\n onChange,\n onBlur,\n textAlign,\n}) => {\n const classes = useDefaultTableCellsStyles({ textAlign });\n\n return (\n <MobileDatePicker\n disabled={disabled}\n views={fullDate ? undefined : [\"year\", \"month\"]}\n value={value as string | Date}\n format={fullDate ? \"dd MMM yyyy\" : \"MMM yyyy\"}\n onChange={onChange}\n slotProps={{\n textField: {\n helperText: error || undefined,\n error: !!error,\n InputProps: {\n className: `${classes.body2Text} ${classes.modifiedUnderline}`,\n },\n inputProps: {\n className: `${classes.inputBase} ${\n fullDate ? classes.fullDateWidth : classes.dateFieldWidth\n }`,\n classes: { input: classes.input },\n },\n variant: \"standard\",\n },\n }}\n />\n );\n};\n\nexport const tableDateField = (tableProps: ICustomRenderFnProps) => {\n return <TableDatePicker fullDate {...tableProps} />;\n};\n\nconst TableCheckbox: React.FC<IEssentialRenderFnProps> = ({\n value,\n disabled,\n onChange,\n}) => {\n return (\n <Checkbox\n disabled={disabled}\n checked={value as boolean}\n onChange={onChange}\n color=\"primary\"\n size=\"small\"\n />\n );\n};\n\nexport const tableCheckbox = (tableProps: ICustomRenderFnProps) => {\n return <TableCheckbox {...tableProps} />;\n};\n\ninterface INonEditableField\n extends Pick<\n IEssentialRenderFnProps,\n \"numberField\" | \"prefix\" | \"suffix\" | \"textAlign\" | \"fixedDecimalScale\"\n > {\n text: React.ReactText;\n styling?: string;\n inputStyling?: string;\n widthOverride?: string | undefined;\n}\n\nexport const NonEditableField: React.FC<INonEditableField> = ({\n text,\n numberField = false,\n prefix = null,\n suffix = null,\n textAlign,\n fixedDecimalScale,\n styling = \"\",\n inputStyling = \"\",\n widthOverride = undefined,\n}) => {\n const classes = useDefaultTableCellsStyles({});\n return (\n <Box\n className={`${classes.totalContainer} ${classes.body2Text} ${\n textAlign === \"left\"\n ? classes.justifyStart\n : textAlign === \"right\"\n ? classes.justifyEnd\n : classes.justifyCenter\n } ${styling}`}\n style={{\n width: widthOverride,\n }}\n >\n {prefix && prefix}\n <Box className={classes.body2Text} style={{ width: widthOverride }}>\n {numberField ? (\n <NumberFormat\n className={inputStyling}\n value={text}\n displayType={\"text\"}\n thousandSeparator\n isNumericString\n decimalScale={2}\n fixedDecimalScale={fixedDecimalScale}\n />\n ) : (\n text\n )}\n </Box>\n {suffix && suffix}\n </Box>\n );\n};\n\ninterface ITableSelect extends IEssentialRenderFnProps {\n selectOptions: { [key: string]: ReactChild };\n}\n\nexport const TableSelect: React.FC<ITableSelect> = ({\n error,\n value,\n onBlur,\n onChange,\n selectOptions,\n disabled,\n}) => {\n const classes = useDefaultTableCellsStyles({});\n return (\n <FormControl variant=\"standard\" margin=\"none\" error={!!error}>\n <Select\n variant=\"standard\"\n className={`${classes.body2Text} ${classes.modifiedUnderline}`}\n inputProps={{ className: classes.selectFocusBackground }}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n disabled={disabled}\n selectOptions={Object.entries(selectOptions).map(([value, description]) => ({\n value,\n description,\n }))}\n />\n {error && <FormHelperText>{error}</FormHelperText>}\n </FormControl>\n );\n};\n\ninterface IMultipleTableSelect extends Omit<IEssentialRenderFnProps, \"value\"> {\n selectOptions: { [key: string]: ReactChild };\n value: string[];\n renderValue?: (value: any) => ReactNode;\n}\n\nexport const TableMultipleSelect: React.FC<IMultipleTableSelect> = ({\n error,\n value,\n onBlur,\n onChange,\n selectOptions,\n disabled,\n renderValue,\n}) => {\n const classes = useDefaultTableCellsStyles({});\n return (\n <FormControl variant=\"standard\" margin=\"none\" error={!!error}>\n <MuiSelect\n variant=\"standard\"\n className={`${classes.body2Text} ${classes.modifiedUnderline}`}\n inputProps={{ className: classes.selectFocusBackground }}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n disabled={disabled}\n renderValue={renderValue}\n multiple={true}\n >\n {Object.entries(selectOptions).map(([key, value]) => (\n <MenuItem className={classes.body2Text} key={key} value={key}>\n {value}\n </MenuItem>\n ))}\n </MuiSelect>\n {error && <FormHelperText>{error}</FormHelperText>}\n </FormControl>\n );\n};\n","import React, {\n FC,\n forwardRef,\n Fragment,\n memo,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n useTable,\n useRowSelect,\n useFilters,\n CellProps,\n HeaderProps,\n HeaderGroup,\n usePagination,\n useGlobalFilter,\n useAsyncDebounce,\n} from \"react-table\";\nimport {\n Table as MUITable,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n Box,\n Tooltip,\n InputBase,\n} from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport { EDITED_STATUS, NEW_STATUS } from \"../globals\";\nimport { SelectionCheckbox, tableTextField } from \"./defaultCells\";\nimport { didCellValueChange } from \"../utils\";\nimport {\n IEditableTableProps,\n RowData,\n ExtendedCellProps,\n TableCellValues,\n ITableContentProps,\n IGlobalFilterProps,\n} from \"./EditableTable.types\";\nimport LoadingSpinner from \"../LoadingSpinner/LoadingSpinner\";\nimport { Pagination } from \"@mui/material\";\nimport { useLayoutStyles, useSpacingStyles } from \"../styles\";\nimport { useVirtual } from \"react-virtual\";\n\nconst useStyles = makeStyles((theme) => ({\n newRowHighlight: {\n backgroundColor: \"#73c4ca30\",\n },\n editedCellHighlight: {\n backgroundColor: \"#5840f52e !important\",\n backgroundClip: \"padding-box\",\n },\n editedBorder: {\n border: \"3px solid #5840f52e\",\n borderWidth: \"2px 4px\",\n },\n errorBorder: {\n border: `3px solid ${theme.palette.error.light}`,\n borderWidth: \"2px 4px\",\n },\n emptyLoadingPadding: {\n paddingTop: \"0.75rem\",\n paddingBottom: \"0.75rem\",\n },\n centeredText: {\n textAlign: \"center\",\n },\n disabled: {\n backgroundColor: theme.palette.action.hover,\n },\n pagination: {\n marginTop: \"1rem\",\n marginBottom: \"1rem\",\n },\n virtualisationContainer: {\n maxHeight: \"500px\",\n overflow: \"auto\",\n },\n cellPadding: {\n padding: \".5rem .75rem\",\n },\n shadedHeader: {\n \"&:nth-of-type(even).shadedHeader\": {\n backgroundColor: \"#eeeeee\",\n },\n },\n shadedBodyCell: {\n \"&:nth-of-type(even).shadedBodyCell\": {\n backgroundColor: \"rgba(0, 0, 0, 0.07)\",\n backgroundClip: \"padding-box\",\n },\n },\n shadedHeaderGroupParent: {\n \"&:nth-of-type(even).shadedHeaderGroupParent\": {\n backgroundColor: \"#eeeeee\",\n },\n },\n shadedHeaderGroup2Children: {\n \"&:nth-of-type(4n-2).shadedHeaderGroup2Children\": {\n backgroundColor: \"#eeeeee\",\n },\n \"&:nth-of-type(4n-1).shadedHeaderGroup2Children\": {\n backgroundColor: \"#eeeeee\",\n },\n },\n shadedBody2CellsInsideGroup: {\n \"&:nth-of-type(4n-2).shadedBody2CellsInsideGroup\": {\n backgroundColor: \"rgba(0, 0, 0, 0.07)\",\n backgroundClip: \"padding-box\",\n },\n \"&:nth-of-type(4n-1).shadedBody2CellsInsideGroup\": {\n backgroundColor: \"rgba(0, 0, 0, 0.07)\",\n backgroundClip: \"padding-box\",\n },\n },\n offsetStickyPosition: {\n top: 0,\n left: \"-3px\",\n zIndex: 2,\n position: \"sticky\",\n },\n stickyHeaderZIndex: {\n zIndex: 3,\n },\n headerCellColour: {\n backgroundColor: theme.palette.grey[50],\n },\n rowCellColour: {\n backgroundColor: theme.palette.common.white,\n backgroundClip: \"padding-box\",\n },\n rowHoverForStickyCell: {\n \"&:hover .stickyRowCell\": {\n backgroundColor: \"rgb(245,245,245)\",\n },\n },\n headerBorders: {\n \"& :not(tr:last-child th)\": {\n border: \"none\",\n },\n },\n}));\n\nconst EditableCell: FC<ExtendedCellProps> = ({\n value: initialValue = \"\",\n row: { index, values, original },\n column: { id },\n syncCellWithState,\n setRows,\n fieldConfig,\n disabled,\n}) => {\n const {\n validationRule,\n dependentValidationRule,\n isCheckbox,\n isDateField,\n customRenderFn,\n prefix,\n suffix,\n textAlign,\n onBlur: configOnBlur,\n onChangeValueModifier,\n } = fieldConfig[id];\n const [error, setError] = useState<false | string>(false);\n // We need to keep and update the state of the cell normally\n const [value, setValue] = useState<TableCellValues>(initialValue);\n const checkbox = isCheckbox;\n\n const validateValue = (value: TableCellValues) => {\n let returnValue = false;\n if (validationRule) {\n try {\n validationRule.validateSync(value);\n if (error) setError(false);\n } catch (e) {\n returnValue = true;\n !error && setError(e.message);\n }\n }\n if (dependentValidationRule) {\n try {\n dependentValidationRule(values).validateSync(value);\n if (error) setError(false);\n } catch (e) {\n returnValue = true;\n !error && setError(e.message);\n }\n }\n return returnValue;\n };\n\n // We'll only update the external data when the input is blurred\n const onBlur = async (fieldValue: TableCellValues, dateFieldError?: boolean) => {\n if (checkbox) {\n syncCellWithState(index, id, fieldValue, false);\n } else if (isDateField) {\n syncCellWithState(index, id, fieldValue, !!dateFieldError);\n } else {\n syncCellWithState(index, id, value, !!error);\n }\n if (\n configOnBlur &&\n setRows &&\n !error &&\n !didCellValueChange(values[id], value, isDateField)\n ) {\n await configOnBlur!({\n rowIndex: index,\n value: value as string,\n setRows,\n values: original,\n });\n }\n };\n\n const onChange = (e: string | React.ChangeEvent<HTMLInputElement>) => {\n let event;\n if (isDateField) {\n event = e as string;\n const adjustedDateValue = onChangeValueModifier\n ? onChangeValueModifier(event)\n : event;\n setValue(adjustedDateValue);\n const dateValidity = validateValue(adjustedDateValue);\n onBlur(adjustedDateValue, dateValidity);\n return;\n }\n event = e as React.ChangeEvent<HTMLInputElement>;\n const eventValue = checkbox ? event.target.checked : event.target.value;\n\n if (checkbox) {\n setValue(eventValue);\n onBlur(eventValue);\n } else {\n setValue(eventValue);\n validateValue(eventValue);\n }\n };\n\n // If the initialValue is changed external, sync it up with our state\n useEffect(() => {\n setValue(initialValue);\n const errorStatus = validateValue(initialValue);\n if (error !== errorStatus) {\n syncCellWithState(index, id, initialValue, errorStatus, true);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialValue]);\n\n useEffect(() => {\n if (original.errors && !!original.errors[id] !== !!error) {\n validateValue(initialValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [original.errors]);\n\n const renderFnProps = {\n value,\n values,\n disabled: disabled || original.disabledRow,\n error,\n onChange,\n onBlur,\n prefix,\n suffix,\n textAlign,\n originalValues: original,\n };\n\n if (customRenderFn) {\n return customRenderFn(renderFnProps);\n } else return tableTextField(renderFnProps);\n};\n\ninterface ITableRowContentsProps {\n row: RowData;\n classes: ReturnType<typeof useStyles>;\n disabled: boolean;\n includeRowSelect: boolean;\n}\n\nconst TableRowContents = forwardRef<HTMLTableRowElement, ITableRowContentsProps>(\n ({ row, classes, disabled, includeRowSelect, ...rest }, ref) => (\n <TableRow\n {...rest}\n ref={ref}\n hover={true}\n className={`${\n row.original.rowStatus === NEW_STATUS ? classes.newRowHighlight : \"\"\n } ${row.original.rowStatus === EDITED_STATUS ? classes.editedBorder : \"\"}\n${Object.values(row.original.errors || {}).includes(true) ? classes.errorBorder : \"\"} ${\n row.original.disabledRow || disabled ? classes.disabled : \"\"\n }\n ${classes.rowHoverForStickyCell}`}\n >\n {row.cells.map((cell: any, n: number) => (\n <TableCell\n {...cell.getCellProps()}\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n align={cell.column.textAlign || \"center\"}\n className={`${\n cell.row.original.rowStatus === EDITED_STATUS &&\n cell.row.original.edited[cell.column.id]\n ? classes.editedCellHighlight\n : \"\"\n } ${classes.cellPadding}\n ${\n cell.column.shadedHeaderGroup\n ? `${classes.shadedBody2CellsInsideGroup} shadedBody2CellsInsideGroup`\n : \"\"\n }\n ${cell.column.shadedHeader ? `${classes.shadedBodyCell} shadedBodyCell` : \"\"}\n ${\n cell.column.stickyCell\n ? `${classes.offsetStickyPosition} ${classes.rowCellColour} stickyRowCell`\n : \"\"\n }\n `}\n padding={includeRowSelect && n === 0 ? \"checkbox\" : \"normal\"}\n >\n {cell.render(\"Cell\")}\n </TableCell>\n ))}\n </TableRow>\n )\n);\n\n// emptyRows is needed for when incoming data is null (loading state).\n// useTable requires memoised row data to be defined at all times.\nconst emptyRows: RowData[] = [];\n\nconst EditableTable: React.FC<IEditableTableProps> = memo(\n ({\n tableRows,\n tableHeaders,\n syncCellWithState,\n setRows = undefined,\n skipPageReset = false,\n fieldConfig,\n disabled = false,\n setSelectedRows,\n includeRowSelect = true,\n filterData,\n filterTypes,\n emptyTableText = \"Table is empty\",\n paginate = false,\n defaultPageSize = 50,\n virtContainerStyling,\n overscan,\n rowHeight,\n includeGlobalSearch,\n disableHeaderSelect,\n }) => {\n const classes = { ...useStyles(), ...useLayoutStyles() };\n const parentRef = React.useRef<HTMLDivElement | null>(null);\n\n // Set our editable cell renderer as the default Cell renderer\n const defaultColumn = React.useMemo(\n () => ({\n Cell: EditableCell,\n }),\n []\n );\n\n const {\n getTableProps, // props to use in table, supplied by react-table\n getTableBodyProps, // props to use in table, supplied by react-table\n headerGroups, // headers enriched with methods by react-table\n rows, // rows enriched with methods by react-table\n page, // selected slice of data subset of rows. Visible paginated data\n prepareRow, // row optimisation function that must be called when rendering rows\n state: { selectedRowIds, pageIndex }, // ids of selected rows and page index from internal table state\n state,\n setFilter, // manipulate filter criteria\n pageCount,\n gotoPage,\n preGlobalFilteredRows,\n setGlobalFilter,\n isAllRowsSelected, // used only to induce re-render in the header and update checkbox state\n selectedFlatRows, // used only to induce re-render in the rows and update checkbox state\n } = useTable<RowData>(\n {\n columns: tableHeaders,\n data: tableRows || emptyRows,\n defaultColumn, // custom cell renderer, that we defined above\n autoResetPage: paginate ? !skipPageReset : false, // value that is used internally to control page number resets\n filterTypes, // fileting config for useFilters hook\n initialState: { pageSize: paginate ? defaultPageSize : undefined }, // setting up initial state for\n\n // below are custom methods and variables that will be supplied to EditableCell\n syncCellWithState, // state function used that controls the state of table\n setRows, // similar to syncCellWithState but you can manipulate whole state\n fieldConfig, //configuration for each of the cells\n disabled,\n autoResetGlobalFilter: false,\n },\n useFilters, // plugging in useFilters hook\n useGlobalFilter, // plugging in useGlobalFilters hook\n usePagination, // plugging in usePagination hook\n useRowSelect, // plugging in useRowSelect hook\n (hooks) => {\n if (includeRowSelect) {\n hooks.visibleColumns.push((columns) => [\n // Let's make a column for selection\n {\n id: \"selection\",\n // The header can use the table's getToggleAllRowsSelectedProps method\n // to render a checkbox\n Header: ({\n getToggleAllRowsSelectedProps,\n getToggleAllPageRowsSelectedProps,\n }: HeaderProps<RowData>) =>\n !disableHeaderSelect ? (\n <SelectionCheckbox\n {...(paginate\n ? getToggleAllPageRowsSelectedProps()\n : getToggleAllRowsSelectedProps())}\n disabled={disabled}\n size=\"small\"\n />\n ) : (\n \"Select\"\n ),\n // The cell can use the individual row's getToggleRowSelectedProps method\n // to the render a checkbox\n Cell: ({ row }: CellProps<RowData>) => (\n <SelectionCheckbox\n {...row.getToggleRowSelectedProps()}\n disabled={disabled || row.original.disableSelection}\n size=\"small\"\n />\n ),\n },\n ...columns,\n ]);\n }\n }\n );\n\n /* Few resources that helped the most with virtualisation work\n * https://github.com/TanStack/virtual/issues/10\n * https://codesandbox.io/s/poc-react-virtual-table-forked-857kdi?file=/src/index.js:2037-2101\n */\n const rowVirtualizer = useVirtual({\n size: (paginate ? page : rows).length,\n parentRef,\n // amount of rows to render above and below visible rows\n overscan: overscan || 5,\n // estimated row size to determine how many rows are visible\n estimateSize: useCallback(() => rowHeight || 54, [rowHeight]),\n });\n\n const rowsToRender = paginate ? page : rows;\n\n const items = rowVirtualizer.virtualItems;\n const paddingTop = items.length > 0 ? items[0].start : 0;\n const paddingBottom =\n items.length > 0 ? rowVirtualizer.totalSize - items[items.length - 1].end : 0;\n\n const handlePageChange = useCallback(\n (event: React.ChangeEvent<unknown>, value: number) => {\n gotoPage(value - 1);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n // provide the data to filter on, if filter types is not present the default filter will be used\n useEffect(() => {\n if (filterData) {\n setFilter(filterData.filterRow, filterData.filterValues);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterData]);\n\n useEffect(() => {\n if (setSelectedRows) {\n setSelectedRows(Object.keys(selectedRowIds).map((id) => +id));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedRowIds]);\n\n return (\n <>\n {includeGlobalSearch ? (\n <GlobalSearch\n preGlobalFilteredRows={preGlobalFilteredRows}\n globalFilter={\n (state as unknown as { globalFilter: string | undefined }).globalFilter\n }\n setGlobalFilter={setGlobalFilter}\n />\n ) : null}\n <div\n ref={parentRef}\n className={virtContainerStyling || classes.virtualisationContainer}\n >\n <TableContent\n {...{\n disabled,\n includeRowSelect,\n getTableProps,\n headerGroups,\n getTableBodyProps,\n rowsToRender,\n prepareRow,\n paddingTop,\n paddingBottom,\n virtualRows: items,\n isAllRowsSelected,\n selectedFlatRows,\n }}\n />\n </div>\n {tableRows === null ? (\n <Box className={classes.emptyLoadingPadding}>\n <LoadingSpinner />\n </Box>\n ) : null}\n {tableRows && !tableRows.length ? (\n <Box className={`${classes.emptyLoadingPadding} ${classes.centeredText}`}>\n <Typography variant=\"body2\">{emptyTableText}</Typography>\n </Box>\n ) : null}\n {paginate && tableRows?.length ? (\n <Pagination\n className={`${classes.flexCenter} ${classes.pagination}`}\n count={pageCount}\n page={pageIndex + 1}\n onChange={handlePageChange}\n shape=\"rounded\"\n showFirstButton\n showLastButton\n />\n ) : null}\n </>\n );\n }\n);\n\nexport default EditableTable;\n\nconst useGlobalSearchStyles = makeStyles((theme) => ({\n container: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n border: `1px solid ${theme.palette.grey[600]}`,\n borderRadius: \"8px\",\n width: \"100%\",\n maxWidth: \"20rem\",\n marginInline: \"auto\",\n color: theme.palette.grey[600],\n \"&:hover\": {\n borderColor: theme.palette.grey[800],\n color: theme.palette.grey[800],\n },\n \"&:focus-within\": {\n borderColor: theme.palette.grey[800],\n color: theme.palette.grey[800],\n },\n },\n input: {\n width: \"100%\",\n maxWidth: \"18rem\",\n color: \"inherit\",\n ...theme.typography.body2,\n },\n}));\n\nconst GlobalSearch: React.FC<IGlobalFilterProps> = memo(\n ({ preGlobalFilteredRows, globalFilter, setGlobalFilter }) => {\n const [value, setValue] = useState(globalFilter);\n\n const classes = { ...useSpacingStyles(), ...useGlobalSearchStyles() };\n\n const onChange = useAsyncDebounce((value: string) => {\n setGlobalFilter(value || undefined);\n }, 200);\n\n const count = preGlobalFilteredRows.length;\n\n return (\n <div className={`${classes.container} ${classes.contentBreak}`}>\n <SearchIcon className={`${classes.rightSpacer1} ${classes.leftSpacer1}`} />\n\n <InputBase\n className={`${classes.input}`}\n value={value || \"\"}\n onChange={(e) => {\n setValue(e.target.value);\n onChange(e.target.value);\n }}\n placeholder={`Search ${count} records...`}\n inputProps={{ \"aria-label\": \"search\" }}\n />\n </div>\n );\n }\n);\n\nconst TableContent: FC<ITableContentProps> = memo(\n ({\n disabled,\n includeRowSelect,\n getTableProps,\n headerGroups,\n getTableBodyProps,\n rowsToRender,\n prepareRow,\n paddingTop,\n paddingBottom,\n virtualRows,\n isAllRowsSelected,\n selectedFlatRows,\n }) => {\n return (\n <MUITable {...getTableProps()} style={{ borderCollapse: \"collapse\" }}>\n <TableHeaderContent\n headerGroups={headerGroups}\n includeRowSelect={includeRowSelect}\n isAllRowsSelected={isAllRowsSelected}\n />\n <TableBody {...getTableBodyProps()}>\n {paddingTop > 0 && (\n <tr>\n <td style={{ height: `${paddingTop}px` }} />\n </tr>\n )}\n\n <TableRows\n {...{\n disabled,\n includeRowSelect,\n rowsToRender,\n prepareRow,\n virtualRows,\n selectedFlatRows,\n }}\n />\n\n {paddingBottom > 0 && (\n <tr>\n <td style={{ height: `${paddingBottom}px` }} />\n </tr>\n )}\n </TableBody>\n </MUITable>\n );\n }\n);\n\nconst TableHeaderContent: FC<\n Pick<ITableContentProps, \"headerGroups\" | \"includeRowSelect\" | \"isAllRowsSelected\">\n> = memo(({ headerGroups, includeRowSelect, isAllRowsSelected }) => {\n const classes = useStyles();\n return (\n <TableHead\n className={`${classes.offsetStickyPosition} ${classes.stickyHeaderZIndex} ${classes.headerBorders}`}\n >\n {headerGroups.map((headerGroup: HeaderGroup<RowData>) => (\n <TableRow {...headerGroup.getHeaderGroupProps()}>\n {headerGroup.headers.map((column, i) => (\n <TableCell\n {...column.getHeaderProps()}\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n align={column.textAlign || \"center\"}\n padding={includeRowSelect && i === 0 ? \"checkbox\" : \"normal\"}\n className={`${classes.headerCellColour}\n ${\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n !column.shadedHeaderGroup\n ? \"\"\n : column.columns\n ? `${classes.shadedHeaderGroupParent} shadedHeaderGroupParent`\n : column.parent\n ? `${classes.shadedHeaderGroup2Children} shadedHeaderGroup2Children`\n : \"\"\n } ${\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n column.shadedHeader ? `${classes.shadedHeader} shadedHeader` : \"\"\n }\n ${\n //@ts-ignore FIX REQUIRED incorrect use of react table props\n column.stickyCell || column.placeholderOf?.stickyCell\n ? `${classes.offsetStickyPosition} ${classes.stickyHeaderZIndex}`\n : \"\"\n }`}\n >\n {column.render(\"Header\")}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableHead>\n );\n});\n\nconst TableRows: FC<\n Pick<\n ITableContentProps,\n | \"rowsToRender\"\n | \"prepareRow\"\n | \"disabled\"\n | \"includeRowSelect\"\n | \"virtualRows\"\n | \"selectedFlatRows\"\n >\n> = memo(({ rowsToRender, virtualRows, prepareRow, ...rest }) => {\n const classes = { ...useStyles(), ...useLayoutStyles() };\n\n return (\n <>\n {virtualRows.map((virtualRow) => {\n const row = rowsToRender[virtualRow.index];\n prepareRow(row);\n return (\n <Fragment key={row.original.rowKey || row.getRowProps().key}>\n {row.original.disabledRow ? (\n //At the moment disabledRow prop is only passed on xero costs so this check is fine\n // If this changes will need to change the check to be more specific\n <Tooltip title={row.original.tooltipText || \"This row is disabled\"} arrow>\n <TableRowContents {...{ ...rest, row, classes }} />\n </Tooltip>\n ) : (\n <TableRowContents {...{ ...rest, row, classes }} />\n )}\n </Fragment>\n );\n })}\n </>\n );\n});\n","import React from \"react\";\nimport { Collapse, Button } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { Alert as MUIAlert } from \"@mui/material\";\nimport { useSpacingStyles } from \"../styles\";\nimport { BORDER_RADIUS, FORM_ERROR, FORM_SUCCESS, FORM_WARNING } from \"../globals\";\nimport { IAlertProps } from \"./Alert.types\";\n\nconst useAlertStyles = makeStyles((theme) => ({\n alertStyling: {\n borderRadius: BORDER_RADIUS,\n },\n closeButton: {\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(2),\n },\n showCursor: {\n cursor: \"pointer\",\n },\n}));\n\nconst Alert: React.FC<IAlertProps> = ({\n alertActionHandler,\n formStatus,\n actionButton,\n alertMessage,\n addBreak = true,\n styling,\n}) => {\n const classes = { ...useSpacingStyles(), ...useAlertStyles() };\n return (\n <Collapse in={[FORM_SUCCESS, FORM_ERROR, FORM_WARNING].includes(formStatus)}>\n <MUIAlert\n onClick={alertActionHandler}\n className={`${classes.alertStyling} ${addBreak ? classes.sectionBreak : \"\"} ${\n styling || \"\"\n } ${alertActionHandler ? classes.showCursor : \"\"}`}\n severity={\n formStatus === FORM_ERROR\n ? FORM_ERROR\n : formStatus === FORM_SUCCESS\n ? FORM_SUCCESS\n : FORM_WARNING\n }\n action={\n actionButton ? (\n <Button\n className={classes.closeButton}\n aria-label=\"close\"\n color=\"inherit\"\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n actionButton.handler();\n }}\n >\n {actionButton.text}\n </Button>\n ) : null\n }\n >\n {alertMessage}\n </MUIAlert>\n </Collapse>\n );\n};\n\nexport default Alert;\n","import {\n Box,\n IconButton,\n Typography,\n Button as MUIButton,\n CircularProgress,\n Avatar,\n} from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React, { useEffect, useState } from \"react\";\nimport { CloudUpload, Forward } from \"@mui/icons-material\";\nimport { useSpacingStyles } from \"../styles\";\nimport { IImageDisplayAndUploadProps } from \"./ImageDisplayAndUpload.types\";\nimport Alert from \"../Alert/Alert\";\nimport {\n BORDER_RADIUS,\n FormStatuses,\n FORM_ENABLED,\n FORM_ERROR,\n FORM_LOADING,\n FORM_SUCCESS,\n NO_ACCESS_LEVEL,\n READ_LEVEL,\n} from \"../globals\";\n\nconst useImageDisplayAndUploadStyles = makeStyles((theme) => ({\n greyBox: {\n backgroundColor: theme.palette.grey[200],\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: \"1.5rem\",\n borderRadius: BORDER_RADIUS,\n position: \"relative\",\n height: \"13.25rem\",\n },\n widthLimiter: {\n width: \"100%\",\n maxWidth: \"28rem\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n hiddenInput: {\n display: \"none\",\n },\n buttonColor: {\n backgroundColor: theme.palette.primary.main,\n },\n iconStyling: {\n color: theme.palette.common.white,\n fontSize: \"3rem\",\n },\n sectionBreak: {\n marginBottom: theme.spacing(3),\n },\n dropBox: {\n height: \"100%\",\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n dropArrowStyling: {\n color: theme.palette.text.secondary,\n fontSize: \"3rem\",\n },\n topLeftArrow: {\n position: \"absolute\",\n top: 0,\n left: 0,\n transform: \"rotate(45deg)\",\n },\n topRightArrow: {\n position: \"absolute\",\n top: 0,\n right: 0,\n transform: \"rotate(135deg)\",\n },\n bottomLeftArrow: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n transform: \"rotate(-45deg)\",\n },\n bottomRightArrow: {\n position: \"absolute\",\n bottom: 0,\n right: 0,\n transform: \"rotate(225deg)\",\n },\n hiddenDisplay: {\n display: \"none\",\n },\n loadingCircle: {\n marginLeft: theme.spacing(1),\n },\n roundedAvatarButton: {\n borderRadius: \"100%\",\n },\n roundedAvatar: {\n width: \"16vmax\",\n height: \"16vmax\",\n maxWidth: \"13rem\",\n maxHeight: \"13rem\",\n },\n organisationImage: {\n maxWidth: \"8rem\",\n minWidth: \"5rem\",\n maxHeight: \"8rem\",\n },\n}));\n\nconst DRAG_ENTER = \"dragEnter\";\nconst INPUT = \"input\";\nconst DRAG_DROP = \"dragDrop\";\n\nconst ImageDisplayAndUpload: React.FC<IImageDisplayAndUploadProps> = ({\n id = \"image-upload\",\n url,\n roundedAvatar = false,\n handleSaveImage,\n alt,\n accessLevel,\n}) => {\n const classes = { ...useImageDisplayAndUploadStyles(), ...useSpacingStyles() };\n const [displayImage, setDisplayImage] = useState<boolean>(!!url);\n const [uploadState, setUploadState] = useState<FormStatuses | typeof DRAG_ENTER>(\n FORM_ENABLED\n );\n const [infoMessage, setInfoMessage] = useState<null | string>(null);\n\n useEffect(() => {\n if (!!url) {\n setDisplayImage(true);\n }\n }, [url]);\n\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = false;\n if (accessLevel === READ_LEVEL) disabledProp = true;\n\n const handleImageUpload = async (\n type: typeof INPUT | typeof DRAG_DROP,\n e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLElement>\n ) => {\n if (disabledProp) return;\n setInfoMessage(null);\n if (type === INPUT) {\n const target = (e as React.ChangeEvent<HTMLInputElement>).target;\n if (target.files && target.files[0]) {\n await imageUpload(target.files[0]);\n } else {\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n }\n } else if (type === DRAG_DROP) {\n const dataTransfer = (e as React.DragEvent<HTMLElement>).dataTransfer;\n if (dataTransfer.files && dataTransfer.files[0]) {\n await imageUpload(dataTransfer.files[0]);\n } else {\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n }\n }\n };\n\n const imageUpload = async (file: File) => {\n setUploadState(FORM_LOADING);\n if (file.size >= 1024 * 1024 * 0.5) {\n setInfoMessage(\"Image size should be less than 0.5MB\");\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n return;\n }\n const format = file.name.split(\".\")[1].toLowerCase();\n\n if (![\"png\", \"jpg\", \"jpeg\"].includes(format)) {\n setInfoMessage(\"Please provide an image in png, jpg or jpeg format\");\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n\n return;\n }\n const buffer = await file.arrayBuffer();\n try {\n await handleSaveImage(format, buffer, file);\n setUploadState(FORM_SUCCESS);\n setDisplayImage(true);\n } catch (e) {\n console.log(e);\n setUploadState(FORM_ERROR);\n setDisplayImage(url ? true : false);\n }\n };\n\n let htmlToDisplay;\n switch (uploadState) {\n case DRAG_ENTER:\n htmlToDisplay = (\n <Box className={classes.dropBox} style={{ pointerEvents: \"none\" }}>\n <Forward className={`${classes.dropArrowStyling} ${classes.topLeftArrow}`} />\n <Forward className={`${classes.dropArrowStyling} ${classes.topRightArrow}`} />\n <Typography variant=\"h5\" color=\"textSecondary\">\n Drop Here\n </Typography>\n <Forward className={`${classes.dropArrowStyling} ${classes.bottomLeftArrow}`} />\n <Forward\n className={`${classes.dropArrowStyling} ${classes.bottomRightArrow}`}\n />\n </Box>\n );\n break;\n\n case FORM_LOADING:\n htmlToDisplay = (\n <Box className={classes.dropBox}>\n <Typography color=\"textSecondary\">Loading...</Typography>\n <CircularProgress className={classes.loadingCircle} size={25} />\n </Box>\n );\n break;\n\n default:\n htmlToDisplay = (\n <label htmlFor={id}>\n <IconButton\n className={`${classes.buttonColor} ${classes.sectionBreak}`}\n aria-label=\"upload picture\"\n component=\"span\"\n size=\"large\"\n >\n <CloudUpload className={classes.iconStyling} />\n </IconButton>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Drag and drop or browse to upload your image or logo.\n </Typography>\n </label>\n );\n break;\n }\n\n return (\n <Box\n className={classes.labelBreak}\n onDragEnter={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setDisplayImage(false);\n }}\n onDragOver={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setDisplayImage(false);\n }}\n >\n {displayImage && (\n <Box className={classes.labelBreak}>\n <label htmlFor={id}>\n <MUIButton\n className={`${roundedAvatar ? classes.roundedAvatarButton : \"\"}`}\n aria-label=\"upload picture\"\n component=\"span\"\n >\n {roundedAvatar ? (\n <Avatar\n className={classes.roundedAvatar}\n src={url!}\n alt={alt || \"Profile Avatar\"}\n />\n ) : (\n <img\n className={classes.organisationImage}\n src={url!}\n alt={alt || \"Company Logo\"}\n />\n )}\n </MUIButton>\n </label>\n </Box>\n )}\n\n <Box\n className={`${classes.greyBox} ${classes.widthLimiter} ${classes.sectionBreak} ${\n displayImage ? classes.hiddenDisplay : \"\"\n }`}\n onDragEnter={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setUploadState(DRAG_ENTER);\n }}\n onDragLeave={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setUploadState(FORM_ENABLED);\n setDisplayImage(url ? true : false);\n }}\n onDragOver={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n setUploadState(DRAG_ENTER);\n }}\n onDrop={(e) => {\n if (disabledProp) return;\n e.preventDefault();\n e.stopPropagation();\n handleImageUpload(DRAG_DROP, e);\n }}\n >\n <input\n id={id}\n className={classes.hiddenInput}\n type=\"file\"\n accept=\".png, .jpg, .jpeg\"\n disabled={disabledProp}\n onChange={(e) => handleImageUpload(INPUT, e)}\n />\n\n {htmlToDisplay}\n </Box>\n\n <Box className={classes.widthLimiter}>\n <Alert\n formStatus={uploadState as FormStatuses}\n alertMessage={\n infoMessage ||\n (uploadState === FORM_SUCCESS\n ? \"Uploaded successfully!\"\n : \"Something went wrong.\")\n }\n />\n </Box>\n </Box>\n );\n};\n\nexport default ImageDisplayAndUpload;\n","import React, { FC } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { ISvgComponentProps } from \"../SvgComponents/types\";\nimport makeStyles from \"@mui/styles/makeStyles\";\n\nexport type NavbarProps = {\n tabs: Array<{\n Icon: FC<ISvgComponentProps>;\n field: string;\n path: string;\n separate?: boolean;\n }>;\n};\n\nconst useNavbarStyles = makeStyles((theme) => ({\n container: {\n minWidth: \"4.5rem\",\n height: \"100%\",\n background: \"linear-gradient(180deg, #B3D6EC 0%, #B3D6EC 40%, #E97FAB 100%)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n borderTopRightRadius: \"1rem\",\n borderBottomRightRadius: \"1rem\",\n border: \"solid 2px rgb(188, 172, 242)\",\n borderLeft: \"none\",\n boxSize: \"border-box\",\n\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"row\",\n justifyContent: \"center\",\n background: \"linear-gradient(90deg, #B3D6EC 0%, #B3D6EC 40%, #E97FAB 100%)\",\n borderRadius: 0,\n borderTopLeftRadius: \"1rem\",\n borderTopRightRadius: \"1rem\",\n width: \"100dvw\",\n margin: \"auto\",\n border: \"solid 2px rgb(188, 172, 242)\",\n borderBottom: \"none\",\n overflowY: \"hidden\",\n overflowX: \"scroll\",\n },\n },\n item: {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n textAlign: \"center\",\n color: \"black\",\n textDecoration: \"none\",\n fontSize: \"0.725rem\",\n padding: \"0.75rem 0.5rem\",\n gap: \"0.25rem\",\n\n backgroundColor: \"transparent\",\n transition: \"background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\n \"&:hover\": {\n backgroundColor: \"rgba(0, 0, 0, 0.04)\",\n },\n\n \"&::after\": {\n content: '\" \"',\n position: \"absolute\",\n top: \"15%\",\n bottom: \"15%\",\n right: 0,\n width: 3,\n zIndex: 1,\n transition: \"background-color 80ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\n },\n\n [theme.breakpoints.down(\"sm\")]: {\n padding: \"0.5rem 1.0rem\",\n\n \"&::after\": {\n top: 0,\n left: \"15%\",\n right: \"15%\",\n bottom: \"auto\",\n height: 4,\n width: \"auto\",\n },\n },\n },\n itemActive: {\n \"&::after\": {\n backgroundColor: \"rgb(188, 172, 242)\",\n },\n },\n separateItem: {\n marginTop: \"auto\",\n },\n}));\n\nconst Navbar = ({ tabs }: NavbarProps) => {\n const classes = useNavbarStyles();\n const location = useLocation();\n\n return (\n <div className={classes.container}>\n {tabs.map(({ Icon, field, path, separate = false }) => (\n <Link\n key={path}\n to={path}\n className={[\n classes.item,\n separate ? classes.separateItem : null,\n location.pathname === path ? classes.itemActive : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n <>\n <Icon />\n {field}\n </>\n </Link>\n ))}\n </div>\n );\n};\n\nexport default Navbar;\n","import React, { FC } from \"react\";\nimport { ISvgComponentProps } from \"../SvgComponents/types\";\nimport { Container } from \"@mui/material\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport Navbar from \"./Navbar\";\n\nexport type NavbarLayoutTabs = Array<{\n Icon: FC<ISvgComponentProps>;\n field: string;\n path: string;\n separate?: boolean;\n}>;\n\nexport type NavbarLayoutProps = {\n tabs: NavbarLayoutTabs;\n hideTabs?: boolean;\n leaveHeightForMenu?: boolean;\n children: React.ReactNode;\n};\n\ntype NavbarLayoutStyleVariables = {\n hideTabs: boolean;\n leaveHeightForMenu: boolean;\n};\n\nconst useNavbarLayoutStyles = makeStyles((theme) => ({\n tablessGrid: {},\n grid: ({ hideTabs, leaveHeightForMenu }: NavbarLayoutStyleVariables) =>\n hideTabs\n ? {}\n : {\n display: \"grid\",\n gridTemplateRows: \"auto 1fr\",\n gridTemplateColumns: \"auto 1fr\",\n height: leaveHeightForMenu ? \"calc(100dvh - 4rem)\" : \"100dvh\",\n boxSize: \"border-box\",\n\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n gridTemplateRows: \"1fr auto\",\n },\n },\n tabs: {\n height: ({ leaveHeightForMenu }: NavbarLayoutStyleVariables) =>\n leaveHeightForMenu ? \"calc(100dvh - 4rem)\" : \"100dvh\",\n\n [theme.breakpoints.down(\"sm\")]: {\n order: 1,\n height: \"max-content !important\",\n },\n },\n content: {\n padding: \"1rem\",\n boxSizing: \"border-box\",\n height: \"100%\",\n overflowY: \"scroll\",\n },\n}));\n\nconst NavbarLayout = ({\n tabs,\n hideTabs = false,\n leaveHeightForMenu = true,\n children,\n}: NavbarLayoutProps) => {\n const classes = useNavbarLayoutStyles({ hideTabs, leaveHeightForMenu });\n\n return (\n <div className={`${classes.grid}`}>\n <div className={classes.tabs}>\n <Navbar tabs={tabs} />\n </div>\n\n <div className={classes.content}>\n <Container disableGutters>\n <>{children}</>\n </Container>\n </div>\n </div>\n );\n};\n\nexport default NavbarLayout;\n","import React from \"react\";\nimport { MobileDatePicker as MobileMaterialDatePicker } from \"@mui/x-date-pickers/MobileDatePicker\";\nimport { IMobileDatePickerProps } from \"./MobileDatePicker.types\";\nimport { NO_ACCESS_LEVEL, READ_LEVEL } from \"../globals\";\nimport TextField from \"../TextField/TextField\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\n\nconst MobileDatePicker: React.FC<IMobileDatePickerProps> = ({\n styling,\n format = \"dd MMM yyyy\",\n minDate = new Date(\"1856-09-25\"),\n accessLevel,\n disabled,\n slots,\n ...rest\n}) => {\n if (accessLevel === NO_ACCESS_LEVEL) return null;\n\n let disabledProp = disabled;\n\n if (accessLevel === READ_LEVEL) {\n disabledProp = true;\n }\n\n return (\n <MobileMaterialDatePicker\n className={styling || \"\"}\n closeOnSelect\n {...rest}\n disabled={disabledProp}\n format={format}\n minDate={minDate}\n slots={{\n textField: TextField as React.ElementType<TextFieldProps>,\n ...(slots || {}),\n }}\n />\n );\n};\n\nexport default MobileDatePicker;\n","import React, { useState } from \"react\";\nimport { CheckCircleOutline, ErrorOutline } from \"@mui/icons-material\";\nimport {\n FORM_ENABLED,\n FORM_ERROR,\n FORM_LOADING,\n FORM_SUCCESS,\n FormStatuses,\n} from \"../../globals\";\nimport LoadingSpinner from \"../../LoadingSpinner/LoadingSpinner\";\nimport { useInterval } from \"../../hooks\";\nimport TextField from \"../../TextField/TextField\";\nimport { AutoSaveTextFieldProps } from \"./AutoSave.types\";\nimport { Tooltip } from \"@mui/material\";\n\nexport const AutoSaveTextField: React.FC<AutoSaveTextFieldProps> = ({\n autoSave,\n onBlur: _onBlur,\n ...props\n}) => {\n const [wrapFocus, setWrapFocus] = useState(false);\n const [formStatus, setFormStatus] = useState<FormStatuses | typeof FORM_LOADING>(\n FORM_ENABLED\n );\n const [timerRunning, setTimerRunning] = useState(false);\n\n useInterval(\n async () => {\n setFormStatus(FORM_LOADING);\n try {\n !props.error && (await autoSave(props.value));\n setFormStatus(FORM_SUCCESS);\n } catch (error) {\n setFormStatus(FORM_ERROR);\n }\n\n setWrapFocus(false);\n },\n wrapFocus && timerRunning ? 10000 : null\n );\n return (\n <>\n <TextField\n InputProps={{\n endAdornment:\n wrapFocus &&\n (formStatus === FORM_LOADING ? (\n <LoadingSpinner text={\"\"} />\n ) : formStatus === FORM_SUCCESS ? (\n <Tooltip title=\"Successfully saved updates\">\n <CheckCircleOutline color=\"primary\" />\n </Tooltip>\n ) : formStatus === FORM_ERROR ? (\n <Tooltip title={`Failed to save updates`}>\n <ErrorOutline color=\"primary\" />\n </Tooltip>\n ) : null),\n }}\n onFocus={() => {\n setWrapFocus(true);\n }}\n onChange={() => {\n // Setting it to false and then true causes the timer running to reset on every editor changes\n setTimerRunning(false);\n setTimerRunning(true);\n }}\n onBlur={async () => {\n setTimerRunning(false);\n setWrapFocus(false);\n setFormStatus(FORM_LOADING);\n try {\n !props.error && autoSave && (await autoSave(props.value));\n setFormStatus(FORM_SUCCESS);\n } catch (error) {\n setFormStatus(FORM_ERROR);\n }\n }}\n {...props}\n />\n </>\n );\n};\n","import React from \"react\";\nimport Select from \"../../Select/Select\";\nimport type { AutoSaveSelectFieldProps } from \"./AutoSave.types\";\n\nexport const AutoSaveSelectField: React.FC<AutoSaveSelectFieldProps> = ({\n autoSave,\n selectOptions,\n ...props\n}) => {\n return (\n <Select\n selectOptions={selectOptions}\n {...props}\n onChange={(newValue) => {\n autoSave && autoSave(newValue.target.value);\n }}\n />\n );\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","pack","ar","l","Array","slice","concat","string","trim","required","matches","FORM_SUCCESS","FORM_ERROR","FORM_LOADING","FORM_ENABLED","FORM_WARNING","FORM_DELETING","READ_LEVEL","NO_ACCESS_LEVEL","useSpacingStyles","makeStyles","labelBreak","marginBottom","contentBreak","sectionBreak","doubleSectionBreak","rightSpacer1","marginRight","rightSpacer2","leftSpacer1","marginLeft","leftSpacer2","buttonSpacing","leftRightPadding1","paddingLeft","paddingRight","leftRightPadding2","topBottomPadding1","paddingTop","paddingBottom","topBottomPadding2","classNamePrefix","index","useFontStyles","theme","boldText","fontWeight","bolderText","smallText","fontSize","warningColor","color","palette","warning","main","centerText","textAlign","useLayoutStyles","contentBox","background","borderRadius","padding","limitWidth60rem","maxWidth","limitWidth50rem","limitWidth45rem","limitWidth40rem","limitWidth35rem","limitWidth30rem","limitWidth25rem","centeredText","startAlignedText","width20","width","width49","width50","width60","width100","flexCenter","display","alignItems","justifyContent","centerJustify","leftJustify","rightJustify","useButtonStyles","submitButton","textTransform","containedText","spinnerColour","grey","Button","_a","_b","loading","children","_c","errors","_d","type","onClick","_e","disabled","_f","variant","_g","styling","_h","accessLevel","rest","classes","includes","disabledProp","React","createElement","MaterialButton","className","CircularProgress","size","thickness","ContentLabel","Typography","ContentBox","limitWidth","id","Box","boxShadow","LoadingSpinner","text","StyledTableRow","withStyles","createStyles","root","backgroundColor","MUITableRow","ShadedTableRow","useTableCellStyles","borderBottom","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","head","border","borderTop","primary","borderLeft","borderRight","TableCell","align","headerColours","MUITableCell","TableRow","rowBorderSeparation","SingleCellRow","colSpan","useStaticTableStyles","adjustedCellPadding","tableStyles","borderCollapse","pointer","cursor","bottomBorder","noShading","StaticTableHeaders","memo","headers","headerCellAlignment","TableHead","map","header","key","StaticTable","rows","rowCellAlignment","paginate","itemsPerPage","useState","page","setPage","hasRowsAndPaginated","useMemo","visibleRows","setVisibleRows","handlePageChange","useCallback","event","useEffect","Fragment","Table","TableBody","data","containsOnClick","undefined","row","cell","Pagination","count","Math","ceil","onChange","shape","showFirstButton","showLastButton","useStyles","logoContainer","height","logo","logoInBreadcrumb","margin","logoSpacing","spacing","flexItemsCenter","nonPrimaryBreadcrumbOffset","BreadcrumbsContainer","primaryBreadcrumbItem","common","white","zIndex","secondaryBreadcrumbItem","secondary","tertiaryBreadcrumbItem","tertiary","breadCrumbShadow","shadows","breadcrumbRightMargin","breadcrumbTextOverflow","overflow","textOverflow","activeBreadcrumb","noWrap","whiteSpace","fullBorderRadius","Breadcrumbs","content","colors","first","second","third","Link","component","RouterLink","ButtonBase","underline","link","name","container","svgContainer","button","textDecoration","orgLabel","EntityList","entities","icon","loadingMessage","emptyMessage","Grid","entity","item","xs","md","ErrorIndicator","ErrorIcon","useNavListStyles","listIcon","minWidth","mainIconSize","mainIconMarginAdjustment","marginTop","textOverflowEllipsis","mainListItem","props","mainBackground","mainText","mainHover","action","hover","mainIconColor","mainIcon","activeMainIconColor","mainActiveText","subListItem","subItemBackground","subItemText","subItemHover","activeSubListItem","subItemActiveBackground","subItemActiveText","subItemActiveHover","subItemBorder","relativeWrapper","position","subItemBorderMask","top","bottom","transition","activeSubItemBorder","subItemWrapper","noYMargin","isItemActive","currentPathname","split","NavListItem","mainItem","subItems","config","Icon","mainItemColors","subItemColors","location","useLocation","activeMainItem","pathname","subExpanded","setSubExpanded","ListItem","dense","route","ListItemIcon","ListItemText","disableTypography","preventDefault","stopPropagation","expanded","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","List","disablePadding","sortDescendingStartDateString","array","sort","a","b","startDate","replaceAll","didCellValueChange","oldVal","newVal","isDateValue","isValid","Date","getTime","useSecondaryNavStyles","secondaryNavWrapper","overflowY","overflowX","boxSizing","titleWrapper","title","titleColor","titleIcons","titleIconColor","closeButton","archivedSeparator","archivedBorder","listWrapper","SecondaryLeftNavContainer","secondaryNavItems","primaryNavItems","expandedOptions","setExpandedOptions","stylesProps","history","useHistory","navItem","view","mainItemIcon","find","field","IconButton","url","AddBoxOutlinedIcon","closeButtonSvg","CloseIcon","items","archivedItems","usePrimaryLeftNavStyles","primaryNavContainer","activeBorderColor","flexDirection","itemWrapper","itemBorder","right","activeBorder","iconWrapper","itemName","textColour","activeTextColour","activeText","lastItem","PrimaryLeftNavContainer","navigationLinks","applyActiveBackground","fieldName","path","rootRouteName","startsWith","arr","moveLastItemToBottom","hasSecondary","useLeftNavStyles","leftNavContainer","LeftNavigation","styles","navsWithSecondary","reduce","navs","nav","prev","useMainLayoutStyles","remainingHeightBox","topOffset","left","fullHeightFlexbox","relativeContainer","scrollWrapper","componentWrapper","MainLayout","sideNavigation","desktopWidth","Container","disableGutters","useDebounceEffect","effect","deps","delay","callback","setTimeout","clearTimeout","useInterval","savedCallback","useRef","current","id_1","setInterval","clearInterval","useWhyDidYouUpdate","latestProps","allKeys","keys","changesObj","forEach","changedKeys","k","filter","Boolean","isDeepEqual","isEqual","console","log","changes","values","OptionalTooltip","showTooltip","tooltipText","Tooltip","arrow","useAlphabeticalListStyles","divider","letterHeader","listItem","disabledListItem","pointerEvents","topMargin","AlphabeticalList","sortFn","sortKey","buttonClick","linkTo","ItemTemplate","arrayKey","alphabetisedHeader","isItemDisabled","lastSection","showHeader","currentKey","toLowerCase","disabledResult","reason","toUpperCase","Divider","useSearchBarStyles","searchBox","alignContent","searchField","searchIcon","SearchBar","dynamicEmptyMessage","inputBackgroundColor","placeholder","disabledSearch","minQueryLength","handleOnChange","_j","searchKeys","_k","_l","initialSearchQuery","isResultDisabled","_m","searchInput","setSearchInput","_o","blockSearch","setBlockSearch","_p","setResult","itemIsFound","some","InputBase","target","endAdornment","InputAdornment","SearchIcon","inputField","typography","body2","labelStyles","transform","TextField","numberField","inputProps","InputProps","fixedDecimalScale","inputPropsForNumberField","MaterialTextField","inputComponent","NumberFormatField","InputLabelProps","other","NumberFormat","onValueChange","thousandSeparator","decimalScale","isNumericString","useSelectStyles","wrapper","open","fill","list","maxHeight","maxListHeight","scrollbarWidth","selectedListItem","input","borderColor","Select","selectOptions","onOpen","onClose","itemClassName","setOpen","x","join","SelectProps","MenuProps","paper","IconComponent","ExpandMoreRoundedIcon","select","option","MenuItem","selected","description","DatePicker","format","minDate","slots","MaterialDatePicker","textField","KeyboardDatePicker","useButtonWithConfirmStyles","confirmWrapper","confirmContainer","whiteText","ButtonWithConfirm","confirmButtonLabel","confirmView","setConfirmView","stopInterval","setStopInterval","determineWidth","valueLength","toFixed","toString","floor","useDefaultTableCellsStyles","inputBase","startAdornment","modifiedUnderline","body2Text","dateFieldWidth","fullDateWidth","justifyStart","justifyCenter","justifyEnd","totalContainer","selectFocusBackground","TableTextField","error","onBlur","prefix","suffix","inputStyling","wrapperStyling","widthOverride","style","helperText","tableNumericStringField","tableProps","tableNumericStringFixedDecimalField","SelectionCheckbox","Checkbox","TableDatePicker","fullDate","MobileDatePicker","views","slotProps","tableDateField","TableCheckbox","checked","tableCheckbox","NonEditableField","displayType","TableSelect","FormControl","entries","FormHelperText","TableMultipleSelect","renderValue","MuiSelect","multiple","newRowHighlight","editedCellHighlight","backgroundClip","editedBorder","borderWidth","errorBorder","light","emptyLoadingPadding","pagination","virtualisationContainer","cellPadding","shadedHeader","shadedBodyCell","shadedHeaderGroupParent","shadedHeaderGroup2Children","shadedBody2CellsInsideGroup","offsetStickyPosition","stickyHeaderZIndex","headerCellColour","rowCellColour","rowHoverForStickyCell","headerBorders","EditableCell","initialValue","original","column","syncCellWithState","setRows","fieldConfig","validationRule","dependentValidationRule","isCheckbox","isDateField","customRenderFn","configOnBlur","onChangeValueModifier","setError","setValue","checkbox","validateValue","returnValue","validateSync","message","fieldValue","dateFieldError","rowIndex","errorStatus","renderFnProps","disabledRow","adjustedDateValue","dateValidity","eventValue","originalValues","TableRowContents","forwardRef","ref","includeRowSelect","rowStatus","cells","getCellProps","edited","shadedHeaderGroup","stickyCell","render","emptyRows","EditableTable","tableRows","tableHeaders","skipPageReset","setSelectedRows","filterData","filterTypes","emptyTableText","defaultPageSize","virtContainerStyling","overscan","rowHeight","includeGlobalSearch","disableHeaderSelect","parentRef","defaultColumn","Cell","useTable","columns","autoResetPage","initialState","pageSize","autoResetGlobalFilter","useFilters","useGlobalFilter","usePagination","useRowSelect","hooks","visibleColumns","Header","getToggleAllRowsSelectedProps","getToggleAllPageRowsSelectedProps","getToggleRowSelectedProps","disableSelection","getTableProps","getTableBodyProps","headerGroups","prepareRow","state","selectedRowIds","pageIndex","setFilter","pageCount","gotoPage","preGlobalFilteredRows","setGlobalFilter","isAllRowsSelected","selectedFlatRows","rowVirtualizer","useVirtual","estimateSize","rowsToRender","virtualItems","start","totalSize","end","filterRow","filterValues","GlobalSearch","globalFilter","TableContent","virtualRows","useGlobalSearchStyles","marginInline","useAsyncDebounce","MUITable","TableHeaderContent","TableRows","headerGroup","getHeaderGroupProps","getHeaderProps","parent","placeholderOf","virtualRow","rowKey","getRowProps","useAlertStyles","alertStyling","showCursor","Alert","alertActionHandler","formStatus","actionButton","alertMessage","addBreak","MUIAlert","severity","handler","useImageDisplayAndUploadStyles","greyBox","widthLimiter","hiddenInput","buttonColor","iconStyling","dropBox","dropArrowStyling","topLeftArrow","topRightArrow","bottomLeftArrow","bottomRightArrow","hiddenDisplay","loadingCircle","roundedAvatarButton","roundedAvatar","organisationImage","ImageDisplayAndUpload","handleSaveImage","alt","displayImage","setDisplayImage","uploadState","setUploadState","infoMessage","setInfoMessage","htmlToDisplay","handleImageUpload","files","imageUpload","dataTransfer","file","arrayBuffer","buffer","e_1","Forward","htmlFor","CloudUpload","onDragEnter","onDragOver","MUIButton","Avatar","src","onDragLeave","onDrop","accept","useNavbarStyles","boxSize","breakpoints","down","gap","itemActive","separateItem","Navbar","tabs","separate","useNavbarLayoutStyles","tablessGrid","grid","hideTabs","leaveHeightForMenu","gridTemplateRows","gridTemplateColumns","order","NavbarLayout","MobileMaterialDatePicker","closeOnSelect","AutoSaveTextField","autoSave","wrapFocus","setWrapFocus","setFormStatus","timerRunning","setTimerRunning","CheckCircleOutline","ErrorOutline","onFocus","AutoSaveSelectField","newValue"],"mappings":"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"}