;\nexports.useYouwellSelector = react_redux_1.useSelector;\nvar useYouwellDispatch = function () { return (0, react_redux_1.useDispatch)(); };\nexports.useYouwellDispatch = useYouwellDispatch;\nexports.default = store;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HealthRegistrationLogType = exports.HealthRegistrationType = void 0;\nvar HealthRegistrationType;\n(function (HealthRegistrationType) {\n HealthRegistrationType[\"Custom\"] = \"Custom\";\n HealthRegistrationType[\"Activity\"] = \"Activity\";\n HealthRegistrationType[\"WeightAndSize\"] = \"WeightAndSize\";\n HealthRegistrationType[\"SmokeStop\"] = \"SmokeStop\";\n HealthRegistrationType[\"BloodSugar\"] = \"BloodSugar\";\n HealthRegistrationType[\"GoutLevel\"] = \"GoutLevel\";\n HealthRegistrationType[\"Goals\"] = \"Goals\";\n HealthRegistrationType[\"Psychosocial\"] = \"Psychosocial\";\n HealthRegistrationType[\"Medicine\"] = \"Medicine\";\n HealthRegistrationType[\"Diet\"] = \"Diet\";\n})(HealthRegistrationType = exports.HealthRegistrationType || (exports.HealthRegistrationType = {}));\nvar HealthRegistrationLogType;\n(function (HealthRegistrationLogType) {\n HealthRegistrationLogType[\"Goal\"] = \"goal\";\n HealthRegistrationLogType[\"Task\"] = \"task\";\n})(HealthRegistrationLogType = exports.HealthRegistrationLogType || (exports.HealthRegistrationLogType = {}));\n","export const elementInfoClasses = theme => ({\r\n elementInfoRoot: {\r\n display: 'flex',\r\n marginBottom: theme.spacing(6),\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n flexDirection: 'column',\r\n },\r\n },\r\n elementInfoImageContainer: {\r\n flex: '1 1 50%',\r\n padding: theme.spacing(2),\r\n marginBottom: theme.spacing(1),\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n padding: theme.spacing(1),\r\n },\r\n },\r\n elementInfoImage: {\r\n width: '100%',\r\n },\r\n elementInfoDescriptionContainer: {\r\n flex: '1 1 50%',\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n padding: theme.spacing(1),\r\n },\r\n },\r\n elementInfoTitle: {\r\n flex: '1 1 auto',\r\n margin: theme.spacing(1),\r\n },\r\n elementInfoProgress: {\r\n height: 12,\r\n marginTop: theme.spacing(2),\r\n },\r\n elementInfoProgressText: {\r\n marginTop: theme.spacing(0.5),\r\n },\r\n elementInfoDescription: {\r\n margin: theme.spacing(1),\r\n },\r\n});\r\n\r\n\r\nexport const tableListClasses = theme => ({\r\n tableListRoot: {\r\n boxShadow: theme.shadows[1],\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n boxShadow: 'none',\r\n },\r\n },\r\n tableListTitleContainer: {\r\n padding: theme.spacing(1, 8),\r\n background: theme.palette.primary.main,\r\n color: theme.palette.common.white,\r\n border: theme.youwell.borders.dim,\r\n borderWidth: '0px 1px',\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n borderWidth: 0,\r\n background: theme.palette.grey[100],\r\n color: theme.palette.primary.main,\r\n padding: theme.spacing(1, 4),\r\n },\r\n },\r\n tableListTitle: {\r\n\r\n },\r\n tableListRows: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n flex: '1 1 auto',\r\n },\r\n },\r\n tableListRow: {\r\n display: 'flex',\r\n },\r\n tableListRowIndex: {\r\n background: theme.palette.secondary.main,\r\n borderBottom: theme.youwell.borders.dim,\r\n width: theme.spacing(3),\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: theme.palette.common.white,\r\n\r\n [theme.breakpoints.up('sm')]: {\r\n width: theme.spacing(4),\r\n },\r\n },\r\n tableListRowElement: {\r\n flex: '1 1 0px',\r\n margin: theme.spacing(0, 4),\r\n padding: theme.spacing(2, 0),\r\n borderBottom: theme.youwell.borders.dim,\r\n color: theme.palette.grey[400],\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n margin: theme.spacing(0, 2),\r\n },\r\n\r\n '$tableListCurrent &': {\r\n background: theme.palette.grey[200],\r\n color: theme.palette.common.black,\r\n margin: '-1px 0 0',\r\n padding: theme.spacing(2, 4),\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n padding: theme.spacing(2),\r\n },\r\n },\r\n '$tableListCompleted &': {\r\n color: theme.palette.common.black,\r\n },\r\n '$tableListUnavailable &': {\r\n color: theme.palette.grey[400],\r\n },\r\n },\r\n tableListRowElementTitle: {\r\n flex: '1 1 auto',\r\n },\r\n tableListCurrent: {\r\n },\r\n tableListCompleted: {\r\n },\r\n tableListUnavailable: {\r\n },\r\n});\r\n\r\nexport const iconClasses = theme => ({\r\n iconGreen: {\r\n color: theme.youwell.colors.green,\r\n opacity: 0.5,\r\n },\r\n iconRed: {\r\n color: theme.youwell.colors.red,\r\n opacity: 0.7,\r\n },\r\n iconGray: {\r\n color: theme.palette.grey[400],\r\n opacity: 0.7,\r\n },\r\n});\r\n","// extracted by mini-css-extract-plugin\nexport {};\n if(module.hot) {\n // 1713287957649\n var cssReload = require(\"/home/vsts/work/1/s/node_modules/mini-css-extract-plugin/dist/hmr/hotModuleReplacement.js\")(module.id, {\"locals\":false});\n module.hot.dispose(cssReload);\n module.hot.accept(undefined, cssReload);\n }\n ","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.headerHeight = exports.scrollerWidth = void 0;\nvar core_1 = require(\"@material-ui/core\");\nvar defaultTheme_1 = require(\"../../youwell-common/styles/defaultTheme\");\nvar customerPalette = __assign(__assign({}, defaultTheme_1.defaultPalette), { \n // Customer palette can be overridden here or in appsettings.json\n // Primary/Secondary/Highlight must also be set in appsettings.json\n // Primary and Secondary should have at least 4.5 contrast ratio to eachother\n primary: '#056839', secondary: '#CEA205', highlight: '#056839', hover: '#CEA205', defaultBackground: '#E5F0EB', secondaryBackground: '#ffffff', \n // common\n inputBackground: '#ffffff', white: '#ffffff', grayDark: '#626262', grayMiddle: '#A9A8A8', grayLight: '#D3D1CF', black: '#000000', red: '#FB6C76', green: '#056839', highScore: '#07995b', midScore: '#2C1585', lowScore: '#910DA7', \n // HiH\n blue: '#5076FF', lightGreen: '#E5F0EB', mediumGreen: '#7BA425' });\nexports.scrollerWidth = 16;\nexports.headerHeight = 50;\nvar generateTheme = function (options, darkMode) {\n var _a;\n var paletteFromOptions = (_a = options === null || options === void 0 ? void 0 : options.palette) === null || _a === void 0 ? void 0 : _a.split(';').reduce(function (prev, curr) {\n var _a;\n var currKeyVal = curr === null || curr === void 0 ? void 0 : curr.split(':');\n if ((currKeyVal === null || currKeyVal === void 0 ? void 0 : currKeyVal.length) !== 2) {\n return prev;\n }\n return __assign(__assign({}, prev), (_a = {}, _a[currKeyVal[0]] = currKeyVal[1], _a));\n }, {});\n var palette = __assign(__assign({}, customerPalette), paletteFromOptions);\n var customerThemeProperties = {\n colors: palette,\n shadows: __assign(__assign({}, (0, defaultTheme_1.getDefaultShadows)(palette)), { default: '-5px -5px 10px #FFFFFF, 5px 5px 10px #BDD8D8, 10px 10px 20px rgba(189, 216, 216, 0.5), -10px -10px 20px rgba(255, 255, 255, 0.5)', button: '2px 2px 4px rgba(0, 0, 0, 0.25))', lightgreyShadow: '0px 4px 4px rgba(255, 255, 255, 0.15), inset 3px 3px 3px rgba(0, 0, 0, 0.15)' }),\n borders: __assign(__assign({}, (0, defaultTheme_1.getDefaultBorders)(palette)), { normal: \"1px solid \".concat(palette.grayMiddle), dim: \"1px solid \".concat(palette.grayLight), transparent: '1px solid transparent', medium: \"4px solid \".concat(palette.grayMiddle), large: \"8px solid \".concat(palette.grayMiddle), primary: \"2px solid \".concat(palette.primary), secondary: \"3px solid \".concat(palette.secondary), hover: \"2px solid \".concat(palette.hover), dotted: \"2px dotted \".concat(palette.secondary), inputBox: \"1px solid \".concat(palette.primary), error: \"1px solid \".concat(palette.red) }),\n shapes: {\n borderRadius: 10,\n borderRadiusRounder: 20,\n borderRadiusFlatter: 5,\n borderRadiusRound: 1000,\n },\n };\n var themeOptions = {\n palette: {\n type: darkMode ? 'light' : 'light',\n primary: {\n main: palette.primary,\n },\n secondary: {\n main: palette.secondary,\n },\n error: {\n main: palette.red,\n },\n background: {\n default: palette.defaultBackground,\n paper: palette.white,\n },\n text: {\n primary: palette.black,\n secondary: palette.grayMiddle,\n },\n },\n youwell: customerThemeProperties,\n shape: {\n borderRadius: customerThemeProperties.shapes.borderRadius,\n },\n typography: {\n fontSize: 16,\n },\n overrides: {\n MuiCssBaseline: {\n '@global': {\n body: {\n backgroundColor: palette.defaultBackground,\n },\n },\n },\n MuiInputBase: {\n root: {\n backgroundColor: palette.white,\n },\n },\n MuiButton: {\n root: {\n fontWeight: 400,\n borderRadius: 20,\n },\n label: {\n fontWeight: 500,\n },\n outlinedSecondary: {\n color: palette.primary,\n border: \"1px solid \".concat(palette.secondary),\n '&:hover': {\n backgroundColor: palette.secondaryBackground,\n },\n },\n containedSecondary: {\n color: palette.white,\n },\n },\n MuiDrawer: {\n paper: {\n maxWidth: '100%',\n },\n },\n MuiTypography: {\n body1: {\n fontSize: '1.1875rem',\n lineHeight: '1.473685em',\n },\n subtitle1: {\n lineHeight: '1.5em',\n },\n subtitle2: {\n fontSize: '1.1875rem',\n },\n },\n MuiTooltip: {\n tooltip: {\n backgroundColor: palette.white,\n border: \"2px solid \".concat(palette.grayLight),\n color: palette.grayLight,\n padding: 16,\n fontSize: '1rem',\n fontWeight: 400,\n },\n },\n MuiRating: {\n root: {\n color: palette.primary,\n },\n },\n },\n };\n return (0, core_1.createTheme)(themeOptions);\n};\nexports.default = generateTheme;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar urls = {\n home: '/',\n login: '/login',\n loginRedirect: '/loginredirect',\n accessKeyLogin: '/acc',\n loginParts: {\n accessCode: 'code',\n selectOrg: 'selectorg',\n forgotPassword: 'forgotPassword',\n resetPassword: 'resetPassword',\n external: 'ext',\n },\n logout: '/logout',\n preview: {\n home: '/preview', // {taskId}\n // program: '/preview/p', // {programId}/{moduleIndex?}/{taskIndex?}\n // module: '/preview/m', // {moduleId}/{taskIndex?}\n // task: '/preview/t', // {taskId}\n },\n singlepage: '/pre',\n outsideProgram: {\n home: '/prg',\n task: '/prg/t',\n program: '/prg/p',\n programSelect: '/prg/s',\n },\n public: {\n home: '/public',\n program: '/public/p',\n module: '/public/m',\n programLink: '/public/link', // page for id lookup and redirect to program or module\n },\n external: {\n home: '/ext',\n consent: '/ext/consent',\n },\n inside: {\n home: '/inside',\n profile: '/inside/profile',\n chat: '/inside/chat',\n videochat: '/inside/call',\n program: '/inside/program',\n programLink: '/inside/link',\n pages: {\n home: '/inside/p/',\n calendar: '/inside/p/calendar',\n videos: '/inside/p/videos',\n favourites: '/inside/p/favourites',\n performance: '/inside/p/performance',\n sleepDiary: '/inside/p/sleep',\n activityDiary: '/inside/p/activity',\n health: {\n health: '/inside/p/health',\n medicine: '/inside/p/health/medicine',\n activity: '/inside/p/health/activity',\n weight: '/inside/p/health/weight',\n diet: '/inside/p/health/diet',\n smoking: '/inside/p/health/smoking',\n bloodSugar: '/inside/p/health/bloodSugar',\n psychosocial: '/inside/p/health/psychosocial',\n goals: '/inside/p/health/goals',\n },\n prints: '/inside/p/prints',\n feedback: '/inside/p/feedback',\n elements: '/inside/p/elements',\n consent: '/inside/p/consent',\n missingGuardianConsent: '/inside/p/missingconsent',\n singlepage: '/inside/p/pre',\n },\n parts: {\n resumeLatest: 'continue',\n },\n },\n};\nexports.default = urls;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElementLink = exports.getBreadCrumb = void 0;\nvar urls_1 = __importDefault(require(\"../app/urls\"));\nvar constants_1 = require(\"./constants\");\nvar getBreadCrumb = function (currentName, translate, clientConfig, task, trail) {\n var breadCrumb = [];\n breadCrumb.push({\n text: translate('header.home'),\n url: urls_1.default.inside.home,\n });\n if (task) {\n switch (task.elementGroup) {\n case constants_1.patientProgramElementGroups.main: {\n if (task.module) {\n breadCrumb.push({\n text: task.moduleName,\n url: \"\".concat(urls_1.default.inside.program, \"/\").concat(task.elementGroup, \"/\").concat(task.elementIndex),\n });\n }\n break;\n }\n case constants_1.patientProgramElementGroups.appointment:\n case constants_1.patientProgramElementGroups.app: {\n break;\n }\n default: {\n breadCrumb.push({\n text: translate(\"patientProgramElementGroups.\".concat(task.elementGroup), undefined, { onMissingTranslation: function () { return '..'; } }),\n });\n }\n }\n }\n if (trail) {\n for (var i = 0; i < trail.length; i++) {\n breadCrumb.push(trail[i]);\n }\n }\n breadCrumb.push({\n text: currentName,\n });\n return breadCrumb;\n};\nexports.getBreadCrumb = getBreadCrumb;\nvar getElementLink = function (element) { return \"\".concat(urls_1.default.inside.program, \"/\").concat(element.elementGroup, \"/\").concat(element.indexInGroup); };\nexports.getElementLink = getElementLink;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport {\n Typography, LinearProgress, IconButton,\n} from '@material-ui/core';\n\nimport TrackedLink from './TrackedLink';\nimport { activityLabels } from '../constants';\nimport {\n PrintIcon, ListIcon,\n} from '../icons';\nimport { hasValue } from '../../youwell-common/objectUtils';\nimport apiUrls from '../../youwell-common/apiUrls';\nimport Favourite from './Favourite';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n links: {\n display: 'flex',\n flexWrap: 'wrap',\n flexGrow: 1,\n alignItems: 'center',\n [theme.breakpoints.up('sm')]: {\n marginBottom: theme.spacing(1),\n },\n },\n linkContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n linkItem: {\n borderColor: theme.palette.text.secondary,\n fontWeight: theme.typography.fontWeightMedium,\n },\n separatorIcon: {\n margin: theme.spacing(0, 0.5),\n color: theme.palette.text.secondary,\n },\n flex: {\n flex: '1 1 auto',\n },\n progressContainer: {\n display: 'flex',\n flexWrap: 'wrap',\n flexGrow: 2,\n alignItems: 'center',\n justifyContent: 'space-between',\n\n '@media print': {\n display: 'none',\n },\n },\n progressBar: {\n height: 12,\n maxWidth: 200,\n minWidth: 120,\n flexGrow: 1,\n },\n progressBarRounded: {\n // background: theme.palette.primary.main,\n borderRadius: theme.youwell.shapes.borderRadius,\n // border: '2px solid',\n },\n progressBarFill: {\n background: theme.youwell.colors.highlight,\n borderRadius: theme.youwell.shapes.borderRadius,\n },\n progressText: {\n fontWeight: theme.typography.fontWeightMedium,\n marginLeft: theme.spacing(1),\n },\n actionsContainer: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n action: {\n padding: theme.spacing(0.5),\n marginLeft: theme.spacing(1),\n },\n actionIcon: {\n fontSize: 'inherit',\n },\n hideOnDesktop: {\n [theme.breakpoints.up('md')]: {\n display: 'none',\n },\n },\n});\n\nclass BreadCrumb extends React.Component {\n renderActions() {\n const {\n classes, task, openSideMenu, translate,\n } = this.props;\n\n return (\n <>\n {task?.printFileId && (\n \n \n \n )}\n {task?.showFavourite && (\n \n )}\n {openSideMenu && (\n \n \n \n )}\n >\n );\n }\n\n render() {\n const {\n classes, translate, levels, progress, className, isActiveProgram,\n } = this.props;\n\n const showProgress = isActiveProgram && hasValue(progress);\n\n return (\n \n
\n {levels && levels.map((l, i) => (\n // eslint-disable-next-line react/no-array-index-key\n
\n \n \n {l.text}\n \n \n\n {i < (levels.length - 1) && (\n /\n )}\n
\n ))}\n {!showProgress && (\n <>\n
\n
\n {this.renderActions()}\n
\n >\n )}\n
\n\n\n
\n {showProgress && (\n <>\n
\n
\n {translate('common.progressCompleted', { progress: Math.round(progress * 100) })}\n \n
\n {this.renderActions()}\n
\n >\n )}\n
\n
\n );\n }\n}\n\nBreadCrumb.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n levels: PropTypes.array,\n progress: PropTypes.number,\n className: PropTypes.string,\n task: PropTypes.object,\n openSideMenu: PropTypes.func,\n isActiveProgram: PropTypes.bool,\n};\n\nBreadCrumb.defaultProps = {\n levels: null,\n progress: null,\n className: null,\n task: null,\n openSideMenu: null,\n isActiveProgram: false,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n isActiveProgram: state.programStore.currentProgram?.isActiveProgram,\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(BreadCrumb));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Checkbox as CheckboxControl, FormControlLabel } from '@material-ui/core';\n\n\nconst styles = theme => ({\n\n checkbox: {\n margin: 0,\n marginTop: theme.spacing(1),\n },\n checkboxInput: {\n width: 'auto',\n marginRight: theme.spacing(1),\n },\n});\n\nclass Checkbox extends React.Component {\n render() {\n const {\n classes, checked, onChange, label,\n } = this.props;\n\n return (\n \n )}\n label={label}\n />\n );\n }\n}\n\nCheckbox.propTypes = {\n classes: PropTypes.object.isRequired,\n checked: PropTypes.bool.isRequired,\n onChange: PropTypes.func.isRequired,\n label: PropTypes.string,\n};\n\nCheckbox.defaultProps = {\n label: null,\n};\n\n\nexport default withStyles(styles)(Checkbox);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Link } from 'react-router-dom';\n\nimport {\n Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button,\n} from '@material-ui/core';\n\nconst styles = theme => ({\n actions: {\n padding: theme.spacing(3),\n },\n primaryButton: {\n marginLeft: theme.spacing(2),\n },\n});\n\nclass ChoiceNavigationDialog extends React.Component {\n render() {\n const {\n classes, open, onCancel, title, description, primaryLink, primaryText, secondaryLink, secondaryText,\n } = this.props;\n\n return (\n \n );\n }\n}\n\nChoiceNavigationDialog.propTypes = {\n classes: PropTypes.object.isRequired,\n open: PropTypes.bool.isRequired,\n onCancel: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n primaryText: PropTypes.string,\n primaryLink: PropTypes.string,\n secondaryText: PropTypes.string,\n secondaryLink: PropTypes.string,\n};\n\nChoiceNavigationDialog.defaultProps = {\n primaryText: null,\n primaryLink: null,\n secondaryText: null,\n secondaryLink: null,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(ChoiceNavigationDialog));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport {\n Button, Typography, IconButton, Dialog, DialogTitle, DialogContent, DialogActions, makeStyles,\n} from '@material-ui/core';\nimport { useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\n\nconst useStyles = makeStyles(theme => ({\n title: {\n\n },\n dialogContent: {\n '&$danger': {\n borderTop: theme.youwell.borders.normal,\n borderColor: theme.palette.error.main,\n paddingTop: theme.spacing(2),\n },\n },\n description: {\n\n },\n okButton: {\n\n },\n cancelButton: {\n\n },\n danger: {\n color: theme.palette.error.main,\n },\n}));\n\nconst ConfirmDialog = ({\n onClose, dialogTitle, children, open, danger, color,\n}) => {\n const translate = useSelector(state => getTranslate(state.localize));\n const classes = useStyles();\n\n return (\n \n );\n};\n\nConfirmDialog.propTypes = {\n onClose: PropTypes.func.isRequired,\n open: PropTypes.bool.isRequired,\n dialogTitle: PropTypes.string,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]),\n color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary']),\n danger: PropTypes.bool,\n};\n\nConfirmDialog.defaultProps = {\n dialogTitle: null,\n children: null,\n danger: false,\n color: 'primary',\n};\n\nconst ConfirmButton = ({\n buttonClassName, variant, confirmText, confirmTitle, children, disabled, color, ButtonProps, danger, onClick,\n}) => {\n const classes = useStyles();\n const [dialogOpen, setDialogOpen] = React.useState(false);\n\n const openDialog = () => {\n setDialogOpen(true);\n };\n\n const closeDialog = (confirmed) => {\n setDialogOpen(false);\n\n if (confirmed) {\n onClick();\n }\n };\n\n return (\n <>\n {variant === 'button' && (\n \n )}\n {variant === 'iconbutton' && (\n \n {children}\n \n )}\n\n \n \n {confirmText}\n \n \n >\n );\n};\n\n\nConfirmButton.propTypes = {\n onClick: PropTypes.func.isRequired,\n confirmText: PropTypes.string.isRequired,\n confirmTitle: PropTypes.string,\n buttonClassName: PropTypes.string,\n disabled: PropTypes.bool,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n variant: PropTypes.oneOf(['button', 'iconbutton']),\n color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary']),\n ButtonProps: PropTypes.object,\n danger: PropTypes.bool,\n};\n\nConfirmButton.defaultProps = {\n variant: 'button',\n buttonClassName: null,\n disabled: false,\n color: 'default',\n ButtonProps: null,\n danger: false,\n confirmTitle: '',\n};\n\nexport default ConfirmButton;\n","import React, { useCallback, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { bindActionCreators } from 'redux';\nimport classnames from 'classnames';\n\nimport {\n Typography, TextField, Button, IconButton,\n} from '@material-ui/core';\n\nimport * as PreviewStore from '../../app/store/PreviewStore';\nimport { timestamp } from '../../youwell-common/dateUtils';\nimport { getElementTitle } from '../../youwell-common/contentUtils';\nimport { ClearIcon } from '../icons';\nimport useForm from '../../youwell-common/useForm';\nimport { validateRequired } from '../../youwell-common/validationUtils';\nimport { contentElemenIdPrefix } from '../../youwell-common/constants';\n\nconst styles = theme => ({\n root: {\n background: theme.palette.common.white,\n borderLeft: theme.youwell.borders.dim,\n padding: theme.spacing(2),\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(1),\n },\n },\n description: {\n marginTop: theme.spacing(8),\n\n [theme.breakpoints.down('xs')]: {\n display: 'none', // not possible to select element on small screen so description is not relevant..\n },\n },\n commentInputFields: {\n margin: theme.spacing(2, 0),\n padding: theme.spacing(2),\n background: theme.palette.grey[50],\n display: 'flex',\n flexDirection: 'column',\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(1),\n },\n },\n commentElement: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n borderBottom: theme.youwell.borders.primary,\n },\n commentInput: {\n marginTop: theme.spacing(1),\n },\n sendButton: {\n marginTop: theme.spacing(1),\n alignSelf: 'flex-end',\n },\n comment: {\n marginBottom: theme.spacing(2),\n },\n commentHead: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n borderBottom: theme.youwell.borders.dim,\n },\n lineWrapper: {\n position: 'fixed',\n top: 0,\n left: 0,\n height: '100vh',\n width: '100vw',\n pointerEvents: 'none',\n color: theme.palette.primary.main,\n },\n});\n\n\nconst calculate = (from, to) => {\n const fromEl = document.getElementById(from);\n const toEl = document.getElementById(to);\n\n if (!fromEl || !toEl) {\n return '';\n }\n\n const fromPosRect = fromEl.getBoundingClientRect();\n const toPosRect = toEl.getBoundingClientRect();\n\n const fromPos = {\n x: fromPosRect.left - 8,\n y: fromPosRect.top + fromEl.offsetHeight / 2,\n };\n const toPos = {\n x: toPosRect.right + 8,\n y: toPosRect.top + toEl.offsetHeight / 2,\n };\n\n return `M${fromPos.x},${fromPos.y} `\n+ `C${fromPos.x - 80},${fromPos.y} ${toPos.x + 80},${toPos.y} ${\n toPos.x},${toPos.y}`;\n};\n\nconst Line = ({\n from, to, classes,\n}) => {\n const lineEl = useRef(null);\n\n\n const update = useCallback(() => {\n if (lineEl.current) {\n lineEl.current.setAttribute('d', calculate(from, to));\n }\n }, [from, to]);\n\n useEffect(() => {\n update();\n }, [update]);\n\n useEffect(() => {\n window.addEventListener('scroll', update);\n\n return () => {\n window.removeEventListener('scroll', update);\n };\n }, [update]);\n\n return (\n \n
\n
\n );\n};\n\nLine.propTypes = {\n from: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n classes: PropTypes.object.isRequired,\n};\n\nconst ContentCommenting = ({\n classes, className, translate, task, commentElementId, saveTaskComment, clearCommentElement, getTaskComments, comments,\n}) => {\n const send = ({ formValues }) => {\n saveTaskComment({\n taskId: task.id, elementId: commentElementId, comment: formValues.comment, name: formValues.name,\n }, {\n // callback: () => setValues({ name: formValues.name }),\n });\n };\n\n const {\n formValues,\n validationErrors,\n handleChange,\n handleSubmit,\n } = useForm(send, {\n name: validateRequired,\n comment: validateRequired,\n }, {});\n\n useEffect(\n () => getTaskComments(task.id, { reducerParams: { taskId: task.id } }),\n [getTaskComments, task.id],\n );\n\n const elementTitles = task.contentElements?.reduce((prev, curr) => (\n curr ? { ...prev, [curr.id]: getElementTitle(curr) } : prev\n ), {});\n\n return (\n \n
\n {translate('taskCommenting.description')}\n \n\n
\n\n {comments?.map(c => (\n
\n
\n \n {timestamp(c.created)}\n \n {c.elementId && (\n \n {elementTitles[c.elementId]}\n \n )}\n
\n
\n {c.comment}\n \n
\n {c.name}\n \n
\n ))}\n
\n );\n};\n\nContentCommenting.propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n translate: PropTypes.func.isRequired,\n task: PropTypes.object.isRequired,\n comments: PropTypes.array,\n saveTaskComment: PropTypes.func.isRequired,\n getTaskComments: PropTypes.func.isRequired,\n clearCommentElement: PropTypes.func.isRequired,\n commentElementId: PropTypes.number,\n};\n\nContentCommenting.defaultProps = {\n className: null,\n commentElementId: null,\n comments: null,\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n translate: getTranslate(state.localize),\n comments: state.previewStore.comments[ownProps.task.id],\n commentElementId: state.previewStore.commentElementId,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(PreviewStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(ContentCommenting));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { isBrowser } from '../../youwell-common/browserUtils';\nimport { datestamp, getAge } from '../../youwell-common/dateUtils';\n\nconst valueFromCommonVariables = (key, patientData, patientProgram) => {\n switch (key) {\n case 'patient_name': return patientData?.name;\n case 'patient_age': return getAge(patientData?.birthDate);\n case 'program_name': return patientProgram?.program?.name;\n case 'program_start': return datestamp(patientProgram?.startDate);\n default: return null;\n }\n}\n\nclass ContentVariableLoader extends React.Component {\n componentDidMount() {\n if (isBrowser) {\n // eslint-disable-next-line no-underscore-dangle\n window.__getYouwellVariable = this.getYouwellVariable;\n }\n }\n\n componentWillUnmount() {\n if (isBrowser) {\n // eslint-disable-next-line no-underscore-dangle\n window.__getYouwellVariable = null;\n }\n }\n\n getYouwellVariable = (variableName) => {\n const { currentProgram, patientData, showVariableNameIfNull, customVariables } = this.props;\n\n let value = customVariables?.[variableName];\n\n if (!value) {\n value = valueFromCommonVariables(variableName, patientData, currentProgram);\n }\n\n if (!value) {\n value = currentProgram?.settings?.keyValues?.[variableName];\n }\n\n if (!value) {\n value = showVariableNameIfNull ? `[${variableName}]` : '';\n }\n\n return value;\n }\n\n render() {\n return null;\n }\n}\n\nContentVariableLoader.propTypes = {\n patientData: PropTypes.object,\n currentProgram: PropTypes.object,\n showVariableNameIfNull: PropTypes.bool,\n customVariables: PropTypes.object,\n};\n\nContentVariableLoader.defaultProps = {\n patientData: null,\n currentProgram: null,\n showVariableNameIfNull: false,\n customVariables: null,\n};\n\nexport default ContentVariableLoader;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n createStyles,\n makeStyles,\n Typography,\n} from '@material-ui/core';\n\nexport const styles = theme => createStyles({\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n button: {\n fontSize: theme.typography.h4.fontSize,\n background: theme.palette.common.white,\n width: 60,\n height: 60,\n borderRadius: '50%',\n },\n display: {\n margin: theme.spacing(2),\n fontSize: theme.typography.h4.fontSize,\n },\n});\n\nconst useStyles = makeStyles(theme => styles(theme), { name: 'Counter' });\n\nconst Counter = ({ onChange, value, ...rest }) => {\n const classes = useStyles();\n const onClick = increase => () => {\n onChange({ target: { value: value + increase } });\n };\n\n return (\n \n \n \n {value}\n \n \n
\n );\n};\n\nCounter.propTypes = {\n onChange: PropTypes.func.isRequired,\n value: PropTypes.number,\n};\n\nCounter.defaultProps = {\n value: 0,\n};\n\nexport default Counter;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@material-ui/core\");\nvar React = __importStar(require(\"react\"));\nvar dateUtils_1 = require(\"../../youwell-common/dateUtils\");\nvar icons_1 = require(\"../icons\");\nvar store_1 = require(\"../../app/store\");\nvar styles = function (theme) { return (0, core_1.createStyles)({\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n iconButton: {},\n label: {\n margin: theme.spacing(0, 1),\n padding: theme.spacing(0, 4),\n textTransform: 'capitalize',\n },\n description: {\n color: theme.youwell.colors.secondary,\n },\n}); };\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return styles(theme); }, { name: 'DaySelector' });\nvar DaySelector = function (_a) {\n var onChange = _a.onChange, selectedDate = _a.selectedDate, allowOutOfProgramDays = _a.allowOutOfProgramDays;\n var classes = useStyles();\n var programStartDate = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.startDate; });\n var setDate = function (date) {\n if (onChange) {\n onChange(date);\n }\n };\n var next = function () {\n setDate((0, dateUtils_1.addDays)(selectedDate, 1));\n };\n var prev = function () {\n setDate((0, dateUtils_1.addDays)(selectedDate, -1));\n };\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.IconButton, { color: \"secondary\", onClick: prev, className: classes.iconButton, disabled: (!allowOutOfProgramDays && programStartDate) ? new Date(programStartDate) > selectedDate : false },\n React.createElement(icons_1.PrevIcon, null)),\n React.createElement(\"div\", { className: classes.label },\n React.createElement(core_1.Typography, { variant: \"h6\", color: \"primary\", align: \"center\" }, (0, dateUtils_1.shortDate)(selectedDate))),\n React.createElement(core_1.IconButton, { color: \"secondary\", onClick: next, className: classes.iconButton, disabled: selectedDate > new Date() },\n React.createElement(icons_1.NextIcon, null))));\n};\nDaySelector.defaultProps = {\n allowOutOfProgramDays: false,\n};\nexports.default = DaySelector;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport { bindActionCreators } from 'redux';\n\nimport {\n IconButton,\n} from '@material-ui/core';\n\nimport * as ProgramStore from '../../app/store/ProgramStore';\nimport {\n FavouritesIcon, FavouritesUncheckedIcon,\n} from '../icons';\n\nconst styles = theme => ({\n icon: {\n fontSize: 'inherit',\n },\n iconChecked: {\n fontSize: 'inherit',\n color: theme.palette.primary.main,\n },\n});\n\nclass Favourite extends React.Component {\n toggleFavourite = (taskId, patientProgramElementId, isFav) => () => {\n const data = {\n taskId,\n patientProgramElementId,\n patientProgramId: this.props.programDetails.id,\n on: !isFav,\n };\n\n this.props.toggleFavourite(data, { reducerParams: { patientProgramId: data.patientProgramId } });\n }\n\n render() {\n const {\n classes, className, taskId, patientProgramElementId, programDetails, clientConfig, translate,\n } = this.props;\n\n if (!clientConfig.appSetup.features.favourites || !taskId || !programDetails) {\n return null;\n }\n\n const isFav = programDetails.favourites[taskId];\n\n return (\n \n {isFav ? () : ()}\n \n );\n }\n}\n\nFavourite.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n toggleFavourite: PropTypes.func.isRequired,\n clientConfig: PropTypes.object.isRequired,\n className: PropTypes.string,\n programDetails: PropTypes.object,\n taskId: PropTypes.string,\n patientProgramElementId: PropTypes.string,\n};\n\nFavourite.defaultProps = {\n className: null,\n programDetails: null,\n taskId: null,\n patientProgramElementId: null,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n programDetails: state.programStore.currentProgram,\n clientConfig: state.auth.clientConfig,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(ProgramStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(Favourite));\n","import React, { useEffect, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, connect, useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { Typography, Button, TextField } from '@material-ui/core';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport * as PublicStore from '../../app/store/PublicStore';\nimport { validateAllFields, validateEmail, validateRequired } from '../../youwell-common/validationUtils';\n\nconst useStyles = makeStyles(theme => ({\n nameAndEmail: {\n display: 'flex',\n flexDirection: 'row',\n '& > div': {\n margin: theme.spacing(1),\n },\n },\n submitButtonWrapper: {\n marginTop: theme.spacing(2),\n display: 'flex',\n alignItems: 'flex-end',\n flexDirection: 'column',\n },\n submitButton: {\n margin: theme.spacing(1),\n width: 240,\n },\n header: {\n margin: theme.spacing(1, 0),\n },\n description: {\n margin: theme.spacing(1, 0, 4),\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n },\n responseMsg: {\n margin: theme.spacing(1),\n },\n}));\n\nconst validators = {\n email: validateEmail,\n description: validateRequired,\n};\n\nconst initalFormState = () => ({\n name: '', email: '', description: '',\n});\n\nconst FeedbackForm = ({\n translate,\n}) => {\n const dispatch = useDispatch();\n const classes = useStyles();\n const formRef = useRef();\n\n const appConfig = useSelector(state => state.pageSettings.appConfig);\n const profileData = useSelector(state => state.auth.profileData);\n const [formState, setFormState] = useState(initalFormState());\n\n const [isEmailValid, setIsEmailValid] = useState(true);\n const [isFormValid, setIsFormValid] = useState(true);\n const [feedbackFormSent, setFeedbackFormSent] = useState(false);\n\n const handleFormChange = name => (e) => {\n setFormState({ ...formState, [name]: e.target.value });\n };\n\n useEffect(() => {\n if (formState.name || formState.email || formState.description) {\n setFeedbackFormSent(false);\n }\n const validationErrors = validateAllFields(formState, validators);\n setIsEmailValid(!validationErrors.email);\n setIsFormValid(!validationErrors.description);\n }, [formState]);\n\n const handleSubmitForm = (e) => {\n e.preventDefault();\n const feedbackData = {\n ...formState,\n organizationId: appConfig?.orgId || profileData?.organization?.id,\n app: appConfig?.appName,\n };\n dispatch(PublicStore.actionCreators.sendFeedbackFromForm(feedbackData, { callback: () => {\n setFormState(initalFormState());\n formRef.current.reset();\n setFeedbackFormSent(true);\n } }));\n };\n\n const includeNameAndEmail = false;\n\n return (\n \n );\n};\n\nFeedbackForm.propTypes = {\n translate: PropTypes.func.isRequired,\n};\n\nFeedbackForm.defaultProps = {};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(FeedbackForm);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar mediaUpload_1 = require(\"../../youwell-common/mediaUpload\");\nvar errorUtils_1 = require(\"../../youwell-common/errorUtils\");\nvar constants_1 = require(\"../../youwell-common/constants\");\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar icons_1 = require(\"../../youwell-common/icons\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {},\n input: {\n display: 'none',\n },\n error: {\n marginTop: theme.spacing(1),\n },\n selectedFile: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n },\n attachedCaption: {\n marginRight: theme.spacing(1),\n },\n clearIcon: {\n marginLeft: theme.spacing(1),\n height: 40,\n width: 40,\n },\n}); }, { name: 'FileUpload' });\nvar getErrorMessage = function (errorMessageOrCode) {\n var errorCode = Number(errorMessageOrCode);\n if (errorCode === 1110) {\n return 'fileUpload.invalidFiletypes';\n }\n if (Number.isNaN(errorCode)) {\n return 'uploadFailed';\n }\n return \"errors.\".concat(errorMessageOrCode);\n};\nvar FileUpload = function (_a) {\n var className = _a.className, onSelected = _a.onSelected, filetypes = _a.filetypes;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var appConfig = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.appConfig; });\n var _b = React.useState(false), isUploading = _b[0], setIsUploading = _b[1];\n var _c = React.useState(''), errorMessage = _c[0], setErrorMessage = _c[1];\n var _d = React.useState(''), fileName = _d[0], setFileName = _d[1];\n var clearFile = function () {\n onSelected(null);\n setFileName('');\n };\n var handleFileUpload = function (event) {\n var _a;\n var file = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0];\n if (file) {\n setIsUploading(true);\n (0, mediaUpload_1.uploadPatientFile)(file)\n .then(function (data) {\n onSelected(data);\n setFileName(data.name);\n setIsUploading(false);\n })\n .catch(function (error) {\n (0, errorUtils_1.sendError)({ sender: 'FileUpload', error: 'Failed to upload file', info: error && error.toString() });\n setIsUploading(false);\n setErrorMessage(getErrorMessage(error.message));\n });\n }\n else {\n clearFile();\n }\n };\n // const url = fileId ? `${apiUrls.baseUrl}/${apiUrls.app.media}/${fileId}` : '';\n var id = \"file_upload_\".concat(Date.now());\n var acceptedTypes = filetypes === null || filetypes === void 0 ? void 0 : filetypes.map(mediaUpload_1.getAccept).join(',');\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.root, className) }, fileName ? (React.createElement(\"div\", { className: classes.selectedFile },\n React.createElement(core_1.Typography, { className: classes.attachedCaption }, \"\".concat(translate('fileUpload.attached'), \": \")),\n React.createElement(core_1.Typography, { color: \"textSecondary\" }, fileName),\n React.createElement(core_1.IconButton, { onClick: clearFile, className: classes.clearIcon, title: translate('fileUpload.removeFile') },\n React.createElement(icons_1.ClearIcon, null)))) : (React.createElement(React.Fragment, null,\n React.createElement(\"input\", { accept: acceptedTypes, className: classes.input, onChange: handleFileUpload, id: id, type: \"file\" }),\n React.createElement(\"label\", { htmlFor: id },\n React.createElement(core_1.Button, { color: \"primary\", component: \"span\", disabled: isUploading }, isUploading ? (React.createElement(core_1.CircularProgress, { size: 20 })) : translate('fileUpload.attachFile'))),\n errorMessage && (React.createElement(\"div\", { className: classes.error },\n React.createElement(core_1.Typography, { color: \"error\" }, translate(errorMessage, { maxUploadSizeMB: appConfig.maxUploadSizeMB }))))))));\n};\nFileUpload.defaultProps = {\n className: null,\n filetypes: [constants_1.fileTypes.image, constants_1.fileTypes.audio, constants_1.fileTypes.document],\n};\nexports.default = FileUpload;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar youwell_common_1 = require(\"../../youwell-common\");\nvar Auth_1 = require(\"../../youwell-common/Auth\");\nexports.useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return ({\n root: (_a = {\n position: 'relative',\n zIndex: theme.zIndex.drawer,\n marginTop: theme.spacing(4),\n borderTop: theme.youwell.borders.dim,\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n background: theme.palette.background.default,\n padding: theme.spacing(2)\n },\n _a[theme.breakpoints.down('xs')] = {\n marginTop: theme.spacing(8),\n padding: theme.spacing(4, 1),\n },\n _a),\n footerLink: {\n margin: theme.spacing(0.5, 4),\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n });\n});\nvar Footer = function () {\n var translate = (0, translate_1.default)();\n var classes = (0, exports.useStyles)();\n // Duplicate entries with some data in different cases.. Should be fixed!\n var configFromAuth = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var configFromSettings = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.orgConfig; });\n var clientConfig = (configFromSettings === null || configFromSettings === void 0 ? void 0 : configFromSettings.initializedFromOrgConfig) ? configFromSettings : configFromAuth;\n if (!(clientConfig.z_PrivacyPolicyTaskId || clientConfig.z_UUReportTaskId)) {\n return null;\n }\n var singlePageBase = youwell_common_1.Auth.isUserAuthenticated(Auth_1.authTypes.user) ? urls_1.default.inside.pages.singlepage : urls_1.default.singlepage;\n return (React.createElement(\"div\", { className: classes.root },\n clientConfig.z_PrivacyPolicyTaskId && (React.createElement(react_router_dom_1.Link, { to: \"\".concat(singlePageBase, \"/\").concat(clientConfig.z_PrivacyPolicyTaskId), className: classes.footerLink },\n React.createElement(core_1.Typography, { color: \"primary\" }, translate('footer.privacyPolicy')))),\n clientConfig.z_UUReportTaskId && (React.createElement(React.Fragment, null, clientConfig.z_UUReportTaskId.startsWith('http') ? (React.createElement(core_1.Link, { href: clientConfig.z_UUReportTaskId, className: classes.footerLink, target: \"_blank\" },\n React.createElement(core_1.Typography, { color: \"primary\" }, translate('footer.uuReport')))) : (React.createElement(react_router_dom_1.Link, { to: \"\".concat(singlePageBase, \"/\").concat(clientConfig.z_UUReportTaskId), className: classes.footerLink },\n React.createElement(core_1.Typography, { color: \"primary\" }, translate('footer.uuReport'))))))));\n};\nexports.default = Footer;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HeaderLink = void 0;\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar TrackedLink_1 = __importDefault(require(\"./TrackedLink\"));\nvar constants_1 = require(\"../constants\");\nvar icons_1 = require(\"../icons\");\nvar theme_1 = require(\"../../app/style/theme\");\nvar Auth_1 = __importDefault(require(\"../../youwell-common/Auth\"));\nvar appSetup_1 = require(\"../../app/appSetup\");\nvar objectUtils_1 = require(\"../../youwell-common/objectUtils\");\nvar constants_2 = require(\"../../youwell-common/constants\");\nvar ElementIconOrDefault_1 = require(\"../icons/ElementIconOrDefault\");\nvar Logo_1 = __importDefault(require(\"../image/logo/Logo\"));\nvar taskUtils_1 = require(\"../taskUtils\");\nvar store_1 = require(\"../../app/store\");\nvar AuthStore = __importStar(require(\"../../app/store/AuthStore\"));\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar headerLinksBreakWidth = 785;\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d, _e, _f, _g;\n return ({\n root: (_a = {\n height: theme_1.headerHeight,\n padding: theme.spacing(1, 0),\n background: theme.youwell.colors.lightGreen,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n _a[theme.breakpoints.down('md')] = {\n padding: theme.spacing(1, 4),\n justifyContent: 'space-between',\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(1, 3),\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1, 2),\n },\n _a['& a, & button'] = {\n boxShadow: 'none',\n fontSize: '0.9em',\n },\n _a),\n leftTitle: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n color: theme.palette.primary.main,\n },\n titleText: {\n fontWeight: 500,\n fontSize: '1.25em',\n },\n pageTitle: {\n flex: '1 1 auto',\n },\n flex: (_b = {\n flex: '1 1 auto',\n display: 'flex',\n justifyContent: 'center'\n },\n _b[theme.breakpoints.down('xs')] = {\n display: 'none',\n },\n _b),\n headerLinks: (_c = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end'\n },\n _c[theme.breakpoints.down('xs')] = {\n display: 'none',\n },\n _c),\n stayOnSmall: {},\n link: (_d = {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5, 1.75)\n },\n _d[theme.breakpoints.down(headerLinksBreakWidth)] = {\n marginRight: theme.spacing(3),\n },\n _d[theme.breakpoints.down('xs')] = {\n display: 'none',\n '&$stayOnSmall': {\n display: 'flex',\n marginRight: 0,\n },\n },\n _d),\n linkContent: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.primary.main,\n },\n linkIcon: (_e = {\n marginRight: theme.spacing(0.5),\n fontSize: theme.typography.body2.fontSize\n },\n _e[theme.breakpoints.down(headerLinksBreakWidth)] = {\n marginRight: 0,\n fontSize: '1.5rem',\n '$stayOnSmall &': {\n marginRight: theme.spacing(0.5),\n },\n },\n _e['$iconOnly &'] = {\n fontSize: 24,\n },\n _e),\n iconOnly: {},\n linkText: (_f = {\n fontWeight: 500,\n fontSize: '1em'\n },\n _f[theme.breakpoints.down(headerLinksBreakWidth)] = {\n display: 'none',\n '$stayOnSmall &': {\n display: 'flex',\n },\n },\n _f),\n menuButton: {\n marginLeft: theme.spacing(3),\n padding: 0,\n color: theme.palette.primary.contrastText,\n },\n menuIcon: (_g = {\n fontSize: '2rem',\n color: theme.palette.primary.main\n },\n _g[theme.breakpoints.down('sm')] = {\n marginRight: theme.spacing(1),\n },\n _g),\n });\n});\nvar HeaderLink = function (_a) {\n var _b;\n var to = _a.to, text = _a.text, label = _a.label, classes = _a.classes, Icon = _a.Icon, unread = _a.unread, iconOnly = _a.iconOnly, stayOnSmall = _a.stayOnSmall, translate = _a.translate;\n return (\n // @ts-ignore -- to and label is not correct props for Button (but forwarded to TrackedLink..)\n React.createElement(core_1.Button, { to: to, label: \"\".concat(constants_1.activityLabels.header, \"/\").concat(label), \"aria-label\": translate ? \"\".concat(text, \" \").concat(unread, \" \").concat(unread === 1 ? translate('header.notification') : translate('header.notifications')) : \"\".concat(text, \" \").concat(unread), component: TrackedLink_1.default, variant: \"text\", className: (0, classnames_1.default)(classes.link, (_b = {}, _b[classes.iconOnly] = iconOnly, _b[classes.stayOnSmall] = stayOnSmall, _b)) },\n React.createElement(core_1.Badge, { badgeContent: unread, className: classes.badge, color: \"secondary\", overlap: \"rectangular\" },\n React.createElement(\"div\", { className: classes.linkContent },\n Icon && React.createElement(Icon, { className: classes.linkIcon }),\n !iconOnly && (React.createElement(core_1.Typography, { variant: \"caption\", color: \"inherit\", className: classes.linkText }, text))))));\n};\nexports.HeaderLink = HeaderLink;\nexports.HeaderLink.defaultProps = {\n unread: 0,\n text: null,\n Icon: null,\n iconOnly: false,\n stayOnSmall: false,\n translate: null,\n};\nvar Header = function (_a) {\n var _b;\n var onOpenMenu = _a.onOpenMenu, hideLinks = _a.hideLinks, hideMenu = _a.hideMenu, pageTitle = _a.pageTitle, hideAppTitle = _a.hideAppTitle, defaultItems = _a.defaultItems, headerActions = _a.headerActions;\n var translate = (0, translate_1.default)();\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var profileData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var unreadMessages = (0, store_1.useYouwellSelector)(function (state) { return state.user.unreadMessages; });\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n var appConfig = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.appConfig; });\n var notifications = 0; // no notifications for menu (chat-ikon has own badge..)\n var appItems = ((_b = currentProgram === null || currentProgram === void 0 ? void 0 : currentProgram.appElements) === null || _b === void 0 ? void 0 : _b.filter(function (d) { return (d.label === constants_1.patientProgramAppElementSettings.trainingPlan || (0, taskUtils_1.hasElementSetting)(d, constants_1.patientProgramAppElementSettings.header, true)) && !d.disabled; })) || [];\n var hasCurrentProgram = (0, objectUtils_1.hasValue)(currentProgram);\n var hasActiveProgram = currentProgram === null || currentProgram === void 0 ? void 0 : currentProgram.isActiveProgram;\n var allowMenu = clientConfig.appSetup.features.menu && !hideMenu;\n var homeLink = hasCurrentProgram ? urls_1.default.inside.home : urls_1.default.home;\n var logoutOrg = function () {\n dispatch(AuthStore.actionCreators.logoutOrg());\n };\n var logoHeight = theme_1.headerHeight - 8;\n var renderItem = function (item) {\n var _a, _b;\n switch (item) {\n case appSetup_1.headerItems.title:\n return !hideAppTitle && (\n // @ts-ignore -- to and label is not correct props for Button (but forwarded to TrackedLink..)\n React.createElement(core_1.Button, { key: appSetup_1.headerItems.title, variant: \"text\", component: TrackedLink_1.default, to: homeLink, label: \"\".concat(constants_1.activityLabels.header, \"/\").concat(appSetup_1.headerItems.title), className: classes.lefxtTitle, title: translate('header.toMainPage') }, !appConfig.titleLogo ? (React.createElement(Logo_1.default, { height: logoHeight })) : (React.createElement(core_1.Typography, { variant: \"subtitle1\", color: \"inherit\", className: classes.titleText }, clientConfig.appName || appConfig.appName || translate('header.title')))));\n case appSetup_1.headerItems.pageTitle:\n return (React.createElement(\"div\", { key: appSetup_1.headerItems.pageTitle, className: classes.pageTitle, \"aria-label\": pageTitle },\n React.createElement(core_1.Typography, { align: \"center\", variant: \"subtitle1\", color: \"textPrimary\", className: classes.titleText }, pageTitle)));\n case appSetup_1.headerItems.flex:\n return (React.createElement(\"div\", { key: appSetup_1.headerItems.flex, className: classes.flex }));\n case appSetup_1.headerItems.org:\n return (profileData === null || profileData === void 0 ? void 0 : profileData.connectedOrganizations) && ((_a = profileData === null || profileData === void 0 ? void 0 : profileData.connectedOrganizations) === null || _a === void 0 ? void 0 : _a.length) > 1 && (React.createElement(core_1.ButtonBase, { key: appSetup_1.headerItems.org, onClick: logoutOrg, className: classes.link },\n React.createElement(\"div\", { className: classes.linkContent },\n React.createElement(icons_1.OrgIcon, { className: classes.linkIcon }),\n React.createElement(core_1.Typography, { variant: \"caption\", color: \"inherit\", className: classes.linkText }, (_b = profileData.organization) === null || _b === void 0 ? void 0 : _b.name))));\n case appSetup_1.headerItems.menu:\n return allowMenu && (React.createElement(core_1.IconButton, { key: appSetup_1.headerItems.menu, color: \"inherit\", \"aria-label\": translate('openMenu'), onClick: onOpenMenu, className: classes.menuButton },\n React.createElement(core_1.Badge, { badgeContent: notifications, color: \"secondary\", overlap: \"rectangular\" },\n React.createElement(icons_1.MenuIcon, { className: classes.menuIcon }))));\n case appSetup_1.headerItems.chat:\n return hasActiveProgram && !hideLinks && clientConfig.appSetup.features.chat && (React.createElement(exports.HeaderLink, { key: appSetup_1.headerItems.chat, label: appSetup_1.headerItems.chat, to: urls_1.default.inside.chat, text: translate('header.messages'), classes: classes, Icon: icons_1.ChatIcon, unread: unreadMessages, iconOnly: true, stayOnSmall: true }));\n case appSetup_1.headerItems.favourites:\n return hasCurrentProgram && !hideLinks && clientConfig.appSetup.features.favourites && (React.createElement(exports.HeaderLink, { key: appSetup_1.headerItems.favourites, label: appSetup_1.headerItems.favourites, to: urls_1.default.inside.pages.favourites, text: translate('header.favourites'), classes: classes, Icon: icons_1.FavouritesIcon, translate: translate }));\n case appSetup_1.headerItems.profile:\n return !hideLinks && clientConfig.appSetup.features.profile && (React.createElement(exports.HeaderLink, { key: appSetup_1.headerItems.profile, label: appSetup_1.headerItems.profile, to: urls_1.default.inside.profile, text: translate('header.myProfile'), classes: classes, Icon: icons_1.PersonIcon, translate: translate }));\n case appSetup_1.headerItems.logout:\n return Auth_1.default.getLoginLevel() > constants_2.loginLevels.key && (React.createElement(exports.HeaderLink, { key: appSetup_1.headerItems.logout, label: appSetup_1.headerItems.logout, to: urls_1.default.logout, text: translate('logout'), classes: classes, Icon: icons_1.LogoutIcon, stayOnSmall: !allowMenu, translate: translate }));\n case appSetup_1.headerItems.login:\n return Auth_1.default.getLoginLevel() < 1 && (React.createElement(exports.HeaderLink, { key: appSetup_1.headerItems.login, label: appSetup_1.headerItems.login, to: urls_1.default.login, text: translate('login.login'), classes: classes, stayOnSmall: !allowMenu }));\n case appSetup_1.headerItems.appItems: {\n return !hideLinks && appItems.map(function (el) { return (React.createElement(exports.HeaderLink, { key: el.id, to: \"\".concat(urls_1.default.inside.program, \"/\").concat(el.elementGroup, \"/\").concat(el.indexInGroup), text: el.name, classes: classes, label: \"app/\".concat(el.name), Icon: (0, ElementIconOrDefault_1.getElementIcon)(el), translate: translate })); });\n }\n case appSetup_1.headerItems.pages: {\n return !hideLinks && hasActiveProgram && clientConfig.appSetup.pages.filter(function (d) { return hasCurrentProgram || !d.hideIfNoProgram; }).map(function (el) { return (React.createElement(exports.HeaderLink, { key: el.key, to: el.url, text: translate(el.nameKey), classes: classes, label: \"page/\".concat(el.key), Icon: el.Icon, translate: translate })); });\n }\n case appSetup_1.headerItems.customActions: {\n return headerActions === null || headerActions === void 0 ? void 0 : headerActions.map(function (action) { return (React.createElement(core_1.Button, { key: action.text, onClick: action.action, color: \"primary\", variant: \"contained\", className: (0, classnames_1.default)(classes.link, classes.stayOnSmall) },\n React.createElement(\"div\", { className: classes.linkContent },\n React.createElement(core_1.Typography, { variant: \"caption\", color: \"inherit\", className: classes.linkText }, action.text)))); });\n }\n default:\n return null;\n }\n };\n var hasMenuInHeader = clientConfig.appSetup.header.findIndex(function (d) { return d === appSetup_1.headerItems.menu; }) > -1;\n var hasLogoutInHeader = clientConfig.appSetup.header.findIndex(function (d) { return d === appSetup_1.headerItems.logout; }) > -1;\n return (React.createElement(\"div\", { className: classes.root }, !hasCurrentProgram ? defaultItems === null || defaultItems === void 0 ? void 0 : defaultItems.map(renderItem) : (React.createElement(React.Fragment, null,\n clientConfig.appSetup.header.map(renderItem),\n allowMenu && !hasMenuInHeader && (React.createElement(core_1.Hidden, { implementation: \"css\", smUp: true }, renderItem(appSetup_1.headerItems.menu))),\n !allowMenu && !hasLogoutInHeader\n && renderItem(appSetup_1.headerItems.logout)))));\n};\nHeader.defaultProps = {\n hideLinks: false,\n hideMenu: false,\n hideAppTitle: false,\n pageTitle: null,\n onOpenMenu: null,\n defaultItems: [appSetup_1.headerItems.title, appSetup_1.headerItems.flex, appSetup_1.headerItems.org, appSetup_1.headerItems.logout],\n headerActions: null,\n};\nexports.default = Header;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { Typography } from '@material-ui/core';\n\nconst styles = theme => ({\n root: {\n margin: theme.spacing(8),\n padding: theme.spacing(8),\n border: theme.youwell.borders.dim,\n\n [theme.breakpoints.down('sm')]: {\n margin: theme.spacing(7, 5),\n padding: theme.spacing(7, 5),\n },\n\n [theme.breakpoints.down('xs')]: {\n margin: theme.spacing(6, 2),\n padding: theme.spacing(6, 2),\n },\n },\n text: {\n color: theme.youwell.colors.secondary,\n },\n});\n\nclass InfoMessage extends React.Component {\n render() {\n const {\n classes, translate, message, messageKey,\n } = this.props;\n\n if (!message && !messageKey) {\n return null;\n }\n\n return (\n \n \n {message}\n {messageKey && translate(messageKey)}\n \n
\n );\n }\n}\n\nInfoMessage.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n messageKey: PropTypes.string,\n message: PropTypes.string,\n};\n\nInfoMessage.defaultProps = {\n message: null,\n messageKey: null,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(InfoMessage));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { isBrowser } from '../../youwell-common/browserUtils';\n\nimport * as ProgramStore from '../../app/store/ProgramStore';\n\nclass InternalLinkLoader extends React.Component {\n componentDidMount() {\n if (isBrowser) {\n // eslint-disable-next-line no-underscore-dangle\n window.__clickInternalLink = this.clickInternalLink;\n }\n }\n\n componentWillUnmount() {\n if (isBrowser) {\n // eslint-disable-next-line no-underscore-dangle\n window.__clickInternalLink = null;\n }\n }\n\n clickInternalLink = (elementId) => {\n const url = this.getLinkUrl({ url: elementId });\n this.props.redirect(url);\n }\n\n getLinkUrl = link => this.props.linkUrlFunction(link)\n\n render() {\n return null;\n }\n}\n\nInternalLinkLoader.propTypes = {\n redirect: PropTypes.func.isRequired,\n linkUrlFunction: PropTypes.func.isRequired,\n};\n\nconst mapStateToProps = state => ({\n clientConfig: state.auth.clientConfig,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(ProgramStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InternalLinkLoader);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = exports.contentWidth = void 0;\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar MenuContent_1 = __importDefault(require(\"./MenuContent\"));\nvar Header_1 = __importDefault(require(\"./Header\"));\nvar components_1 = require(\"../../youwell-common/components\");\nvar AuthStore = __importStar(require(\"../../app/store/AuthStore\"));\nvar theme_1 = require(\"../../app/style/theme\");\nvar icons_1 = require(\"../icons\");\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar Footer_1 = __importDefault(require(\"./Footer\"));\nexports.contentWidth = 1080;\nexports.useStyles = (0, styles_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d;\n return ({\n root: {\n background: theme.palette.background.default,\n display: 'flex',\n justifyContent: 'center',\n },\n header: (_a = {\n position: 'fixed',\n width: '100vw',\n paddingRight: theme_1.scrollerWidth,\n height: theme_1.headerHeight,\n background: theme.palette.background.default,\n display: 'flex',\n justifyContent: 'center',\n zIndex: 100\n },\n _a[theme.breakpoints.down('xs')] = {\n paddingRight: 0,\n },\n _a['@media print'] = {\n display: 'none',\n },\n _a),\n headerContent: (_b = {\n width: '100%',\n maxWidth: exports.contentWidth\n },\n _b[theme.breakpoints.up('lg')] = {\n width: exports.contentWidth - theme_1.scrollerWidth,\n },\n _b),\n errorMessage: (_c = {\n maxWidth: 720,\n padding: theme.spacing(2, 4, 0)\n },\n _c[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(2, 4.5, 0),\n },\n _c[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1, 1.5, 0),\n },\n _c),\n content: (_d = {\n marginTop: theme_1.headerHeight,\n width: '100%',\n minHeight: '100vh',\n maxWidth: exports.contentWidth\n },\n _d[theme.breakpoints.up('lg')] = {\n width: exports.contentWidth - theme_1.scrollerWidth,\n },\n _d[theme.breakpoints.down('xs')] = {\n boxShadow: 'none',\n minHeight: 0,\n },\n _d['@media print'] = {\n marginTop: 0,\n minHeight: 0,\n },\n _d),\n mainContent: {},\n closeButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n padding: theme.spacing(1),\n zIndex: 1,\n },\n menu: {\n background: theme.palette.common.white,\n },\n });\n});\nvar Layout = function (_a) {\n var children = _a.children, hideHeaderLinks = _a.hideHeaderLinks, hideMenu = _a.hideMenu, headerPageTitle = _a.headerPageTitle, hideAppTitle = _a.hideAppTitle, muteErrors = _a.muteErrors;\n var dispatch = (0, store_1.useYouwellDispatch)();\n var classes = (0, exports.useStyles)();\n var translate = (0, translate_1.default)();\n var loading = (0, store_1.useYouwellSelector)(function (state) { return state.auth.loading || state.programStore.loading || state.user.loading || state.publicStore.loading || state.previewStore.loading || state.requestStatusStore.loading; });\n var authErrors = (0, store_1.useYouwellSelector)(function (state) { return state.auth.errors; });\n var programErrors = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.errors; });\n var userErrors = (0, store_1.useYouwellSelector)(function (state) { return state.user.errors; });\n var publicStoreErrors = (0, store_1.useYouwellSelector)(function (state) { return state.publicStore.errors; });\n var previewStoreErrors = (0, store_1.useYouwellSelector)(function (state) { return state.previewStore.errors; });\n var requestStatusStoreErrors = (0, store_1.useYouwellSelector)(function (state) { return state.requestStatusStore.errors; });\n var errorMessage = [].concat(authErrors, programErrors, userErrors, publicStoreErrors, previewStoreErrors, requestStatusStoreErrors).filter(function (val) { return val; }).join('
');\n var pageNotFound = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.pageNotFound; });\n var _b = React.useState(null), menuAnchorElement = _b[0], setMenuAnchorElement = _b[1];\n var openMenu = function (event) {\n if (event) {\n setMenuAnchorElement(event.currentTarget);\n }\n };\n var closeMenu = function () {\n setMenuAnchorElement(null);\n };\n var clearErrors = function () {\n dispatch(AuthStore.actionCreators.clearError());\n };\n var navigateMenu = function (event) {\n var key = event.key;\n if (key === 'Escape' || key === 'Backspace') {\n closeMenu();\n }\n };\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classes.root },\n React.createElement(components_1.ErrorBoundary, { id: \"Layout_Header\" },\n React.createElement(\"div\", { className: classes.header },\n React.createElement(\"div\", { className: classes.headerContent },\n React.createElement(Header_1.default, { onOpenMenu: openMenu, hideLinks: hideHeaderLinks, hideMenu: hideMenu, hideAppTitle: hideAppTitle, pageTitle: headerPageTitle })))),\n React.createElement(\"div\", { className: classes.content },\n React.createElement(components_1.ErrorBoundary, { id: \"Layout_Content\" }, pageNotFound ? (React.createElement(components_1.PageNotFound, null)) : (React.createElement(React.Fragment, null,\n React.createElement(\"div\", null,\n React.createElement(components_1.ErrorMessage, { className: classes.errorMessage, message: errorMessage, onClear: clearErrors, muteErrors: muteErrors, scrollMarginTop: theme_1.headerHeight })),\n React.createElement(\"div\", { className: classes.mainContent }, children)))))),\n React.createElement(components_1.ErrorBoundary, { id: \"Layout_Footer\" },\n React.createElement(Footer_1.default, null)),\n React.createElement(components_1.ErrorBoundary, { id: \"Layout_Loading\" },\n React.createElement(components_1.Loading, { loading: loading })),\n React.createElement(components_1.ErrorBoundary, { id: \"Layout_SideMenu\" },\n React.createElement(core_1.Hidden, { implementation: \"js\", smUp: true },\n React.createElement(core_1.Drawer, { anchor: \"right\", open: !!menuAnchorElement, onClose: closeMenu },\n React.createElement(\"div\", { tabIndex: 0, role: \"button\", onClick: closeMenu, onKeyDown: navigateMenu, className: classes.menu },\n React.createElement(MenuContent_1.default, null),\n React.createElement(core_1.IconButton, { \"aria-label\": translate('menu.close'), className: classes.closeButton },\n React.createElement(icons_1.CloseIcon, null))))),\n React.createElement(core_1.Hidden, { implementation: \"js\", xsDown: true },\n React.createElement(core_1.Menu, { id: \"app-menu\", classes: { paper: classes.menu }, anchorEl: menuAnchorElement, open: !!menuAnchorElement, onClose: closeMenu, onClick: closeMenu, onKeyDown: navigateMenu, anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'right',\n }, transformOrigin: {\n vertical: 'top',\n horizontal: 'right',\n }, getContentAnchorEl: null, disableAutoFocusItem: true },\n React.createElement(MenuContent_1.default, null),\n React.createElement(core_1.IconButton, { \"aria-label\": translate('menu.close'), className: classes.closeButton },\n React.createElement(icons_1.CloseIcon, null)))))));\n};\nLayout.defaultProps = {\n children: null,\n hideHeaderLinks: false,\n hideMenu: false,\n hideAppTitle: false,\n headerPageTitle: null,\n muteErrors: null,\n};\nexports.default = Layout;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { ListItem, ListItemText, ListItemIcon } from '@material-ui/core';\n\nimport { Link } from 'react-router-dom';\n\nconst styles = () => ({\n\n listItem: {\n borderWidth: '1px 0',\n marginBottom: 10,\n },\n listItemText: {\n paddingLeft: 0,\n },\n inactive: {\n },\n alert: {\n },\n});\n\nclass LinkListItem extends React.Component {\n render() {\n const {\n classes,\n to,\n Icon,\n primary,\n secondary,\n inactive,\n alert,\n } = this.props;\n\n let classname = '';\n if (inactive) {\n classname = classes.inactive;\n } else if (alert) {\n classname = classes.alert;\n }\n\n return (\n \n \n \n {Icon && (\n \n {Icon}\n \n )}\n \n \n );\n }\n}\n\nLinkListItem.propTypes = {\n classes: PropTypes.object.isRequired,\n to: PropTypes.string.isRequired,\n primary: PropTypes.string.isRequired,\n secondary: PropTypes.string,\n Icon: PropTypes.element,\n inactive: PropTypes.bool,\n alert: PropTypes.bool,\n};\n\nLinkListItem.defaultProps = {\n secondary: null,\n Icon: null,\n inactive: false,\n alert: false,\n};\n\nexport default withStyles(styles)(LinkListItem);\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button, Menu, MenuItem, IconButton,\r\n} from '@material-ui/core';\r\nimport TrackedLink from './TrackedLink';\r\n\r\nconst styles = () => ({\r\n\r\n linkMenu: {\r\n top: 40,\r\n },\r\n});\r\n\r\nclass LinkMenu extends React.Component {\r\n state = {\r\n anchorEl: null,\r\n };\r\n\r\n handleClick = (event) => {\r\n this.setState({ anchorEl: event.currentTarget });\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ anchorEl: null });\r\n };\r\n\r\n render() {\r\n const {\r\n classes, icon, label, links,\r\n } = this.props;\r\n const { anchorEl } = this.state;\r\n\r\n return (\r\n \r\n {icon ? (\r\n \r\n {icon}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nLinkMenu.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n links: PropTypes.array.isRequired,\r\n icon: PropTypes.node,\r\n label: PropTypes.string,\r\n};\r\n\r\nLinkMenu.defaultProps = {\r\n icon: null,\r\n label: null,\r\n};\r\n\r\nconst WithRef = withStyles(styles)(LinkMenu);\r\n\r\nexport default React.forwardRef((props, ref) => );\r\n","import * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport * as PageSettingStore from '../../app/store/PageSettingStore';\n\nconst LoadAppContent = () => {\n const dispatch = useDispatch();\n const appContentProgramId = useSelector(state => state.pageSettings.appConfig?.appContentProgramId);\n const appContent = useSelector(state => state.pageSettings.appContent);\n\n React.useEffect(() => {\n if (appContentProgramId && !appContent) {\n dispatch(PageSettingStore.actionCreators.getAppContent(appContentProgramId));\n }\n }, [appContent, appContentProgramId, dispatch]);\n\n return null;\n};\n\nexport default LoadAppContent;\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport * as PageSettingStore from '../../app/store/PageSettingStore';\r\nimport { isEmpty } from '../../youwell-common/objectUtils';\r\nimport { useYouwellDispatch, useYouwellSelector } from '../../app/store';\r\n\r\nconst LoadOrgConfig = ({ orgId }) => {\r\n const dispatch = useYouwellDispatch();\r\n const appConfig = useYouwellSelector(state => state.pageSettings.appConfig);\r\n const orgConfig = useYouwellSelector(state => state.pageSettings.orgConfig);\r\n\r\n const orgIdFromPropOrStore = orgId ?? appConfig?.orgId;\r\n\r\n React.useEffect(() => {\r\n if (orgIdFromPropOrStore && isEmpty(orgConfig)) {\r\n dispatch(PageSettingStore.actionCreators.getOrgConfig(orgIdFromPropOrStore));\r\n }\r\n }, [dispatch, orgConfig, orgIdFromPropOrStore]);\r\n\r\n return null;\r\n}\r\n\r\nLoadOrgConfig.propTypes = {\r\n orgId: PropTypes.string,\r\n};\r\n\r\nLoadOrgConfig.defaultProps = {\r\n orgId: null,\r\n};\r\n\r\nexport default LoadOrgConfig;\r\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"@material-ui/icons\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar icons_2 = require(\"../icons\");\nvar image_1 = require(\"../image\");\nvar ElementIconOrDefault_1 = __importDefault(require(\"../icons/ElementIconOrDefault\"));\nvar constants_1 = require(\"../constants\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar TrackedLink_1 = __importDefault(require(\"./TrackedLink\"));\nvar components_1 = require(\"../../youwell-common/components\");\nvar objectUtils_1 = require(\"../../youwell-common/objectUtils\");\nvar constants_2 = require(\"../../youwell-common/constants\");\nvar Auth_1 = __importDefault(require(\"../../youwell-common/Auth\"));\nvar taskUtils_1 = require(\"../taskUtils\");\nvar store_1 = require(\"../../app/store\");\nvar AuthStore = __importStar(require(\"../../app/store/AuthStore\"));\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(1, 2),\n maxWidth: 300,\n },\n profileAvatar: {\n marginLeft: -6,\n marginRight: theme.spacing(3),\n background: theme.palette.primary.main,\n },\n divider: {\n margin: theme.spacing(2, 0),\n },\n noProfilePadding: {\n paddingTop: theme.spacing(6),\n },\n version: {\n marginTop: theme.spacing(2),\n },\n menuItem: {},\n icon: {\n color: theme.palette.primary.main,\n },\n active: {\n background: \"linear-gradient(90deg, \".concat(theme.palette.secondary.main, \" 0%, transparent 100%)\"),\n borderRadius: 25,\n },\n selected: {}, // Needed as ref\n}); });\n// Needed to extend MenuItemProps in custom component because TS does not accept that material ui components uses props from native elements.\nvar CustomMenuItem = function (_a) {\n var children = _a.children, to = _a.to, component = _a.component, label = _a.label, ariaLabel = _a.ariaLabel, onClick = _a.onClick;\n var extendingProps = { to: to, component: component, label: label, onClick: onClick };\n return (React.createElement(core_1.MenuItem, __assign({}, extendingProps, { \"aria-label\": ariaLabel }), children));\n};\nCustomMenuItem.defaultProps = {\n to: undefined,\n component: undefined,\n label: undefined,\n ariaLabel: undefined,\n onClick: undefined,\n};\nvar MenuContent = function (_a) {\n var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n var _o, _p, _q, _r;\n var forwardRef = _a.forwardRef;\n var translate = (0, translate_1.default)();\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var unreadMessages = (0, store_1.useYouwellSelector)(function (state) { return state.user.unreadMessages; });\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var appVersion = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.version; });\n var profileData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var appItems = ((_o = currentProgram === null || currentProgram === void 0 ? void 0 : currentProgram.appElements) === null || _o === void 0 ? void 0 : _o.filter(function (d) { return !(0, taskUtils_1.hasElementSetting)(d, constants_1.patientProgramAppElementSettings.hidden) && !d.disabled; })) || [];\n var hasCurrentProgram = (0, objectUtils_1.hasValue)(currentProgram);\n var hasActiveProgram = currentProgram === null || currentProgram === void 0 ? void 0 : currentProgram.isActiveProgram;\n var hasConsentTasks = profileData && ((_p = profileData.patientConsents) === null || _p === void 0 ? void 0 : _p.length) > 0;\n var location = (0, react_router_dom_1.useLocation)();\n var isActiveMenuElement = function (url) { return location.pathname === url; };\n var logoutOrg = function () {\n dispatch(AuthStore.actionCreators.logoutOrg());\n };\n return (React.createElement(\"div\", { className: classes.root, ref: forwardRef },\n (clientConfig.appSetup.features.profile && profileData) ? (React.createElement(React.Fragment, null,\n React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_b = {}, _b[classes.active] = isActiveMenuElement(urls_1.default.inside.profile), _b)), component: TrackedLink_1.default, to: urls_1.default.inside.profile, label: constants_1.activityLabels.menu.profile },\n React.createElement(core_1.Avatar, { className: classes.profileAvatar, \"aria-hidden\": true },\n React.createElement(icons_2.PersonIcon, null)),\n React.createElement(core_1.ListItemText, { primary: translate('menu.profile'), secondary: profileData.name })),\n React.createElement(core_1.Divider, { className: classes.divider }))) : (React.createElement(\"div\", { className: classes.noProfilePadding })),\n React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_c = {}, _c[classes.active] = isActiveMenuElement(urls_1.default.inside.home), _c)), component: TrackedLink_1.default, to: urls_1.default.inside.home, label: constants_1.activityLabels.menu.home },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(image_1.HomeIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('menu.startPage') })),\n hasCurrentProgram && clientConfig.appSetup.features.favourites && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_d = {}, _d[classes.active] = isActiveMenuElement(urls_1.default.inside.pages.favourites), _d)), component: TrackedLink_1.default, to: urls_1.default.inside.pages.favourites, label: constants_1.activityLabels.menu.favourites },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(icons_2.FavouritesIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('header.favourites') }))),\n hasCurrentProgram && clientConfig.appSetup.features.videoPage && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_e = {}, _e[classes.active] = isActiveMenuElement(urls_1.default.inside.pages.videos), _e)), component: TrackedLink_1.default, to: urls_1.default.inside.pages.videos, label: constants_1.activityLabels.menu.videos },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(icons_2.VideoIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('menu.videos') }))),\n hasActiveProgram && clientConfig.appSetup.features.calendar && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_f = {}, _f[classes.active] = isActiveMenuElement(urls_1.default.inside.pages.calendar), _f)), component: TrackedLink_1.default, to: urls_1.default.inside.pages.calendar, label: constants_1.activityLabels.menu.calendar },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(image_1.CalendarIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('menu.calendar') }))),\n hasActiveProgram && clientConfig.appSetup.pages.filter(function (d) { return hasCurrentProgram || !d.hideIfNoProgram; }).map(function (item) {\n var _a, _b;\n var _c;\n return (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_a = {}, _a[classes.active] = isActiveMenuElement(item.url), _a)), component: TrackedLink_1.default, key: item.key, to: item.url, label: \"\".concat(constants_1.activityLabels.menu.page, \"/\").concat(item.key) },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(ElementIconOrDefault_1.default, { item: item, className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate(item.nameKey), className: (0, classnames_1.default)((_b = {}, _b[classes.selected] = (_c = location.pathname) === null || _c === void 0 ? void 0 : _c.includes(item.url), _b)) })));\n }),\n appItems.map(function (item) {\n var _a, _b;\n var _c;\n return (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_a = {}, _a[classes.active] = isActiveMenuElement(\"\".concat(urls_1.default.inside.program, \"/\").concat(item.elementGroup, \"/\").concat(item.indexInGroup)), _a)), component: TrackedLink_1.default, key: item.id, to: \"\".concat(urls_1.default.inside.program, \"/\").concat(item.elementGroup, \"/\").concat(item.indexInGroup), label: \"\".concat(constants_1.activityLabels.menu.appPage, \"/\").concat(item.name) },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(ElementIconOrDefault_1.default, { item: item, className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: item.name, className: (0, classnames_1.default)((_b = {}, _b[classes.selected] = (_c = location.pathname) === null || _c === void 0 ? void 0 : _c.includes(\"\".concat(urls_1.default.inside.program, \"/\").concat(item.elementGroup, \"/\").concat(item.indexInGroup)), _b)) })));\n }),\n hasActiveProgram && clientConfig.appSetup.features.chat && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_g = {}, _g[classes.active] = isActiveMenuElement(urls_1.default.inside.chat), _g)), component: TrackedLink_1.default, to: urls_1.default.inside.chat, label: constants_1.activityLabels.menu.chat, ariaLabel: \"\".concat(translate('messages'), \" \").concat(unreadMessages, \" \").concat(unreadMessages === 1 ? translate('header.notification') : translate('header.notifications')) },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(core_1.Badge, { badgeContent: unreadMessages, color: \"secondary\", overlap: \"rectangular\" },\n React.createElement(icons_2.ChatIcon, { className: classes.icon }))),\n React.createElement(core_1.ListItemText, { primary: translate('messages') }))),\n hasActiveProgram && clientConfig.appSetup.features.videoChat && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_h = {}, _h[classes.active] = isActiveMenuElement(urls_1.default.inside.videochat), _h)), component: TrackedLink_1.default, to: urls_1.default.inside.videochat, label: constants_1.activityLabels.menu.videochat },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(icons_2.VideoChatIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('videochat') }))),\n hasCurrentProgram && clientConfig.appSetup.features.printsPage && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_j = {}, _j[classes.active] = isActiveMenuElement(urls_1.default.inside.pages.prints), _j)), component: TrackedLink_1.default, to: urls_1.default.inside.pages.prints, label: constants_1.activityLabels.menu.prints },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(icons_2.PrintIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('menu.printPage') }))),\n hasConsentTasks && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_k = {}, _k[classes.active] = isActiveMenuElement(urls_1.default.inside.pages.consent), _k)), component: TrackedLink_1.default, to: urls_1.default.inside.pages.consent, label: constants_1.activityLabels.menu.consent },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(icons_1.AssignmentInd, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('menu.consent') }))),\n clientConfig.appSetup.features.feedback && (React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_l = {}, _l[classes.active] = isActiveMenuElement(urls_1.default.inside.pages.feedback), _l)), component: TrackedLink_1.default, to: urls_1.default.inside.pages.feedback, label: constants_1.activityLabels.menu.feedback },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(icons_2.FeedbackIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: translate('menu.feedback') }))),\n React.createElement(core_1.Divider, { className: classes.divider }),\n clientConfig.appSetup.features.org && (profileData && ((_q = profileData.connectedOrganizations) === null || _q === void 0 ? void 0 : _q.length) > 1) && (React.createElement(CustomMenuItem, { className: classes.menuItem, onClick: logoutOrg, label: constants_1.activityLabels.menu.org },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(icons_2.OrgIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: (_r = profileData === null || profileData === void 0 ? void 0 : profileData.organization) === null || _r === void 0 ? void 0 : _r.name }))),\n React.createElement(CustomMenuItem, { className: (0, classnames_1.default)(classes.menuItem, (_m = {}, _m[classes.active] = isActiveMenuElement(urls_1.default.logout), _m)), component: TrackedLink_1.default, to: urls_1.default.logout, label: constants_1.activityLabels.menu.logout },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(image_1.LogoutIcon, { className: classes.icon })),\n React.createElement(core_1.ListItemText, { primary: Auth_1.default.getLoginLevel() > constants_2.loginLevels.key ? translate('logout') : translate('menu.exit') })),\n React.createElement(core_1.Divider, { className: classes.divider }),\n clientConfig.appSetup.features.languages && (React.createElement(components_1.LanguageToggle, null)),\n React.createElement(\"div\", { className: classes.version },\n React.createElement(core_1.Typography, { variant: \"caption\", align: \"center\", display: \"block\" }, \"ver. \".concat(appVersion)))));\n};\nMenuContent.defaultProps = {\n forwardRef: undefined,\n};\n// MenuContent is child of component Menu which requires a ref to be forwarded to child.\nexports.default = React.forwardRef(function (props, ref) { return React.createElement(MenuContent, __assign({}, props, { forwardRef: ref })); });\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button, ButtonBase, IconButton, makeStyles, Tooltip,\n} from '@material-ui/core';\n\nimport PortalModal from './PortalModal';\n\nconst useStyles = makeStyles(theme => ({\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n activeIcon: {\n color: theme.youwell.colors.secondary,\n },\n}));\n\n\nconst ModalAction = ({\n disabled, modalHeading, buttonText, Icon, buttonChildren, children, wideModal, action, buttonProps, active, className, Modal, ModalProps, tooltip,\n}) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState(false);\n\n const openModal = () => {\n setOpen(true);\n };\n\n const closeModal = () => {\n setOpen(false);\n };\n\n const renderAction = () => {\n if (action != null) {\n return action(openModal);\n } if (Icon !== null) {\n return (\n \n \n \n );\n } if (buttonChildren !== null) {\n return (\n \n {buttonChildren}\n \n );\n }\n return (\n \n );\n };\n\n const renderActionWithTooltip = () => (tooltip ? (\n \n {renderAction()}\n \n )\n : renderAction()\n );\n\n return (\n <>\n \n {children}\n {open && Modal && (\n \n )}\n \n\n {renderActionWithTooltip()}\n >\n );\n};\n\nModalAction.propTypes = {\n modalHeading: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.element),\n PropTypes.element,\n ]),\n buttonText: PropTypes.string,\n Icon: PropTypes.object,\n action: PropTypes.func,\n disabled: PropTypes.bool,\n wideModal: PropTypes.bool,\n buttonProps: PropTypes.object,\n active: PropTypes.bool,\n className: PropTypes.string,\n Modal: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.object,\n ]),\n ModalProps: PropTypes.object,\n tooltip: PropTypes.string,\n buttonChildren: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.element),\n PropTypes.element,\n PropTypes.string,\n ]),\n};\n\nModalAction.defaultProps = {\n disabled: false,\n buttonText: null,\n Icon: null,\n action: null,\n wideModal: false,\n buttonProps: null,\n active: false,\n className: null,\n children: null,\n Modal: null,\n ModalProps: null,\n tooltip: null,\n buttonChildren: null,\n};\n\nexport default ModalAction;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar constants_1 = require(\"../constants\");\nvar components_1 = require(\"../../youwell-common/components\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar TrackedLink_1 = __importDefault(require(\"./TrackedLink\"));\nvar apiUrls_1 = require(\"../../youwell-common/apiUrls\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar store_1 = require(\"../../app/store\");\nvar elementSize = 50;\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return ({\n root: (_a = {\n height: 2 * elementSize + 16 + 16,\n background: \"linear-gradient(180deg, \".concat(theme.youwell.colors.secondaryBackground, \" 50%, transparent 50%)\"),\n padding: theme.spacing(1, 4),\n display: 'flex',\n justifyContent: 'space-between',\n overflowY: 'hidden',\n overflowX: 'auto'\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(1, 1),\n },\n _a),\n module: {\n position: 'relative',\n margin: theme.spacing(0.5, 1),\n '&:first-child': {\n marginLeft: 0,\n },\n '&:last-child': {\n marginRight: 0,\n },\n '&$disabled': {\n opacity: 0.7,\n },\n },\n progress: {\n position: 'absolute',\n zIndex: 1,\n height: elementSize,\n width: elementSize,\n pointerEvents: 'none',\n },\n button: {\n margin: 1,\n borderRadius: '100%',\n border: \"2px dashed \".concat(theme.palette.primary.main),\n overflow: 'hidden',\n height: elementSize - 2,\n width: elementSize - 2,\n '&$current': {\n margin: 4,\n height: 2 * elementSize - 8,\n width: 2 * elementSize - 8,\n },\n },\n image: {\n height: '100%',\n width: '100%',\n objectFit: 'cover',\n },\n avatar: {\n background: theme.palette.common.white,\n color: theme.palette.text.primary,\n },\n completed: {},\n current: {},\n disabled: {},\n });\n}, { name: 'ModuleProgress' });\n// Needed to extend ButtonBaseProps in custom component because TS does not accept that material ui components uses props from native elements.\nvar CustomButton = function (_a) {\n var children = _a.children, to = _a.to, component = _a.component, className = _a.className, label = _a.label, ariaLabel = _a.ariaLabel, focusRipple = _a.focusRipple;\n return (React.createElement(core_1.ButtonBase, { className: className, to: to, component: component, label: label, \"aria-label\": ariaLabel, focusRipple: focusRipple }, children));\n};\nvar ModuleProgress = function (_a) {\n var _b;\n var className = _a.className;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n if (!(currentProgram === null || currentProgram === void 0 ? void 0 : currentProgram.groupedElements)) {\n return null;\n }\n var nextElementIndex = (_b = currentProgram.groupedElements[constants_1.patientProgramElementGroups.main]) === null || _b === void 0 ? void 0 : _b.findIndex(function (d) { return !d.completed && !d.disabled; });\n var mainElements = currentProgram.groupedElements[constants_1.patientProgramElementGroups.main] || [];\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.root, className) }, (mainElements === null || mainElements === void 0 ? void 0 : mainElements.length) > 0 && mainElements.map(function (element, i) {\n var _a, _b;\n var _c, _d, _e;\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.module, (_a = {}, _a[classes.disabled] = element.disabled, _a)), key: element.id },\n React.createElement(core_1.CircularProgress, { \"aria-hidden\": true, thickness: 3, size: i === nextElementIndex ? elementSize * 2 : elementSize, className: classes.progress, variant: \"determinate\", value: element.progress * 100, color: \"secondary\" }),\n React.createElement(CustomButton, { className: (0, classnames_1.default)(classes.button, (_b = {}, _b[classes.completed] = element.completed, _b[classes.current] = i === nextElementIndex, _b)), to: \"\".concat(urls_1.default.inside.program, \"/\").concat(element.elementGroup, \"/\").concat(element.indexInGroup, \"/\").concat(urls_1.default.inside.parts.resumeLatest), component: TrackedLink_1.default, label: \"\".concat(constants_1.activityLabels.moduleProgress.link, \"/\").concat(element.indexInGroup), disabled: element.disabled, ariaLabel: \" \".concat(translate('dashboard.module', { index: i + 1 }), \", , \").concat(element.name, \", \").concat(translate('dashboard.progressIndicator'), \" \").concat(Math.round(element.progress * 100), \"% , \").concat(translate('dashboard.goToModule', { i: i + 1 })), focusRipple: true }, ((_c = element.module) === null || _c === void 0 ? void 0 : _c.moduleImageId) ? React.createElement(components_1.Image, { className: classes.image, src: (0, apiUrls_1.getImageUrl)(element.module.moduleImageId), alt: (_d = element.module) === null || _d === void 0 ? void 0 : _d.moduleImageDescription })\n : (React.createElement(core_1.Avatar, { \"aria-hidden\": true, className: (0, classnames_1.default)(classes.image, classes.avatar) }, (_e = element.name) === null || _e === void 0 ? void 0 : _e.charAt(0).toUpperCase())))));\n })));\n};\nModuleProgress.defaultProps = {\n className: null,\n};\nexports.default = ModuleProgress;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport {\n Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button,\n} from '@material-ui/core';\n\nconst styles = theme => ({\n actions: {\n padding: theme.spacing(3),\n },\n saveButton: {\n marginLeft: theme.spacing(2),\n },\n});\n\nclass NavigateDialog extends React.Component {\n render() {\n const {\n classes, translate, open, onCancel, onDiscard, onSave, saveText,\n } = this.props;\n\n return (\n \n );\n }\n}\n\nNavigateDialog.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n open: PropTypes.bool.isRequired,\n onCancel: PropTypes.func.isRequired,\n onDiscard: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired,\n saveText: PropTypes.string,\n};\n\nNavigateDialog.defaultProps = {\n saveText: null,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(NavigateDialog));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar theme_1 = require(\"../../app/style/theme\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return ({\n root: (_a = {\n margin: '0 auto',\n padding: theme.spacing(0, 12),\n overflowY: 'scroll',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n maxWidth: 1080,\n '&::-webkit-scrollbar': {\n width: 0,\n background: 'transparent', // Make scrollbar invisible\n }\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(0, 2),\n },\n _a),\n wide: {\n maxWidth: 1368,\n },\n modalContainer: {\n minHeight: \"calc(100vh - \".concat(theme_1.headerHeight, \"px)\"),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n '&:focus': {\n outline: 'none',\n },\n },\n });\n}, { name: 'OverlayModal' });\nvar OverlayModal = function (_a) {\n var _b;\n var open = _a.open, onClose = _a.onClose, children = _a.children, wide = _a.wide;\n var classes = useStyles();\n var theme = (0, core_1.useTheme)();\n return (React.createElement(core_1.Modal, { open: open, onClose: onClose, BackdropProps: { style: { backgroundColor: theme.palette.background.default, opacity: 0.95, top: theme_1.headerHeight } }, style: { top: theme_1.headerHeight }, className: (0, classnames_1.default)(classes.root, (_b = {}, _b[classes.wide] = wide, _b)) },\n React.createElement(\"div\", { className: (0, classnames_1.default)(classes.modalContainer) }, open && children)));\n};\nOverlayModal.defaultProps = {\n wide: false,\n onClose: null,\n};\nexports.default = OverlayModal;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sideMenuWidth = void 0;\nvar React = __importStar(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar core_1 = require(\"@material-ui/core\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar react_1 = require(\"react\");\nvar BreadCrumb_1 = __importDefault(require(\"./BreadCrumb\"));\nvar SideMenu_1 = __importDefault(require(\"./SideMenu\"));\nvar theme_1 = require(\"../../app/style/theme\");\nvar icons_1 = require(\"../icons\");\nvar Layout_1 = require(\"./Layout\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar store_1 = require(\"../../app/store\");\nexports.sideMenuWidth = 300;\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d, _e, _f;\n return ({\n root: (_a = {\n maxWidth: Layout_1.contentWidth,\n margin: theme.spacing(4, 'auto'),\n minHeight: \"calc(100vh - \".concat(theme_1.headerHeight, \"px)\"),\n padding: theme.spacing(0, 12)\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(0, 4.5),\n },\n _a[theme.breakpoints.down('xs')] = {\n marginTop: 0,\n padding: theme.spacing(0, 1.5),\n },\n _a['@media print'] = {\n minHeight: 0,\n },\n _a),\n withSideMenu: (_b = {\n maxWidth: 650,\n padding: theme.spacing(0, 1)\n },\n _b[theme.breakpoints.up('md')] = {\n marginRight: \"calc((100% - \".concat(theme.breakpoints.values.md - theme_1.scrollerWidth, \"px)/2 + \").concat(exports.sideMenuWidth, \"px + \").concat(theme.spacing(2), \"px)\"),\n },\n _b),\n drawer: {\n '& .MuiDrawer-paperAnchorRight': (_c = {\n top: theme_1.headerHeight,\n height: \"calc(100% - \".concat(theme_1.headerHeight, \")\"),\n minWidth: 280,\n maxWidth: '80%'\n },\n _c[theme.breakpoints.up('md')] = {\n width: \"calc((100% - \".concat(theme.breakpoints.values.md - theme_1.scrollerWidth, \"px)/2 + \").concat(exports.sideMenuWidth, \"px)\"),\n },\n _c),\n '@media print': {\n display: 'none',\n },\n },\n openSideMenuFab: (_d = {\n position: 'fixed',\n right: theme.spacing(2),\n bottom: theme.spacing(2),\n zIndex: 100\n },\n _d[theme.breakpoints.up('md')] = {\n display: 'none',\n },\n _d['@media print'] = {\n display: 'none',\n },\n _d),\n sideMenu: {\n display: 'flex',\n flexDirection: 'column',\n height: \"calc(100% - \".concat(theme_1.headerHeight, \"px)\"),\n background: theme.palette.grey[100],\n },\n sideMenuContent: {\n flex: '1 1 auto',\n },\n actions: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'flex-end',\n },\n closeSideMenuFab: {\n marginLeft: theme.spacing(2),\n },\n topPadding: (_e = {\n marginBottom: theme.spacing(2)\n },\n _e[theme.breakpoints.down('xs')] = {\n marginBottom: theme.spacing(1),\n },\n _e),\n breadcrumb: (_f = {\n marginTop: theme.spacing(2)\n },\n _f[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(0, 1),\n },\n _f),\n image: {\n marginBottom: theme.spacing(1),\n },\n title: {\n marginBottom: theme.spacing(1),\n outline: 'none',\n color: theme.palette.primary.main,\n },\n icon: {\n position: 'absolute',\n transition: 'opacity 0.2s ease-in-out',\n opacity: 1,\n },\n hiddenIcon: {\n opacity: 0,\n },\n });\n});\nvar getMaxPageYOffset = function () { return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight) - window.innerHeight; };\nvar useIsWidthDown = function (breakpoint) {\n var theme = (0, styles_1.useTheme)();\n return (0, core_1.useMediaQuery)(theme.breakpoints.down(breakpoint));\n};\nvar PageLayout = function (_a) {\n var _b;\n var breadcrumb = _a.breadcrumb, title = _a.title, children = _a.children, progress = _a.progress, sideMenu = _a.sideMenu, task = _a.task, sideContent = _a.sideContent;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var _c = (0, react_1.useState)(Infinity), maxPageYOffset = _c[0], setMaxPageYOffset = _c[1];\n var _d = (0, react_1.useState)(window.pageYOffset), pageYOffset = _d[0], setPageYOffset = _d[1];\n var _e = (0, react_1.useState)(false), showSideMenu = _e[0], setShowSideMenu = _e[1];\n var activeSideMenuDivRef = React.useRef(null);\n var titleRef = React.useRef(null);\n var handleResize = function () {\n setMaxPageYOffset(getMaxPageYOffset());\n };\n var handleScroll = function () {\n setMaxPageYOffset(getMaxPageYOffset());\n setPageYOffset(window.pageYOffset);\n };\n (0, react_1.useEffect)(function () {\n if (sideMenu) {\n window.addEventListener('resize', handleResize);\n window.addEventListener('scroll', handleScroll);\n }\n return function () {\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleScroll);\n };\n }, [sideMenu]);\n (0, react_1.useEffect)(function () {\n if (showSideMenu && activeSideMenuDivRef.current) {\n activeSideMenuDivRef.current.children[0].focus();\n }\n else if (titleRef.current) {\n titleRef.current.focus();\n }\n }, [showSideMenu]);\n var closeSideMenu = function () {\n setShowSideMenu(false);\n };\n var openSideMenu = function () {\n setShowSideMenu(true);\n };\n var labelClasses = task && task.taskLabels ? task.taskLabels.map(function (d) { return \"\".concat(classes.root, \"_\").concat(d); }) : [];\n var showSideMenuButton = pageYOffset > 60 && maxPageYOffset - pageYOffset > 100;\n var hasSideMenu = sideMenu || sideContent;\n var isXsDown = useIsWidthDown('xs');\n var isSmDown = useIsWidthDown('sm');\n var isSmallScreen = isXsDown || isSmDown;\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classnames_1.default.apply(void 0, __spreadArray(__spreadArray([classes.root], labelClasses, false), [(_b = {},\n _b[classes.withSideMenu] = hasSideMenu,\n _b)], false)) },\n React.createElement(\"div\", { className: classes.topPadding }, clientConfig.appSetup.features.breadcrumb && breadcrumb && (React.createElement(BreadCrumb_1.default, { levels: breadcrumb, className: classes.breadcrumb, progress: progress, task: task, openSideMenu: hasSideMenu && openSideMenu }))),\n title && (React.createElement(core_1.Typography, { variant: \"h5\", className: classes.title, ref: titleRef, tabIndex: -1 }, title)),\n children),\n hasSideMenu && (React.createElement(React.Fragment, null,\n showSideMenuButton && (React.createElement(core_1.Fab, { className: classes.openSideMenuFab, onClick: openSideMenu, size: \"medium\", \"aria-label\": translate('openMenu'), \"aria-controls\": \"pageIndex-menu\", \"aria-haspopup\": \"true\" },\n React.createElement(icons_1.ListIcon, null))),\n React.createElement(core_1.Drawer, { id: \"pageIndex-menu\", className: classes.drawer, variant: isSmallScreen ? 'temporary' : 'persistent', anchor: \"right\", open: showSideMenu || !isSmallScreen, onClose: closeSideMenu },\n React.createElement(\"div\", { className: classes.sideMenu },\n sideContent && (React.createElement(\"div\", { className: classes.sideMenuContent }, sideContent)),\n sideMenu && (React.createElement(SideMenu_1.default, { className: classes.sideMenuContent, menu: sideMenu, activeSideMenuDivRef: activeSideMenuDivRef })),\n isSmallScreen && (React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Fab, { onClick: closeSideMenu, className: classes.closeSideMenuFab, \"aria-label\": translate('close'), size: \"medium\" },\n React.createElement(icons_1.CloseIcon, null))))))))));\n};\nPageLayout.defaultProps = {\n breadcrumb: null,\n title: null,\n progress: null,\n sideMenu: null,\n task: null,\n sideContent: null,\n};\nexports.default = PageLayout;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nclass PageTitle extends React.Component {\n state = {\n defaultTitle: document?.title,\n }\n\n componentDidMount() {\n document.title = this.props.title || this.state.defaultTitle;\n }\n\n componentDidUpdate() {\n document.title = this.props.title || this.state.defaultTitle;\n }\n\n render() {\n return null;\n }\n}\n\nPageTitle.propTypes = {\n title: PropTypes.string,\n};\n\nPageTitle.defaultProps = {\n title: null,\n};\n\nconst mapStateToProps = state => ({\n currentPath: state.pageSettings.pathname, // Sets this to trigger update on navigation\n});\n\nexport default connect(mapStateToProps)(PageTitle);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Typography, Modal, IconButton, makeStyles,\n} from '@material-ui/core';\nimport classnames from 'classnames';\nimport { Fullscreen } from '@material-ui/icons';\n\nimport { Translate } from 'react-localize-redux';\nimport {\n CloseIcon,\n} from '../icons';\n\nimport { isIe } from '../../youwell-common/browserUtils';\n\nconst defaultWidth = 568;\n\nconst useStyles = makeStyles(theme => ({\n root: {\n // z-index is set inline by Modal-component. But must sometimes be overridden by using !important\n },\n modalContainer: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: defaultWidth,\n maxWidth: '100%',\n minHeight: theme.spacing(50),\n maxHeight: '80%',\n background: theme.palette.common.white,\n borderRadius: theme.spacing(1),\n display: 'flex',\n flexDirection: 'column',\n height: isIe ? '100%' : undefined,\n\n [theme.breakpoints.down('xs')]: {\n minWidth: 0,\n width: `calc(100% - ${theme.spacing(4)}px)`,\n },\n },\n wide: {\n minWidth: '80%',\n },\n fullscreen: {\n top: 0,\n left: 0,\n transform: 'none',\n width: '100vw',\n height: '100vh',\n maxHeight: '100%',\n },\n modalHeader: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1, 2),\n background: theme.youwell.colors.secondaryBackground,\n },\n modalHeaderText: {\n flex: '1 1 auto',\n },\n headerMessage: {\n marginRight: theme.spacing(1),\n },\n modalContent: {\n flex: '1 1 auto',\n padding: theme.spacing(2),\n overflowY: 'auto',\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(2, 1),\n },\n },\n}));\n\nconst PortalModal = ({\n heading, children, open, onClose, wide, showUnsavedMessage, allowZoom, fixedWidth, fixedHeight,\n}) => {\n const classes = useStyles();\n const [fullscreen, setFullscreen] = React.useState(false);\n\n const closeModal = () => {\n setFullscreen(false);\n onClose();\n }\n\n return (\n \n \n {heading && (\n
\n \n {heading}\n \n {showUnsavedMessage && (\n \n \n \n )}\n {allowZoom && (\n setFullscreen(prev => !prev)}>\n \n \n )}\n \n \n \n
\n )}\n
\n {open && children}\n
\n
\n \n );\n};\n\nPortalModal.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]),\n heading: PropTypes.node,\n onClose: PropTypes.func.isRequired,\n open: PropTypes.bool.isRequired,\n wide: PropTypes.bool,\n showUnsavedMessage: PropTypes.bool,\n allowZoom: PropTypes.bool,\n fixedWidth: PropTypes.number,\n fixedHeight: PropTypes.number,\n};\n\nPortalModal.defaultProps = {\n children: null,\n heading: null,\n wide: false,\n showUnsavedMessage: false,\n allowZoom: false,\n fixedWidth: null,\n fixedHeight: null,\n};\n\nexport default PortalModal;\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport classnames from 'classnames';\r\n\r\n\r\nconst styles = theme => ({\r\n root: {\r\n backgroundColor: theme.youwell.colors.grayLight,\r\n height: 16,\r\n borderRadius: 8,\r\n boxShadow: theme.youwell.shadows.lightgreyShadow,\r\n },\r\n fill: {\r\n backgroundColor: theme.palette.primary.main,\r\n borderRadius: theme.youwell.shapes.borderRadius,\r\n height: '100%',\r\n },\r\n});\r\n\r\nconst ProgressBar = (props) => {\r\n const { classes, className, value } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nProgressBar.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n value: PropTypes.number,\r\n};\r\n\r\nProgressBar.defaultProps = {\r\n className: null,\r\n value: 0,\r\n};\r\n\r\nexport default withStyles(styles)(ProgressBar);\r\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar TrackedLink_1 = __importDefault(require(\"./TrackedLink\"));\nvar constants_1 = require(\"../constants\");\nvar theme_1 = require(\"../../app/style/theme\");\nvar stringUtils_1 = require(\"../../youwell-common/stringUtils\");\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return ({\n root: (_a = {\n background: theme.palette.grey[100],\n padding: theme.spacing(4, 2),\n paddingRight: theme.spacing(2) + theme_1.scrollerWidth\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(4, 0),\n paddingRight: theme_1.scrollerWidth,\n },\n _a['$brightBackground&'] = {\n background: theme.youwell.colors.secondaryBackground,\n },\n _a),\n brightBackground: {},\n menuItem: {\n display: 'flex',\n marginBottom: theme.spacing(1),\n marginLeft: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n borderLeft: theme.youwell.borders.medium,\n borderColor: 'transparent',\n '&$subtask': {\n paddingLeft: theme.spacing(3),\n },\n '&$hiddenSubtask': {\n display: 'none',\n },\n },\n subtask: {},\n hiddenSubtask: {},\n title: {\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(2),\n fontSize: '1rem',\n '$brightBackground &': {\n color: theme.youwell.colors.primary,\n },\n },\n current: {\n // borderColor: theme.youwell.colors.highlight,\n borderColor: theme.palette.secondary.main,\n '& $text': {\n color: theme.palette.common.black,\n fontWeight: theme.typography.fontWeightMedium,\n '$brightBackground &': {\n color: theme.palette.text.primary,\n },\n },\n },\n text: {\n display: 'flex',\n alignItems: 'center',\n color: theme.youwell.colors.grayLight,\n '$brightBackground &': {\n color: theme.palette.text.primary,\n },\n },\n visited: {\n color: theme.palette.text.primary,\n '$brightBackground &': {\n color: theme.youwell.colors.grayDark,\n },\n },\n notify: {\n width: 8,\n height: 8,\n borderRadius: '100%',\n marginLeft: theme.spacing(1),\n display: 'block',\n background: theme.youwell.colors.highlight,\n },\n });\n}, { name: 'SideMenu' });\nvar SideMenu = function (_a) {\n var _b;\n var menu = _a.menu, className = _a.className, activeSideMenuDivRef = _a.activeSideMenuDivRef;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.root, className, (_b = {}, _b[classes.brightBackground] = clientConfig.appSetup.features.useSecondaryBackgroundInSideMenu, _b)), \"aria-label\": translate('sideMenu'), role: \"menu\" },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: (0, classnames_1.default)(classes.menuItem, classes.title) }, menu.title),\n menu.menuItems.map(function (item, i) {\n var _a, _b, _c;\n var _d, _e;\n return (React.createElement(\"div\", { key: item.url || item.text, ref: i === menu.currentIndex ? activeSideMenuDivRef : undefined, className: (0, classnames_1.default)(classes.menuItem, (_a = {},\n _a[classes.current] = i === menu.currentIndex,\n _a[classes.subtask] = (0, stringUtils_1.parseBoolString)((_d = item.settings) === null || _d === void 0 ? void 0 : _d.subtask),\n _a[classes.hiddenSubtask] = (0, stringUtils_1.parseBoolString)((_e = item.settings) === null || _e === void 0 ? void 0 : _e.hiddenInMenu),\n _a)) }, item.url ? (React.createElement(TrackedLink_1.default, { to: item.url, label: \"\".concat(constants_1.activityLabels.sidemenu.link, \"/\").concat(i + 1), title: item.notify ? translate('task.unfinishedTask') : undefined, ariaLabel: \"\".concat(item.text, \", \").concat(item.notify ? translate('task.unfinishedTask') : '', \", \").concat(i === menu.currentIndex ? translate('currentPageLocation') : '') },\n React.createElement(core_1.Typography, { \"aria-hidden\": true, variant: \"body2\", className: (0, classnames_1.default)(classes.text, (_b = {}, _b[classes.visited] = item.visited, _b)) },\n item.text,\n item.notify && (React.createElement(\"span\", { className: classes.notify }))))) : (React.createElement(core_1.Typography, { variant: \"body2\", className: (0, classnames_1.default)(classes.text, (_c = {}, _c[classes.visited] = item.visited, _c)) },\n item.text,\n item.notify && (React.createElement(\"span\", { className: classes.notify }))))));\n })));\n};\nSideMenu.defaultProps = {\n activeSideMenuDivRef: undefined,\n};\nexports.default = SideMenu;\n","import { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport * as AuthStore from '../../app/store/AuthStore';\nimport useSimpleOffline from '../../youwell-common/useSimpleOffline';\n\nconst StartSession = () => {\n const dispatch = useDispatch();\n const appConfig = useSelector(state => state.pageSettings.appConfig);\n const isOffline = useSimpleOffline();\n\n useEffect(() => {\n if (!isOffline) {\n dispatch(AuthStore.actionCreators.startSession({\n orgId: appConfig.orgId,\n anonymous: appConfig.useAnonymousSessions,\n }, { background: true }));\n }\n }, [appConfig, dispatch, isOffline]);\n\n return null;\n};\n\nexport default StartSession;\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Translate } from 'react-localize-redux';\r\nimport classnames from 'classnames';\r\nimport { CKEditor } from '@ckeditor/ckeditor5-react';\r\nimport Editors from '@youwell/ckeditor5-builds-youwell';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { Typography, Input } from '@material-ui/core';\r\n\r\nimport TextEditorUploadAdapterPlugin from './TextEditorUploadAdapterPlugin';\r\nimport { isIe, isBrowser } from '../../youwell-common/browserUtils';\r\nimport { htmlContentClassName } from '../../youwell-common/components/HtmlContent';\r\n\r\nconst editorTextColors = [\r\n {\r\n color: 'hsl(0, 0%, 0%)',\r\n label: 'Black',\r\n },\r\n {\r\n color: 'hsl(0, 0%, 30%)',\r\n label: 'Dim grey',\r\n },\r\n {\r\n color: 'hsl(0, 0%, 60%)',\r\n label: 'Grey',\r\n },\r\n {\r\n color: 'hsl(0, 0%, 90%)',\r\n label: 'Light grey',\r\n },\r\n {\r\n color: 'hsl(0, 0%, 100%)',\r\n label: 'White',\r\n hasBorder: true,\r\n },\r\n {\r\n color: '#B91400', // red\r\n },\r\n {\r\n color: 'hsl(0, 75%, 60%)',\r\n label: 'Red',\r\n },\r\n {\r\n color: 'hsl(30, 75%, 60%)',\r\n label: 'Orange',\r\n },\r\n {\r\n color: 'hsl(60, 75%, 60%)',\r\n label: 'Yellow',\r\n },\r\n // {\r\n // color: palette.yellow,\r\n // },\r\n {\r\n color: 'hsl(90, 75%, 60%)',\r\n label: 'Light green',\r\n },\r\n {\r\n color: 'hsl(120, 75%, 60%)',\r\n label: 'Green',\r\n },\r\n {\r\n color: 'hsl(150, 75%, 60%)',\r\n label: 'Aquamarine',\r\n },\r\n {\r\n color: 'hsl(180, 75%, 60%)',\r\n label: 'Turquoise',\r\n },\r\n {\r\n color: '#007C91', // green\r\n },\r\n // {\r\n // color: palette.blue,\r\n // },\r\n {\r\n color: 'hsl(210, 75%, 60%)',\r\n label: 'Light blue',\r\n },\r\n {\r\n color: 'hsl(240, 75%, 60%)',\r\n label: 'Blue',\r\n },\r\n {\r\n color: 'hsl(270, 75%, 60%)',\r\n label: 'Purple',\r\n },\r\n {\r\n color: '#000179',\r\n },\r\n];\r\n\r\nconst styles = theme => ({\r\n root: {\r\n border: theme.youwell.borders.dim,\r\n\r\n '& a': {\r\n color: theme.youwell.colors.hightScore,\r\n textDecoration: 'underline',\r\n cursor: 'text',\r\n },\r\n\r\n '& .ck-content .image': {\r\n clear: 'none', // override ck-content to allow two images beside each other..\r\n },\r\n\r\n },\r\n toolbar: {\r\n padding: theme.spacing(1),\r\n },\r\n htmlEditor: {\r\n padding: theme.spacing(1),\r\n },\r\n});\r\n\r\n\r\nconst ErrorFallback = ({\r\n classes, className, value, onChange, disabled,\r\n}) => (\r\n \r\n);\r\n\r\nErrorFallback.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n disabled: PropTypes.bool,\r\n className: PropTypes.string,\r\n};\r\n\r\nErrorFallback.defaultProps = {\r\n disabled: false,\r\n className: null,\r\n};\r\n\r\nclass TextEditor extends React.Component {\r\n state = {\r\n error: false,\r\n };\r\n\r\n linkAdapterRef = React.createRef();\r\n\r\n componentDidCatch = () => {\r\n this.setState({ error: true });\r\n };\r\n\r\n handleEditorChange = (event, editor) => {\r\n const data = editor.getData();\r\n this.props.onChange({ target: { value: data } });\r\n };\r\n\r\n render() {\r\n const {\r\n classes, disabled, value, className, onChange, allowUpload, appId,\r\n } = this.props;\r\n\r\n if (this.state.error || isIe) {\r\n return ();\r\n }\r\n\r\n if (!isBrowser) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const config = {\r\n toolbar: ['bold', 'italic', 'underline', 'fontColor',\r\n '|', 'bulletedList', 'numberedList', 'insertTable'],\r\n fontColor: {\r\n colors: editorTextColors,\r\n },\r\n };\r\n\r\n if (allowUpload) {\r\n config.toolbar.push('imageUpload');\r\n config.extraPlugins = [TextEditorUploadAdapterPlugin(appId)]\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nTextEditor.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n value: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n disabled: PropTypes.bool,\r\n className: PropTypes.string,\r\n allowUpload: PropTypes.bool,\r\n appId: PropTypes.string.isRequired,\r\n};\r\n\r\nTextEditor.defaultProps = {\r\n disabled: false,\r\n className: null,\r\n allowUpload: false,\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n appId: state.pageSettings.appConfig.appId,\r\n});\r\n\r\nconst EditorComponent = connect(mapStateToProps, null)(withStyles(styles)(TextEditor));\r\n\r\nclass EditorErrorBoundary extends React.Component {\r\n static propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]),\r\n className: PropTypes.string,\r\n };\r\n\r\n static defaultProps = {\r\n children: null,\r\n className: null,\r\n };\r\n\r\n state = {\r\n hasError: false,\r\n };\r\n\r\n componentDidCatch = (error, info) => {\r\n this.setState({ hasError: true });\r\n // eslint-disable-next-line no-console\r\n console.warn('Editor-error', { error, info });\r\n };\r\n\r\n render() {\r\n const { classes, className } = this.props;\r\n\r\n if (this.state.hasError) {\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n\r\nconst ErrorBoundaryComponent = withStyles(styles)(EditorErrorBoundary);\r\n\r\nexport default React.forwardRef((props, ref) => (\r\n \r\n \r\n \r\n));\r\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar mediaUpload_1 = require(\"../../youwell-common/mediaUpload\");\nvar apiUrls_1 = __importDefault(require(\"../../youwell-common/apiUrls\"));\nvar CkEditorUploadAdapter = /** @class */ (function () {\n function CkEditorUploadAdapter(loader, appId) {\n this.loader = loader;\n this.appId = appId;\n }\n CkEditorUploadAdapter.prototype.upload = function () {\n var _this = this;\n return this.loader.file\n .then(function (file) { return new Promise(function (resolve, reject) {\n if (file) {\n (0, mediaUpload_1.uploadPatientFile)(file)\n .then(function (data) { return resolve({\n urlWithAppId: \"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(apiUrls_1.default.app.media, \"/\").concat(data.id, \"?xAppId=\").concat(_this.appId),\n urls: {\n default: \"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(apiUrls_1.default.app.media, \"/\").concat(data.id),\n },\n }); })\n .catch(function (error) { return reject(new Error(error && Number(error.message) ? \"errors.\".concat(error.message) : 'uploadFailed')); });\n }\n }); });\n };\n CkEditorUploadAdapter.prototype.abort = function () {\n // abort uploading?\n };\n return CkEditorUploadAdapter;\n}());\nvar TextEditorUploadAdapterPlugin = function (appId) { return function (editor) {\n var fileRepo = editor.plugins.get('FileRepository');\n fileRepo.createUploadAdapter = function (loader) { return new CkEditorUploadAdapter(loader, appId); };\n}; };\nexports.default = TextEditorUploadAdapterPlugin;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { KeyboardTimePicker } from '@material-ui/pickers';\nimport classnames from 'classnames';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport { TimeIcon } from '../icons';\nimport { today } from '../../youwell-common/dateUtils';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: 112,\n flexShrink: 0,\n\n '&$error': {\n border: theme.youwell.borders.error,\n },\n },\n error: {\n },\n input: {\n paddingLeft: theme.spacing(1),\n },\n iconButton: {\n padding: theme.spacing(1),\n },\n validationMessage: {\n color: theme.palette.error.main,\n marginTop: theme.spacing(1),\n },\n}), { name: 'TimePicker' });\n\nconst TimePicker = ({\n value, onChange, className, validation, disabled, defaultValue, inputAdornmentBeforeInput, disableUnderline, validateWithoutValueChange, validationMessage,\n}) => {\n const classes = useStyles();\n const translate = useSelector(state => getTranslate(state.localize));\n const [validationError, setValidationError] = React.useState(false);\n const [invalidDate, setInvalidDate] = React.useState(false);\n\n React.useEffect(() => {\n if (validateWithoutValueChange) {\n if (!validation || validation(value)) {\n setValidationError(false);\n } else {\n setValidationError(true);\n }\n }\n }, [validateWithoutValueChange, validation, value, validationMessage]);\n\n const validateAndUpdate = (date) => {\n setInvalidDate(false);\n if (date === null || !validation || validation(date)) {\n setValidationError(false);\n onChange(date);\n } else {\n setValidationError(true);\n onChange(date);\n }\n }\n\n const onValueChange = (d, val) => {\n if (d === null) {\n validateAndUpdate(d);\n } else if (d?.getTime && !Number.isNaN(d.getTime())) {\n validateAndUpdate(d);\n } else if (val === '24:00') {\n const midnight = new Date();\n midnight.setHours(0, 0, 0);\n validateAndUpdate(midnight);\n } else if (val?.[4] !== '_') {\n validateAndUpdate(null);\n setInvalidDate(true);\n }\n };\n\n const initialDate = today();\n if (defaultValue?.length === 5) {\n initialDate.setHours(Number(defaultValue.substr(0, 2)), Number(defaultValue.substr(3, 2)));\n }\n\n return (\n <>\n }\n InputAdornmentProps={{ position: inputAdornmentBeforeInput ? 'start' : 'end' }}\n minutesStep={5}\n KeyboardButtonProps={{\n 'aria-label': translate('time.setTime'),\n className: classes.iconButton,\n }}\n placeholder={defaultValue || '00:00'}\n initialFocusedDate={initialDate}\n InputProps={{ className: classes.input, disableUnderline }}\n invalidDateMessage=\" \" // no message, but show red line\n disabled={disabled}\n clearLabel={translate('clear')}\n cancelLabel={translate('cancel')}\n okLabel={translate('ok')}\n />\n\n {validationError && validationMessage && ({validationMessage})}\n\n >\n );\n};\n\nTimePicker.propTypes = {\n onChange: PropTypes.func.isRequired,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object,\n ]),\n className: PropTypes.string,\n validation: PropTypes.func,\n disabled: PropTypes.bool,\n defaultValue: PropTypes.string,\n inputAdornmentBeforeInput: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n validateWithoutValueChange: PropTypes.bool,\n validationMessage: PropTypes.string,\n};\n\nTimePicker.defaultProps = {\n value: null,\n className: null,\n validation: null,\n validationMessage: null,\n disabled: false,\n defaultValue: null,\n inputAdornmentBeforeInput: false,\n disableUnderline: false,\n validateWithoutValueChange: false,\n};\n\nexport default TimePicker;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\n\nimport * as UserStore from '../../app/store/UserStore';\n\nconst activityProps = ['patientId', 'patientProgramId', 'patientProgramElementId', 'taskId', 'moduleId'];\n\nclass TrackActivity extends React.Component {\n componentDidMount() {\n this.sendActivity();\n }\n\n componentDidUpdate(prevProps) {\n if (activityProps.reduce((prev, curr) => prev || this.props[curr] !== prevProps[curr], false)) {\n this.sendActivity(prevProps.activityId);\n }\n }\n\n componentWillUnmount() {\n this.endActivity(this.props.activityId);\n\n // To end last activity when i.e. navigating away (or refreshing page) we should detext unload, but\n // this is not working. Request is canceled by browser on navigating away\n // window.addEventListener('beforeunload', this.sendActivity);\n // window.removeEventListener('beforeunload', this.sendActivity);\n }\n\n sendActivity = (endId) => {\n if (this.props.patientId) {\n this.props.sendActivity({\n endId,\n pid: this.props.patientId,\n ppid: this.props.patientProgramId,\n ppeid: this.props.patientProgramElementId,\n tid: this.props.taskId,\n mid: this.props.moduleId,\n l: this.props.label,\n start: new Date(),\n });\n }\n }\n\n endActivity = (endId) => {\n if (this.props.patientId) {\n this.props.sendActivity({\n endId,\n pid: this.props.patientId,\n start: new Date(),\n });\n }\n }\n\n render() {\n return null;\n }\n}\n\nTrackActivity.propTypes = {\n sendActivity: PropTypes.func.isRequired,\n activityId: PropTypes.number,\n label: PropTypes.string.isRequired,\n patientId: PropTypes.string,\n patientProgramId: PropTypes.string,\n patientProgramElementId: PropTypes.string,\n taskId: PropTypes.string,\n moduleId: PropTypes.string,\n};\n\nTrackActivity.defaultProps = {\n patientId: null,\n activityId: null,\n patientProgramId: null,\n patientProgramElementId: null,\n taskId: null,\n moduleId: null,\n};\n\nconst mapStateToProps = state => ({\n patientId: state.auth.profileData && state.auth.profileData.id,\n activityId: state.user.activityId,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(UserStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TrackActivity);\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar UserStore = __importStar(require(\"../../app/store/UserStore\"));\nvar Auth_1 = __importStar(require(\"../../youwell-common/Auth\"));\nvar store_1 = require(\"../../app/store\");\nvar TrackedLink = function (_a) {\n var endId = _a.endId, patientProgramId = _a.patientProgramId, patientProgramElementId = _a.patientProgramElementId, taskId = _a.taskId, moduleId = _a.moduleId, label = _a.label, forwardedRef = _a.forwardedRef, ariaLabel = _a.ariaLabel, to = _a.to, rest = __rest(_a, [\"endId\", \"patientProgramId\", \"patientProgramElementId\", \"taskId\", \"moduleId\", \"label\", \"forwardedRef\", \"ariaLabel\", \"to\"]);\n var dispatch = (0, store_1.useYouwellDispatch)();\n var patientId = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.auth.profileData) === null || _a === void 0 ? void 0 : _a.id; });\n var actualPatientProgramId = (0, store_1.useYouwellSelector)(function (state) { var _a; return patientProgramId || ((_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.id); });\n if (!label) {\n return null;\n }\n var sendActivity = function () {\n if (Auth_1.default.isUserAuthenticated(Auth_1.authTypes.user, Auth_1.authTypes.public, Auth_1.authTypes.orgSelect)) {\n dispatch(UserStore.actionCreators.sendActivity({\n endId: endId,\n pid: patientId,\n ppid: actualPatientProgramId,\n ppeid: patientProgramElementId,\n tid: taskId,\n mid: moduleId,\n l: label,\n start: new Date(),\n }));\n }\n };\n if (!to) {\n return (React.createElement(\"div\", { ref: forwardedRef, className: rest.className, \"aria-label\": ariaLabel }, rest.children));\n }\n // Pass all remaining props for material-ui focus effects etc...\n return React.createElement(react_router_dom_1.Link, __assign({ ref: forwardedRef, \"aria-label\": ariaLabel, to: to }, rest, { onClick: sendActivity }));\n};\nTrackedLink.defaultProps = {\n label: null,\n children: null,\n className: null,\n endId: null,\n patientProgramId: null,\n patientProgramElementId: null,\n taskId: null,\n moduleId: null,\n style: null,\n to: null,\n title: null,\n forwardedRef: null,\n ariaLabel: null,\n};\nexports.default = React.forwardRef(function (props, ref) { return React.createElement(TrackedLink, __assign({}, props, { forwardedRef: ref })); });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@material-ui/core\");\nvar React = __importStar(require(\"react\"));\nvar dateUtils_1 = require(\"../../youwell-common/dateUtils\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar icons_1 = require(\"../icons\");\nvar store_1 = require(\"../../app/store\");\nvar styles = function (theme) { return (0, core_1.createStyles)({\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n iconButton: {},\n label: {\n margin: theme.spacing(0, 1),\n padding: theme.spacing(0, 4),\n textTransform: 'capitalize',\n },\n description: {\n color: theme.youwell.colors.secondary,\n },\n}); };\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return styles(theme); }, { name: 'WeekSelector' });\nvar WeekSelector = function (_a) {\n var onChange = _a.onChange, selectedWeek = _a.selectedWeek, allowOutOfProgramDays = _a.allowOutOfProgramDays;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var programStartDate = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.startDate; });\n var setWeek = function (week) {\n if (onChange) {\n onChange(week);\n }\n };\n var next = function () {\n setWeek((0, dateUtils_1.getWeek)((0, dateUtils_1.addDays)(selectedWeek.start, 7)));\n };\n var prev = function () {\n setWeek((0, dateUtils_1.getWeek)((0, dateUtils_1.addDays)(selectedWeek.start, -7)));\n };\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.IconButton, { color: \"secondary\", onClick: prev, className: classes.iconButton, disabled: (!allowOutOfProgramDays && programStartDate) ? new Date(programStartDate) > selectedWeek.start : false },\n React.createElement(icons_1.PrevIcon, null)),\n React.createElement(\"div\", { className: classes.label },\n React.createElement(core_1.Typography, { variant: \"h6\", color: \"primary\", align: \"center\" }, \"\".concat(translate('time.week'), \" \").concat(selectedWeek.weekNo)),\n React.createElement(core_1.Typography, { className: classes.description }, \"\".concat((0, dateUtils_1.shortDate)(selectedWeek.start), \" - \").concat((0, dateUtils_1.shortDate)(selectedWeek.end)))),\n React.createElement(core_1.IconButton, { color: \"secondary\", onClick: next, className: classes.iconButton, disabled: selectedWeek.end > new Date() },\n React.createElement(icons_1.NextIcon, null))));\n};\nWeekSelector.defaultProps = {\n allowOutOfProgramDays: false,\n};\nexports.default = WeekSelector;\n","import * as React from 'react';\nimport PropTypes, { object } from 'prop-types';\nimport classnames from 'classnames';\n\nimport {\n makeStyles,\n Slider,\n Typography,\n useMediaQuery,\n useTheme,\n} from '@material-ui/core';\n\nimport { hasValue } from '../../youwell-common/objectUtils';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n margin: theme.spacing(0, 4),\n\n [theme.breakpoints.down('xs')]: {\n margin: theme.spacing(0, 1),\n },\n },\n vertical: {\n height: '100%',\n },\n slider: {\n [theme.breakpoints.down('xs')]: {\n paddingBottom: theme.spacing(1),\n },\n },\n rail: {\n height: 4,\n position: 'absolute',\n },\n track: {\n height: 4,\n backgroundColor: theme.palette.secondary.main,\n },\n mark: {\n width: 12,\n height: 12,\n borderRadius: '100%',\n border: theme.youwell.borders.primary,\n backgroundColor: theme.palette.common.white,\n top: 7,\n marginLeft: -7, // NB: needed to position correctly in regards to thumb.\n },\n // TODO: .MuiSlider-root setter på padding... skjer kun ved klikk på select i inspect. Fungerer ikke nå ipad, har det gjort det tidligere? -ja men da har ikke markersene vært synlige\n // Ved klikk på select igjen er stylingen slik den skal...\n markActive: {\n opacity: 1, // needed to override default style set by Slider.\n backgroundColor: theme.palette.secondary.main,\n },\n noUserInteraction: {\n opacity: 1, // needed to override default style set by Slider.\n },\n showThumb: {\n display: 'block',\n width: 15,\n height: 15,\n border: theme.youwell.borders.primary,\n backgroundColor: theme.palette.secondary.main,\n },\n hideThumb: {\n display: 'none',\n width: 15,\n height: 15,\n },\n topLabel: {\n '&:empty:before': {\n content: '\"\\\\200b\"', // unicode zero width space character\n },\n },\n labels: {\n display: 'none',\n justifyContent: 'space-between',\n\n [theme.breakpoints.down('xs')]: {\n display: 'flex',\n },\n },\n}), { name: 'YouwellSlider' });\n\n\nconst YouwellSlider = ({\n value, onChange, topLabelFormat = null, className, marks, orientation = '', showValueLabelDisplay = false, ...rest\n}) => {\n const classes = useStyles();\n const saveTimer = React.useRef();\n const [changeId, setChangeId] = React.useState(null);\n const [sliderValue, setSliderValue] = React.useState();\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('xs'));\n\n const handleSliderChange = (event, sValue) => {\n setSliderValue(sValue);\n setChangeId(Date.now());\n };\n\n React.useEffect(() => {\n if (changeId) {\n if (saveTimer.current) {\n clearTimeout(saveTimer.current);\n }\n\n saveTimer.current = setTimeout(() => {\n onChange({ target: { value: sliderValue } }, sliderValue); // match Material Slider onChange = (event, value)\n setChangeId(prevId => (prevId === changeId ? null : prevId));\n }, 200);\n }\n }, [changeId, onChange, sliderValue]); // TODO: onChange-function \"changes\" on each parent-render so this fires a bit to often..\n\n React.useEffect(() => {\n if (!changeId) {\n if (hasValue(value)) {\n setSliderValue(Number(value));\n } else {\n setSliderValue(null);\n }\n }\n }, [changeId, value]);\n\n return (\n \n {topLabelFormat && (\n
\n {topLabelFormat(sliderValue)}\n \n )}\n
\n {marks?.length > 1 && (\n
\n {marks[0].label}\n {marks[marks.length - 1].label}\n
\n )}\n
\n );\n};\n\nYouwellSlider.propTypes = {\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n onChange: PropTypes.func.isRequired,\n topLabelFormat: PropTypes.func,\n className: PropTypes.string,\n marks: PropTypes.arrayOf(object), // { value, label }\n orientation: PropTypes.string,\n showValueLabelDisplay: PropTypes.bool,\n};\n\nYouwellSlider.defaultProps = {\n value: null,\n topLabelFormat: null,\n className: null,\n marks: [],\n orientation: null,\n showValueLabelDisplay: false,\n};\n\nexport default YouwellSlider;\n","export { default as Checkbox } from './Checkbox';\nexport { default as InfoMessage } from './InfoMessage';\nexport { default as LinkListItem } from './LinkListItem';\nexport { default as TrackActivity } from './TrackActivity';\nexport { default as LinkMenu } from './LinkMenu';\nexport { default as TrackedLink } from './TrackedLink';\nexport { default as BreadCrumb } from './BreadCrumb';\nexport { default as ProgressBar } from './ProgressBar';\nexport { default as PageTitle } from './PageTitle';\nexport { default as NavigateDialog } from './NavigateDialog';\nexport { default as ChoiceNavigationDialog } from './ChoiceNavigationDialog';\nexport { default as StartSession } from './StartSession';\nexport { default as Layout } from './Layout';\nexport { default as PageLayout } from './PageLayout';\nexport { default as MenuContent } from './MenuContent';\nexport { default as Header } from './Header';\nexport { default as ConfirmButton } from './ConfirmButton';\nexport { default as InternalLinkLoader } from './InternalLinkLoader';\nexport { default as ModalAction } from './ModalAction';\nexport { default as PortalModal } from './PortalModal';\nexport { default as Counter } from './Counter';\nexport { default as YouwellSlider } from './YouwellSlider';\nexport { default as TimePicker } from './TimePicker';\nexport { default as LoadAppContent } from './LoadAppContent';\nexport { default as ModuleProgress } from './ModuleProgress';\nexport { default as FeedbackForm } from './FeedbackForm';\nexport { default as LoadOrgConfig } from './LoadOrgConfig';\nexport { default as OverlayModal } from './OverlayModal';\nexport { default as ContentVariableLoader } from './ContentVariableLoader';\nexport { default as TextEditor } from './TextEditor';\nexport { default as FileUpload } from './FileUpload';\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activityCategories = exports.hihElementTypes = exports.performanceDetailedPeriods = exports.performanceOverviewPeriods = exports.menuElements = exports.patientProgramTaskLabels = exports.patientProgramAppElementSettings = exports.patientProgramElementGroups = exports.activityLabels = exports.notificationKeys = void 0;\nvar constants_1 = require(\"../youwell-common/constants\");\nexports.notificationKeys = {\n unreadMessages: 'unreadMessages',\n overdueTasks: 'overdueTasks',\n program: 'program',\n};\nexports.activityLabels = {\n header: 'header',\n menu: {\n home: 'menu/home',\n calendar: 'menu/calendar',\n videos: 'menu/videos',\n profile: 'menu/profile',\n chat: 'menu/chat',\n videochat: 'menu/videochat',\n logout: 'menu/logout',\n favourites: 'menu/favourites',\n appPage: 'menu/app',\n activityDiary: 'menu/activityDiary',\n performance: 'menu/performance',\n page: 'menu/page',\n prints: 'menu/prints',\n feedback: 'menu/feedback',\n org: 'menu/org',\n consent: 'menu/consent',\n },\n dashboard: {\n questionnaires: 'dashboard/questionnaires',\n calendar: 'dashboard/calendar',\n module: 'dashboard/module',\n introModule: 'dashboard/introModule',\n currentModule: 'dashboard/currentModule',\n appointment: 'dashboard/appointment',\n exit: 'exit',\n },\n bottomMenu: {\n home: 'bottomMenu/home',\n calendar: 'bottomMenu/calendar',\n activityDiary: 'bottomMenu/activityDiary',\n performance: 'bottomMenu/performance',\n },\n moduleProgress: {\n link: 'moduleProgress',\n },\n breadcrumb: {\n link: 'breadcrumb',\n home: 'breadcrumb/home',\n module: 'breadcrumb/module',\n task: 'breadcrumb/task',\n },\n sidemenu: {\n link: 'sidemenu',\n },\n taskPreview: {\n goToTask: 'taskPreview/goToTask',\n },\n};\nexports.patientProgramElementGroups = __assign(__assign({}, constants_1.systemElementGroups), { personalGoal: 'PersonalGoal', log: 'Log', consent: 'Consent', default: 'Default', appointment: 'Appointment' });\nexports.patientProgramAppElementSettings = {\n header: 'header',\n intro: 'intro',\n dashboardInfo: 'info',\n worksheet: 'worksheet',\n hidden: 'hidden',\n personalGoal: 'PersonalGoal',\n trainingPlan: 'treningsplan',\n};\nexports.patientProgramTaskLabels = {\n gladRygg: 'GladRygg',\n work: 'Work',\n medicine: 'Medicine',\n activity: 'Activity',\n selectSelfTraining: 'SelectSelfTraining',\n selfTraining: 'SelfTraining',\n};\nexports.menuElements = {\n home: 'home',\n calendar: 'calendar',\n activityDiary: 'activityDiary',\n performance: 'performance',\n profile: 'profile',\n chat: 'chat',\n};\nexports.performanceOverviewPeriods = {\n week: 'week',\n month: 'month',\n year: 'year',\n total: 'total',\n};\nexports.performanceDetailedPeriods = {\n month: 'month',\n year: 'year',\n};\nexports.hihElementTypes = {\n Preview: 'Preview',\n};\nexports.activityCategories = {\n physical: 'PhysicalTraining',\n mental: 'MentalTraining',\n dailyRoutine: 'DailyRoutine',\n};\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Build, Pages } from '@material-ui/icons';\n\nimport { patientProgramAppElementSettings } from '../constants';\nimport {\n FoodIcon, BudskapIcon, TrophyIcon,\n} from './index';\n\nexport const getElementIcon = (item) => {\n if (item) {\n const itemName = item.name?.toLowerCase();\n if (item.Icon) {\n return item.Icon;\n } if (itemName.indexOf('trening') > -1) {\n return TrophyIcon;\n } if (itemName.indexOf('budskap') > -1) {\n return BudskapIcon;\n } if (itemName.indexOf('kjøkken') > -1) {\n return FoodIcon;\n } if (itemName.indexOf('hverdagsmat') > -1) {\n return FoodIcon;\n } if (itemName.indexOf('gla:d') > -1) {\n return TrophyIcon;\n } if (itemName.indexOf('verktøy') > -1) {\n return Build;\n } if (item.label === patientProgramAppElementSettings.trainingPlan) {\n return TrophyIcon;\n }\n }\n return Pages;\n}\n\nconst ElementIconOrDefault = ({ item, ...props }) => {\n const Icon = getElementIcon(item);\n return ();\n};\n\nElementIconOrDefault.propTypes = {\n item: PropTypes.object,\n};\n\nElementIconOrDefault.defaultProps = {\n item: null,\n};\n\nexport default ElementIconOrDefault;\n","export { default as MenuIcon } from '@material-ui/icons/Menu';\nexport { default as MenuUpIcon } from '@material-ui/icons/KeyboardArrowUp';\nexport { default as LogoutIcon } from '@material-ui/icons/LockOpen';\nexport { default as ChatIcon } from '@material-ui/icons/Sms';\nexport { default as VideoChatIcon } from '@material-ui/icons/Videocam';\nexport { default as TasksIcon } from '@material-ui/icons/CheckBox';\nexport { default as HomeIcon } from '@material-ui/icons/HomeOutlined';\nexport { default as MessagesIcon } from '@material-ui/icons/ChatBubbleOutline';\nexport { default as BackIcon } from '@material-ui/icons/ArrowBack';\nexport { default as ExpandIcon } from '@material-ui/icons/ExpandMore';\nexport { default as CollapseIcon } from '@material-ui/icons/ExpandLess';\nexport { default as UncheckedIcon } from '@material-ui/icons/CheckBoxOutlineBlank';\nexport { default as CheckedIcon } from '@material-ui/icons/CheckBox';\nexport { default as SearchIcon } from '@material-ui/icons/Search';\nexport { default as ClearIcon } from '@material-ui/icons/Clear';\nexport { default as FaceIcon } from '@material-ui/icons/Face';\nexport { default as SendIcon } from '@material-ui/icons/Send';\nexport { default as ChatCollapseIcon } from '@material-ui/icons/KeyboardArrowDown';\nexport { default as UnreadIcon } from '@material-ui/icons/Star';\nexport { default as FowardIcon } from '@material-ui/icons/ArrowForwardIosOutlined';\nexport { default as DoneIcon } from '@material-ui/icons/CheckBox';\nexport { default as NotDoneIcon } from '@material-ui/icons/CheckBoxOutlineBlank';\nexport { default as SeparatorIcon } from '@material-ui/icons/KeyboardArrowRight';\nexport { default as OpenInNewWindowIcon } from '@material-ui/icons/OpenInNew';\nexport { default as PrevIcon } from '@material-ui/icons/KeyboardArrowLeft';\nexport { default as NextIcon } from '@material-ui/icons/KeyboardArrowRight';\nexport { default as CompletedIcon } from '@material-ui/icons/Done';\nexport { default as CloseIcon } from '@material-ui/icons/Close';\nexport { default as CorrectIcon } from '@material-ui/icons/Star';\nexport { default as CorrectMarkerIcon } from '@material-ui/icons/StarBorder';\nexport { default as IncorrectIcon } from '@material-ui/icons/Clear';\nexport { default as PersonIcon } from '@material-ui/icons/Person';\nexport { default as ListIcon } from '@material-ui/icons/List';\nexport { default as InfoIcon } from '@material-ui/icons/InfoOutlined';\nexport { default as ContactIcon } from '@material-ui/icons/PermContactCalendar';\nexport { default as QuestionnaireIcon } from '@material-ui/icons/LiveHelp';\nexport { default as CompletedQuestionnaireIcon } from '@material-ui/icons/AssignmentTurnedIn';\nexport { default as PlanIcon } from '@material-ui/icons/Assignment';\nexport { default as EditIcon } from '@material-ui/icons/Edit';\nexport { default as CancelIcon } from '@material-ui/icons/Close';\nexport { default as SaveIcon } from '@material-ui/icons/Save';\nexport { default as ReadIcon } from '@material-ui/icons/LabelOutlined';\nexport { default as ReadUnreadIcon } from '@material-ui/icons/Label';\nexport { default as CalendarIcon } from '@material-ui/icons/DateRange';\nexport { default as TrainingIcon } from '@material-ui/icons/Assignment';\nexport { default as VideoIcon } from '@material-ui/icons/PlayCircleFilled';\nexport { default as UnansweredQuestionnaireIcon } from '@material-ui/icons/AssignmentLate';\nexport { default as PrintIcon } from '@material-ui/icons/Print';\nexport { default as FavouritesIcon } from '@material-ui/icons/Star';\nexport { default as FavouritesUncheckedIcon } from '@material-ui/icons/StarBorder';\nexport { default as NotesIcon } from '@material-ui/icons/Edit';\nexport { default as DeleteIcon } from '@material-ui/icons/Delete';\nexport { default as AddIcon } from '@material-ui/icons/AddCircleOutline';\nexport { default as LogIcon } from '@material-ui/icons/List';\nexport { default as CommentIcon } from '@material-ui/icons/Comment';\nexport { default as TrophyIcon } from '@material-ui/icons/EmojiEvents';\nexport { default as FoodIcon } from '@material-ui/icons/Restaurant';\nexport { default as BudskapIcon } from '@material-ui/icons/Beenhere';\nexport { default as ArticleIcon } from '@material-ui/icons/WebAsset';\nexport { default as RotateIcon } from '@material-ui/icons/Rotate90DegreesCcw';\nexport { default as ZoomInIcon } from '@material-ui/icons/ZoomIn';\nexport { default as ZoomOutIcon } from '@material-ui/icons/ZoomOut';\nexport { default as AddImageIcon } from '@material-ui/icons/AddAPhoto';\nexport { default as HelpIcon } from '@material-ui/icons/Help';\nexport { default as SleepIcon } from '@material-ui/icons/Hotel';\nexport { default as TimeIcon } from '@material-ui/icons/Schedule';\nexport { default as ElementListIcon } from '@material-ui/icons/Dns';\nexport { default as BullsEyeIcon } from '@material-ui/icons/TrackChanges';\nexport { default as CheckMarkIcon } from '@material-ui/icons/Done';\nexport { default as CancelOutlinedIcon } from '@material-ui/icons/CancelOutlined';\nexport { default as NotInterestedIcon } from '@material-ui/icons/NotInterested';\nexport { default as FeedbackIcon } from '@material-ui/icons/Feedback';\nexport { default as ThumbUpIcon } from '@material-ui/icons/ThumbUp';\nexport { default as SunIcon } from '@material-ui/icons/WbSunny';\nexport { default as AnalyticsIcon } from '@material-ui/icons/InsertChart';\nexport { default as AlarmIcon } from '@material-ui/icons/AccessAlarm';\nexport { default as DotIcon } from '@material-ui/icons/Brightness1';\nexport { default as OrgIcon } from '@material-ui/icons/AccountBalance';\nexport { default as DirectionsRunIcon } from '@material-ui/icons/DirectionsRun';\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAABHCAYAAABBJcT+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnMAABJzAYwiuQcAAAlxSURBVGhD7ZppiF3lHcbv3LkzzupMMksyC0lBG+pSDYkBFWshtFC/uOEnBRFR2g8urSk20bS0KG6oiAuNtLRSoZa69EOnIi6IVQLaNlFxidJOMLM4k6Qms8/c3Jnx99zznmvuve97tnsv9UMf+DPnvmd7nv/2vuecqUs5sLq6Wu9vyurq6vS3ZuB+Phf99S2DNWKnYA2YOOSwLLYicwqoFD4h/qbS6XRi8eY6ae+X50xvM4/6mgjQTbHTFhcXt2Sz2RmG3m1qaprE5LWqQfepiYDl5eX26enpRycnJ687fvz4iUwm896aNWse6+vr+2tzc/MU6Vg1IVUXkMvl6iD+vcOHD/8O7w/yO2UIT7W3t+/t7+9/ZO3atW8xtuidURmqKgCyacifC/k9pM95RMLPXYnIGyKODw4ODnV2du5h+G3GVJSJUSQgn1MJuw3kGyG+HQH3LC0tncNvv4sVcJKI1YGBgXnS6g6Gn2Bs2TsiPiqOgETj6Q7I3wD5H0O+X2lkdpdBAuhKqba2thQixojE9Yy9giVyXCQBrsgY8hsmJibuO3LkyKWQb1HOh0EiZB0dHSlqYgQRNzE8xFjs4k4cAUO+D8//VkVLzjfw2+wNhy+CdEpREzOIuJXhZzBNUpEnzsQC8HQnxPcg4Mq45H2cLIJ0+hgRt/B7v9k9i2XDhBS6RBxAvo2UuRPySpsy8spxF0TYB1HM28zMTGp8fPybzB27GP421oydiXUr0vx1IrYAyLeQ8zdjN0K+uTTnRbChQcuWckhYY2Njqr7+qwbli5idnc2MjIx8Z2pqaifDZ2GaJzZhp7FfayIrYgkw5G/E+ztIm45S8sy4qZaWllR3d3cRSUHkNdbb25sXWCpCUSQSDYjYfuzYsTsZPgObxJqwCznmVKwsGpEFQLaNnP+RUgfPd5WmjcizTMhSkP9gph2GcJE6RQbSq+vXr5/p6en5BBEnbJGQCNLpQkT8it8XsOsLTDdTp9pQKiLNgJaqTugEyHfj+d3k/G7I95R6XkQgL3L7u7q6HoP8HyE8YXYXwLXmIf43jruDSLxni4QMEfWIOIt11G6Gz8fGsX9jv8BOxQpQBE54m+UQeTy9Ea//GruZtFlTSl6p0draqpl1As9+CPEBzruYXT3eEUVQZ3mdOngDEUOkWs4mYmVlJUVB142Ojp5OJHYwdjq7PsLewNbrOB9pbmidPAz5Qbz+G1LnMsi32NJGOc9kNMuy4C9c63GG92oXZotsF6bCzED8Zc77FNHWmpDNzc2licQ2CnsHwwOYBMyzr3CwtQYM+V7I3wv57y4sLJS1SpFnfZ9liXxQq0si8SnD89hS/gA7JGwLpsJ8F+L3Eok3icTnXC9niwTdqYFIbEfELsZ0rohkxFHHlQlgR5o02Qjxu7HLbX1eNxJ5PPgWHrwdz/+Q4aewMewopsJzQT2+F5OIV0mn63DCTxGxD0E5paQPidC9VdiIuAgRv2RsO7tasVPYbigSIPKcsAXPa4a9hrRptRWsSZsPKNidkH8BG8Gm2K0IyI1KFRe0VNBx05wzgQ0j4jlq6Oc4Y9iVTipsRJyNiHsYvgEbxJoLAjgoA/ltEH8a+74mKVva0G2WCPs7kL8Wb/0TAoUaMtvD2Av5ATtexv7DsYWLs52F+F49sdGdVnUfWzohIj02NjZo0ukqdjWqjTZg7ZC9GOKPYpsgrzTyzjbgoiuQH5anCPcl3EAdp2ydwphOfN37ZcXHmK1O1GKHcM4okcjZRMgQUcdk14mIqxnepAich91G23oE8lsoWBv5ecg/T9pcQcE+xIWDclyYNn9tUAqVwURvP+m0h0gcWrdu3bItnRQJulOKdDqDFN8pASq6bUePHj2TZ1ilUf5ggxUucIiCvZ2LXo9n3ud3lDV7u/lrg4rXtUDTG4zfI+J+BLzJ/eZtkRBHRGSIxg8kQDk7hNXjBR3jQ21tHwV7LeSfJDc1CYWCG+gi3/B+WdGCWQWYKGj98wdE3MR9n0bEXGkkBEUCy2oik8tfYy2+KAE6kOJcQPmfSJsryMm/443inAqGnLLO27RCLbTQPEohEZhWoh9BfAciHqBhTIuX4Zb/C7cVHktf9C90kJn0Jbyc5TFviR1/5vetmzdvHoV83GdVXVO93oU+zJVCBSBCT2VzROJhau8JHKmntnwLh5ue4ibYfjAvgANV9bs46EkOvgv7Gd3mWP5K8SFyxfEuRpxoitssIp4iEs9iB+D1OfyO0EzuZ9++Ik+Qv1q/SLm1U0QB12ikuH5y4MCB+2gKZtSbAFWQW7duvY3rP445F5Gl4JpyiBZ0G7EObAT7l65RlIsMLEUlr2I1BVsKXVOF6oLyOzSFTgacVKdaa72CPY/phVjeAUUCosIQX4vZzpe3bEtpH91YLAEChPNvKjAVeaEuEwkAOk+htBW49qnTuLABS3rfMiS6EB5QSINm26DOpQ8WcTubE4kEmBTyrRQiF7TUOIRFmc1DIR6VhFK93iZA0dHyxAXNtNWKQCZQAAq1UnW9k9Ga3iZA3l3wNq3QvjIBJqpxkQuLgPWipgv8Fyta+RloX9BkpXNsEYgtQDwCBXCA5gQbSb+tuXI5KMfVv6uVQuFFbLxdTcRaSoShkiJOiqo65H8hoKr4vwALkrTDRKh0Ivs6YCBQQMLJRdB6p6Yw3OpDI5BQRM0FmPY+HiogwTwgwUHXrWYb/epfAWxIOInpnKA31K7/kUiUrqERSAAtI+a8TSu0L7JjSOGgBWVNupDIBb0E0/snm4CyCJj60xOc/bMnqJUALbVdcL2NcKWQUs71PjW4BhJCAqwrWAPXPldaadnuXN3WQkBYF3J52iVAr3pc++ILiDAvaH+bt2lFi+MaZSRFPKwT1iICei9U9Cm0BHrxG0lAFNRCgDqGPom6IHFhUYyMWgjQMiLozZx6+tdagL7ABAnQ18xE6VIKail8MVeKsKICerHb721aoXdGQQ/9cdBU1QiY7qIOFPRuVBEoQwTH2FCTiUzfGIK+0Fhn1Qjt2YalqgowXgx77xM0S8eC7leLCGi1qc+lkZHQ+3nUQoDIl/2zU61QCwFaSn/ibcZCoigUBKinms1Koacx/T9EXFQmAFTrQVwFnCSFKhYQ6etkBIhIktR0PTYGonAjWlK12psiqe+5pZCDPsNcHz9aSePYIhK3LxtMO9S/RZ6DaU2kOcF3krqTHjUP4qyiR05z3rcwzeL6gB1xqZFKfQmGjmsp3PYHgwAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"26a4dbc05524c2369765489ea25c685c.png\";","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar BadFaceIcon = function (_a) {\n var color = _a.color;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: \"33\", height: \"33\", viewBox: \"0 0 33 33\", fill: color, xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"path\", { d: \"M16.5517 3.58545C9.19169 3.58545 3.23169 9.55878 3.23169 16.9188C3.23169 24.2788 9.19169 30.2521 16.5517 30.2521C23.925 30.2521 29.8984 24.2788 29.8984 16.9188C29.8984 9.55878 23.925 3.58545 16.5517 3.58545ZM16.565 27.5854C10.6717 27.5854 5.89836 22.8121 5.89836 16.9188C5.89836 11.0254 10.6717 6.25212 16.565 6.25212C22.4584 6.25212 27.2317 11.0254 27.2317 16.9188C27.2317 22.8121 22.4584 27.5854 16.565 27.5854Z\", fill: \"current\" }),\n react_1.default.createElement(\"line\", { x1: \"11.3314\", y1: \"23.6178\", x2: \"21.4139\", y2: \"19.985\", stroke: color, strokeWidth: \"2\" }),\n react_1.default.createElement(\"path\", { d: \"M10.003 16.208L14.4807 13.8919L10.003 11.3829\", stroke: color, strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }),\n react_1.default.createElement(\"path\", { d: \"M22.9818 11.6009L18.6198 14.1282L23.2122 16.4205\", stroke: color, strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }))));\n};\nBadFaceIcon.defaultProps = {\n color: 'black',\n};\nexports.default = BadFaceIcon;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar HappyFaceIcon = function (_a) {\n var color = _a.color, width = _a.width, height = _a.height;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: width, height: height, viewBox: \"0 0 33 33\", fill: color, xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"path\", { d: \"M16.3134 3.58545C8.95341 3.58545 2.99341 9.55878 2.99341 16.9188C2.99341 24.2788 8.95341 30.2521 16.3134 30.2521C23.6867 30.2521 29.6601 24.2788 29.6601 16.9188C29.6601 9.55878 23.6867 3.58545 16.3134 3.58545ZM16.3267 27.5854C10.4334 27.5854 5.66007 22.8121 5.66007 16.9188C5.66007 11.0254 10.4334 6.25212 16.3267 6.25212C22.2201 6.25212 26.9934 11.0254 26.9934 16.9188C26.9934 22.8121 22.2201 27.5854 16.3267 27.5854ZM20.9934 15.5854C22.1001 15.5854 22.9934 14.6921 22.9934 13.5854C22.9934 12.4788 22.1001 11.5854 20.9934 11.5854C19.8867 11.5854 18.9934 12.4788 18.9934 13.5854C18.9934 14.6921 19.8867 15.5854 20.9934 15.5854ZM11.6601 15.5854C12.7667 15.5854 13.6601 14.6921 13.6601 13.5854C13.6601 12.4788 12.7667 11.5854 11.6601 11.5854C10.5534 11.5854 9.66008 12.4788 9.66008 13.5854C9.66008 14.6921 10.5534 15.5854 11.6601 15.5854ZM16.3267 24.2521C19.4334 24.2521 22.0734 22.3055 23.1401 19.5854H9.51341C10.5801 22.3055 13.2201 24.2521 16.3267 24.2521Z\", fill: \"current\" }))));\n};\nHappyFaceIcon.defaultProps = {\n color: 'black',\n width: '33',\n height: '33',\n};\nexports.default = HappyFaceIcon;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar NoEmotionFaceIcon = function (_a) {\n var color = _a.color;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: \"41\", height: \"41\", viewBox: \"0 0 41 41\", fill: color, xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"path\", { d: \"M14.8145 20.1455C13.4345 20.1455 12.3145 21.2655 12.3145 22.6455C12.3145 24.0255 13.4345 25.1455 14.8145 25.1455C16.1945 25.1455 17.3145 24.0255 17.3145 22.6455C17.3145 21.2655 16.1945 20.1455 14.8145 20.1455ZM26.8145 20.1455C25.4345 20.1455 24.3145 21.2655 24.3145 22.6455C24.3145 24.0255 25.4345 25.1455 26.8145 25.1455C28.1945 25.1455 29.3145 24.0255 29.3145 22.6455C29.3145 21.2655 28.1945 20.1455 26.8145 20.1455ZM20.8145 0.645508C9.77445 0.645508 0.814453 9.60551 0.814453 20.6455C0.814453 31.6855 9.77445 40.6455 20.8145 40.6455C31.8545 40.6455 40.8145 31.6855 40.8145 20.6455C40.8145 9.60551 31.8545 0.645508 20.8145 0.645508ZM20.8145 36.6455C11.9945 36.6455 4.81445 29.4655 4.81445 20.6455C4.81445 20.0655 4.85445 19.4855 4.91445 18.9255C9.63445 16.8255 13.3745 12.9655 15.3345 8.18551C18.9545 13.3055 24.9145 16.6455 31.6545 16.6455C33.2145 16.6455 34.7145 16.4655 36.1545 16.1255C36.5745 17.5455 36.8145 19.0655 36.8145 20.6455C36.8145 29.4655 29.6345 36.6455 20.8145 36.6455Z\", fill: \"current\" }))));\n};\nNoEmotionFaceIcon.defaultProps = {\n color: 'black',\n};\nexports.default = NoEmotionFaceIcon;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar OkFaceIcon = function (_a) {\n var color = _a.color;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: \"33\", height: \"33\", viewBox: \"0 0 33 33\", fill: color, xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"path\", { d: \"M16.4325 3.58545C9.07255 3.58545 3.11255 9.55878 3.11255 16.9188C3.11255 24.2788 9.07255 30.2521 16.4325 30.2521C23.8059 30.2521 29.7792 24.2788 29.7792 16.9188C29.7792 9.55878 23.8059 3.58545 16.4325 3.58545ZM16.4459 27.5854C10.5525 27.5854 5.77922 22.8121 5.77922 16.9188C5.77922 11.0254 10.5525 6.25212 16.4459 6.25212C22.3392 6.25212 27.1125 11.0254 27.1125 16.9188C27.1125 22.8121 22.3392 27.5854 16.4459 27.5854ZM21.1125 15.5854C22.2192 15.5854 23.1125 14.6921 23.1125 13.5854C23.1125 12.4788 22.2192 11.5854 21.1125 11.5854C20.0059 11.5854 19.1125 12.4788 19.1125 13.5854C19.1125 14.6921 20.0059 15.5854 21.1125 15.5854ZM11.7792 15.5854C12.8859 15.5854 13.7792 14.6921 13.7792 13.5854C13.7792 12.4788 12.8859 11.5854 11.7792 11.5854C10.6725 11.5854 9.77922 12.4788 9.77922 13.5854C9.77922 14.6921 10.6725 15.5854 11.7792 15.5854Z\", fill: \"current\" }),\n react_1.default.createElement(\"rect\", { x: \"11.2422\", y: \"20.7109\", width: \"10.4073\", height: \"2\", rx: \"1\", fill: \"current\" }))));\n};\nOkFaceIcon.defaultProps = {\n color: 'black',\n};\nexports.default = OkFaceIcon;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar PlayingSoccerIcon = function (_a) {\n var color = _a.color;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: \"33\", height: \"33\", viewBox: \"0 0 33 33\", fill: color, xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"g\", { clipPath: \"url(#clip0_2146_3079)\" },\n react_1.default.createElement(\"path\", { d: \"M19.2636 6.49304C20.8856 6.49304 22.2006 5.17812 22.2006 3.55609C22.2006 1.93406 20.8856 0.619141 19.2636 0.619141C17.6416 0.619141 16.3267 1.93406 16.3267 3.55609C16.3267 5.17812 17.6416 6.49304 19.2636 6.49304Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M5.62911 25.9272C6.99457 25.9272 8.10149 24.8202 8.10149 23.4548C8.10149 22.0893 6.99457 20.9824 5.62911 20.9824C4.26366 20.9824 3.15674 22.0893 3.15674 23.4548C3.15674 24.8202 4.26366 25.9272 5.62911 25.9272Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M29.5781 16.9099C28.5563 11.2306 24.2132 7.76858 18.6198 7.13412C18.3628 7.10508 18.1392 7.12979 17.9452 7.19466C17.7642 7.13782 17.5578 7.11311 17.3231 7.13412C14.7723 7.36084 12.5785 9.2735 10.9933 11.1732C9.66441 12.7646 11.9434 15.0702 13.284 13.4639C13.9623 12.6516 14.9922 11.4512 16.0925 10.8099C16.1017 10.8402 16.1067 10.8711 16.1172 10.902C16.8295 13.0148 17.0333 15.098 16.8276 17.3072C16.0313 17.6173 15.2529 17.9861 14.4887 18.3834C13.4663 18.9159 12.2017 19.4651 11.797 20.6136C10.9852 22.9173 10.1728 25.2204 9.36108 27.5235C8.66483 29.4991 11.7958 30.3418 12.4858 28.3859C13.2414 26.2428 13.9963 24.0997 14.7519 21.9585C15.8725 21.2418 17.1205 20.5444 18.4129 20.1138C18.8157 20.3251 19.2598 20.4492 19.6978 20.4579C19.7281 20.4579 19.7559 20.4554 19.7856 20.4542C19.9715 23.9774 20.1155 27.5031 20.2662 31.0263C20.3558 33.1027 23.5967 33.1762 23.5059 31.0844C23.3008 26.2725 23.1068 21.4568 22.8028 16.6492C22.7954 16.5405 22.7787 16.4386 22.7565 16.341C22.8207 14.752 22.6935 13.1501 22.3704 11.5927C24.5197 12.8604 25.9554 15.0028 26.4521 17.7742C26.8234 19.8259 29.9444 18.953 29.5781 16.9099Z\", fill: \"current\" })),\n react_1.default.createElement(\"defs\", null,\n react_1.default.createElement(\"clipPath\", { id: \"clip0_2146_3079\" },\n react_1.default.createElement(\"rect\", { width: \"32\", height: \"32\", fill: \"white\", transform: \"translate(0.382324 0.619141)\" }))))));\n};\nPlayingSoccerIcon.defaultProps = {\n color: 'black',\n};\nexports.default = PlayingSoccerIcon;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar QuestionFaceIcon = function (_a) {\n var color = _a.color;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: \"49\", height: \"49\", viewBox: \"0 0 49 49\", fill: color, xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"g\", { clipPath: \"url(#clip0_2588_4216)\" },\n react_1.default.createElement(\"path\", { d: \"M11.3777 29.4643C10.2737 29.4643 9.37773 30.3603 9.37773 31.4643C9.37773 32.5683 10.2737 33.4643 11.3777 33.4643C12.4817 33.4643 13.3777 32.5683 13.3777 31.4643C13.3777 30.3603 12.4817 29.4643 11.3777 29.4643ZM20.9777 29.4643C19.8737 29.4643 18.9777 30.3603 18.9777 31.4643C18.9777 32.5683 19.8737 33.4643 20.9777 33.4643C22.0817 33.4643 22.9777 32.5683 22.9777 31.4643C22.9777 30.3603 22.0817 29.4643 20.9777 29.4643ZM16.1777 13.8643C7.34573 13.8643 0.177734 21.0323 0.177734 29.8643C0.177734 38.6963 7.34573 45.8643 16.1777 45.8643C25.0097 45.8643 32.1777 38.6963 32.1777 29.8643C32.1777 21.0323 25.0097 13.8643 16.1777 13.8643ZM16.1777 42.6643C9.12173 42.6643 3.37773 36.9203 3.37773 29.8643C3.37773 29.4003 3.40973 28.9363 3.45773 28.4883C7.23373 26.8083 10.2257 23.7203 11.7937 19.8963C14.6897 23.9923 19.4577 26.6643 24.8497 26.6643C26.0977 26.6643 27.2977 26.5203 28.4497 26.2483C28.7857 27.3843 28.9777 28.6003 28.9777 29.8643C28.9777 36.9203 23.2337 42.6643 16.1777 42.6643Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M37.7324 25.9131H41.8066V29.8643H37.7324V25.9131ZM32.7422 16.0693C32.8516 13.4717 33.7585 11.6305 35.4629 10.5459C36.5384 9.85319 37.86 9.50684 39.4277 9.50684C41.4876 9.50684 43.1966 9.99902 44.5547 10.9834C45.9219 11.9678 46.6055 13.4261 46.6055 15.3584C46.6055 16.5433 46.3092 17.5413 45.7168 18.3525C45.3704 18.8447 44.7051 19.4736 43.7207 20.2393L42.75 20.9912C42.2214 21.4014 41.8704 21.8799 41.6973 22.4268C41.5879 22.7731 41.5286 23.3109 41.5195 24.04H37.8281C37.8828 22.4997 38.0286 21.4378 38.2656 20.8545C38.5026 20.262 39.1133 19.583 40.0977 18.8174L41.0957 18.0381C41.4238 17.792 41.6882 17.5231 41.8887 17.2314C42.2533 16.7301 42.4355 16.1787 42.4355 15.5771C42.4355 14.8844 42.2305 14.2555 41.8203 13.6904C41.4193 13.1162 40.681 12.8291 39.6055 12.8291C38.5482 12.8291 37.7962 13.18 37.3496 13.8818C36.9121 14.5837 36.6934 15.3128 36.6934 16.0693H32.7422Z\", fill: \"current\" })),\n react_1.default.createElement(\"defs\", null,\n react_1.default.createElement(\"clipPath\", { id: \"clip0_2588_4216\" },\n react_1.default.createElement(\"rect\", { width: \"48\", height: \"48\", fill: \"current\", transform: \"translate(0.177734 0.864258)\" }))))));\n};\nQuestionFaceIcon.defaultProps = {\n color: 'black',\n};\nexports.default = QuestionFaceIcon;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar WalkingWithDogIcon = function (_a) {\n var color = _a.color;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: \"33\", height: \"33\", viewBox: \"0 0 33 33\", fill: color, xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"g\", { clipPath: \"url(#clip0_2146_3086)\" },\n react_1.default.createElement(\"path\", { d: \"M25.6635 24.8673L26.228 24.3029C24.0362 22.3975 21.2234 19.2364 18.8085 16.8927C19.1065 16.2972 18.9267 15.5598 18.3572 15.181C15.7528 13.4508 14.7666 12.2088 13.6253 10.7703C13.114 10.1258 12.5846 9.45925 11.883 8.69819C11.8185 8.62799 11.7483 8.56706 11.674 8.51438C11.4035 8.26301 11.1026 8.05003 10.792 7.90003C10.792 7.90003 10.459 7.71731 10.0799 7.64492C9.71703 7.57582 9.29589 7.57324 9.29589 7.57324H9.28597C9.24495 7.5744 9.20302 7.58207 9.16232 7.58451C9.13192 7.58587 9.10248 7.582 9.07202 7.58451C9.02237 7.58992 8.972 7.60036 8.92228 7.60738C8.86928 7.61407 8.81782 7.62097 8.76488 7.63037C6.15368 8.03998 3.40556 10.0765 0.375282 13.8542C-0.0875899 14.4312 0.00482985 15.2738 0.581762 15.7364C0.828944 15.9345 1.12501 16.0308 1.41901 16.0308C1.81098 16.0308 2.1994 15.8595 2.46397 15.5298C3.76564 13.9076 4.90559 12.7705 5.89329 11.9726L4.79379 17.1036C4.63613 17.8414 4.84215 18.5216 5.25234 19.0747L4.90617 24.357L2.70465 30.0471C2.36556 30.9247 2.80209 31.9124 3.67928 32.2512C3.8817 32.329 4.08972 32.3664 4.29421 32.3664C4.97734 32.3664 5.62241 31.9523 5.88389 31.2768L8.1788 25.3426C8.24095 25.1814 8.27837 25.0119 8.2899 24.84L8.49155 21.7655L10.5165 24.9645L12.1933 31.1013C12.3964 31.8629 13.0856 32.3663 13.8386 32.3663C13.9839 32.3663 14.1315 32.3479 14.2785 32.3079C15.1876 32.0664 15.7282 31.133 15.4862 30.2231L13.7423 23.835C13.6984 23.6681 13.6282 23.5087 13.5359 23.3631L10.7752 19.0015C10.8632 18.826 10.9377 18.6397 10.9828 18.4295L12.1117 13.1616C13.1685 14.4567 14.3842 15.7562 16.8769 17.4114C17.1046 17.5628 17.3615 17.6355 17.6165 17.6355C17.8755 17.6355 18.1273 17.5521 18.3474 17.4072C20.5808 19.5753 23.3907 22.8876 25.6635 24.8673Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M11.6197 7.76874C13.5243 7.76874 15.0683 6.22476 15.0683 4.32016C15.0683 2.41556 13.5243 0.871582 11.6197 0.871582C9.71513 0.871582 8.17114 2.41556 8.17114 4.32016C8.17114 6.22476 9.71513 7.76874 11.6197 7.76874Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M22.1368 25.2633L20.9453 24.3063C20.676 24.0901 20.2822 24.1328 20.0656 24.4022C19.8492 24.6718 19.8922 25.0655 20.1615 25.282L21.3774 26.2585V28.9134C21.3774 28.9281 21.3792 28.9422 21.3815 28.9561L20.3113 31.0129C20.1518 31.3195 20.2709 31.6974 20.5775 31.8569C20.6699 31.9049 20.7686 31.9277 20.8659 31.9277C21.0918 31.9277 21.31 31.805 21.4215 31.5908L22.4983 29.5215L23.7033 31.6141C23.8191 31.8151 24.0295 31.9277 24.2462 31.9277C24.3521 31.9277 24.4595 31.9007 24.5578 31.8441C24.8572 31.6716 24.9603 31.289 24.7878 30.9895L23.7364 29.1638H27.6304V31.3017C27.6304 31.6472 27.9106 31.9275 28.2562 31.9275C28.6018 31.9275 28.882 31.6472 28.882 31.3017V28.9586C28.8846 28.9438 28.8864 28.9288 28.8864 28.9134V26.9345L25.9718 25.2632L22.1368 25.2633Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M30.5059 23.9915C30.1191 23.6271 29.9894 23.2006 29.5551 22.8914C29.4795 22.8377 29.4031 22.7831 29.3223 22.7374C29.2739 22.7103 29.2582 22.6787 29.2638 22.6261C29.2822 22.4468 29.3005 22.2672 29.3148 22.0875C29.3404 21.7657 29.2477 21.4727 28.9892 21.2829C28.8854 21.2067 28.3734 20.9588 28.1506 21.8071C28.1019 21.9917 28.0363 22.1753 27.9486 22.3436C27.6265 22.9622 27.2182 23.527 26.827 24.1027C26.6485 24.3653 26.4704 24.6275 26.2925 24.8894L29.0289 26.4478C29.0289 26.4478 29.5563 25.8711 29.6304 25.9035C29.7332 25.9488 29.8366 25.9933 29.9394 26.038C30.2408 26.169 30.5549 26.2298 30.8841 26.2104C31.4436 26.1779 32.026 25.8808 32.0794 25.2102C32.1285 24.5947 30.6367 24.1147 30.5059 23.9915Z\", fill: \"current\" })),\n react_1.default.createElement(\"defs\", null,\n react_1.default.createElement(\"clipPath\", { id: \"clip0_2146_3086\" },\n react_1.default.createElement(\"rect\", { width: \"32\", height: \"32\", fill: \"white\", transform: \"translate(0.0805664 0.619141)\" }))))));\n};\nWalkingWithDogIcon.defaultProps = {\n color: 'black',\n};\nexports.default = WalkingWithDogIcon;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar WorkingWithLaptopIcon = function (_a) {\n var color = _a.color;\n return (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"svg\", { width: \"35\", height: \"33\", fill: color, viewBox: \"0 0 35 33\", xmlns: \"http://www.w3.org/2000/svg\" },\n react_1.default.createElement(\"path\", { d: \"M18.0555 13.8506H0.722412V15.6946H2.20431V32.4607H14.4584V15.6946H18.0555V13.8506Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M27.0188 22.2223C27.022 22.2223 27.0277 22.2243 27.0315 22.2243C29.2919 22.2898 30.5821 21.6199 30.7822 19.8394L31.6991 11.6409C31.8701 10.1134 30.6451 8.94784 29.4213 8.50191L29.4114 8.49875C29.4114 8.49875 28.975 8.35763 28.576 8.30352C28.16 8.24838 27.7506 8.32293 27.7506 8.32293C26.7946 8.43376 25.8502 9.10589 25.8502 9.10589C24.092 10.351 21.3663 10.62 17.7429 9.90454C16.8314 9.72219 15.9452 10.3139 15.7642 11.2198C15.5831 12.126 16.1753 13.0065 17.087 13.1866C18.606 13.4878 20.0188 13.6368 21.3221 13.6368C22.5065 13.6368 23.5705 13.5064 24.5706 13.2584L24.5627 13.374L23.9783 18.5994C20.9175 18.7093 18.9891 19.3363 18.2333 20.4752C17.2111 22.0228 15.5502 28.2621 15.0658 30.1761C14.8155 31.1648 15.4198 32.1681 16.4144 32.4176C16.5657 32.4554 16.7183 32.4743 16.8686 32.4743C17.6997 32.4743 18.4577 31.9152 18.6693 31.0779C19.5229 27.7063 20.7022 24.2117 21.2407 23.1054C21.6869 22.1432 24.6384 22.0919 27.0188 22.2223Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M28.1311 8.09558C30.2076 8.09558 31.8909 6.42192 31.8909 4.35736C31.8909 2.2928 30.2076 0.619141 28.1311 0.619141C26.0546 0.619141 24.3713 2.2928 24.3713 4.35736C24.3713 6.42192 26.0546 8.09558 28.1311 8.09558Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M34.2765 18.5962L34.7759 12.1594C34.7772 12.1229 34.7635 12.0875 34.738 12.0612C34.7124 12.0349 34.6773 12.02 34.6406 12.02H32.5858C32.5128 12.02 32.453 12.0774 32.4503 12.15L31.9861 18.5915C31.9249 20.5774 31.3364 23.0199 27.9815 23.0199C27.934 23.0199 24.2716 23.0117 24.2716 23.0117C24.2715 23.0117 24.2715 23.0117 24.2715 23.0117C24.2355 23.0117 24.2012 23.0259 24.1757 23.0511C24.1504 23.0764 24.136 23.1107 24.136 23.1464V25.1368C24.136 25.2112 24.1967 25.2715 24.2715 25.2715L27.6395 25.2714V29.8464H26.582C25.1978 29.8464 24.0283 31.0546 24.0283 32.4846C24.0283 32.559 24.089 32.6192 24.1637 32.6192H25.4976C25.5725 32.6192 25.6331 32.559 25.6331 32.4846C25.6331 31.9585 26.0673 31.5141 26.5815 31.5141H30.9669C31.4813 31.5141 31.9158 31.9585 31.9158 32.4846C31.9158 32.559 31.9765 32.6192 32.0513 32.6192H33.3856C33.4604 32.6192 33.5211 32.559 33.5211 32.4846C33.5211 31.0546 32.3513 29.8464 30.9668 29.8464H29.9103V25.026C33.2173 24.9371 33.9846 21.6788 34.2765 18.5962Z\", fill: \"current\" }),\n react_1.default.createElement(\"path\", { d: \"M14.814 11.8848H8.46403L6.31485 4.05419C6.29969 3.99912 6.24264 3.96656 6.18732 3.98177L5.04135 4.29264C5.01477 4.29987 4.9922 4.31728 4.97856 4.34103C4.96485 4.36485 4.96125 4.393 4.96852 4.41944L7.37726 13.1954C7.38958 13.2403 7.43064 13.2715 7.47744 13.2715H14.8141C14.8715 13.2715 14.9179 13.2253 14.9179 13.1682V11.988C14.9179 11.931 14.8714 11.8848 14.814 11.8848Z\", fill: \"curren\" }))));\n};\nWorkingWithLaptopIcon.defaultProps = {\n color: 'black',\n};\nexports.default = WorkingWithLaptopIcon;\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGQ9Ik0xMi4wMzIgMTUuNjY3NkMxNC44OTkgMTcuMTg5MyAxNi4yNDQ0IDIwLjU5MTkgMTUuMjg0MyAyMy43MjAyQzE1LjEwOCAyNC4yODE5IDE0Ljk1MTMgMjQuODYzMSAxNC44MjcyIDI1LjQ0NDRDMTQuMzE3OCAyOC4wNTY4IDE1LjAwMzUgMzEuMzM1MyAxNy44NzcxIDMxLjkxNjVDMTkuMzI3IDMyLjIyMzUgMjAuNzcwMyAzMS42NjE4IDIxLjc4OTEgMzAuNTk3M0MyNC44MjYgMjcuMjk5MiAyMy44OTg2IDE3LjM2NTcgMjMuODcyNSAxNC44Nzc0QzIzLjg3MjUgMTMuNzg2NyAyMy44NDY0IDEyLjY2OTkgMjMuNDE1MyAxMS42NTExQzIyLjQ0ODggOS4zNjUzMSAxOS43MzE5IDguNDUwOTggMTcuMzIyIDcuODE3NDhDMTMuMzY0MyA2LjM3NDE1IDEwLjg2OTUgOC4xOTYyOCAxMC4wMzM1IDkuNTQxNjRDOS4xOTc1NCAxMC44ODcgOC41OTAxNyAxMy44NzgyIDEyLjAzMiAxNS42Njc2WiIgZmlsbD0iIzA1NjgzOSIvPgo8cGF0aCBkPSJNOS4yNjI4NyA1Ljc4NjM4QzEwLjM5OSA1Ljc4NjM4IDExLjMyMDEgNC40OTEwNiAxMS4zMjAxIDIuODkzMTlDMTEuMzIwMSAxLjI5NTMzIDEwLjM5OSAwIDkuMjYyODcgMEM4LjEyNjY4IDAgNy4yMDU2MyAxLjI5NTMzIDcuMjA1NjMgMi44OTMxOUM3LjIwNTYzIDQuNDkxMDYgOC4xMjY2OCA1Ljc4NjM4IDkuMjYyODcgNS43ODYzOFoiIGZpbGw9IiMwNTY4MzkiLz4KPHBhdGggZD0iTTE0LjAxNzQgNS4xMDA2M0MxNC42OTE5IDUuMTAwNjMgMTUuMjM4NiA0LjMyODcgMTUuMjM4NiAzLjM3NjQ3QzE1LjIzODYgMi40MjQyNSAxNC42OTE5IDEuNjUyMzEgMTQuMDE3NCAxLjY1MjMxQzEzLjM0MjkgMS42NTIzMSAxMi43OTYxIDIuNDI0MjUgMTIuNzk2MSAzLjM3NjQ3QzEyLjc5NjEgNC4zMjg3IDEzLjM0MjkgNS4xMDA2MyAxNC4wMTc0IDUuMTAwNjNaIiBmaWxsPSIjMDU2ODM5Ii8+CjxwYXRoIGQ9Ik0xNy44MjQ5IDUuOTYyNzFDMTguNDI3MyA1Ljk2MjcxIDE4LjkxNTYgNS4yODE0MiAxOC45MTU2IDQuNDQxMDFDMTguOTE1NiAzLjYwMDYgMTguNDI3MyAyLjkxOTMxIDE3LjgyNDkgMi45MTkzMUMxNy4yMjI2IDIuOTE5MzEgMTYuNzM0MyAzLjYwMDYgMTYuNzM0MyA0LjQ0MTAxQzE2LjczNDMgNS4yODE0MiAxNy4yMjI2IDUuOTYyNzEgMTcuODI0OSA1Ljk2MjcxWiIgZmlsbD0iIzA1NjgzOSIvPgo8cGF0aCBkPSJNMjEuMjk5MyA2LjY4MTEyQzIxLjgzMzEgNi42ODExMiAyMi4yNjU5IDYuMDc4NzggMjIuMjY1OSA1LjMzNTc1QzIyLjI2NTkgNC41OTI3MyAyMS44MzMxIDMuOTkwMzkgMjEuMjk5MyAzLjk5MDM5QzIwLjc2NTUgMy45OTAzOSAyMC4zMzI3IDQuNTkyNzMgMjAuMzMyNyA1LjMzNTc1QzIwLjMzMjcgNi4wNzg3OCAyMC43NjU1IDYuNjgxMTIgMjEuMjk5MyA2LjY4MTEyWiIgZmlsbD0iIzA1NjgzOSIvPgo8cGF0aCBkPSJNMjMuMDcxOSA2Ljk1OTEyQzIyLjkzODkgNy42MDU2NiAyMy4yMDkyIDguMjA3NTEgMjMuNjc1NiA4LjMwMzRDMjQuMTQxOSA4LjM5OTI5IDI0LjYyNzggNy45NTI5IDI0Ljc2MDcgNy4zMDYzN0MyNC44OTM2IDYuNjU5ODMgMjQuNjIzMyA2LjA1Nzk4IDI0LjE1NyA1Ljk2MjA5QzIzLjY5MDYgNS44NjYyIDIzLjIwNDggNi4zMTI1OSAyMy4wNzE5IDYuOTU5MTJaIiBmaWxsPSIjMDU2ODM5Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cGF0aCBkPSJNMCAwSDMyVjMySDBWMFoiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzQiIGhlaWdodD0iMzQiIHZpZXdCb3g9IjAgMCAzNCAzNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMTQ2XzMyMTcpIj4KICAgICAgICA8Y2lyY2xlIGN4PSIxNi43Njc2IiBjeT0iMTYuNzM2NCIgcj0iMTQuNzQ5IiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMi41Ii8+CiAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDgwNiIgY3k9IjE1LjMzMjkiIHI9IjMuNzQ3OTQiIHN0cm9rZT0iIzMzMzMzMyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICAgICAgPGxpbmUgeDE9IjYuMjY4OTUiIHkxPSIxNS4zNTQyIiB4Mj0iMTMuOTk1OSIgeTI9IjE0Ljc3MzYiIHN0cm9rZT0iIzMzMzMzMyIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KICAgICAgICA8Y2lyY2xlIGN4PSIxMS42MjIyIiBjeT0iMTYuMDYxMiIgcj0iMS40MTQ2OCIgZmlsbD0iIzMzMzMzMyIvPgogICAgICAgIDxjaXJjbGUgY3g9IjIzLjI1NzkiIGN5PSIxNS41MDQ5IiByPSI0LjEyNTA0IiB0cmFuc2Zvcm09InJvdGF0ZSgtMTY1IDIzLjI1NzkgMTUuNTA0OSkiIHN0cm9rZT0iIzMzMzMzMyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICAgICAgPGxpbmUgeDE9IjI5LjA3MDciIHkxPSIxNS43NDE3IiB4Mj0iMjAuNjk1OSIgeTI9IjE0LjE1ODgiIHN0cm9rZT0iIzMzMzMzMyIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KICAgICAgICA8Y2lyY2xlIGN4PSIyMy4yNTc4IiBjeT0iMTYuMjM2NSIgcj0iMS41MjcwNCIgZmlsbD0iIzMzMzMzMyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xNi45ODEgMjMuODU4NEMxNi4wMzk2IDIzLjg1ODQgMTUuMjczNyAyNC42MjQzIDE1LjI3MzcgMjUuNTY1N0MxNS4yNzM3IDI2LjUwNzIgMTYuMDM5NiAyNy4yNzMxIDE2Ljk4MSAyNy4yNzMxQzE3LjkyMjEgMjcuMjczMSAxOC42ODggMjYuNTA3MyAxOC42ODg0IDI1LjU2NTdDMTguNjg4NCAyNC42MjQzIDE3LjkyMjYgMjMuODU4NCAxNi45ODEgMjMuODU4NFoiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDwvZz4KICAgIDxkZWZzPgogICAgICAgIDxjbGlwUGF0aCBpZD0iY2xpcDBfMjE0Nl8zMjE3Ij4KICAgICAgICAgICAgPHJlY3Qgd2lkdGg9IjMzIiBoZWlnaHQ9IjMzIiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43MzgyODEgMC4yMzczMDUpIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgIDwvZGVmcz4KPC9zdmc+Cg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swIiBtYXNrLXR5cGU9ImFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIzIiB5PSIyIiB3aWR0aD0iMTkiIGhlaWdodD0iMjEiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIwLjY0MjkgMjNIOC40Mjg1N0g1LjcxNDI5QzQuMjIxNDMgMjMgMyAyMS44MTg4IDMgMjAuMzc1VjQuNjI1QzMgMy4xODEyNSA0LjIyMTQzIDIgNS43MTQyOSAySDguNDI4NTdIMTkuMjg1N0gyMC42NDI5QzIxLjM4OTMgMiAyMiAyLjU5MDYyIDIyIDMuMzEyNVY0LjYyNVYxNS4xOTA2VjE3Ljc1VjIwLjM3NVYyMS4wMzEyVjIxLjY4NzVDMjIgMjIuNDA5NCAyMS4zODkzIDIzIDIwLjY0MjkgMjNWMjNWMjNaTTE5LjkyODcgNC43MjQ5MUMxOS45Mjg3IDQuMjc4NjQgMTkuNTczMiAzLjk4MTEzIDE5LjA0IDMuOTgxMTNINi41OTczNUM2LjA2NDEgMy45ODExMyA1LjcwODYgNC4yNzg2NCA1LjcwODYgNC43MjQ5MVYxNS4yMTIyQzUuNzA4NiAxNS42NTg1IDYuMDY0MSAxNS45NTYgNi41OTczNSAxNS45NTZIMTkuMDRDMTkuNTczMiAxNS45NTYgMTkuOTI4NyAxNS42NTg1IDE5LjkyODcgMTUuMjEyMlY0LjcyNDkxVjQuNzI0OTFaTTE5LjkyODcgMTguNzczNkMxOS45Mjg3IDE4LjM1MDkgMTkuNjQ0MyAxOC4wNjkyIDE5LjIxNzcgMTguMDY5Mkg4LjU1MjYySDcuMTMwNjFDNi4zNDg1IDE4LjA2OTIgNS43MDg2IDE4LjcwMzEgNS43MDg2IDE5LjQ3OFYxOS40NzhDNS43MDg2IDIwLjI1MjggNi4zNDg1IDIwLjg4NjggNy4xMzA2MSAyMC44ODY4SDguNTUyNjJIMTkuMjE3N0MxOS42NDQzIDIwLjg4NjggMTkuOTI4NyAyMC42MDUgMTkuOTI4NyAyMC4xODI0VjE4Ljc3MzZWMTguNzczNlpNMTQuNDkyMyA5LjYzNjM3SDEwLjgyMThDMTAuNDU0OCA5LjYzNjM3IDEwLjIxMDEgOS40NDU0NiAxMC4yMTAxIDkuMTU5MDlWOC4yMDQ1NUMxMC4yMTAxIDcuOTE4MTkgMTAuNDU0OCA3LjcyNzI4IDEwLjgyMTggNy43MjcyOEgxNC40OTIzQzE0Ljg1OTMgNy43MjcyOCAxNS4xMDQgNy45MTgxOSAxNS4xMDQgOC4yMDQ1NVY5LjE1OTA5QzE1LjEwNCA5LjQ0NTQ2IDE0Ljg1OTMgOS42MzYzNyAxNC40OTIzIDkuNjM2MzdWOS42MzYzN1Y5LjYzNjM3WiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swKSI+CjxyZWN0IHg9Ii02ODIiIHk9Ii0yMzMiIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIiBmaWxsPSIjMDU2ODM5Ii8+CjwvZz4KPC9zdmc+Cg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMuMzY4NzUgMjIuNEMyLjI4Mjg4IDIyLjQgMS40IDIxLjUxNzEgMS40IDIwLjQzMTNWNS45OTM3NkMxLjQgNC45MDc4OCAyLjI4Mjg4IDQuMDI1MDEgMy4zNjg3NSA0LjAyNTAxSDYuNjVWMi4wNTYyNkM2LjY1IDEuNjk0MDEgNi45NDQgMS40MDAwMSA3LjMwNjI1IDEuNDAwMDFDNy42Njg1IDEuNDAwMDEgNy45NjI1IDEuNjk0MDEgNy45NjI1IDIuMDU2MjZWNC4wMjUwMUgxNS44Mzc1VjIuMDU2MjZDMTUuODM3NSAxLjY5NDAxIDE2LjEzMTUgMS40MDAwMSAxNi40OTM4IDEuNDAwMDFDMTYuODU2IDEuNDAwMDEgMTcuMTUgMS42OTQwMSAxNy4xNSAyLjA1NjI2VjQuMDI1MDFIMjAuNDMxM0MyMS41MTcxIDQuMDI1MDEgMjIuNCA0LjkwNzg4IDIyLjQgNS45OTM3NlYyMC40MzEzQzIyLjQgMjEuNTE3MSAyMS41MTcxIDIyLjQgMjAuNDMxMyAyMi40SDMuMzY4NzVaTTIuNzEyNSAyMC40MzEzQzIuNzEyNSAyMC43OTM1IDMuMDA2NSAyMS4wODc1IDMuMzY4NzUgMjEuMDg3NUgyMC40MzEzQzIwLjc5MzUgMjEuMDg3NSAyMS4wODc1IDIwLjc5MzUgMjEuMDg3NSAyMC40MzEzVjEwLjU4NzVIMi43MTI1VjIwLjQzMTNaTTIxLjA4NzUgOS4yNzUwMVY1Ljk5Mzc2QzIxLjA4NzUgNS42MzE1MSAyMC43OTM1IDUuMzM3NTEgMjAuNDMxMyA1LjMzNzUxSDE3LjE1VjYuNjUwMDFDMTcuMTUgNy4wMTIyNiAxNi44NTYgNy4zMDYyNiAxNi40OTM4IDcuMzA2MjZDMTYuMTMxNSA3LjMwNjI2IDE1LjgzNzUgNy4wMTIyNiAxNS44Mzc1IDYuNjUwMDFWNS4zMzc1MUg3Ljk2MjVWNi42NTAwMUM3Ljk2MjUgNy4wMTIyNiA3LjY2ODUgNy4zMDYyNiA3LjMwNjI1IDcuMzA2MjZDNi45NDQgNy4zMDYyNiA2LjY1IDcuMDEyMjYgNi42NSA2LjY1MDAxVjUuMzM3NTFIMy4zNjg3NUMzLjAwNjUgNS4zMzc1MSAyLjcxMjUgNS42MzE1MSAyLjcxMjUgNS45OTM3NlY5LjI3NTAxSDIxLjA4NzVaIiBmaWxsPSIjMDU2ODM5IiBzdHJva2U9IiMwNTY4MzkiIHN0cm9rZS13aWR0aD0iMC43NSIvPgo8cGF0aCBkPSJNNi4zMjE4OCAxNC41MjVDNi44NjU1MyAxNC41MjUgNy4zMDYyNSAxNC4wODQzIDcuMzA2MjUgMTMuNTQwNkM3LjMwNjI1IDEyLjk5NyA2Ljg2NTUzIDEyLjU1NjIgNi4zMjE4OCAxMi41NTYyQzUuNzc4MjIgMTIuNTU2MiA1LjMzNzUgMTIuOTk3IDUuMzM3NSAxMy41NDA2QzUuMzM3NSAxNC4wODQzIDUuNzc4MjIgMTQuNTI1IDYuMzIxODggMTQuNTI1WiIgZmlsbD0iIzA1NjgzOSIgc3Ryb2tlPSIjMDU2ODM5IiBzdHJva2Utd2lkdGg9IjAuNSIvPgo8cGF0aCBkPSJNNi4zMjE4OCAxOS4xMTg4QzYuODY1NTMgMTkuMTE4OCA3LjMwNjI1IDE4LjY3OCA3LjMwNjI1IDE4LjEzNDRDNy4zMDYyNSAxNy41OTA3IDYuODY1NTMgMTcuMTUgNi4zMjE4OCAxNy4xNUM1Ljc3ODIyIDE3LjE1IDUuMzM3NSAxNy41OTA3IDUuMzM3NSAxOC4xMzQ0QzUuMzM3NSAxOC42NzggNS43NzgyMiAxOS4xMTg4IDYuMzIxODggMTkuMTE4OFoiIGZpbGw9IiMwNTY4MzkiIHN0cm9rZT0iIzA1NjgzOSIgc3Ryb2tlLXdpZHRoPSIwLjUiLz4KPHBhdGggZD0iTTExLjkgMTQuNTI1QzEyLjQ0MzcgMTQuNTI1IDEyLjg4NDQgMTQuMDg0MyAxMi44ODQ0IDEzLjU0MDZDMTIuODg0NCAxMi45OTcgMTIuNDQzNyAxMi41NTYyIDExLjkgMTIuNTU2MkMxMS4zNTYzIDEyLjU1NjIgMTAuOTE1NiAxMi45OTcgMTAuOTE1NiAxMy41NDA2QzEwLjkxNTYgMTQuMDg0MyAxMS4zNTYzIDE0LjUyNSAxMS45IDE0LjUyNVoiIGZpbGw9IiMwNTY4MzkiIHN0cm9rZT0iIzA1NjgzOSIgc3Ryb2tlLXdpZHRoPSIwLjUiLz4KPHBhdGggZD0iTTExLjkgMTkuMTE4OEMxMi40NDM3IDE5LjExODggMTIuODg0NCAxOC42NzggMTIuODg0NCAxOC4xMzQ0QzEyLjg4NDQgMTcuNTkwNyAxMi40NDM3IDE3LjE1IDExLjkgMTcuMTVDMTEuMzU2MyAxNy4xNSAxMC45MTU2IDE3LjU5MDcgMTAuOTE1NiAxOC4xMzQ0QzEwLjkxNTYgMTguNjc4IDExLjM1NjMgMTkuMTE4OCAxMS45IDE5LjExODhaIiBmaWxsPSIjMDU2ODM5IiBzdHJva2U9IiMwNTY4MzkiIHN0cm9rZS13aWR0aD0iMC41Ii8+CjxwYXRoIGQ9Ik0xNy40NzgxIDE0LjUyNUMxOC4wMjE4IDE0LjUyNSAxOC40NjI1IDE0LjA4NDMgMTguNDYyNSAxMy41NDA2QzE4LjQ2MjUgMTIuOTk3IDE4LjAyMTggMTIuNTU2MiAxNy40NzgxIDEyLjU1NjJDMTYuOTM0NSAxMi41NTYyIDE2LjQ5MzggMTIuOTk3IDE2LjQ5MzggMTMuNTQwNkMxNi40OTM4IDE0LjA4NDMgMTYuOTM0NSAxNC41MjUgMTcuNDc4MSAxNC41MjVaIiBmaWxsPSIjMDU2ODM5IiBzdHJva2U9IiMwNTY4MzkiIHN0cm9rZS13aWR0aD0iMC41Ii8+CjxwYXRoIGQ9Ik0xNy40NzgxIDE5LjExODhDMTYuOTM1NiAxOS4xMTg4IDE2LjQ5MzggMTguNjc2OSAxNi40OTM4IDE4LjEzNDRDMTYuNDkzOCAxNy41OTE5IDE2LjkzNTYgMTcuMTUgMTcuNDc4MSAxNy4xNUMxNy40OTA0IDE3LjE1IDE3LjUwNDQgMTcuMTUwOSAxNy41MTg0IDE3LjE1MjZDMTcuNTI3MSAxNy4xNTM1IDE3LjUzNSAxNy4xNTQ0IDE3LjU0MiAxNy4xNTUzQzE4LjA1MjEgMTcuMTgwNiAxOC40NjI1IDE3LjYxMTEgMTguNDYyNSAxOC4xMzUzQzE4LjQ2MjUgMTguNjc2OSAxOC4wMjA2IDE5LjExODggMTcuNDc4MSAxOS4xMTg4WiIgZmlsbD0iIzA1NjgzOSIgc3Ryb2tlPSIjMDU2ODM5IiBzdHJva2Utd2lkdGg9IjAuNSIvPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIiIGhlaWdodD0iNDYiIHZpZXdCb3g9IjAgMCA0MiA0NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgogICAgICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMSkiPgogICAgICAgICAgICA8cGF0aCBkPSJNNC44MDY5MSAyMC40MDM2TDI1LjY5MDkgMjAuNDAzNkwyNS42OTA5IDIuNDg4MDNMNC44MDY5MSAyLjQ4ODAzTDQuODA2OTEgMjAuNDAzNloiIGZpbGw9IiNGRTY3NjciLz4KICAgICAgICAgICAgPHBhdGggZD0iTTI1LjY5MTIgMjAuNDYxN1Y3LjIxOTczSDM3LjA4NTFMMzEuNzI4NiAxNC45NDkyTDM3LjA4NTEgMjIuNjgwOUgxOS4wNjJWMjAuNDYxN0gyNS42OTEyWiIgZmlsbD0iI0NGNDU0NSIvPgogICAgICAgICAgICA8cGF0aCBkPSJNNC44MDcxMyA0Ni41Nzg2VjQuNDMzNTkiIHN0cm9rZT0iIzNBM0EzOSIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZGVmcz4KICAgICAgICA8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KICAgICAgICAgICAgPHJlY3Qgd2lkdGg9IjQxIiBoZWlnaHQ9IjQ1IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC44MDYxNTIgMC44MzY2NykiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgICAgIDxjbGlwUGF0aCBpZD0iY2xpcDEiPgogICAgICAgICAgICA8cmVjdCB3aWR0aD0iNDEiIGhlaWdodD0iNDUiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjgwNjE1MiAwLjgzNjY3KSIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICA8L2RlZnM+Cjwvc3ZnPg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjUiIGhlaWdodD0iNTciIHZpZXdCb3g9IjAgMCA2NSA1NyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgogICAgICAgIDxwYXRoIGQ9Ik0yNS40MzU5IDE4LjU0NjFMNDAuMjA3NSAxOC41NDYxVjUuODA2MjFMMjUuNDM1OSA1LjgwNjIxVjE4LjU0NjFaIiBmaWxsPSIjRkU2NzY3Ii8+CiAgICAgICAgPHBhdGggZD0iTTQwLjIwNzUgMTguNTg3NFY5LjE3MDlINDguMjY2Nkw0NC40Nzc5IDE0LjY2NzRMNDguMjY2NiAyMC4xNjU1SDM1LjUxODZWMTguNTg3NEg0MC4yMDc1WiIgZmlsbD0iI0NGNDU0NSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yNS40MzYgMzcuMTU5NVY3LjE4OTciIHN0cm9rZT0iIzNBM0EzOSIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgIDwvZz4KICAgIDxwYXRoIGQ9Ik01MS4xNTA5IDI4LjYzMThINDAuNTQ0NUMzOS44NDEzIDI4LjYzMTggMzkuMTY2OCAyOC45MTEyIDM4LjY2OTUgMjkuNDA4NUMzOC4xNzIzIDI5LjkwNTcgMzcuODkyOSAzMC41ODAyIDM3Ljg5MjkgMzEuMjgzNEMzNy44OTI5IDMxLjk4NjcgMzguMTcyMyAzMi42NjExIDM4LjY2OTUgMzMuMTU4NEMzOS4xNjY4IDMzLjY1NTcgMzkuODQxMyAzMy45MzUxIDQwLjU0NDUgMzMuOTM1MUg0NC43NDk4TDM1LjI0MTMgNDMuNDQzNUwyNi41MDk2IDM0LjcxMTlDMjYuMjYzNSAzNC40NjU2IDI1Ljk3MTIgMzQuMjcwMiAyNS42NDk1IDM0LjEzN0MyNS4zMjc5IDM0LjAwMzcgMjQuOTgzMSAzMy45MzUxIDI0LjYzNDkgMzMuOTM1MUMyNC4yODY3IDMzLjkzNTEgMjMuOTQxOSAzNC4wMDM3IDIzLjYyMDIgMzQuMTM3QzIzLjI5ODUgMzQuMjcwMiAyMy4wMDYzIDM0LjQ2NTYgMjIuNzYwMSAzNC43MTE5TDEyLjE1MzcgNDUuMzE4M0MxMS42NTg3IDQ1LjgxNiAxMS4zODE0IDQ2LjQ4OTcgMTEuMzgyMyA0Ny4xOTE2QzExLjM4MzMgNDcuODkzNSAxMS42NjI2IDQ4LjU2NjMgMTIuMTU4OSA0OS4wNjI2QzEyLjY1NTIgNDkuNTU5IDEzLjMyODEgNDkuODM4MiAxNC4wMyA0OS44MzkyQzE0LjczMTkgNDkuODQwMiAxNS40MDU1IDQ5LjU2MjggMTUuOTAzMiA0OS4wNjc5TDI0LjYzNDkgNDAuMzM2MkwzMy4zNjY1IDQ5LjA2NzlDMzMuNjEyNyA0OS4zMTQxIDMzLjkwNDkgNDkuNTA5NSAzNC4yMjY2IDQ5LjY0MjhDMzQuNTQ4MyA0OS43NzYxIDM0Ljg5MzEgNDkuODQ0NyAzNS4yNDEzIDQ5Ljg0NDdDMzUuNTg5NSA0OS44NDQ3IDM1LjkzNDMgNDkuNzc2MSAzNi4yNTYgNDkuNjQyOEMzNi41Nzc3IDQ5LjUwOTUgMzYuODY5OSA0OS4zMTQxIDM3LjExNjEgNDkuMDY3OUw0OC40OTkzIDM3LjY4NDZWNDEuODg5OUM0OC40OTkzIDQyLjU5MzEgNDguNzc4NyA0My4yNjc2IDQ5LjI3NiA0My43NjQ4QzQ5Ljc3MzIgNDQuMjYyMSA1MC40NDc3IDQ0LjU0MTUgNTEuMTUwOSA0NC41NDE1QzUxLjg1NDIgNDQuNTQxNSA1Mi41Mjg2IDQ0LjI2MjEgNTMuMDI1OSA0My43NjQ4QzUzLjUyMzIgNDMuMjY3NiA1My44MDI1IDQyLjU5MzEgNTMuODAyNSA0MS44ODk5VjMxLjI4MzRDNTMuODAyNyAzMC45MzUyIDUzLjczNDMgMzAuNTkwMyA1My42MDExIDMwLjI2ODVDNTMuNDY3OSAyOS45NDY3IDUzLjI3MjYgMjkuNjU0MyA1My4wMjY0IDI5LjQwOEM1Mi43ODAxIDI5LjE2MTggNTIuNDg3NyAyOC45NjY1IDUyLjE2NTkgMjguODMzM0M1MS44NDQxIDI4LjcwMDEgNTEuNDk5MiAyOC42MzE2IDUxLjE1MDkgMjguNjMxOFoiIGZpbGw9IiM3Nzc3NzciLz4KICAgIDxkZWZzPgogICAgICAgIDxjbGlwUGF0aCBpZD0iY2xpcDAiPgogICAgICAgICAgICA8cmVjdCB3aWR0aD0iMjkiIGhlaWdodD0iMzIiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMi42MDYgNC42MzE4NCkiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgPC9kZWZzPgo8L3N2Zz4=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjUiIGhlaWdodD0iNTciIHZpZXdCb3g9IjAgMCA2NSA1NyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik0yOC4xNzY4IDE2LjUyMDhIMTEuNjkzNFY0Ni4xMjY5SDMzLjI0ODZWMjEuOTAzN0wyOC4xNzY4IDE2LjUyMDhaIiBmaWxsPSJ3aGl0ZSIvPgogICAgPHBhdGggZD0iTTE2Ljc2NTYgMTEuMTM3OVYxNi41MjA5SDI4LjE3NzJMMzMuMjQ5IDIxLjkwMzhWNDAuNzQ0MUgzOC4zMjA5VjE2LjUyMDlMMzMuMjQ5IDExLjEzNzlIMTYuNzY1NloiIGZpbGw9IiMzRjNGM0YiLz4KICAgIDxwYXRoIGQ9Ik0zOC43NTcxIDE2LjQ4MzhDMzguNzU3MSAxNi40NzM4IDM4Ljc1NzEgMTYuNDYzOSAzOC43NTcxIDE2LjQ1NFYxNi40MzVDMzguNzU3MSAxNi40MjY2IDM4Ljc1NzEgMTYuNDE4MiAzOC43NTI4IDE2LjQwOTFDMzguNzUxOSAxNi40MDI0IDM4Ljc1MDcgMTYuMzk1OCAzOC43NDkyIDE2LjM4OTJDMzguNzQ5MiAxNi4zODE2IDM4Ljc0NTYgMTYuMzczMiAzOC43NDM1IDE2LjM2NTZMMzguNzM3IDE2LjM0NjVDMzguNzM0OCAxNi4zMzg1IDM4LjczMjIgMTYuMzMwNiAzOC43MjkxIDE2LjMyMjlDMzguNzI2OCAxNi4zMTY3IDM4LjcyNDEgMTYuMzEwNiAzOC43MjEyIDE2LjMwNDZDMzguNzE4MyAxNi4yOTcgMzguNzE0OSAxNi4yODk3IDM4LjcxMTEgMTYuMjgyNUwzOC43MDE4IDE2LjI2NUwzOC42ODk2IDE2LjI0MzZMMzguNjc4MSAxNi4yMjYxTDM4LjY2NDUgMTYuMjA3OEwzOC42NTAxIDE2LjE4OTVMMzguNjM4NiAxNi4xNzU4TDMzLjY4MzIgMTAuNzUwMkwzMy42NjgxIDEwLjczNUwzMy42NTE2IDEwLjcxOUwzMy42MzcyIDEwLjcwNzZDMzMuNjMxMSAxMC43MDIgMzMuNjI0NiAxMC42OTcgMzMuNjE3OCAxMC42OTIzTDMzLjU5NjMgMTAuNjc3OEMzMy41OTEyIDEwLjY3NzggMzMuNTg2OSAxMC42NzE3IDMzLjU4MjYgMTAuNjY5NEMzMy41MTkgMTAuNjMyNCAzMy40NDc2IDEwLjYxMyAzMy4zNzUxIDEwLjYxM0gxNi41OTkyQzE2LjQ4NDkgMTAuNjEzIDE2LjM3NTMgMTAuNjYxMiAxNi4yOTQ1IDEwLjc0N0MxNi4yMTM3IDEwLjgzMjggMTYuMTY4MyAxMC45NDkxIDE2LjE2ODMgMTEuMDcwNFYxNS45NDg3SDExLjY4OTdDMTEuNTc1NCAxNS45NDg3IDExLjQ2NTggMTUuOTk2OCAxMS4zODUgMTYuMDgyNkMxMS4zMDQyIDE2LjE2ODQgMTEuMjU4OCAxNi4yODQ3IDExLjI1ODggMTYuNDA2VjQ2LjE5MzNDMTEuMjU4OCA0Ni4zMTQ2IDExLjMwNDIgNDYuNDMwOSAxMS4zODUgNDYuNTE2N0MxMS40NjU4IDQ2LjYwMjQgMTEuNTc1NCA0Ni42NTA2IDExLjY4OTcgNDYuNjUwNkgzMy40MTQ2QzMzLjUyODkgNDYuNjUwNiAzMy42Mzg1IDQ2LjYwMjQgMzMuNzE5MyA0Ni41MTY3QzMzLjgwMDEgNDYuNDMwOSAzMy44NDU1IDQ2LjMxNDYgMzMuODQ1NSA0Ni4xOTMzVjQxLjMxNUgzOC4zMjEyQzM4LjQzNTUgNDEuMzE1IDM4LjU0NTEgNDEuMjY2OCAzOC42MjU5IDQxLjE4MUMzOC43MDY3IDQxLjA5NTMgMzguNzUyMSA0MC45Nzg5IDM4Ljc1MjEgNDAuODU3N1YxNi40OTY3QzM4Ljc1NzggMTYuNDkyMSAzOC43NTcxIDE2LjQ4ODMgMzguNzU3MSAxNi40ODM4Wk0zMy44MDE3IDEyLjIwNTNMMzcuMzAxNCAxNi4wMzYzSDMzLjgwMUwzMy44MDE3IDEyLjIwNTNaTTEyLjEyMjggNDUuNzMzN1YxNi44Njg3SDI4LjAyMzJWMjEuODM0NkMyOC4wMjMyIDIxLjk1NTkgMjguMDY4NiAyMi4wNzIyIDI4LjE0OTQgMjIuMTU4QzI4LjIzMDIgMjIuMjQzOCAyOC4zMzk4IDIyLjI5MiAyOC40NTQxIDIyLjI5MkgzMi45Nzg2VjQwLjg1NTRDMzIuOTc4NiA0MC44NTkyIDMyLjk3ODYgNDAuODYzIDMyLjk3ODYgNDAuODY3NlY0NS43MzM3SDEyLjEyMjhaTTI4Ljg5MDggMTcuNTQzM0wzMi4zOTEyIDIxLjM3NUgyOC44OTA4VjE3LjU0MzNaTTM3Ljg5MSA0MC4zOTU3SDMzLjg0ODRWMjEuODM0NkMzMy44NDg0IDIxLjgzIDMzLjg0ODQgMjEuODI2MiAzMy44NDg0IDIxLjgyMTdDMzMuODQ4NCAyMS44MTcxIDMzLjg0ODQgMjEuODAxOCAzMy44NDg0IDIxLjc5MTlWMjEuNzczNkMzMy44NDczIDIxLjc2NDkgMzMuODQ1OSAyMS43NTYzIDMzLjg0NCAyMS43NDc3QzMzLjg0MzMgMjEuNzQxIDMzLjg0MjEgMjEuNzM0NCAzMy44NDA1IDIxLjcyNzlDMzMuODQwNSAyMS43MTk1IDMzLjgzNjkgMjEuNzExOSAzMy44MzQgMjEuNzAzNUMzMy44MzI0IDIxLjY5NzEgMzMuODMwNSAyMS42OTA3IDMzLjgyODIgMjEuNjg0NUwzMy44MjAzIDIxLjY2MTZDMzMuODE4MiAyMS42NTUzIDMzLjgxNTUgMjEuNjQ5MiAzMy44MTI0IDIxLjY0MzNDMzMuODEyNCAyMS42MzU3IDMzLjgwNiAyMS42MjgxIDMzLjgwMjQgMjEuNjIwNEwzMy43OTMxIDIxLjYwMjlMMzMuNzgwOCAyMS41ODE2TDMzLjc2OTQgMjEuNTY0OEMzMy43NjUyIDIxLjU1ODEgMzMuNzYwNyAyMS41NTE4IDMzLjc1NTcgMjEuNTQ1N0MzMy43NTEzIDIxLjUzOTUgMzMuNzQ2NSAyMS41MzM3IDMzLjc0MTMgMjEuNTI4MkMzMy43Mzc5IDIxLjUyMzMgMzMuNzM0MSAyMS41MTg3IDMzLjcyOTkgMjEuNTE0NUwyOC43NzQ0IDE2LjA4ODlMMjguNzU4NiAxNi4wNzM3TDI4Ljc0MjEgMTYuMDU4NEMyOC43Mzc4IDE2LjA1MzkgMjguNzMyOCAxNi4wNTA4IDI4LjcyODUgMTYuMDQ3TDI4LjcwODQgMTYuMDMxTDI4LjY4NjggMTYuMDE3M0wyOC42NzMyIDE2LjAwODFDMjguNjA5NyAxNS45NzE1IDI4LjUzODYgMTUuOTUyMyAyOC40NjYzIDE1Ljk1MjVIMTcuMDM1MVYxMS41MzE1SDMyLjkzNDFWMTYuNDk2N0MzMi45MzQxIDE2LjYxOCAzMi45Nzk1IDE2LjczNDMgMzMuMDYwMyAxNi44MjAxQzMzLjE0MTEgMTYuOTA1OSAzMy4yNTA3IDE2Ljk1NCAzMy4zNjUgMTYuOTU0SDM3Ljg4OTVMMzcuODkxIDQwLjM5NTdaIiBmaWxsPSIjM0YzRjNGIiBzdHJva2U9IiMzRjNGM0YiIHN0cm9rZS13aWR0aD0iMC43NSIvPgogICAgPHBhdGggZD0iTTI5LjcwOTMgMjQuMjc2NkgxNS4zOTM5QzE1LjI3ODkgMjQuMjc2NiAxNS4xNjg3IDI0LjMyNTEgMTUuMDg3NCAyNC40MTEzQzE1LjAwNjEgMjQuNDk3NiAxNC45NjA0IDI0LjYxNDYgMTQuOTYwNCAyNC43MzY2QzE0Ljk2MDQgMjQuODU4NiAxNS4wMDYxIDI0Ljk3NTYgMTUuMDg3NCAyNS4wNjE5QzE1LjE2ODcgMjUuMTQ4MiAxNS4yNzg5IDI1LjE5NjYgMTUuMzkzOSAyNS4xOTY2SDI5LjcwOTNDMjkuODI0MyAyNS4xOTY2IDI5LjkzNDUgMjUuMTQ4MiAzMC4wMTU4IDI1LjA2MTlDMzAuMDk3MSAyNC45NzU2IDMwLjE0MjcgMjQuODU4NiAzMC4xNDI3IDI0LjczNjZDMzAuMTQyNyAyNC42MTQ2IDMwLjA5NzEgMjQuNDk3NiAzMC4wMTU4IDI0LjQxMTNDMjkuOTM0NSAyNC4zMjUxIDI5LjgyNDMgMjQuMjc2NiAyOS43MDkzIDI0LjI3NjZaIiBmaWxsPSIjM0EzQTM5IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjAuNSIvPgogICAgPHBhdGggZD0iTTI5LjcwOSAyOC4zODAxSDE1LjM5MzVDMTUuMjc4NyAyOC4zODAxIDE1LjE2ODUgMjguNDI4NiAxNS4wODczIDI4LjUxNDdDMTUuMDA2MSAyOC42MDA5IDE0Ljk2MDQgMjguNzE3OSAxNC45NjA0IDI4LjgzOThDMTQuOTYwNCAyOC45NjE3IDE1LjAwNjEgMjkuMDc4NiAxNS4wODczIDI5LjE2NDhDMTUuMTY4NSAyOS4yNTEgMTUuMjc4NyAyOS4yOTk0IDE1LjM5MzUgMjkuMjk5NEgyOS43MDlDMjkuODIzOCAyOS4yOTk0IDI5LjkzNCAyOS4yNTEgMzAuMDE1MiAyOS4xNjQ4QzMwLjA5NjQgMjkuMDc4NiAzMC4xNDIgMjguOTYxNyAzMC4xNDIgMjguODM5OEMzMC4xNDIgMjguNzE3OSAzMC4wOTY0IDI4LjYwMDkgMzAuMDE1MiAyOC41MTQ3QzI5LjkzNCAyOC40Mjg2IDI5LjgyMzggMjguMzgwMSAyOS43MDkgMjguMzgwMVoiIGZpbGw9IiMzQTNBMzkiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMC41Ii8+CiAgICA8cGF0aCBkPSJNMjkuNzA5IDMyLjQ4MjJIMTUuMzkzNUMxNS4yNzg3IDMyLjQ4MjIgMTUuMTY4NSAzMi41MzA2IDE1LjA4NzMgMzIuNjE2OEMxNS4wMDYxIDMyLjcwMyAxNC45NjA0IDMyLjgxOTkgMTQuOTYwNCAzMi45NDE4QzE0Ljk2MDQgMzMuMDYzNyAxNS4wMDYxIDMzLjE4MDYgMTUuMDg3MyAzMy4yNjY4QzE1LjE2ODUgMzMuMzUzIDE1LjI3ODcgMzMuNDAxNCAxNS4zOTM1IDMzLjQwMTRIMjkuNzA5QzI5LjgyMzggMzMuNDAxNCAyOS45MzQgMzMuMzUzIDMwLjAxNTIgMzMuMjY2OEMzMC4wOTY0IDMzLjE4MDYgMzAuMTQyIDMzLjA2MzcgMzAuMTQyIDMyLjk0MThDMzAuMTQyIDMyLjgxOTkgMzAuMDk2NCAzMi43MDMgMzAuMDE1MiAzMi42MTY4QzI5LjkzNCAzMi41MzA2IDI5LjgyMzggMzIuNDgyMiAyOS43MDkgMzIuNDgyMloiIGZpbGw9IiMzQTNBMzkiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMC41Ii8+CiAgICA8cGF0aCBkPSJNMjkuNzA5IDM2LjU4NDVIMTUuMzkzNUMxNS4yNzg3IDM2LjU4NDUgMTUuMTY4NSAzNi42MzI5IDE1LjA4NzMgMzYuNzE5MUMxNS4wMDYxIDM2LjgwNTMgMTQuOTYwNCAzNi45MjIyIDE0Ljk2MDQgMzcuMDQ0MUMxNC45NjA0IDM3LjE2NiAxNS4wMDYxIDM3LjI4MjkgMTUuMDg3MyAzNy4zNjkxQzE1LjE2ODUgMzcuNDU1MyAxNS4yNzg3IDM3LjUwMzcgMTUuMzkzNSAzNy41MDM3SDI5LjcwOUMyOS44MjM4IDM3LjUwMzcgMjkuOTM0IDM3LjQ1NTMgMzAuMDE1MiAzNy4zNjkxQzMwLjA5NjQgMzcuMjgyOSAzMC4xNDIgMzcuMTY2IDMwLjE0MiAzNy4wNDQxQzMwLjE0MiAzNi45MjIyIDMwLjA5NjQgMzYuODA1MyAzMC4wMTUyIDM2LjcxOTFDMjkuOTM0IDM2LjYzMjkgMjkuODIzOCAzNi41ODQ1IDI5LjcwOSAzNi41ODQ1WiIgZmlsbD0iIzNBM0EzOSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIwLjUiLz4KICAgIDxwYXRoIGQ9Ik0zNy4zNTc1IDE2LjAxNjFMMzMuNzY3OSAxMi4xNjg1QzMzLjU4MjEgMTEuOTY5NCAzMy4yNDg1IDEyLjEwMDggMzMuMjQ4NSAxMi4zNzMxVjE2LjIyMDdDMzMuMjQ4NSAxNi4zODY0IDMzLjM4MjkgMTYuNTIwNyAzMy41NDg1IDE2LjUyMDdIMzcuMTM4MUMzNy40MDA0IDE2LjUyMDcgMzcuNTM2NCAxNi4yMDc4IDM3LjM1NzUgMTYuMDE2MVoiIGZpbGw9IiMzQTNBMzkiLz4KICAgIDxwYXRoIGQ9Ik0yNC40NTEyIDQwLjY4N0gxNS4zOTM1QzE1LjI3ODcgNDAuNjg3IDE1LjE2ODUgNDAuNzM1NCAxNS4wODczIDQwLjgyMTZDMTUuMDA2MSA0MC45MDc4IDE0Ljk2MDQgNDEuMDI0NyAxNC45NjA0IDQxLjE0NjZDMTQuOTYwNCA0MS4yNjg1IDE1LjAwNjEgNDEuMzg1NCAxNS4wODczIDQxLjQ3MTZDMTUuMTY4NSA0MS41NTc4IDE1LjI3ODcgNDEuNjA2MyAxNS4zOTM1IDQxLjYwNjNIMjQuNDUxMkMyNC41NjYgNDEuNjA2MyAyNC42NzYyIDQxLjU1NzggMjQuNzU3NCA0MS40NzE2QzI0LjgzODYgNDEuMzg1NCAyNC44ODQyIDQxLjI2ODUgMjQuODg0MiA0MS4xNDY2QzI0Ljg4NDIgNDEuMDI0NyAyNC44Mzg2IDQwLjkwNzggMjQuNzU3NCA0MC44MjE2QzI0LjY3NjIgNDAuNzM1NCAyNC41NjYgNDAuNjg3IDI0LjQ1MTIgNDAuNjg3WiIgZmlsbD0iIzNBM0EzOSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIwLjUiLz4KICAgIDxwYXRoIGQ9Ik0zNy42Njc3IDQ2Ljg3NTRMMzUuNTM4MyA1My45NzgzTDQwLjk2MjMgNDkuNTUwNUw1OC43MTYyIDIzLjczMjFDNTguNzE2MiAyMy43MzIxIDU5LjQyOTMgMjIuNDQxNSA1OC4wODk2IDIwLjkzMzlDNTYuNzUgMTkuNDI2MyA1NS4yOTIyIDE5Ljk3MDYgNTUuMjkyMiAxOS45NzA2TDM3LjY2NzcgNDYuODc1NFoiIGZpbGw9ImJsYWNrIi8+CiAgICA8cGF0aCBkPSJNMzcuNjc3MyA0Ni44MzRDMzcuNjc3MyA0Ni44MzQgMzYuMzI0MyA1MS4zMDUxIDM2LjE4NjcgNTEuODMzNUMzNi4xMDYxIDUyLjE0MyAzNi45OTE2IDUxLjcyODEgMzcuMTc2MiA1MS44MzM0QzM3LjM2MDkgNTEuOTM4NyAzNy4wMjA1IDUyLjcyNDMgMzcuMTc2MyA1Mi42MzQ4QzM4LjEyOSA1Mi4wODc0IDQwLjk3MjUgNDkuNTA5NiA0MC45NzI1IDQ5LjUwOTZDNDAuMDQ1MiA0OS4zMDM5IDM5LjgwODIgNDguNjYxMSAzOS44MDU1IDQ4LjM2NTVMMzkuODE4MiA0Ny42NzUxTDM5LjI5NzQgNDYuNzkwNEwzNy42NzczIDQ2LjgzNFoiIGZpbGw9IiNGMkQyQkMiLz4KICAgIDxwYXRoIGQ9Ik0zOC44Mjc4IDQ2Ljg3NzRDMzguMjM4OSA0Ny4yMzg1IDM3LjY2MTggNDYuODUxMiAzNy42NjE4IDQ2Ljg1MTJDNDIuNjkwOCAzOS4xNjM0IDU0LjEyNzggMjEuMDA4IDU0Ljc1NzUgMjAuMjkzNkM1NS40NzAyIDE5LjQ4NTIgNTYuODMzNiAxOS44OTgzIDU3LjUzOTggMjAuNDI1OEwzOS43OTk1IDQ4LjA2OTRDMzkuNzk5NSA0OC4wNjk0IDM5LjQxNjYgNDYuNTE2NCAzOC44Mjc4IDQ2Ljg3NzRaIiBmaWxsPSIjODk4OTg5Ii8+Cjwvc3ZnPgo=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAzNiAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGQ9Ik0zNC41NTQ1IDIyLjcxOTVIMzQuNTUxMkwzMi44MjQ5IDIyLjcyMzVDMzIuNzI2NSAyMi40NTUgMzIuNTY4NyAyMi4yMDM3IDMyLjM0ODEgMjEuOTkyNkwyMy45ODI5IDEzLjk5NTZDMjMuMzAxOSAxMy4zNDQ3IDIyLjI1MDggMTMuMjc5NiAyMS40OTQ3IDEzLjg0MTNMMTcuMTM4MyAxNy4wNzg0TDE1LjE3NDkgOS41MDE5N0wxOS41MzY2IDIuOTU5NDhDMjAuMTUyNiAyLjAzNTUgMTkuNTQwNCAwLjc5MTU2OCAxOC40Mzc3IDAuNzA5ODM0TDEyLjYyOTkgMC4yNzk2NjNDMTMuMTg3IDAuODY5MjkyIDEzLjU4MzcgMS42MDIzNCAxMy43NjcxIDIuMzk4ODZDMTMuODM0NCAyLjY5MTMzIDEzLjg3MjUgMi45ODU5MyAxMy44ODI2IDMuMjc5NTFMMTUuNzQ3IDMuNDE3NjRMMTMuMTcwNyA3LjI4MjA5TDcuNzIyNTUgOC41ODQ2M0w5LjQ3MDg4IDEwLjIxMzlMNC42MDE2NCA3LjM2NjU2TDUuNjMxNTEgNi4xNTk5MUM1LjI1NTk0IDUuNjU0NTggNC45ODQxMiA1LjA3MzU2IDQuODQxNTYgNC40NTQwN0M0LjcwNTk5IDMuODY1MzggNC42ODgxNiAzLjI2Nzk5IDQuNzgyNDMgMi42ODkxMUwxLjI2ODAzIDYuODA2NjJDMC42ODAyODEgNy40OTUwNCAwLjg2MTgzOCA4LjU0Nzk1IDEuNjQyOTIgOS4wMDEzMkw4LjQ1ODQyIDEyLjk1NjlMNy4wMjg1OCAxMi42NDY3TDkuMzYxMzMgMjIuNzc3NkwxLjQxMDQ3IDIyLjgxMzdDMC42Mjk3MzIgMjIuODE1NiAtMC4wMDE3ODc4NiAyMy40NTAxIDMuODAyOWUtMDYgMjQuMjMwOEMwLjAwMTc5NTQ3IDI1LjAxMDUgMC42MzQ0MjQgMjUuNjQxNCAxLjQxMzcxIDI1LjY0MTRMMzQuNTU3OCAyNS41NDcyQzM1LjMzODUgMjUuNTQ1NCAzNS45NzAxIDI0LjkxMSAzNS45Njg0IDI0LjEzMDJDMzUuOTY2NSAyMy4zNTA0IDM1LjMzMzggMjIuNzE5NSAzNC41NTQ1IDIyLjcxOTVaTTE1Ljk2OTggMjIuNzYyNUwyMi40OTA4IDE3LjkxNjhMMjcuNTMxNyAyMi43MzU4TDE1Ljk2OTggMjIuNzYyNVoiIGZpbGw9IiMwNTY4MzkiLz4KPHBhdGggZD0iTTkuMzA0MjUgNi43ODA3N0MxMS4xNTY2IDYuNzgwNzcgMTIuNjU4MiA1LjI3OTE3IDEyLjY1ODIgMy40MjY4NUMxMi42NTgyIDEuNTc0NTQgMTEuMTU2NiAwLjA3MjkzNyA5LjMwNDI1IDAuMDcyOTM3QzcuNDUxOTMgMC4wNzI5MzcgNS45NTAzMyAxLjU3NDU0IDUuOTUwMzMgMy40MjY4NUM1Ljk1MDMzIDUuMjc5MTcgNy40NTE5MyA2Ljc4MDc3IDkuMzA0MjUgNi43ODA3N1oiIGZpbGw9IiMwNTY4MzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMCI+CjxwYXRoIGQ9Ik0wIDBIMzZWMjUuNzE0M0gwVjBaIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=\"","export default \"data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjE2LjU2IDYzMS44NCI+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiNmZmY7fTwvc3R5bGU+PC9kZWZzPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTEwNTAuOSwyMjAuNTlDOTE1LjIyLDE3MC43MSw4MDAuNTQsMTg3LjQ3LDY5MS41NywxMzIsNjIyLjY3LDk3LDU1OC41OSw1MC4xOCw0ODQsMjkuNzQsNDEyLjYsMTAuMTEsMzM1LjY2LDEuODMsMjYxLjc3LDhjLTQ0LDMuNjgtODkuMzQsMjIuNTctMTI1LDQ4Ljg3LTIzLDE3LTUxLjI2LDQ5LjcxLTY1LDc0Ljg2QzI5LjczLDIwOC4zOCw5LjQzLDI4Miw4LjA2LDM2OS4zNCw3LjU4LDM5OS41OCw5Ljg3LDQzMS4wOSwyMy41Myw0NThjMTIuNzMsMjUuMDksMzMuNyw0OSw1NC43Miw2Ny42MiwxMCw4LjksMzAsMTguMzUsNDIuMTcsMjQsMTQuMTIsNi41OSwxMTQuMjEsMjcuMTYsMTI5LjcxLDI4LjgxLDI2NC43OCwyOC4xMywzNDcuNzYtNTEuNTMsNTU2LjU5LTQuMTEsNjkuMjYsMTUuNzQsMTM1Ljg5LDQxLjgyLDIwNS4zNyw1Ni41NywzMyw3LDY4LDExLjI4LDk5Ljg1LDAsMjUuMjctOSw0Ni41Mi0yNy4yNCw2My4xLTQ4LjM5LDQyLjkxLTU0LjQ4LDU3LjA5LTEyOC41OSw0NS44LTE5Ny00LjM4LTI2LjUtMTIuNTUtNTIuOTQtMjguNC03NC41Mi0xMi4xMy0xNi41NS0yOC4yOC0yOS42OC00NC44Ni00MS43Mi0zNC45My0yNS4zNC01NC45LTMxLjE2LTk0LjU4LTQ4WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTggLTYpIi8+PC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMgMjFWMTIuMzg2NkwxMS4yNjAxIDMuMzAwNTRDMTEuNjU2OCAyLjg2NDExIDEyLjM0MzIgMi44NjQxIDEyLjczOTkgMy4zMDA1NEwyMSAxMi4zODY2VjIxQzIxIDIxLjU1MjMgMjAuNTUyMyAyMiAyMCAyMkg0QzMuNDQ3NzIgMjIgMyAyMS41NTIzIDMgMjFaIiBzdHJva2U9IiMwNTY4MzkiIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4K\"","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WakeUpIcon = exports.MoonIcon = exports.MedicineIcon = exports.NoEmotionFaceIcon = exports.QuestionFaceIcon = exports.OkFaceIcon = exports.HappyFaceIcon = exports.BadFaceIcon = exports.PlayingSoccerIcon = exports.WalkingWithDogIcon = exports.WorkingWithLaptopIcon = exports.AwakeSmileyIcon = exports.SleepSmileyIcon = exports.FlagIcon = exports.TrophyIcon = exports.BookIcon = exports.ActivityIcon = exports.WorkIcon = exports.GladRyggIcon = exports.LogoutIcon = exports.CalendarIcon = exports.GreyCloud = exports.Retreat = exports.FollowUpIcon = exports.TrainingIcon = exports.RetreatIcon = exports.PhoneCallIcon = exports.IntroNightIcon = exports.FormIcon = exports.HomeIcon = exports.placeHolderImage = exports.DefaultProgramImage = void 0;\nvar React = __importStar(require(\"react\"));\nvar BG_login_relationship_png_1 = __importDefault(require(\"./BG_login_relationship.png\"));\nvar home_svg_1 = __importDefault(require(\"./home.svg\"));\nvar sleepSmiley_svg_1 = __importDefault(require(\"./sleepSmiley.svg\"));\nvar awakeSmiley_svg_1 = __importDefault(require(\"./awakeSmiley.svg\"));\nvar medicine_svg_1 = __importDefault(require(\"./medicine.svg\"));\nvar moon_svg_1 = __importDefault(require(\"./moon.svg\"));\nvar wakeUp_svg_1 = __importDefault(require(\"./wakeUp.svg\"));\nvar form_svg_1 = __importDefault(require(\"./form.svg\"));\nvar introNight_svg_1 = __importDefault(require(\"./introNight.svg\"));\nvar phoneCall_svg_1 = __importDefault(require(\"./phoneCall.svg\"));\nvar retreat_svg_1 = __importDefault(require(\"./retreat.svg\"));\nvar training_svg_1 = __importDefault(require(\"./training.svg\"));\nvar followUp_svg_1 = __importDefault(require(\"./followUp.svg\"));\nvar retreatIcon_svg_1 = __importDefault(require(\"./retreatIcon.svg\"));\nvar greyCloud_svg_1 = __importDefault(require(\"./greyCloud.svg\"));\nvar calendar_svg_1 = __importDefault(require(\"./calendar.svg\"));\nvar logout_svg_1 = __importDefault(require(\"./logout.svg\"));\nvar gladrygg_svg_1 = __importDefault(require(\"./gladrygg.svg\"));\nvar work_svg_1 = __importDefault(require(\"./work.svg\"));\nvar activity_svg_1 = __importDefault(require(\"./activity.svg\"));\nvar book_svg_1 = __importDefault(require(\"./book.svg\"));\nvar trophy_svg_1 = __importDefault(require(\"./trophy.svg\"));\nvar flag_svg_1 = __importDefault(require(\"./flag.svg\"));\nexports.DefaultProgramImage = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: BG_login_relationship_png_1.default, ref: ref, alt: \"Program logo\" }, props))); });\nexports.placeHolderImage = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iNDIuNjVweCIgaGVpZ2h0PSIzMnB4IiB2aWV3Qm94PSIwIDAgNDIuNjUgMzIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDQyLjY1IDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8cGF0aCBmaWxsPSIjRDNEM0QzIiBkPSJNMCwwaDQyLjYzN2MwLjAyNCwwLjM1NCwwLjAwNCwwLjcxLDAuMDExLDEuMDY2YzAsMTAuMzEzLDAsMjAuNjI0LDAsMzAuOTM0SDBWMHogTTE1Ljg0OSwxMS41MDINCgkJCWMwLDIuOTYzLTAuMDAyLDUuOTI3LDAuMDAxLDguODkxYzMuNjQ0LDAuMDAzLDcuMjksMC4wMDMsMTAuOTM2LDBjMC4wMDItMi45NjQsMC4wMDItNS45MjcsMC04Ljg5MQ0KCQkJQzIzLjE0MSwxMS40OTgsMTkuNDk1LDExLjQ5OCwxNS44NDksMTEuNTAyeiIvPg0KCTwvZz4NCgk8Zz4NCgkJPHBhdGggZmlsbD0iI0QzRDNEMyIgZD0iTTE2LjUzNywxMi4xODZjMy4xODgsMCw2LjM3NSwwLDkuNTY0LDBjMC4wMDEsMi41MDksMC4wMDEsNS4wMTQtMC4wMDIsNy41MjENCgkJCWMtMy4xODgsMC4wMDMtNi4zNzUsMC4wMDMtOS41NjMsMEMxNi41MzMsMTcuMTk5LDE2LjUzMywxNC42OTQsMTYuNTM3LDEyLjE4NnogTTE3LjIxNSwxMi44N2MwLDIuMDUyLTAuMDAyLDQuMTAzLDAuMDAyLDYuMTU1DQoJCQljMC40NTcsMCwwLjkxNSwwLjAwMywxLjM3My0wLjAwNGMwLjQxLTAuNDA5LDAuODIxLTAuODIxLDEuMjMyLTEuMjMyYzAuMDU2LTAuMDU0LDAuMTA2LTAuMTIxLDAuMTgzLTAuMTQ3DQoJCQljMC42NjUtMC4yMjYsMS4zMzUtMC40NDEsMi0wLjY3MmMwLjIyNi0wLjY4MSwwLjQ1MS0xLjM2MSwwLjY3OS0yLjA0MmMwLjE3OSwwLjM1MiwwLjM1NCwwLjcwNywwLjUzMSwxLjA2MQ0KCQkJYzAuMDY2LDAuMTM1LDAuMTQzLDAuMjY2LDAuMTg4LDAuNDA4YzAuMjA3LDAuNjI2LDAuNDE3LDEuMjUxLDAuNjI1LDEuODc4YzAuMDIxLDAuMDc4LDAuMDg3LDAuMTM0LDAuMTQ1LDAuMTkNCgkJCWMwLjE5LDAuMTg1LDAuMzcxLDAuMzc3LDAuNTY1LDAuNTZjMC4yMjgsMCwwLjQ1MywwLjAwMiwwLjY4MywwYzAuMDAyLTIuMDUyLDAuMDAyLTQuMTAzLDAtNi4xNTUNCgkJCUMyMi42ODYsMTIuODY4LDE5Ljk1LDEyLjg2OCwxNy4yMTUsMTIuODd6Ii8+DQoJPC9nPg0KCTxwYXRoIGZpbGw9IiNEM0QzRDMiIGQ9Ik0xOS4zNzcsMTMuNTgyYzAuNDctMC4xMiwwLjk5NywwLjE0OSwxLjE3NSwwLjU5OWMwLjIwMywwLjQ1NSwwLjAxLDEuMDM2LTAuNDI0LDEuMjc5DQoJCWMtMC40MTgsMC4yNjEtMS4wMTYsMC4xNTEtMS4zMTYtMC4yMzljLTAuMzA0LTAuMzY1LTAuMjk4LTAuOTM5LDAuMDEyLTEuMjk5QzE4Ljk2NSwxMy43NTMsMTkuMTYzLDEzLjYzMiwxOS4zNzcsMTMuNTgyeiIvPg0KPC9nPg0KPC9zdmc+DQo=';\nexports.HomeIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: home_svg_1.default, ref: ref, alt: \"Home icon\" }, props))); });\nexports.FormIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: form_svg_1.default, ref: ref, alt: \"form\" }, props))); });\nexports.IntroNightIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: introNight_svg_1.default, ref: ref, alt: \"intro night\" }, props))); });\nexports.PhoneCallIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: phoneCall_svg_1.default, ref: ref, alt: \"phone call\" }, props))); });\nexports.RetreatIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: retreat_svg_1.default, ref: ref, alt: \"retreat\" }, props))); });\nexports.TrainingIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: training_svg_1.default, ref: ref, alt: \"training\" }, props))); });\nexports.FollowUpIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: followUp_svg_1.default, ref: ref, alt: \"follow up\" }, props))); });\nexports.Retreat = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: retreatIcon_svg_1.default, ref: ref, alt: \"retreat\" }, props))); });\nexports.GreyCloud = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: greyCloud_svg_1.default, ref: ref, alt: \"Background decor\" }, props))); });\nexports.CalendarIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: calendar_svg_1.default, ref: ref, alt: \"Calendar icon\" }, props))); });\nexports.LogoutIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: logout_svg_1.default, ref: ref, alt: \"Logout icon\" }, props))); });\nexports.GladRyggIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: gladrygg_svg_1.default, ref: ref, alt: \"Glad rygg\" }, props))); });\nexports.WorkIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: work_svg_1.default, ref: ref, alt: \"Work\" }, props))); });\nexports.ActivityIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: activity_svg_1.default, ref: ref, alt: \"Activity\" }, props))); });\nexports.BookIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: book_svg_1.default, ref: ref, alt: \"Book\" }, props))); });\nexports.TrophyIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: trophy_svg_1.default, ref: ref, alt: \"Trophy\" }, props))); });\nexports.FlagIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: flag_svg_1.default, ref: ref, alt: \"Flag\" }, props))); });\nexports.SleepSmileyIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: sleepSmiley_svg_1.default, ref: ref, alt: \"Sleep smiley icon\" }, props))); });\nexports.AwakeSmileyIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: awakeSmiley_svg_1.default, ref: ref, alt: \"Awake smiley icon\" }, props))); });\nvar WorkingWithLaptop_1 = require(\"./WorkingWithLaptop\");\nObject.defineProperty(exports, \"WorkingWithLaptopIcon\", { enumerable: true, get: function () { return __importDefault(WorkingWithLaptop_1).default; } });\nvar WalkingWithDog_1 = require(\"./WalkingWithDog\");\nObject.defineProperty(exports, \"WalkingWithDogIcon\", { enumerable: true, get: function () { return __importDefault(WalkingWithDog_1).default; } });\nvar PlayingSoccer_1 = require(\"./PlayingSoccer\");\nObject.defineProperty(exports, \"PlayingSoccerIcon\", { enumerable: true, get: function () { return __importDefault(PlayingSoccer_1).default; } });\nvar BadFace_1 = require(\"./BadFace\");\nObject.defineProperty(exports, \"BadFaceIcon\", { enumerable: true, get: function () { return __importDefault(BadFace_1).default; } });\nvar HappyFace_1 = require(\"./HappyFace\");\nObject.defineProperty(exports, \"HappyFaceIcon\", { enumerable: true, get: function () { return __importDefault(HappyFace_1).default; } });\nvar OkFace_1 = require(\"./OkFace\");\nObject.defineProperty(exports, \"OkFaceIcon\", { enumerable: true, get: function () { return __importDefault(OkFace_1).default; } });\nvar QuestionFace_1 = require(\"./QuestionFace\");\nObject.defineProperty(exports, \"QuestionFaceIcon\", { enumerable: true, get: function () { return __importDefault(QuestionFace_1).default; } });\nvar NoEmotionFace_1 = require(\"./NoEmotionFace\");\nObject.defineProperty(exports, \"NoEmotionFaceIcon\", { enumerable: true, get: function () { return __importDefault(NoEmotionFace_1).default; } });\nexports.MedicineIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: medicine_svg_1.default, ref: ref, alt: \"Medicine icon\" }, props))); });\nexports.MoonIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: moon_svg_1.default, ref: ref, alt: \"Moon icon\" }, props))); });\nexports.WakeUpIcon = React.forwardRef(function (props, ref) { return (React.createElement(\"img\", __assign({ src: wakeUp_svg_1.default, ref: ref, alt: \"Wake up icon\" }, props))); });\n","export default __webpack_public_path__ + \"7bf258243368bcc6bfa5f8f44f782092.svg\";","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar Logo = function (_a) {\n var height = _a.height;\n return (React.createElement(\"svg\", { width: \"130\", height: height, viewBox: \"0 0 130 54\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n React.createElement(\"g\", { clipPath: \"url(#clip0_4552_11495)\" },\n React.createElement(\"g\", { clipPath: \"url(#clip1_4552_11495)\" },\n React.createElement(\"g\", { clipPath: \"url(#clip2_4552_11495)\" },\n React.createElement(\"path\", { d: \"M63.2695 8.90283V10.0873H55.8034V27.1653H52.7321V10.0873H42.9287V8.90283H63.2695Z\", fill: \"#7BA425\" }),\n React.createElement(\"path\", { d: \"M74.9225 8.90283V10.0873H65.2955V16.6155H71.741V17.8H65.2955V26.1158H74.9225V27.1653H62.2242V8.90283H74.9225Z\", fill: \"#7BA425\" }),\n React.createElement(\"path\", { d: \"M45.4376 8.91797V10.1024H27.5147V16.6306H33.9602V17.8151H27.5147V25.996H45.415V27.1805H24.4434V8.91797H45.4376Z\", fill: \"#7BA425\" }),\n React.createElement(\"path\", { d: \"M6.80469 8.91797H8.52627L20.4947 21.9722H20.6324V8.91797H21.9821V27.1805H21.2659L8.3059 12.6728H8.19572V26.7633H6.80469V8.91797Z\", fill: \"#7BA425\" }),\n React.createElement(\"path\", { d: \"M63.6311 26.0186V27.203H55.8059V44.2811H52.7346V27.203H41.5957V26.0186H63.6311Z\", fill: \"url(#paint0_linear_4552_11495)\" }),\n React.createElement(\"path\", { d: \"M83.7878 26.0186L80.0099 27.203H65.2523V33.7312H71.519V34.9157H65.2523V43.0966H80.7257L84.0068 44.2811H62.181V26.0186L83.7878 26.0186Z\", fill: \"url(#paint1_linear_4552_11495)\" }),\n React.createElement(\"path\", { d: \"M84.2926 27.2694C83.2392 27.2694 82.2649 27.4581 81.3695 27.8356C80.483 28.2043 79.7149 28.7397 79.0653 29.442C78.4245 30.1354 77.9242 30.9781 77.5643 31.97C77.2044 32.9531 77.0245 34.0548 77.0245 35.2749C77.0245 36.5038 77.2176 37.6142 77.6038 38.6061C77.9988 39.5892 78.5343 40.4275 79.2102 41.121C79.8948 41.8145 80.698 42.3499 81.6197 42.7274C82.5414 43.096 83.5289 43.2804 84.5823 43.2804C85.3459 43.2804 86.035 43.1794 86.6495 42.9775C87.2639 42.7669 87.8169 42.4684 88.3085 42.0822V35.9596H85.0036V34.9194H91.2447V42.5957C90.7356 42.8678 90.2221 43.1092 89.7042 43.3199C89.1863 43.5305 88.6245 43.7061 88.0188 43.8465C87.4219 43.987 86.7636 44.0923 86.0438 44.1626C85.324 44.2416 84.5076 44.2811 83.5947 44.2811C82.6292 44.2811 81.7119 44.1713 80.8429 43.9519C79.9738 43.7412 79.1663 43.4384 78.4201 43.0434C77.6828 42.6484 77.0157 42.1787 76.4188 41.6345C75.8219 41.0815 75.3128 40.4714 74.8914 39.8043C74.4789 39.1372 74.1585 38.4218 73.9302 37.6581C73.702 36.8944 73.5879 36.1 73.5879 35.2749C73.5879 34.4585 73.6932 33.6641 73.9039 32.8917C74.1233 32.1104 74.435 31.3775 74.8387 30.6928C75.2425 29.9994 75.7341 29.3673 76.3134 28.7968C76.8928 28.2262 77.5467 27.7346 78.2753 27.3221C79.0039 26.9095 79.7983 26.5891 80.6585 26.3609C81.5188 26.1327 82.4317 26.0186 83.3972 26.0186C84.3189 26.0186 85.1704 26.1458 85.9516 26.4004C86.7416 26.6462 87.457 26.9754 88.0978 27.3879C88.7474 27.8005 89.3223 28.2789 89.8227 28.8231C90.323 29.3586 90.7531 29.9203 91.113 30.5085L89.849 31.3512C89.1117 29.9379 88.2909 28.9065 87.3868 28.2569C86.4915 27.5986 85.4601 27.2694 84.2926 27.2694Z\", fill: \"url(#paint2_linear_4552_11495)\" }),\n React.createElement(\"path\", { d: \"M42.0059 43.7015C42.4558 43.7015 42.9011 43.6453 43.3418 43.533C43.7826 43.4121 44.1774 43.2393 44.5263 43.0147C44.8752 42.7815 45.1552 42.5007 45.3664 42.1725C45.5776 41.8356 45.6832 41.4469 45.6832 41.0063C45.6832 40.4794 45.5363 40.0129 45.2425 39.6069C44.9578 39.1923 44.5814 38.8165 44.1131 38.4796C43.6448 38.1341 43.1077 37.8101 42.5017 37.5078C41.9049 37.2054 41.2943 36.9031 40.6699 36.6008C40.0456 36.2984 39.4304 35.9831 38.8244 35.6549C38.2276 35.318 37.6951 34.9465 37.2268 34.5405C36.7585 34.1259 36.3775 33.6681 36.0837 33.167C35.799 32.6574 35.6567 32.0743 35.6567 31.4178C35.6567 30.7613 35.7853 30.1523 36.0423 29.5908C36.3086 29.0293 36.6943 28.5455 37.1992 28.1395C37.7042 27.7249 38.324 27.401 39.0586 27.1677C39.8023 26.9345 40.6516 26.8179 41.6065 26.8179C42.4696 26.8179 43.2408 26.9043 43.9203 27.077C44.5997 27.2498 45.1966 27.5046 45.7107 27.8415C46.2249 28.1784 46.661 28.593 47.0191 29.0854C47.3772 29.5778 47.6664 30.1479 47.8868 30.7958L46.3167 31.4696C46.1331 30.9427 45.899 30.4632 45.6143 30.0313C45.3297 29.5908 44.99 29.215 44.5951 28.904C44.2003 28.593 43.7412 28.3555 43.2179 28.1914C42.7037 28.0186 42.1207 27.9322 41.4688 27.9322C40.8903 27.9322 40.3853 28.01 39.9538 28.1654C39.5222 28.3123 39.1596 28.511 38.8657 28.7615C38.5811 29.0034 38.3653 29.2798 38.2184 29.5908C38.0807 29.8931 38.0118 30.2041 38.0118 30.5237C38.0118 30.9729 38.1587 31.3875 38.4526 31.7676C38.7464 32.1391 39.1366 32.4932 39.6232 32.8301C40.1099 33.1584 40.6608 33.478 41.2759 33.789C41.9003 34.1 42.5338 34.4153 43.1766 34.7349C43.8193 35.0545 44.4482 35.3871 45.0634 35.7326C45.6878 36.0781 46.2433 36.4582 46.7299 36.8729C47.2165 37.2789 47.6068 37.7281 47.9006 38.2204C48.1944 38.7042 48.3413 39.2484 48.3413 39.8531C48.3413 40.5355 48.2036 41.1791 47.9281 41.7838C47.6527 42.3798 47.2395 42.9024 46.6886 43.3516C46.1377 43.7922 45.4536 44.142 44.6365 44.4012C43.8193 44.6603 42.869 44.7899 41.7855 44.7899C40.9041 44.7899 40.119 44.6992 39.4304 44.5178C38.7418 44.3364 38.1312 44.0729 37.5987 43.7274C37.0753 43.3818 36.6254 42.9629 36.2489 42.4705C35.8725 41.9695 35.5649 41.3994 35.3262 40.7601L36.9651 40.1252C37.1579 40.6867 37.415 41.1877 37.7364 41.6283C38.0669 42.0688 38.448 42.4446 38.8795 42.7556C39.3111 43.0579 39.7885 43.2911 40.3119 43.4553C40.8444 43.6194 41.4091 43.7015 42.0059 43.7015Z\", fill: \"url(#paint3_linear_4552_11495)\" }),\n React.createElement(\"path\", { d: \"M42.0049 25.7431C42.4548 25.7431 42.9001 25.6877 43.3409 25.5768C43.7816 25.4574 44.1764 25.2867 44.5253 25.0649C44.8742 24.8346 45.1543 24.5574 45.3654 24.2332C45.5766 23.9005 45.6822 23.5166 45.6822 23.0815C45.6822 22.5612 45.5353 22.1005 45.2415 21.6996C44.9568 21.2901 44.5804 20.919 44.1121 20.5863C43.6439 20.2451 43.1067 19.9252 42.5007 19.6266C41.9039 19.328 41.2933 19.0295 40.669 18.7309C40.0446 18.4323 39.4294 18.1209 38.8234 17.7968C38.2266 17.4641 37.6941 17.0972 37.2258 16.6963C36.7575 16.2868 36.3765 15.8347 36.0827 15.3399C35.7981 14.8366 35.6557 14.2608 35.6557 13.6124C35.6557 12.9641 35.7843 12.3627 36.0414 11.8082C36.3076 11.2537 36.6933 10.776 37.1983 10.375C37.7033 9.96555 38.323 9.64565 39.0576 9.41532C39.8013 9.18499 40.6506 9.06982 41.6055 9.06982C42.4686 9.06982 43.2399 9.15513 43.9193 9.32575C44.5988 9.49636 45.1956 9.74802 45.7098 10.0807C46.2239 10.4134 46.6601 10.8229 47.0182 11.3091C47.3762 11.7954 47.6655 12.3584 47.8858 12.9982L46.3157 13.6636C46.1321 13.1432 45.898 12.6698 45.6133 12.2433C45.3287 11.8082 44.989 11.4371 44.5942 11.13C44.1994 10.8229 43.7403 10.5883 43.2169 10.4262C42.7027 10.2556 42.1197 10.1703 41.4678 10.1703C40.8893 10.1703 40.3843 10.2471 39.9528 10.4006C39.5213 10.5456 39.1586 10.7418 38.8648 10.9892C38.5801 11.2281 38.3644 11.5011 38.2174 11.8082C38.0797 12.1068 38.0109 12.4139 38.0109 12.7295C38.0109 13.1731 38.1578 13.5826 38.4516 13.9579C38.7454 14.3248 39.1356 14.6745 39.6223 15.0072C40.1089 15.3314 40.6598 15.647 41.275 15.9541C41.8993 16.2612 42.5329 16.5726 43.1756 16.8882C43.8183 17.2039 44.4473 17.5323 45.0624 17.8735C45.6868 18.2148 46.2423 18.5901 46.7289 18.9996C47.2156 19.4005 47.6058 19.8441 47.8996 20.3304C48.1934 20.8081 48.3403 21.3455 48.3403 21.9427C48.3403 22.6166 48.2026 23.2522 47.9271 23.8493C47.6517 24.4379 47.2385 24.954 46.6876 25.3976C46.1367 25.8327 45.4527 26.1782 44.6355 26.4341C43.8183 26.69 42.868 26.818 41.7846 26.818C40.9031 26.818 40.1181 26.7284 39.4294 26.5493C38.7408 26.3701 38.1302 26.11 37.5977 25.7687C37.0743 25.4275 36.6244 25.0138 36.248 24.5275C35.8715 24.0327 35.5639 23.4697 35.3252 22.8384L36.9641 22.2114C37.157 22.7659 37.414 23.2607 37.7354 23.6958C38.0659 24.1308 38.447 24.5019 38.8785 24.809C39.3101 25.1076 39.7875 25.3379 40.3109 25.5C40.8434 25.6621 41.4081 25.7431 42.0049 25.7431Z\", fill: \"#7BA425\" }))),\n React.createElement(\"rect\", { x: \"100.502\", y: \"24.2451\", width: \"21.588\", height: \"21.588\", rx: \"10.794\", fill: \"url(#paint4_linear_4552_11495)\" }),\n React.createElement(\"path\", { d: \"M111.412 30.1899C111.397 30.1732 111.378 30.16 111.358 30.1509C111.337 30.1419 111.315 30.1372 111.293 30.1372C111.27 30.1372 111.248 30.1419 111.228 30.1509C111.207 30.16 111.189 30.1732 111.173 30.1899L110.575 30.8092C110.559 30.8253 110.546 30.8445 110.538 30.8658C110.529 30.8871 110.524 30.91 110.524 30.9331C110.524 30.9562 110.529 30.9791 110.538 31.0004C110.546 31.0217 110.559 31.0409 110.575 31.057L111.173 31.6763C111.189 31.693 111.207 31.7062 111.228 31.7153C111.248 31.7243 111.27 31.729 111.293 31.729C111.315 31.729 111.337 31.7243 111.358 31.7153C111.378 31.7062 111.397 31.693 111.412 31.6763L112.01 31.057C112.026 31.0409 112.039 31.0217 112.048 31.0004C112.056 30.9791 112.061 30.9562 112.061 30.9331C112.061 30.91 112.056 30.8871 112.048 30.8658C112.039 30.8445 112.026 30.8253 112.01 30.8092L111.412 30.1899Z\", fill: \"white\" }),\n React.createElement(\"path\", { d: \"M111.412 38.4016C111.397 38.3849 111.378 38.3717 111.358 38.3626C111.337 38.3535 111.315 38.3489 111.293 38.3489C111.27 38.3489 111.248 38.3535 111.228 38.3626C111.207 38.3717 111.189 38.3849 111.173 38.4016L110.575 39.0209C110.559 39.037 110.546 39.0564 110.538 39.0778C110.529 39.0991 110.524 39.1221 110.524 39.1453C110.524 39.1686 110.529 39.1915 110.538 39.2129C110.546 39.2343 110.559 39.2536 110.575 39.2698L111.173 39.888C111.189 39.9048 111.207 39.9182 111.228 39.9273C111.248 39.9365 111.27 39.9412 111.293 39.9412C111.315 39.9412 111.337 39.9365 111.358 39.9273C111.378 39.9182 111.397 39.9048 111.412 39.888L112.01 39.2698C112.026 39.2536 112.039 39.2343 112.048 39.2129C112.056 39.1915 112.061 39.1686 112.061 39.1453C112.061 39.1221 112.056 39.0991 112.048 39.0778C112.039 39.0564 112.026 39.037 112.01 39.0209L111.412 38.4016Z\", fill: \"white\" }),\n React.createElement(\"path\", { d: \"M107.373 34.8129C107.278 34.807 107.186 34.7804 107.102 34.7348C107.018 34.6892 106.945 34.6257 106.886 34.5484C106.013 33.4018 105.218 32.1941 104.505 30.9341C105.747 30.9341 106.989 30.9341 108.23 30.9441C108.327 30.9441 108.438 31.0747 108.516 31.1818C109.335 32.3122 110.314 33.668 111.13 34.804\", fill: \"white\" }),\n React.createElement(\"path\", { d: \"M114.359 39.137C114.265 39.1306 114.173 39.1037 114.089 39.0579C114.005 39.0121 113.931 38.9486 113.873 38.8714C113 37.7248 112.204 36.5171 111.491 35.2571C112.733 35.2571 113.975 35.2571 115.217 35.2671C115.314 35.2671 115.425 35.3977 115.503 35.5048C116.322 36.6352 117.301 37.991 118.116 39.127\", fill: \"white\" }),\n React.createElement(\"path\", { d: \"M115.252 34.8129C115.346 34.807 115.439 34.7804 115.523 34.7348C115.607 34.6892 115.68 34.6257 115.739 34.5484C116.612 33.4018 117.407 32.1941 118.12 30.9341C116.878 30.9341 115.636 30.9341 114.395 30.9441C114.298 30.9441 114.187 31.0747 114.109 31.1818C113.289 32.3122 112.31 33.668 111.495 34.804\", fill: \"white\" }),\n React.createElement(\"path\", { d: \"M108.229 39.137C108.324 39.1306 108.416 39.1037 108.5 39.0579C108.584 39.0121 108.658 38.9486 108.716 38.8714C109.589 37.7248 110.385 36.5171 111.098 35.2571C109.856 35.2571 108.614 35.2571 107.372 35.2671C107.275 35.2671 107.164 35.3977 107.087 35.5048C106.267 36.6352 105.288 37.991 104.473 39.127\", fill: \"white\" })),\n React.createElement(\"defs\", null,\n React.createElement(\"linearGradient\", { id: \"paint0_linear_4552_11495\", x1: \"62.8012\", y1: \"26.0186\", x2: \"62.8012\", y2: \"44.2811\", gradientUnits: \"userSpaceOnUse\" },\n React.createElement(\"stop\", { stopColor: \"#0F5121\" }),\n React.createElement(\"stop\", { offset: \"1\", stopColor: \"#0F3A1B\" })),\n React.createElement(\"linearGradient\", { id: \"paint1_linear_4552_11495\", x1: \"62.8012\", y1: \"26.0186\", x2: \"62.8012\", y2: \"44.2811\", gradientUnits: \"userSpaceOnUse\" },\n React.createElement(\"stop\", { stopColor: \"#0F5121\" }),\n React.createElement(\"stop\", { offset: \"1\", stopColor: \"#0F3A1B\" })),\n React.createElement(\"linearGradient\", { id: \"paint2_linear_4552_11495\", x1: \"82.4163\", y1: \"26.0186\", x2: \"82.4163\", y2: \"44.2811\", gradientUnits: \"userSpaceOnUse\" },\n React.createElement(\"stop\", { stopColor: \"#0F5121\" }),\n React.createElement(\"stop\", { offset: \"1\", stopColor: \"#0F3A1B\" })),\n React.createElement(\"linearGradient\", { id: \"paint3_linear_4552_11495\", x1: \"41.8337\", y1: \"26.8179\", x2: \"41.8337\", y2: \"44.7899\", gradientUnits: \"userSpaceOnUse\" },\n React.createElement(\"stop\", { stopColor: \"#0F5121\" }),\n React.createElement(\"stop\", { offset: \"1\", stopColor: \"#0F3A1B\" })),\n React.createElement(\"linearGradient\", { id: \"paint4_linear_4552_11495\", x1: \"111.296\", y1: \"24.2451\", x2: \"111.296\", y2: \"45.8331\", gradientUnits: \"userSpaceOnUse\" },\n React.createElement(\"stop\", { stopColor: \"#0F5121\" }),\n React.createElement(\"stop\", { offset: \"1\", stopColor: \"#0F3A1B\" })),\n React.createElement(\"clipPath\", { id: \"clip0_4552_11495\" },\n React.createElement(\"rect\", { width: \"129.528\", height: \"52.3509\", fill: \"white\", transform: \"translate(0.258789 0.859863)\" })),\n React.createElement(\"clipPath\", { id: \"clip1_4552_11495\" },\n React.createElement(\"rect\", { width: \"104.432\", height: \"52.3509\", fill: \"white\", transform: \"translate(-5.68262 0.959961)\" })),\n React.createElement(\"clipPath\", { id: \"clip2_4552_11495\" },\n React.createElement(\"rect\", { width: \"104.432\", height: \"39.668\", fill: \"white\", transform: \"translate(-8.08008 8.36963)\" })))));\n};\nLogo.defaultProps = {\n height: 54,\n};\nexports.default = Logo;\n","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGQ9Ik0xOS44Nzk1IDE2LjY2MjVDMTkuNzEyOCAxNi42NjI1IDE5LjU1NTMgMTYuNTkzOSAxOS40Mzc4IDE2LjQ2OUMxOS4xOTQ1IDE2LjIxMjEgMTkuMTk0NSAxNS43OTM1IDE5LjQzNzggMTUuNTM1N0wyMS40OTYgMTMuMzYzMkg5Ljg4MDAyQzkuNTM1MDQgMTMuMzYzMiA5LjI1NTA1IDEzLjA2NzYgOS4yNTUwNSAxMi43MDM1QzkuMjU1MDUgMTIuMzM5MyA5LjUzNTA0IDEyLjA0MzggOS44ODAwMiAxMi4wNDM4SDIxLjQ5NTJMMTkuNDM3IDkuODcxMjRDMTkuMzE4NyA5Ljc0NzIyIDE5LjI1MzcgOS41ODA5OCAxOS4yNTM3IDkuNDA1MDZDMTkuMjUzNyA5LjIyOTE1IDE5LjMxODcgOS4wNjI5MSAxOS40MzcgOC45Mzg4OEMxOS41NTUzIDguODE0ODYgMTkuNzEyIDguNzQ1MzggMTkuODc4NiA4Ljc0NTM4QzIwLjA0NTMgOC43NDUzOCAyMC4yMDI4IDguODEzOTggMjAuMzIwMyA4LjkzODg4TDIzLjQ0NTEgMTIuMjM3M0MyMy40NzQzIDEyLjI2ODEgMjMuNTAwMSAxMi4zMDE1IDIzLjUyMzQgMTIuMzM3NkMyMy41MjkzIDEyLjM0NjQgMjMuNTM1OSAxMi4zNTk2IDIzLjU0MTggMTIuMzcxQzIzLjU1NTkgMTIuMzk1NiAyMy41Njg0IDEyLjQyMTEgMjMuNTc5MyAxMi40NDc1QzIzLjU4NTEgMTIuNDYxNiAyMy41OTI2IDEyLjQ4NzEgMjMuNTk2OCAxMi41MDEyQzIzLjYwMzQgMTIuNTE4OCAyMy42MTA5IDEyLjU0NiAyMy42MTU5IDEyLjU3NTFDMjMuNjIzNCAxMi42MTI5IDIzLjYyODQgMTIuNjU3OCAyMy42Mjg0IDEyLjcwMzVDMjMuNjI4NCAxMi43NDc1IDIzLjYyNDMgMTIuNzkxNSAyMy42MTU5IDEyLjgzMzdDMjMuNjEwOSAxMi44NjAxIDIzLjYwMzQgMTIuODg1NiAyMy41OTUxIDEyLjkxMTFDMjMuNTkxOCAxMi45MjUxIDIzLjU4NTEgMTIuOTQ0NSAyMy41Nzc2IDEyLjk2MjFDMjMuNTcwMSAxMi45ODIzIDIzLjU1NjggMTMuMDA4NyAyMy41NDE4IDEzLjAzNTFDMjMuNTQwOSAxMy4wMzc3IDIzLjUzMzQgMTMuMDUzNiAyMy41MjQzIDEzLjA2NzZDMjMuNTA1OSAxMy4wOTU4IDIzLjQ4OTMgMTMuMTE3OCAyMy40NzA5IDEzLjEzODlDMjMuNDcwMSAxMy4xNDE1IDIzLjQ1ODQgMTMuMTU2NSAyMy40NDUxIDEzLjE2OTdMMjAuMzIwMyAxNi40NjgxQzIwLjIwMjggMTYuNTkzOSAyMC4wNDYxIDE2LjY2MjUgMTkuODc5NSAxNi42NjI1WiIgZmlsbD0iIzA1NjgzOSIgc3Ryb2tlPSIjMDU2ODM5IiBzdHJva2Utd2lkdGg9IjAuNzUiLz4KPHBhdGggZD0iTTUuMzc1MjcgMjIuNTk2MUM0LjM2ODY2IDIyLjU0MjUgMy41ODUzNyAyMS42NDE4IDMuNjMxMiAyMC41ODcyTDMuNjMwMzYgNC43ODQ2MkMzLjU4NDUzIDMuNzUzNzUgNC4zNjAzMiAyLjg1OTIxIDUuMzYwMjcgMi44MDY0NEwxNS42MTggMi44MDU1NkMxNi42NDEzIDIuODU4MzMgMTcuNDIzOCAzLjc1OTkgMTcuMzc4OCA0LjgxNDUyTDE3LjM3OTYgOC43NDI3M0MxNy4zNzk2IDkuMTA2ODggMTcuMDk5NiA5LjQwMjQyIDE2Ljc1NDYgOS40MDI0MkMxNi40MDk3IDkuNDAyNDIgMTYuMTI5NyA5LjEwNjg4IDE2LjEyOTcgOC43NDI3M1Y0Ljc4NDYyQzE2LjE0NDcgNC40MzAxNCAxNS45MDA1IDQuMTQwNzYgMTUuNTg2NCA0LjEyNDA1TDUuMzkxMSA0LjEyNDkzQzUuMTA2OTUgNC4xNDA3NiA0Ljg2NTMgNC40MjkyNiA0Ljg3OTQ2IDQuNzU0NzFMNC44ODAzIDIwLjYxNzFDNC44NjUzIDIwLjk3MTYgNS4xMDk0NSAyMS4yNjA5IDUuNDIyNzcgMjEuMjc3NkwxNS42MTggMjEuMjc2OEMxNS45MDIyIDIxLjI2MDkgMTYuMTQ0NyAyMC45NzI0IDE2LjEzMDUgMjAuNjQ3TDE2LjEyOTcgMTYuNjU5QzE2LjEyOTcgMTYuMjk0OCAxNi40MDk3IDE1Ljk5OTMgMTYuNzU0NiAxNS45OTkzQzE3LjA5OTYgMTUuOTk5MyAxNy4zNzk2IDE2LjI5NDggMTcuMzc5NiAxNi42NTlWMjAuNjE3MUMxNy40MjQ2IDIxLjY0ODggMTYuNjQ4IDIyLjU0MjUgMTUuNjQ4OSAyMi41OTUzTDUuMzkxMSAyMi41OTYxQzUuMzg2MSAyMi41OTYxIDUuMzgwMjcgMjIuNTk2MSA1LjM3NTI3IDIyLjU5NjFaIiBmaWxsPSIjMDU2ODM5IiBzdHJva2U9IiMwNTY4MzkiIHN0cm9rZS13aWR0aD0iMC43NSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KPHBhdGggZD0iTTAgMEgyNFYyNEgwVjBaIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjkiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAyOSAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGQ9Ik0xNi4wMjY2IDkuMjcwMTFDMTYuMDI2NiA4LjQ5NTk3IDE1LjUxNjQgNy45NzA4OSAxNS40OTM1IDcuOTQ4MjFMMTIuNTQxMyA0Ljk5NzJDMTIuOTczIDQuODMwMTMgMTMuMjgwOSA0LjQxMzI4IDEzLjI4MDkgMy45MjMxOFYxLjE1MjcxQzEzLjI4MDkgMC41MTY1NjkgMTIuNzY1MSAwIDEyLjEyODkgMEg0LjI3NDI3QzMuNjM4MzcgMCAzLjEyNzIzIDAuNTE2NTY5IDMuMTI3MjMgMS4xNTI3MVYzLjkyMzE4QzMuMTI3MjMgNC40MDgwOCAzLjQyNTY5IDQuODIyMzMgMy44NTA4MSA0Ljk5MjcxTDAuODk1MzA1IDcuOTQ0OUMwLjg3MzU2NSA3Ljk2NTcgMC4zNTc5NDEgOC40NjMxMiAwLjM1Nzk0MSA5LjI0NDgzVjI3LjkyMzFDMC4zNTc5NDEgMjguODEzOSAxLjA4NTc3IDI5LjUzODUgMS45NzY2NSAyOS41Mzg1SDEwLjI1NjRDMTAuMjU2NCAyOS41Mzg1IDEwLjI1NjQgMjcuMDc2OSAxMi4zMDc3IDI2LjI1NjRDMTMuNTM4NSAyNS43NjQxIDE2LjA1MjMgMjUuODQ2MiAxNi4wNTIzIDI1Ljg0NjJMMTYuMDI2NiA5LjI3MDExWk0xMC4yODEgMjMuNzY5MkgxLjc0MjQ3VjEzLjYxNTNIMTAuMjgxVjIzLjc2OTJaIiBmaWxsPSIjMDU2ODM5Ii8+CjxwYXRoIGQ9Ik0yNy41NjU0IDI1LjEzNTlMMjMuNjMyNiAyMS4yMDI5QzIyLjcxMjUgMjAuMjgyOCAyMS4yMjA4IDIwLjI4MjggMjAuMzAwNyAyMS4yMDI5QzE5LjM4MDYgMjIuMTIzIDE5LjM4MDYgMjMuNjE0NiAyMC4zMDA3IDI0LjUzNDdMMjQuMjMzOCAyOC40Njc3QzI1LjE1MzggMjkuMzg3NyAyNi42NDU0IDI5LjM4NzcgMjcuNTY1NSAyOC40Njc3QzI4LjQ4NTUgMjcuNTQ3NSAyOC40ODU1IDI2LjA1NTggMjcuNTY1NCAyNS4xMzU5WiIgZmlsbD0iIzA1NjgzOSIvPgo8cGF0aCBkPSJNMTkuNDA1MiAyNy4wOTA5TDEzLjg0MzIgMjcuMDkwOUMxMi41NDIgMjcuMDkwOSAxMS40ODcyIDI4LjE0NTcgMTEuNDg3MiAyOS40NDY5QzExLjQ4NzIgMzAuNzQ4IDEyLjU0MiAzMS44MDI4IDEzLjg0MzEgMzEuODAyOEgxOS40MDUyQzIwLjcwNjQgMzEuODAyOCAyMS43NjExIDMwLjc0OCAyMS43NjExIDI5LjQ0NjlDMjEuNzYxMSAyOC4xNDU3IDIwLjcwNjQgMjcuMDkwOSAxOS40MDUyIDI3LjA5MDlaIiBmaWxsPSIjMDU2ODM5Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cGF0aCBkPSJNMCAwSDI4LjcxNzlWMzJIMFYwWiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAxNiAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik01LjIxMjQgMC45MDc0NzFDMy4zOTI0IDAuOTA3NDcxIDEuNjgyNCAxLjQwNzQ3IDAuMjEyNDAyIDIuMjU3NDdDMy4yMDI0IDMuOTg3NDcgNS4yMTI0IDcuMjA3NDcgNS4yMTI0IDEwLjkwNzVDNS4yMTI0IDE0LjYwNzUgMy4yMDI0IDE3LjgyNzUgMC4yMTI0MDIgMTkuNTU3NUMxLjY4MjQgMjAuNDA3NSAzLjM5MjQgMjAuOTA3NSA1LjIxMjQgMjAuOTA3NUMxMC43MzI0IDIwLjkwNzUgMTUuMjEyNCAxNi40Mjc1IDE1LjIxMjQgMTAuOTA3NUMxNS4yMTI0IDUuMzg3NDcgMTAuNzMyNCAwLjkwNzQ3MSA1LjIxMjQgMC45MDc0NzFaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjUiIGhlaWdodD0iNTciIHZpZXdCb3g9IjAgMCA2NSA1NyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik00MS45NzY1IDE4LjY5NzdMMzUuMDM2MyAyMi4zOTc4QzM0LjUxNDcgMjIuNjUwNSAzMy45MTI3IDIyLjY5NzIgMzMuMzU2NCAyMi41MjgyQzMyLjgwMDIgMjIuMzU5MiAzMi4zMzI4IDIxLjk4NzUgMzIuMDUyNCAyMS40OTExQzMxLjc3MiAyMC45OTQ3IDMxLjcwMDIgMjAuNDEyMSAzMS44NTIyIDE5Ljg2NTRDMzIuMDA0MSAxOS4zMTg4IDMyLjM2NzkgMTguODUwNSAzMi44Njc0IDE4LjU1ODdDMzIuOTYxOSAxOC41MDc0IDMzLjA2MDYgMTguNDYzNyAzMy4xNjI0IDE4LjQyOEw0MC41NzExIDE1LjcyNjdDNDAuOTcwMyAxNS41ODIgNDEuNDEwOSAxNS41ODk0IDQxLjgwNDcgMTUuNzQ3M0M0Mi4xOTg1IDE1LjkwNTIgNDIuNTE2MiAxNi4yMDIgNDIuNjk0MSAxNi41NzgxQzQyLjg3MiAxNi45NTQxIDQyLjg5NjkgMTcuMzgxNyA0Mi43NjM4IDE3Ljc3NDhDNDIuNjMwNyAxOC4xNjggNDIuMzQ5NSAxOC40OTc3IDQxLjk3NjUgMTguNjk3N1oiIGZpbGw9IiNGMkQyQkMiLz4KICAgIDxwYXRoIGQ9Ik00MS41ODM3IDI0Ljc4ODNMMzQuNjczNCAyNi41NjI4QzM0LjA4NTggMjYuNzAyNSAzMy40NjE3IDI2LjYyNTQgMzIuOTM1NSAyNi4zNDgxQzMyLjQwOTMgMjYuMDcwOCAzMi4wMjMgMjUuNjE1NCAzMS44NTk2IDI1LjA3OThDMzEuNjk2MyAyNC41NDQzIDMxLjc2OSAyMy45NzE1IDMyLjA2MiAyMy40ODQ1QzMyLjM1NTEgMjIuOTk3NiAzMi44NDUyIDIyLjYzNTUgMzMuNDI2OCAyMi40NzYxQzMzLjU0MjQgMjIuNDQ3NCAzMy42NjAyIDIyLjQyNjcgMzMuNzc5MSAyMi40MTRMNDAuOTAxNyAyMS42MzY0QzQxLjMzODkgMjEuNTk0MSA0MS43Nzc2IDIxLjcwMyA0Mi4xMzE2IDIxLjk0MTlDNDIuNDg1NiAyMi4xODA3IDQyLjcyOTIgMjIuNTMyMSA0Mi44MTQ3IDIyLjkyNzFDNDIuOTAwMSAyMy4zMjIgNDIuODIxMiAyMy43MzIgNDIuNTkzNCAyNC4wNzY0QzQyLjM2NTcgMjQuNDIwOCA0Mi4wMDU1IDI0LjY3NDcgNDEuNTgzNyAyNC43ODgzWiIgZmlsbD0iI0YyRDJCQyIvPgogICAgPHBhdGggZD0iTTkuNjI1NzMgNDMuMTEyNEwxMS4xMzU4IDM5LjYzOTRDMTEuMTM1OCAzOS42Mzk0IDEzLjIxMjkgMzkuMDY2OSAxOC43MTI3IDQyLjQ3MjRDMjQuMjEyNSA0NS44Nzc5IDI0LjcyNjggNDcuMTQ0NyAyNC43MjY4IDQ3LjE0NDdDMjQuNzI2OCA0Ny4xNDQ3IDIzLjQ1MTcgNTAuNjQ0NiAyMi43OTcyIDUwLjY0NDZDMjEuMDYzMSA1MC43ODMxIDEyLjU0MTQgNDUuMTcxIDkuNjI1NzMgNDMuMTEyNFoiIGZpbGw9IiM1NzU3NTciLz4KICAgIDxwYXRoIGQ9Ik00MC44NTc3IDI5LjE2NzVMMzYuNDIxNCAyOC42MjM2TDM4LjA1ODQgMjguNDA0MUwzNS4zMzQ1IDI5LjQ3ODdDMzQuOTU3NCAyOS42Mjk0IDM0LjUxNzkgMjkuNjcxMyAzNC4xMDE0IDI5LjU5NjNDMzMuNjg0OCAyOS41MjEzIDMzLjMyMDggMjkuMzM0NyAzMy4wNzk5IDI5LjA3MjhDMzIuODM5IDI4LjgxMDggMzIuNzM4NCAyOC40OTIxIDMyLjc5NzYgMjguMTc4NUMzMi44NTY4IDI3Ljg2NDkgMzMuMDcxNiAyNy41Nzg3IDMzLjQwMDMgMjcuMzc1NEwzNS43NDcxIDI1LjkxNzVDMzUuOTU4NSAyNS43ODU0IDM2LjIxMTYgMjUuNjk0OCAzNi40ODMgMjUuNjU0MUMzNi43NTQ0IDI1LjYxMzUgMzcuMDM1NCAyNS42MjQxIDM3LjI5OTggMjUuNjg0OUgzNy4zNjYzTDQxLjY2MDcgMjYuNjg3NEM0Mi4wNzI0IDI2Ljc4NzIgNDIuNDE4MyAyNi45OTc3IDQyLjYyOTUgMjcuMjc3MkM0Mi44NDA3IDI3LjU1NjcgNDIuOTAxOCAyNy44ODQ2IDQyLjgwMDcgMjguMTk1OEM0Mi42OTk1IDI4LjUwNyA0Mi40NDM1IDI4Ljc3ODcgNDIuMDgzNSAyOC45NTY5QzQxLjcyMzUgMjkuMTM1MSA0MS4yODU5IDI5LjIwNjggNDAuODU3NyAyOS4xNTc2VjI5LjE2NzVaIiBmaWxsPSIjRjJEMkJDIi8+CiAgICA8cGF0aCBkPSJNNDEuNDA2MSAzMi45NTY2TDM0LjIwNzQgMzMuNjIyQzMzLjY0NzQgMzMuNjczOCAzMy4wNzg2IDMzLjU3ODkgMzIuNjI2MyAzMy4zNTgzQzMyLjE3MzkgMzMuMTM3NiAzMS44NzUxIDMyLjgwOTMgMzEuNzk1NCAzMi40NDU1QzMxLjcxNTggMzIuMDgxNyAzMS44NjE5IDMxLjcxMjMgMzIuMjAxNSAzMS40MTg1QzMyLjU0MTIgMzEuMTI0NyAzMy4wNDY3IDMwLjkzMDUgMzMuNjA2NyAzMC44Nzg4SDMzLjc5NzZMNDEuMDYxNSAzMC42MzM4QzQxLjUwNzIgMzAuNjM3IDQxLjkzNTMgMzAuNzQ3MSA0Mi4yNjM2IDMwLjk0MjlDNDIuNTkxOSAzMS4xMzg3IDQyLjc5NzIgMzEuNDA2NSA0Mi44Mzk5IDMxLjY5NDdDNDIuODgyNyAzMS45ODI5IDQyLjc1OTkgMzIuMjcxMiA0Mi40OTUyIDMyLjUwNDFDNDIuMjMwNSAzMi43MzcxIDQxLjg0MjYgMzIuODk4MiA0MS40MDYxIDMyLjk1NjZaIiBmaWxsPSIjRjJEMkJDIi8+CiAgICA8cGF0aCBkPSJNMTguODQ4IDIxLjYyNzRDMTguODQ4IDIxLjYyNzQgMTUuMjk4NiAyNC42NjEyIDE0LjA3ODkgMjcuMjQ1OUMxMi44NTkxIDI5LjgzMDcgMTEuNjM5NCA0Ny4wNzY1IDExLjYzOTQgNDcuMDc2NUwyMC43OTk2IDUyLjY0ODhDMjEuNDA3OCA1MC45MDE3IDIyLjIyNzUgNDkuMjQxIDIzLjIzOSA0Ny43MDU5QzI0Ljc3MTggNDUuNDk4OCAyOS4zMzc3IDQzLjk3OTggMzAuNDc2MSA0MS4yNjkxQzMxLjYxNDUgMzguNTU4NSAyOS4wNDUgMjQuNjQ4NiAyOS4wOTc4IDI0LjI0MTZDMjkuMTUwNyAyMy44MzQ2IDE4Ljg0OCAyMS42Mjc0IDE4Ljg0OCAyMS42Mjc0WiIgZmlsbD0iI0YyRDJCQyIvPgogICAgPHBhdGggZD0iTTE5LjQ1OTkgMjQuNjI5NEMxOS40NTk5IDI0LjYyOTQgMTYuNDg2NyAyNy44MTE1IDE2LjY4MjMgMjkuOTU0NUMxNi43OTQ3IDMxLjIyNzggMTcuMTYyOCAzMi40NzM5IDE3Ljc2OTkgMzMuNjM1NkwyMC43IDI4Ljc1NDhMMTkuNDU5OSAyNC42Mjk0WiIgZmlsbD0iI0REQTk5QSIvPgogICAgPHBhdGggZD0iTTIzLjE1NjEgMzQuNjM2NEMyMy4xNTYxIDM0LjYzNjQgMjIuOTM2NCA0MC42NTE0IDIwLjgwNSA0Mi45MTk5QzE3LjMxMjcgNDUuMjA5IDE4LjA1NzYgNDYuMzkzNyAxNS43MzggNDkuMzMyNEwyMS4wMTE2IDUyLjY0ODZDMjEuNjY5IDUwLjcwMTIgMjIuNTU0OSA0OC44NDk5IDIzLjY0ODMgNDcuMTM4OEMyNS44NjQgNDUuMDkwNSAyOS43MTg2IDQzLjkzOTUgMzEuMjQzOSA0MC4xNEMzMS42NTcgMzkuMTExIDMxLjgzNTQgMzYuNDY1MiAzMS41OTM3IDMzLjYzNTVMMjcuNjM4NiAzNC4wMDk3TDIzLjE1NjEgMzQuNjM2NFoiIGZpbGw9IiNEREE5OUEiLz4KICAgIDxwYXRoIGQ9Ik00MC44MzQ3IDM4LjM3OVY2Ljg3NTA3QzQwLjgzNDcgNS4zNTAzMiAzOS41OTc5IDQuMTE0MjYgMzguMDcyMiA0LjExNDI2TDIxLjQ0OSA0LjExNDI2QzE5LjkyMzMgNC4xMTQyNiAxOC42ODY1IDUuMzUwMzIgMTguNjg2NSA2Ljg3NTA3TDE4LjY4NjUgMzguMzc5QzE4LjY4NjUgMzkuOTAzNyAxOS45MjMzIDQxLjEzOTggMjEuNDQ5IDQxLjEzOThIMzguMDcyMkMzOS41OTc5IDQxLjEzOTggNDAuODM0NyAzOS45MDM3IDQwLjgzNDcgMzguMzc5WiIgZmlsbD0iIzBBMTIyOSIvPgogICAgPHBhdGggZD0iTTM4LjgyMSAzNi42MTg4VjcuNjM0NzJDMzguODIxIDYuNzk1OCAzOC4xMjI5IDYuMTE1NzIgMzcuMjYxOCA2LjExNTcyTDIyLjI1OTEgNi4xMTU3MkMyMS4zOTc5IDYuMTE1NzIgMjAuNjk5OCA2Ljc5NTggMjAuNjk5OCA3LjYzNDcyTDIwLjY5OTggMzYuNjE4OEMyMC42OTk4IDM3LjQ1NzcgMjEuMzk3OSAzOC4xMzc4IDIyLjI1OTEgMzguMTM3OEgzNy4yNjE4QzM4LjEyMjkgMzguMTM3OCAzOC44MjEgMzcuNDU3NyAzOC44MjEgMzYuNjE4OFoiIGZpbGw9IndoaXRlIi8+CiAgICA8cGF0aCBkPSJNNi42MDU3MSA0Ni4yMjg1QzYuNjA1NzEgNDYuMjI4NSAxMC42ODc3IDQwLjQ4MyAxMS4xMzYgMzkuNjM5NkMxMS40ODk1IDQwLjczMzQgMTQuMDg0NCA0NC42MTIxIDE3LjExNDYgNDYuMDYxNkMyMC4xNDQ5IDQ3LjUxMTIgMjMuNjkyNCA0OC4xODE1IDI0LjcyNjkgNDcuMTQ0OEwyMS43NDQxIDU1LjY1MDdDMjEuNzQ0MSA1NS42NTA3IDExLjczMDkgNTUuNzAzNCA2LjYwNTcxIDQ2LjIyODVaIiBmaWxsPSIjN0I3QjdCIi8+CiAgICA8cGF0aCBkPSJNMjAuNjk5OSA1MS4xMDE5QzIwLjY3NjcgNTEuNjM0MSAyMC40OTUxIDUyLjEzMyAyMC4xOTQzIDUyLjQ5MDhDMTkuOTE4MyA1Mi43ODA3IDE5LjY5MzEgNTIuNjY0NyAxOS42OTMxIDUyLjIwMDhDMTkuNzE3OCA1MS42NzA0IDE5Ljg5NzMgNTEuMTcyOSAyMC4xOTQzIDUwLjgxMTlDMjAuNDc0NyA1MC41MDc1IDIwLjY5OTkgNTAuNjM4IDIwLjY5OTkgNTEuMTAxOVoiIGZpbGw9IiNFOEU4RTgiLz4KICAgIDxwYXRoIGQ9Ik0zNS43NDM1IDIyLjk0NTVDMzUuNzQzNSAyMi44NDM1IDM1LjU4MSAyMi43NDE1IDM1LjQ3NDEgMjIuNzE2QzM0LjE5NjkgMjIuNDE1NiAzMi45MTQgMjIuMTMyMiAzMS42MjU0IDIxLjg2NThDMzEuNTY1MiAyMS44NjQgMzEuNTA1NSAyMS44NzY1IDMxLjQ1MTEgMjEuOTAyNEMzMS4zOTY4IDIxLjkyODMgMzEuMzQ5NSAyMS45NjY4IDMxLjMxMzMgMjIuMDE0NkMzMS4xODkzIDIyLjIxNDQgMzEuMDgyNCAyMi40Mzk3IDMwLjk3NTQgMjIuNjM1MkMzMC45Mjg0IDIyLjcyODcgMzAuODg1NiAyMi44MjIzIDMwLjg0MjkgMjIuOTE1OEMzMC43MzYgMjMuMTUzOCAzMC42Mzc2IDIzLjEwNzEgMzAuMzU1NCAyMy4xMTEzQzI5LjA0MjYgMjMuMTA3MSAyNS42OTg1IDE5Ljc4NzIgMjUuNzQ1NSAxOC41MTJDMjUuNzQ1NSAxOC4yMzU3IDI1LjcwMjggMTguMTM3OSAyNS45NDIyIDE4LjAzMTdDMjYuMDc0OCAxNy45NzIyIDI2LjIxMTYgMTcuOTA4NCAyNi4zMzk5IDE3Ljg0MDRDMjYuNTExIDE3Ljc1NTQgMjYuNjgyIDE3LjY2MTggMjYuODQ4OCAxNy41NTk4QzI2Ljg5NTYgMTcuNTIzNSAyNi45MzM0IDE3LjQ3NzEgMjYuOTU5MyAxNy40MjRDMjYuOTg1MyAxNy4zNzEgMjYuOTk4NyAxNy4zMTI4IDI2Ljk5ODUgMTcuMjUzOEMyNi43MTM0IDE1Ljk3ODYgMjYuNDI4MyAxNC43MDMzIDI2LjE0MzIgMTMuNDI4MUMyNi4xMjg3IDEzLjM2NzkgMjYuMDk5OCAxMy4zMTIxIDI2LjA1ODggMTMuMjY1NEMyNi4wMTc4IDEzLjIxODggMjUuOTY2MSAxMy4xODI3IDI1LjkwOCAxMy4xNjAzQzI1LjcyODkgMTMuMTI4MyAyNS41NDY4IDEzLjExNTQgMjUuMzY0OSAxMy4xMjIxSDI1LjI3OTRDMjMuOTk2NSAxMy4xOTQzIDIyLjcxMzYgMTQuMTk3NSAyMi43MTM2IDE2Ljc1MjJDMjIuNzEzNiAyMC4zMzU2IDI3Ljc3MjUgMjYuMTI5MyAzMi4xNTE0IDI2LjEyOTNDMzQuNjI3NCAyNi4xMjkzIDM1LjY1MzcgMjQuOTM0OSAzNS43OTA2IDIzLjcxNDlDMzUuODE0MiAyMy40NTc2IDM1Ljc5ODMgMjMuMTk4MSAzNS43NDM1IDIyLjk0NTVaIiBmaWxsPSIjM0EzQTM5Ii8+CiAgICA8cGF0aCBkPSJNMzAuMzA0MSAyOC44MzlMMjguODM1NyAyOS4zMjM3TDI3LjM1OTIgMjkuNzU2NEMyNi4zNjk0IDMwLjA0NjQgMjUuMzc1NiAzMC4zMTQ3IDI0LjM2NTYgMzAuNTY1N0wyNS41MTc2IDMwLjA1OTRDMjQuNDUwNyAzMS4yODg0IDIzLjgxMzkgMzIuODMzNCAyMy4zMzEyIDM0LjY2ODNDMjIuODUzNiAzNi42NzU4IDIyLjQ4MTIgMzguNzEgMjIuMjE1NyA0MC43NjE3QzIyLjAzODIgNDEuOTY1NyAyMS40MTk2IDQzLjA0NTIgMjAuNDk2MSA0My43NjI2QzE5LjU3MjYgNDQuNDgwMSAxOC40MTk4IDQ0Ljc3NjcgMTcuMjkxMiA0NC41ODc0QzE2LjE2MjcgNDQuMzk4IDE1LjE1MDkgNDMuNzM4MSAxNC40Nzg0IDQyLjc1MjhDMTMuODA2IDQxLjc2NzUgMTMuNTI3OSA0MC41Mzc2IDEzLjcwNTQgMzkuMzMzNkMxMy43NzA5IDM4LjkyMTYgMTMuODg1NCAzOC41MjAyIDE0LjA0NjEgMzguMTM5MUMxNC45NTQ1IDM1LjkxMTYgMTUuOTg2NyAzMy43NDM5IDE3LjEzNzEgMzEuNjQ3NkMxNy43ODg5IDMwLjQ4OTQgMTguNTQ1NyAyOS40MDIzIDE5LjM5NjUgMjguNDAxOUMyMC4yODc5IDI3LjM0MiAyMS4zMjI5IDI2LjQzMDMgMjIuNDY3MiAyNS42OTcxTDIyLjk4MjMgMjUuMzcyNUMyMy4xNzU1IDI1LjI1MjIgMjMuMzk1NSAyNS4xODk0IDIzLjYxOTIgMjUuMTkwN0MyNC41NzY1IDI1LjEzNDUgMjUuNTQxOSAyNS4wNTY2IDI2LjUwNzMgMjQuOTYxNEwyNy45NTk1IDI0LjgzMTVMMjkuMzg3MyAyNC42NDk4SDI5LjQ2ODVDMjkuOTc2NyAyNC41NzQ4IDMwLjQ5MjggMjQuNzA4MiAzMC45MTI1IDI1LjAyM0MzMS4zMzIzIDI1LjMzNzkgMzEuNjI0NiAyNS44MTA3IDMxLjczMDYgMjYuMzQ2NEMzMS44MzY2IDI2Ljg4MiAzMS43NDgzIDI3LjQ0MDYgMzEuNDgzNiAyNy45MDk1QzMxLjIxODkgMjguMzc4NSAzMC43OTc0IDI4LjcyMyAzMC4zMDQxIDI4Ljg3MzZWMjguODM5WiIgZmlsbD0iI0YyRDJCQyIvPgogICAgPHBhdGggZD0iTTI5Ljc2MDUgMTUuMTIxOEMzMC44Mjg1IDE1LjEyMTggMzEuODUyOCAxNS41NDM1IDMyLjYwOCAxNi4yOTQyQzMzLjM2MzIgMTcuMDQ0OSAzMy43ODc0IDE4LjA2MyAzMy43ODc0IDE5LjEyNDYiIGZpbGw9IiM3QjdCN0IiLz4KICAgIDxwYXRoIGQ9Ik0yOS43NjA1IDE1LjEyMThDMzAuODI4NSAxNS4xMjE4IDMxLjg1MjggMTUuNTQzNSAzMi42MDggMTYuMjk0MkMzMy4zNjMyIDE3LjA0NDkgMzMuNzg3NCAxOC4wNjMgMzMuNzg3NCAxOS4xMjQ2IiBzdHJva2U9IiM3QjdCN0IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+CiAgICA8cGF0aCBkPSJNMjkuNzYwNSAxMy4xMjA0QzMwLjU1MzUgMTMuMTE5OCAzMS4zMzg5IDEzLjI3NDYgMzIuMDcxNyAxMy41NzYxQzMyLjgwNDUgMTMuODc3NiAzMy40NzA1IDE0LjMxOTcgMzQuMDMxNCAxNC44NzczQzM0LjU5MjQgMTUuNDM0OSAzNS4wMzc0IDE2LjA5NyAzNS4zNDEgMTYuODI1OEMzNS42NDQ2IDE3LjU1NDUgMzUuODAwOSAxOC4zMzU2IDM1LjgwMDkgMTkuMTI0NSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz4KICAgIDxwYXRoIGQ9Ik0zMi4yMzEyIDE4LjYyNDRIMzAuMjYwNVYxNi42NzUxQzMwLjc0NjYgMTYuNzc1IDMxLjE5NTUgMTcuMDEzMSAzMS41NDg2IDE3LjM2NDFDMzEuODk5NiAxNy43MTMgMzIuMTM0NiAxOC4xNTIxIDMyLjIzMTIgMTguNjI0NFoiIGZpbGw9IiNDNUM1QzUiIHN0cm9rZT0iI0M1QzVDNSIvPgo8L3N2Zz4=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjUiIGhlaWdodD0iNTciIHZpZXdCb3g9IjAgMCA2NSA1NyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjEuNTI0OSA1LjQ0NDc4QzE3LjE4OTUgNS43NTQ3MSAxLjMyNTA4IDMzLjY5NTMgMS4zMjUwOCAzMy42OTUzQy0wLjg3MDY2MyAzNy4zNjYgNS4wOTY5OCAzNS4wMjg4IDcuMTM1NjkgMzguNzA4N0MxMy4wNTM1IDQ4LjE1NzMgMjIuNjEyNiAzOC43MDM1IDI4LjQ2OTggMzguNzA4N0MzNC40NjE5IDM4LjY5NzIgMzQuMjY3NyA0My4zMTc5IDQyLjMyMDQgNDAuMzQxN0M0Ny4zMjIgMzguMTYgNTguMTgyMSAzNy4zNTg1IDU0LjEzMjUgMzAuMzY3NEM1NC4xMzI1IDMwLjM2NzQgNDQuMzE4NyAxNS4yOTggNDEuOTI4OSAxNS4yOThDMzkuNTM5MiAxNS4yOTggMzUuNjU4NiAyMi40NjA2IDM1LjY1ODYgMjIuNDYwNkMzNS42NTg2IDIyLjQ2MDYgMjUuODYwMyA1LjEzNDg2IDIxLjUyNDkgNS40NDQ3OFoiIGZpbGw9IiMwNTY4MzkiLz4KICAgICAgICA8cGF0aCBkPSJNNTQuMzY0MiAzMC4zNDI1QzU4Ljc2MDIgMzYuODMxOSA0Ni40NjI1IDM4Ljk1MjYgNDYuMTk0NCAzOS4wMTY2QzQ1LjkyNjIgMzkuMDgwNyA0NS4zODQ1IDM4LjMzNzQgNDUuMDE4OCAzNy43NzU4QzQ0Ljg3MTEgMzcuNTQ5IDQxLjk5NiAzNS40NzYxIDQwLjE5NDYgMzIuNTI2N0MzOC43OTY2IDMwLjIzNzYgMzkuOTYzMSAyOC44OTI3IDM4LjgxMDYgMjcuMDAzMUMzNy43NzA5IDI1LjI5ODQgMzUuNjU4OSAyMi40NjA1IDM1LjY1ODkgMjIuNDYwNUMzNS42NTg5IDIyLjQ2MDUgMzkuNDk5NCAxNS4yMDg3IDQxLjg4OTIgMTUuMjA4N0M0Mi4yNTEyIDE1LjIwODcgNDIuODA2MSAxNS4xNjUzIDQzLjQ0ODkgMTUuNzUyQzQ3LjA0OTQgMTkuMDM5IDU0LjM2NDIgMzAuMzQyNSA1NC4zNjQyIDMwLjM0MjVaIiBmaWxsPSIjN0JBNDI1Ii8+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMS45MzkxIDUuMjM5NUMxOC43Njk0IDUuMjM5NSAxNC4yMjM0IDEzLjExOTggMTQuMjIzNCAxMy4xMTk4QzE2LjYzNDMgMTQuODg2NyAxNS44NzA5IDE3LjU2NSAxOS4wMjcgMTYuODk1MkMyMC42NTA4IDE2LjU1MDUgMjEuNTM5MiAxMi40MDIgMjMuMTY3MyAxMi43MDRDMjQuMTg5MSAxMi44OTM1IDI0LjEzMzIgMTQuNzcyNiAyNS4xMjA1IDE1LjE4NjRDMjYuODY2OSAxNS45MTg1IDI5LjAyODEgMTIuMTgxMSAyOS4wMjgxIDEyLjE4MTFDMjkuMDI4MSAxMi4xODExIDI0LjgzNiA1LjIzOTUgMjEuOTM5MSA1LjIzOTVaIiBmaWxsPSIjRTVGMEVCIi8+CiAgICAgICAgPHBhdGggZD0iTTEwLjc5NzYgNDcuNDg5OVYzNC4wNTAyTDI3LjkzNTQgMjYuMzU2NFY1My4xMzg0TDEwLjc5NzYgNDcuNDg5OVoiIGZpbGw9IiM4QjhCOEIiLz4KICAgICAgICA8cGF0aCBkPSJNMjcuOTM1MSA1My4xMzgyVjI2LjM1NjJMNjQuODQ3MSAzMy4wMjgxVjQ1LjE1MDRMMjcuOTM1MSA1My4xMzgyWiIgZmlsbD0iIzhCOEI4QiIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMC43OTc0IDQ2Ljc5NzdWMzMuNzk4MkwyNy45MzUxIDI2LjM1NjRWNTIuMjYxM0wxMC43OTc0IDQ2Ljc5NzdaIiBmaWxsPSIjOEI4QjhCIi8+CiAgICAgICAgPHBhdGggZD0iTTI3LjkzNDggNTIuMjYxMVYyNi4zNTYyTDY0Ljg0NjggMzIuODA5NlY0NC41MzQ5TDI3LjkzNDggNTIuMjYxMVoiIGZpbGw9IndoaXRlIi8+CiAgICAgICAgPHBhdGggZD0iTTIwLjkyMjEgNDAuNzc2MVY0NC4wODk5TDI4LjAxOTkgNDguNjIwMkw2NC4yMzg0IDQxLjg2NjlWMzguNTExMUw2MS40ODA0IDM5LjAxNDRINTcuNjI3NEM1Ni4yNDg0IDM5LjMwOCA1My40NzQzIDM5LjcxOTEgNTMuNDA5NCAzOS4wMTQ0QzUzLjM0NDUgMzguMzA5NyA1Mi41NzEyIDM2LjUzOTYgNTIuMTkyNiAzNS43NDI3TDUxLjA5NzUgMzguNTExMUw0NS45NDY2IDQxLjg2NjlDNDQuNTY3NyA0Mi4xNzQ1IDQxLjY4OCA0Mi42MDUyIDQxLjIwMTMgNDEuODY2OUM0MC43MTQ2IDQxLjEyODYgMzguNjQ2MiAzOS4wMTQ1IDM3LjY3MjggMzguMDQ5N0wzNi40OTY2IDQwLjc3NjFMMzIuNzY1MiA0NC4wODk5TDI4LjkxMjIgNDEuODY2OUwyNC40OTEzIDM3LjA0MjlMMjEuNjExNyAzOC41MTExTDIwLjkyMjEgNDAuNzc2MVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcikiLz4KICAgICAgICA8cGF0aCBkPSJNMTcuMDgyOCA0MS40Mjc3VjM0LjIwNjlMMjcuODk5OSAyOS4zNzc0TDY0Ljg0MjIgMzUuNTk0NFY0MS40MDU1TDI3Ljg5OTkgNDguMjI1OEwxNy4wODI4IDQxLjQyNzdaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXIpIi8+CiAgICAgICAgPHJlY3QgeD0iNDUuODg3OSIgeT0iMzIuMjk5NiIgd2lkdGg9IjAuNTAzODI2IiBoZWlnaHQ9IjEyLjY3NjEiIGZpbGw9IiM0NDQ0NDQiLz4KICAgICAgICA8cmVjdCB4PSI1OC4zNzQiIHk9IjM0LjM2MTMiIHdpZHRoPSIwLjUwMzgyNiIgaGVpZ2h0PSI4LjI1NDQzIiBmaWxsPSIjNDQ0NDQ0Ii8+CiAgICAgICAgPHJlY3QgeD0iNjQuMDI1NCIgeT0iMzUuMTgxOSIgd2lkdGg9IjAuNTAzODI2IiBoZWlnaHQ9IjYuNDE5OTUiIGZpbGw9IiM0NDQ0NDQiLz4KICAgIDwvZz4KICAgIDxkZWZzPgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhciIgeDE9IjQyLjU4MDMiIHkxPSIzNS43NDI3IiB4Mj0iNDIuNTgwMyIgeTI9IjQ4LjYyMDIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0ZGRkVGRCIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMC44NjQ1ODMiIHN0b3AtY29sb3I9IiM3MTcxNzEiLz4KICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhciIgeDE9IjQwLjkxMjciIHkxPSIyOS4zNzc0IiB4Mj0iNDAuOTEyNyIgeTI9IjUwLjgxMTgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0U4RThFOCIvPgogICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMC40Ii8+CiAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KICAgICAgICAgICAgPHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjU2IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC44NDcxNjggMC45MjM1ODQpIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgIDwvZGVmcz4KPC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIyIiBoZWlnaHQ9IjEwNiIgdmlld0JveD0iMCAwIDEyMiAxMDYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDApIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM5Ljc0NTcgOC41NTc4M0MzMS41NDkxIDkuMTQ0NDggMS41NTU0IDYyLjAzMjEgMS41NTU0IDYyLjAzMjFDLTIuNTk1OTIgNjguOTgwMiA4LjY4NjY2IDY0LjU1NjEgMTIuNTQxMSA3MS41MjE3QzIzLjcyOTQgODkuNDA2NSA0MS44MDIxIDcxLjUxMTggNTIuODc1OCA3MS41MjE3QzY0LjIwNDcgNzEuNDk5OCA2My44Mzc1IDgwLjI0NjIgNzkuMDYyMiA3NC42MTI3Qzg4LjUxODMgNzAuNDgzMSAxMDkuMDUxIDY4Ljk2NTkgMTAxLjM5NCA1NS43MzI3QzEwMS4zOTQgNTUuNzMyNyA4Mi44NDAyIDI3LjIwODYgNzguMzIyMSAyNy4yMDg2QzczLjgwMzkgMjcuMjA4NiA2Ni40NjcyIDQwLjc2NjQgNjYuNDY3MiA0MC43NjY0QzY2LjQ2NzIgNDAuNzY2NCA0Ny45NDIyIDcuOTcxMTggMzkuNzQ1NyA4LjU1NzgzWiIgZmlsbD0iIzA1NjgzOSIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDEuODMzIDU1LjY4NTdDMTEwLjE0NCA2Ny45NjkyIDg2Ljg5MzIgNzEuOTgzNSA4Ni4zODYzIDcyLjEwNDdDODUuODc5NCA3Mi4yMjU5IDg0Ljg1NTIgNzAuODE5IDg0LjE2MzcgNjkuNzU1OUM4My44ODQ1IDY5LjMyNjUgNzguNDQ4OCA2NS40MDMgNzUuMDQzIDU5LjgyMDFDNzIuMzk5OCA1NS40ODczIDc0LjYwNTQgNTIuOTQxNSA3Mi40MjY1IDQ5LjM2NDhDNzAuNDYwNyA0Ni4xMzggNjYuNDY3OCA0MC43NjYyIDY2LjQ2NzggNDAuNzY2MkM2Ni40Njc4IDQwLjc2NjIgNzMuNzI4NyAyNy4wMzk3IDc4LjI0NjggMjcuMDM5N0M3OC45MzEyIDI3LjAzOTcgNzkuOTgwMyAyNi45NTc0IDgxLjE5NTYgMjguMDY4MUM4OC4wMDI5IDM0LjI4OTkgMTAxLjgzMyA1NS42ODU3IDEwMS44MzMgNTUuNjg1N1oiIGZpbGw9IiM3QkE0MjUiLz4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQwLjUyODkgOC4xNjk0M0MzNC41MzYzIDguMTY5NDMgMjUuOTQxNCAyMy4wODU3IDI1Ljk0MTQgMjMuMDg1N0MzMC40OTk1IDI2LjQzMDIgMjkuMDU2MyAzMS40OTk4IDM1LjAyMzIgMzAuMjMxOUMzOC4wOTMyIDI5LjU3OTYgMzkuNzcyOCAyMS43MjcgNDIuODUxIDIyLjI5ODdDNDQuNzgyOCAyMi42NTc0IDQ0LjY3NzIgMjYuMjE0MiA0Ni41NDM4IDI2Ljk5NzZDNDkuODQ1NiAyOC4zODMyIDUzLjkzMTYgMjEuMzA4OCA1My45MzE2IDIxLjMwODhDNTMuOTMxNiAyMS4zMDg4IDQ2LjAwNiA4LjE2OTQzIDQwLjUyODkgOC4xNjk0M1oiIGZpbGw9IndoaXRlIi8+CiAgICAgICAgPHBhdGggZD0iTTE5LjQ2NDQgODguMTQzMlY2Mi43MDM4TDUxLjg2NTUgNDguMTQwNlY5OC44MzUxTDE5LjQ2NDQgODguMTQzMloiIGZpbGw9IiM4QjhCOEIiLz4KICAgICAgICA8cGF0aCBkPSJNNTEuODY0NyA5OC44MzQ2VjQ4LjE0MDFMMTIxLjY1MiA2MC43NjlWODMuNzE1TDUxLjg2NDcgOTguODM0NloiIGZpbGw9IiM4QjhCOEIiLz4KICAgICAgICA8cGF0aCBkPSJNMTkuNDYzOSA4Ni44MzMxVjYyLjIyNjhMNTEuODY0OSA0OC4xNDA2Vjk3LjE3NDhMMTkuNDYzOSA4Ni44MzMxWiIgZmlsbD0iIzhCOEI4QiIvPgogICAgICAgIDxwYXRoIGQ9Ik01MS44NjQzIDk3LjE3NDZWNDguMTQwNEwxMjEuNjUxIDYwLjM1NTdWODIuNTUwMUw1MS44NjQzIDk3LjE3NDZaIiBmaWxsPSJ3aGl0ZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0zOC42MDYgNzUuNDM1MVY4MS43MDc2TDUyLjAyNTIgOTAuMjgyOEwxMjAuNTAxIDc3LjQ5OThWNzEuMTQ3NkwxMTUuMjg3IDcyLjEwMDRIMTA4LjAwMkMxMDUuMzk1IDcyLjY1NjIgMTAwLjE1IDczLjQzNDMgMTAwLjAyNyA3Mi4xMDA0Qzk5LjkwNDUgNzAuNzY2NSA5OC40NDI0IDY3LjQxNiA5Ny43MjY3IDY1LjkwNzVMOTUuNjU2NCA3MS4xNDc2TDg1LjkxOCA3Ny40OTk4QzgzLjMxMDggNzguMDgyIDc3Ljg2NjUgNzguODk3MiA3Ni45NDYzIDc3LjQ5OThDNzYuMDI2MiA3Ni4xMDIzIDcyLjExNTUgNzIuMTAwNiA3MC4yNzUyIDcwLjI3NDRMNjguMDUxNCA3NS40MzUxTDYwLjk5NjggODEuNzA3Nkw1My43MTIyIDc3LjQ5OThMNDUuMzU0IDY4LjM2ODZMMzkuOTA5NyA3MS4xNDc2TDM4LjYwNiA3NS40MzUxWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyKSIvPgogICAgICAgIDxwYXRoIGQ9Ik0zMS4zNDcyIDc2LjY2ODZWNjMuMDAwNUw1MS43OTgzIDUzLjg1OTFMMTIxLjY0MiA2NS42MjY5Vjc2LjYyNjZMNTEuNzk4MyA4OS41MzY0TDMxLjM0NzIgNzYuNjY4NloiIGZpbGw9InVybCgjcGFpbnQxX2xpbmVhcikiLz4KICAgICAgICA8cmVjdCB4PSI4NS44MDcxIiB5PSI1OS4zOTA0IiB3aWR0aD0iMC45NTI1NDUiIGhlaWdodD0iMjMuOTk0IiBmaWxsPSIjNDQ0NDQ0Ii8+CiAgICAgICAgPHJlY3QgeD0iMTA5LjQxNCIgeT0iNjMuMjkzMiIgd2lkdGg9IjAuOTUyNTQ1IiBoZWlnaHQ9IjE1LjYyNDUiIGZpbGw9IiM0NDQ0NDQiLz4KICAgICAgICA8cmVjdCB4PSIxMjAuMDk4IiB5PSI2NC44NDU5IiB3aWR0aD0iMC45NTI1NDUiIGhlaWdodD0iMTIuMTUyIiBmaWxsPSIjNDQ0NDQ0Ii8+CiAgICA8L2c+CiAgICA8ZGVmcz4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXIiIHgxPSI3OS41NTM0IiB5MT0iNjUuOTA3NSIgeDI9Ijc5LjU1MzQiIHkyPSI5MC4yODI4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNGRkZFRkQiIHN0b3Atb3BhY2l0eT0iMCIvPgogICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAuODY0NTgzIiBzdG9wLWNvbG9yPSIjNzE3MTcxIi8+CiAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXIiIHgxPSI3Ni40MDA2IiB5MT0iNTMuODU5MSIgeDI9Ijc2LjQwMDYiIHkyPSI5NC40MzEzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiNFOEU4RTgiLz4KICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAuNCIvPgogICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgPGNsaXBQYXRoIGlkPSJjbGlwMCI+CiAgICAgICAgICAgIDxyZWN0IHdpZHRoPSIxMjEiIGhlaWdodD0iMTA2IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC42NTE4NTUpIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgIDwvZGVmcz4KPC9zdmc+\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzMiIGhlaWdodD0iMzMiIHZpZXdCb3g9IjAgMCAzMyAzMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMTQ2XzMxOTApIj4KICAgICAgICA8cGF0aCBkPSJNMTYuOTUzMSAyMy42NTE5QzE2LjA5MjMgMjMuNjUxOSAxNS4zOTIxIDI0LjM1MjEgMTUuMzkyMSAyNS4yMTI5QzE1LjM5MjEgMjYuMDczNiAxNi4wOTIzIDI2Ljc3MzkgMTYuOTUzMSAyNi43NzM5QzE3LjgxMzUgMjYuNzczOSAxOC41MTM4IDI2LjA3MzcgMTguNTE0MSAyNS4yMTI5QzE4LjUxNDEgMjQuMzUyMSAxNy44MTQgMjMuNjUxOSAxNi45NTMxIDIzLjY1MTlaIiBmaWxsPSJibGFjayIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMC44OTg4IDguNjQxMjlMMjAuMTQ2OCA2LjgyNTY4SDE1LjUzNzlWOC45NTI4NEgxNy41NzkxTDE1LjE0MDQgMTEuMzkxNUwxNS44OTI0IDEzLjIwNzJIMjAuNTAxNFYxMS4wODAxSDE4LjQ2MDJMMjAuODk4OCA4LjY0MTI5WiIgZmlsbD0iYmxhY2siLz4KICAgICAgICA8cGF0aCBkPSJNMjYuOTI2MiA3LjIyMjgzTDI2LjE3NDEgNS40MDcyM0gyMS41NjUyVjcuNTM0MzlIMjMuNjA2NEwyMS4xNjc3IDkuOTczMTZMMjEuOTE5NyAxMS43ODg4SDI2LjUyODZWOS42NjE1NUgyNC40ODc0TDI2LjkyNjIgNy4yMjI4M1oiIGZpbGw9ImJsYWNrIi8+CiAgICAgICAgPHBhdGggZD0iTTMyLjk1MyA1LjgwNDg3TDMyLjIwMSAzLjk4OTI2SDI3LjU5MjFWNi4xMTY0MkgyOS42MzMyTDI3LjE5NDYgOC41NTUxOUwyNy45NDY2IDEwLjM3MDhIMzIuNTU1NVY4LjI0MzY0SDMwLjUxNDRMMzIuOTUzIDUuODA0ODdaIiBmaWxsPSJibGFjayIvPgogICAgICAgIDxwYXRoIGQ9Ik0zMi43MTg4IDEzLjUwNTZIMzAuMzM3QzMwLjUxNjkgMTQuMzg4NiAzMC42MTE2IDE1LjMwMjEgMzAuNjExNiAxNi4yMzczQzMwLjYxMTYgMjMuNzY4NiAyNC40ODQ0IDI5Ljg5NTkgMTYuOTUzMSAyOS44OTU5QzkuNDIxNzUgMjkuODk1OSAzLjI5NDU2IDIzLjc2ODYgMy4yOTQ1NiAxNi4yMzczQzMuMjk0NTYgOC43MDU5OSA5LjQyMTgxIDIuNTc4NzQgMTYuOTUzMSAyLjU3ODc0QzE4LjU0ODEgMi41Nzg3NCAyMC4wNzk3IDIuODU0NDkgMjEuNTAzOCAzLjM1OTI0SDIzLjk3NzVWMS44NjQyNEMyMS44NTU4IDAuODIzMDU1IDE5LjQ3MTcgMC4yMzczMDUgMTYuOTUzMSAwLjIzNzMwNUM4LjEzMDYyIDAuMjM3MzA1IDAuOTUzMTI1IDcuNDE0OTMgMC45NTMxMjUgMTYuMjM3M0MwLjk1MzEyNSAyNS4wNTk3IDguMTMwNjIgMzIuMjM3MyAxNi45NTMxIDMyLjIzNzNDMjUuNzc1NiAzMi4yMzczIDMyLjk1MzEgMjUuMDU5NyAzMi45NTMxIDE2LjIzNzNDMzIuOTUzMSAxNS4zMDYxIDMyLjg3MjMgMTQuMzkzNiAzMi43MTg4IDEzLjUwNTZaIiBmaWxsPSJibGFjayIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMC4wODQzIDE2LjIzNzRDOS45MzMxNSAxNi4yNDAzIDkuNzgxNDkgMTYuMjg2NiA5LjY0ODYxIDE2LjM4MDFDOS4yOTQyNSAxNi42MjkzIDkuMjA4NzEgMTcuMTE4NyA5LjQ1Nzk4IDE3LjQ3MzFDMTAuMTExOSAxOC40MDY0IDExLjE5NTggMTguOTY4IDEyLjMzNDggMTguOTY4QzEzLjM1OTcgMTguOTY4IDE0LjM1MjUgMTguNTA1MyAxNS4wMTIzIDE3LjczMTRDMTUuMjk3OSAxNy40MDg5IDE1LjI3MDMgMTYuOTE1MyAxNC45NDk2IDE2LjYyNjlDMTQuNjI3NiAxNi4zMzczIDE0LjEzMDcgMTYuMzYzNCAxMy44NDExIDE2LjY4NTVMMTMuODM3IDE2LjY5TDEzLjgyMjMgMTYuNzA4OEwxMy44MiAxNi43MTE1TDEzLjgwNzcgMTYuNzI2NkMxMy43NjA1IDE2Ljc4MSAxMy43MDg5IDE2LjgzMjYgMTMuNjU2OCAxNi44ODA3TDEzLjY0MzEgMTYuODk1N0wxMy42MzY3IDE2LjkwMTdDMTMuNTgwMSAxNi45NTMzIDEzLjUyNDcgMTYuOTk3NCAxMy40NzQ0IDE3LjAzNDNMMTMuNDczNSAxNy4wMzMzQzEyLjYwNzEgMTcuNjU4MSAxMS4zNzE3IDE3LjQ2ODUgMTAuNzQxNiAxNi41NzAzQzEwLjU4NTggMTYuMzQ4OCAxMC4zMzYxIDE2LjIzMjcgMTAuMDg0MyAxNi4yMzc0Wk0xOS40NjYyIDE2LjIzNzRDMTkuMzE1MSAxNi4yNDAzIDE5LjE2MyAxNi4yODY2IDE5LjAzMDEgMTYuMzgwMUMxOC42NzU3IDE2LjYyOTMgMTguNTkwNiAxNy4xMTg3IDE4LjgzOTkgMTcuNDczMUMxOS40OTM4IDE4LjQwNjQgMjAuNTc3NyAxOC45NjggMjEuNzE2NyAxOC45NjhDMjIuNzQxNiAxOC45NjggMjMuNzMzOSAxOC41MDUzIDI0LjM5MzcgMTcuNzMxNEMyNC42Nzk0IDE3LjQwODkgMjQuNjUyMiAxNi45MTUzIDI0LjMzMTYgMTYuNjI2OUMyNC4wMDk1IDE2LjMzNzMgMjMuNTEyNyAxNi4zNjM0IDIzLjIyMyAxNi42ODU1TDIzLjIxODkgMTYuNjlMMjMuMjA0MyAxNi43MDg4TDIzLjIwMiAxNi43MTE1TDIzLjE4OTIgMTYuNzI2NkMyMy4xNDIgMTYuNzgxIDIzLjA5MDkgMTYuODMyNiAyMy4wMzg4IDE2Ljg4MDdMMjMuMDI1MSAxNi44OTU3TDIzLjAxODcgMTYuOTAxN0MyMi45NjIxIDE2Ljk1MzMgMjIuOTA2MiAxNi45OTc0IDIyLjg1NTkgMTcuMDM0M0wyMi44NTUgMTcuMDMzM0MyMS45ODg2IDE3LjY1ODEgMjAuNzUzNyAxNy40Njg1IDIwLjEyMzYgMTYuNTcwM0MxOS45Njc4IDE2LjM0ODggMTkuNzE4MSAxNi4yMzI3IDE5LjQ2NjIgMTYuMjM3NFoiIGZpbGw9ImJsYWNrIi8+CiAgICA8L2c+CiAgICA8ZGVmcz4KICAgICAgICA8Y2xpcFBhdGggaWQ9ImNsaXAwXzIxNDZfMzE5MCI+CiAgICAgICAgICAgIDxyZWN0IHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTUzMTI1IDAuMjM3MzA1KSIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICA8L2RlZnM+Cjwvc3ZnPgo=\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjUiIGhlaWdodD0iNTciIHZpZXdCb3g9IjAgMCA2NSA1NyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgogICAgICAgIDxwYXRoIGQ9Ik0zMy4yOTI1IDIyLjc2MzJDMzAuNjk0OCAyMC4yMzk3IDI0LjUwNjUgMTYuMzU0OCAyNC41MDY1IDE2LjM1NDhDMjMuOTg4NiAxNC45MjIzIDIzLjM3MzQgMTMuNTI3OSAyMi42NjUzIDEyLjE4MTZWMTguNzQwOEMyNC4yNTcyIDIxLjkwMjggMjguNDY0MyAyNC44MDc2IDI5LjYzMiAyNS40NzI4QzMyLjU1NzQgMjkuMDc4MSAzNi4wNzQxIDMyLjE0NDYgNDAuMDI3NSAzNC41Mzc2TDQ2Ljg4OTMgMzEuNzcwM0M0MS44OTkzIDI2LjMwMjIgMzMuMjkyNSAyMi43NjMyIDMzLjI5MjUgMjIuNzYzMloiIGZpbGw9IiNFMUMyOUEiLz4KICAgICAgICA8cGF0aCBkPSJNNDEuNDg4MSAyNi42ODhMMzUuNzE1MyAzMi4wNTQxTDM5LjAyNiAzNS4zMjdMNDcuNjc2NCAzMS45MDM0TDQxLjQ4ODEgMjYuNjg4WiIgZmlsbD0iIzgwODA4MyIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMi43NTcxIDQyLjgxMzFMMzIuOTA3NyAzOS41NjY4QzMyLjkwNzcgMzkuNTY2OCAzMC4xOTE4IDI3LjQ5MDcgMjkuODgxMyAyNi45MjMxTDI0LjAyMSAxMC4xOTA0TDIwLjIzODEgMTEuNDAxMUMyMC4yMzgxIDExLjQwMTEgMTguODI1NSAyMS42MDEzIDIzLjE1MDcgMjcuNjIzOEMyMy4xNTA3IDI3LjYyMzggMjIuNjI1OSAzMi4wMTQzIDIyLjc1NzEgNDIuODEzMVoiIGZpbGw9IiNEQUJCOTQiLz4KICAgICAgICA8cGF0aCBkPSJNMzAuNTYzNSAzLjk5OTI1TDMxLjAwMDggNS41MDcwOUMzMS4wMDA4IDUuNDQwNTcgMzAuNjI5MSA0Ljk3OTM1IDI1LjU2NDcgNi42MDY5M0wyMS41ODA2IDguMDc5M0MyMS41MjkgOC4wOTg3NiAyMS40ODI4IDguMTMwNzcgMjEuNDQ2MiA4LjE3MjUyQzIxLjQwOTYgOC4yMTQyNyAyMS4zODM3IDguMjY0NDkgMjEuMzcwNyA4LjMxODc4TDIxLjE4MjYgOS4yMDU3NEwxOC42MzMgMTAuMDkyN0wxOC41ODkyIDkuOTcyOTdDMTguMzEwNyA5LjE3MzY1IDE4LjE2NTkgOC4zMzI3NiAxOC4xNjA2IDcuNDg1MDNDMTguMTYwNiA3LjM5NjMzIDIyLjA5NjcgNS42MzU3IDI3LjU4MDggNC4xNDExNkMyNy41ODA4IDQuMTQxMTYgMzAuMDg2OCAzLjM0Mjg5IDMwLjU2MzUgNC4wMDgxMlYzLjk5OTI1WiIgZmlsbD0iIzAwMDYzQyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xOC42MTk5IDEwLjQzNDNDMTguNTUyNSAxMC40MzQyIDE4LjQ4NjggMTAuNDEzNCAxOC40MzEzIDEwLjM3NDZDMTguMzc1OSAxMC4zMzU4IDE4LjMzMzMgMTAuMjgwOCAxOC4zMDk0IDEwLjIxN0wxOC4yNjU3IDEwLjA5NzJDMTcuOTY5NiA5LjI0MjQ4IDE3LjgyMTYgOC4zNDIyMyAxNy44MjgzIDcuNDM2MzFDMTcuODI4MyA3LjI0NTYxIDE3Ljg1NDYgNy4wOTQ4MyAyMC42ODg1IDYuMDA4MjlDMjIuMTc1NSA1LjQ0MDY0IDI0LjU1NDYgNC41OTM1OCAyNy40OTM0IDMuNzkwODhDMjguMTE4OCAzLjU5MTMxIDMwLjI1MyAyLjk4ODE3IDMwLjgyMTYgMy43OTA4OEMzMC44NDU5IDMuODIyNDcgMzAuODYzNyAzLjg1ODY1IDMwLjg3NDEgMy44OTczMUwzMS4zMTE0IDUuNDA1MTZDMzEuMzM0OCA1LjQ4ODA3IDMxLjMyNTUgNS41NzY5NiAzMS4yODU2IDUuNjUzMDhDMzEuMjQ1NiA1LjcyOTIgMzEuMTc4IDUuNzg2NiAzMS4wOTcxIDUuODEzMTZDMzEuMDM5NSA1LjgzMjA2IDMwLjk3NzggNS44MzQxOSAzMC45MTkgNS44MTkyOUMzMC44NjAzIDUuODA0MzkgMzAuODA2OCA1Ljc3MzA4IDMwLjc2NDcgNS43Mjg5QzMwLjU5NDIgNS42ODg5OSAyOS42NzU4IDUuNjE4MDMgMjUuNjU2NiA2LjkwODU3TDIxLjY1OTQgOC4zOTQyNEwyMS40NzEzIDkuMjgxMkMyMS40NiA5LjMzNzkzIDIxLjQzNDMgOS4zOTA2NyAyMS4zOTY3IDkuNDM0MjNDMjEuMzU5MSA5LjQ3Nzc5IDIxLjMxMSA5LjUxMDY0IDIxLjI1NzEgOS41Mjk1NUwxOC43MDc0IDEwLjQxNjVDMTguNjc5MyAxMC40MjY5IDE4LjY0OTggMTAuNDMyOSAxOC42MTk5IDEwLjQzNDNaTTE4LjQ4NDMgNy42NjY5MkMxOC41MDg3IDguMzU3NDMgMTguNjIxOSA5LjA0MTc1IDE4LjgyMTEgOS43MDI1MUwyMC44ODk3IDguOTg4NUwyMS4wMzg0IDguMjc0NUMyMS4wNjMxIDguMTYyMSAyMS4xMTY1IDguMDU4MjcgMjEuMTkzMiA3Ljk3MzQyQzIxLjI3IDcuODg4NTcgMjEuMzY3NCA3LjgyNTY5IDIxLjQ3NTcgNy43OTExTDI1LjQ1OTggNi4zMTQzQzI4LjM3NjkgNS4zNzg1NSAyOS44MzMyIDUuMDk5MTUgMzAuNTQ2MSA1LjA4NTg1TDMwLjI4OCA0LjE5ODg4QzMwLjAzNDQgMy45OTQ4OCAyOC44NDQ4IDQuMTE5MDYgMjcuNjk5IDQuNDgyNzFDMjQuNTQ5NSA1LjI5NjM1IDIxLjQ2ODQgNi4zNjEwNyAxOC40ODQzIDcuNjY2OTJaIiBmaWxsPSIjMDAwNjNDIi8+CiAgICAgICAgPHBhdGggZD0iTTMwLjk5NjUgNS41MTYxOEMzMC45OTY1IDUuNTE2MTggMzEuMTM2NCA1Ljg0NDM2IDMwLjcyOTcgNi4yNjEyM0MzMC42MjkgNi4zNzc2NiAzMC41MTI3IDYuNDc5MTcgMzAuMzg0MiA2LjU2MjhMMzAuMDczNyA2Ljc3MTI0TDI5LjkzMzcgNi44NzMyNEgyOS45MDc1TDI5LjgwNjkgNi45Mzk3NkwyOS42OTc2IDcuMDE5NTlMMjkuNjMyIDcuMDY4MzdMMjkuNTM1OCA3LjEzOTMzTDI5LjQwODkgNy4yMjgwM0wyOS4xNTk3IDcuNDE0MjlMMjkuMDU5MSA3LjQ4OTY4TDI4Ljc3MDQgNy43MDI1NkwyOC43MTM2IDcuNzQ2OUwyOC42NjExIDcuNzg2ODJMMjguNjA0MiA3LjgzMTE3TDI4LjU2OTMgNy44NTc3N0wyOC41MjEyIDcuODkzMjVMMjguNDExOCA3Ljk3NzUySDI4LjM4NTZDMjguMzg1NiA3Ljk3NzUyIDI1LjQ1NTQgMTEuMzE2OSAyNS4xMjMxIDExLjQ4OTlDMjQuNzU2OSAxMS41Mzc1IDI0LjM4NDkgMTEuNDk0OSAyNC4wMzg1IDExLjM2NTdMMjMuODg1NCAxMS4zMzQ3QzIzLjU2MTggMTEuMjU5MyAyMS45NDggMTAuNzEzOCAyMC45NTA5IDEyLjAzMUMyMC44MDUxIDEyLjIzMTUgMjAuNzA3NyAxMi40NjM5IDIwLjY2NjYgMTIuNzA5NUMyMC42MzYgMTIuODYwMyAyMC41NjE3IDEzLjAzMzIgMjAuMzYwNSAxMy4wNTFDMjAuMTU5MyAxMy4wNjg3IDE5Ljc1MjYgMTIuNDMwMSAxOS4zNjc3IDExLjY4OTVMMTkuMzMyNyAxMS42MzE4TDE5LjIyNzggMTEuNDE0NUwxOS4xNzk3IDExLjMyNThDMTkuMTMxNiAxMS4yMjgzIDE5LjA4NzggMTEuMTMwNyAxOS4wNDQxIDExLjAzNzZDMTkuMDIzOSAxMS4wMDIgMTkuMDA2NCAxMC45NjQ5IDE4Ljk5MTYgMTAuOTI2N0MxOC45OTE2IDEwLjkwMDEgMTguOTkxNiAxMC44Nzc5IDE4Ljk1NjYgMTAuODU1N0MxOC44OTU0IDEwLjcyMjcgMTguODQyOSAxMC41OTg1IDE4Ljc5MDUgMTAuNDc0M0MxOC43MzggMTAuMzUwMiAxOC42NzI0IDEwLjE5MDUgMTguNjI0MyAxMC4wNjYzTDIwLjk1MDkgOS4yNjM2MkMyMS4wMTQ2IDkuMjQ0NyAyMS4wNzI3IDkuMjEwMSAyMS4xMiA5LjE2MjlDMjEuMTY3MyA5LjExNTcgMjEuMjAyMyA5LjA1NzM3IDIxLjIyMiA4Ljk5MzA5TDIxLjM1MzIgOC4zNzIyMkMyMS4zNzAzIDguMzAzMjYgMjEuNDAzNCA4LjIzOTQ3IDIxLjQ0OTggOC4xODYyMkMyMS40OTYyIDguMTMyOTYgMjEuNTU0NiA4LjA5MTgxIDIxLjYyIDguMDY2MjFMMjUuNTU2IDYuNjA3MTVDMzAuNjE2IDQuOTg0IDMwLjk3MDIgNS40NDA3OSAzMC45OTIxIDUuNTExNzVMMzAuOTk2NSA1LjUxNjE4WiIgZmlsbD0iIzcwNzA3MCIvPgogICAgICAgIDxwYXRoIGQ9Ik0yOC4zNzY4IDQ4LjYwNTFINDMuNjgzNkM0MC41MTczIDQ2LjU5MTcgMzQuNzMxMyA0Mi4xNDM1IDMyLjU5MjggMzUuMDdDMzIuNTY2NSAzNC45ODU3IDIxLjA5NTIgMzcuNzkzIDIxLjA5NTIgMzcuNzkzQzIxLjA5NTIgMzcuNzkzIDIzLjIwMzIgNDYuMTQzOCAyNy45MDQ1IDUxLjU2NzZDMjguMDQ2NiA1MS43MTU3IDI4LjIxMjEgNTEuODM4NyAyOC4zOTQzIDUxLjkzMTJMMjguMzc2OCA0OC42MDUxWiIgZmlsbD0iIzRENEQ0RCIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMC45NDY0IDQzLjQ2OTNMMzEuMDk2OSA0MC4yMjNDMzEuMDk2OSA0MC4yMjMgMjguMzc2NyAyOC4xNDcgMjguMDcwNSAyNy41NzkzTDIyLjIxMDMgMTAuODQ2N0wxOC40MjczIDEyLjA1NzRDMTguNDI3MyAxMi4wNTc0IDE3LjAxNDcgMjIuMjU3NSAyMS4zNCAyOC4yOEMyMS4zNCAyOC4yOCAyMC44MTUyIDMyLjY3MDUgMjAuOTQ2NCA0My40NjkzWiIgZmlsbD0iI0U4Qzc5QyIvPgogICAgICAgIDxwYXRoIGQ9Ik0zMS4wOTcyIDQwLjIyMzJMMjAuOTQ2NiA0My40Njk1QzIwLjgxOTggMzIuNjcwNyAyMS4zMzU5IDI4LjI4MDIgMjEuMzM1OSAyOC4yODAyQzE3LjAxNSAyMi4yNDg5IDE4LjQyNzYgMTIuMDU3NiAxOC40Mjc2IDEyLjA1NzZMMjAuMTc2OSAxMS40OTQ0QzE5Ljk2MjYgMTMuNTM4OCAxOS4zNTQ3IDIxLjk5MTYgMjMuMTM3NyAyNy4yNjQ3QzIzLjEzNzcgMjcuMjY0NyAyMi42MTcyIDMxLjY1NTEgMjIuNzQ4NCA0Mi40NTRMMzAuOTkyMiAzOS44MTUyQzMxLjA2NjYgNDAuMDc2OSAzMS4wOTcyIDQwLjIyMzIgMzEuMDk3MiA0MC4yMjMyWiIgZmlsbD0iI0QwQUE3OSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yOC43NDg2IDQuNjU1NjZMMjkuMjA3IDUuOTc2NjFDMjkuMTgxMyA2LjE0NjA0IDI4Ljk2OTUgNi40OTI3MiAyOC43Nzk4IDYuNDY5MzFDMjguMzQzNSA2LjQxNTQzIDI3LjI3ODYgNi4xMjg4NSAyMy43NDU1IDcuMjYzMzRMMTkuNzYxNCA4LjczNTcxQzE5LjcxMDIgOC43NTUwOSAxOS42NjQ1IDguNzg3MTUgMTkuNjI4NiA4LjgyODk3QzE5LjU5MjcgOC44NzA4IDE5LjU2NzcgOC45MjEwNiAxOS41NTU5IDguOTc1MTlMMTkuMzY3OCA5Ljg2MjE2TDE2LjgxMzggMTAuNzQ5MUwxNi43NyAxMC42Mjk0QzE2LjQ5NDkgOS44MjM1NyAxNi4zNTU5IDguOTc2NDQgMTYuMzU4OSA4LjEyMzdDMTYuMzU4OSA4LjAzNSAyMC4yOTQ5IDYuMjc0MzcgMjUuNzc5MSA0Ljc3OTgzQzI1Ljc3OTEgNC43Nzk4MyAyOC4yODUxIDMuOTgxNTYgMjguNzU3NCA0LjY0Njc5TDI4Ljc0ODYgNC42NTU2NloiIGZpbGw9IiMyRjNBNUEiLz4KICAgICAgICA8cGF0aCBkPSJNMjguOTQ0NSA1Ljk2NzIxQzI4Ljk0NDUgNS45NjcyMSAyOS4wODIzIDYuMzAzNSAyOC42ODE3IDYuNzMwNjhDMjguNTg0MiA2Ljg1MDA0IDI4LjQ3MTEgNi45NTQxIDI4LjM0NTcgNy4wMzk3TDI4LjAzOTggNy4yNTMyOUwyNy44OTc3IDcuMzU3ODFMMjcuNzk4NiA3LjQzMDUyTDI3LjY5MDkgNy41MDc3OEwyNy42MjYzIDcuNTU3NzdMMjcuNTMxNSA3LjYzMDQ4TDI3LjQwNjYgNy43MjEzN0MyNy4zMjQ3IDcuNzg5NTQgMjcuMjM4NiA3Ljg1MzE2IDI3LjE2MSA3LjkxMjI0TDI3LjA1NzcgNy45ODk0OUwyNi43Nzc3IDguMjEyMTdMMjYuNzIxNyA4LjI1MzA3TDI2LjY3IDguMjkzOTdMMjYuNjE0IDguMzM5NDJMMjYuNTc5NSA4LjM2NjY4TDI2LjUzMjEgOC40MDMwNEwyNi40MjAxIDguNDg5MzhIMjYuMzk4NkMyNi4zOTg2IDguNDg5MzggMjMuNTA4MSAxMS45MTE0IDIzLjE4NSAxMi4wODg2QzIyLjgyNDQgMTIuMTM3NCAyMi40NTc5IDEyLjA5MzcgMjIuMTE2NyAxMS45NjE0TDIxLjk2NTkgMTEuOTg0MUMyMS42NDI4IDExLjkwNjggMjAuMDU3NiAxMS4zNDc4IDE5LjA3NTQgMTIuNjk3NkMxOC45MzIzIDEyLjkwMzggMTguODM1MSAxMy4xNDE1IDE4Ljc5MTEgMTMuMzkyOUMxOC43ODcyIDEzLjQ3ODMgMTguNzU1NSAxMy41NTk3IDE4LjcwMTMgMTMuNjIzNUMxOC42NDcyIDEzLjY4NzIgMTguNTc0IDEzLjcyOTMgMTguNDkzOSAxMy43NDI4QzE4LjI5NTcgMTMuNzQyOCAxNy44OTUxIDEzLjEwNjYgMTcuNTExNyAxMi4zNDc2TDE3LjQ4MTUgMTIuMjg4NkwxNy4zNzM5IDEyLjA2NTlMMTcuMzMwOCAxMS45NzVMMTcuMTkyOSAxMS42Nzk2TDE3LjE0MTIgMTEuNTY2QzE3LjE0MTIgMTEuNTM4NyAxNy4xNDEyIDExLjUxNiAxNy4xMTExIDExLjQ5MzNDMTcuMDUwOCAxMS4zNTY5IDE2Ljk5NDggMTEuMjI5NyAxNi45NDc0IDExLjEwMjRDMTYuOSAxMC45NzUyIDE2LjgzMTEgMTAuODExNiAxNi43ODM3IDEwLjY4ODlMMTkuMDc1NCA5Ljg2NjM2QzE5LjE0MTEgOS44NDAzMSAxOS4xOTk4IDkuNzk3NyAxOS4yNDY0IDkuNzQyMjZDMTkuMjkyOSA5LjY4NjgyIDE5LjMyNTkgOS42MjAyMSAxOS4zNDI1IDkuNTQ4MjRMMTkuNDcxNyA4LjkxMjAyQzE5LjQ4NTYgOC44NDA2OSAxOS41MTY2IDguNzc0MzUgMTkuNTYxOSA4LjcxOTQxQzE5LjYwNzIgOC42NjQ0NyAxOS42NjUyIDguNjIyODEgMTkuNzMwMiA4LjU5ODQ1TDIzLjYwNzIgNy4xMDMzMkMyOC41NzQgNS40NDAwNSAyOC45MTg2IDUuOTA4MTMgMjguOTQ0NSA1Ljk2NzIxWiIgZmlsbD0iIzk4OTg5OCIvPgogICAgICAgIDxwYXRoIGQ9Ik00My42NCAxNi43MDVMNDEuOTY5NCAxOC43MDA3VjE5LjU1MjJDNDEuNDQxNyAxOS45MjIgNDAuOTM1IDIwLjMyMTggNDAuNDUxOCAyMC43NDk2QzM5Ljg2NTggMjEuMzAzOSA0MC4yNjgyIDIxLjYzNjYgNDAuODI3OSAyMi4wMDQ2QzQwLjgyNzkgMjIuMDA0NiA0MC40OTEyIDIyLjc0NTMgNDAuODgwNCAyMy4wNzc5QzQwLjg4MDQgMjMuMDc3OSAzOS44NDgzIDIzLjI1MDggNDAuNTY1NSAyNC4wNThDNDAuNTY1NSAyNC4wNTggNDAuNzE0MiAyNC40NDM4IDQwLjE4MDcgMjQuODIwOEMzOS42NDcxIDI1LjE5NzcgNDAuMDk3NiAyNi4xNTEyIDQxLjEyNTMgMjYuNTk0N0M0MS42NjQgMjYuODMwNSA0Mi4yMTc3IDI3LjAyOSA0Mi43ODI4IDI3LjE4OUw0MS4xMTY2IDMwLjUwNjJMNDguNzc4NyAzMi4yODAyQzQ4Ljc3ODcgMzIuMjgwMiA0OC45NjY3IDI3LjI2ODggNDkuMTUwNCAyNi40NDg0QzQ5LjI3ODEgMjUuNzE4MyA0OS41NzgyIDI1LjAzMDYgNTAuMDI1MSAyNC40NDM4QzUwLjkyNiAyMy40ODE0IDUxLjg1NzUgMjIuMjk3MyA1MS45ODQ0IDIxLjEyMjFDNTIuMTExMiAxOS45NDY5IDUyLjgyNCAxOC45NTM1IDUxLjY4MjYgMTcuMzI1OUM1MC41NDEyIDE1LjY5ODMgNDUuODUyOSAxNS4wMjQyIDQ1LjA3NDUgMTQuNDY5OUM0NC4yOTYgMTMuOTE1NSA0My42NCAxNi43MDUgNDMuNjQgMTYuNzA1WiIgZmlsbD0iI0U4Qzc5QyIvPgogICAgICAgIDxwYXRoIGQ9Ik01MS45OTMgMjEuMTQ0NkM1MS44NjE4IDIyLjMxOTggNTAuOTI1OSAyMy41MDM5IDUwLjAyOTMgMjQuNDYxOUM0OS41ODMxIDI1LjA1MDcgNDkuMjgzMSAyNS43Mzk3IDQ5LjE1NDcgMjYuNDcwOEM0OC45ODQxIDI3LjI5MTMgNDguNzc0MiAzMi4zMjA0IDQ4Ljc3NDIgMzIuMzIwNEw0MS4xMTY1IDMwLjU0NjVMNDEuMzM5NSAzMC4xMDNMNDcuMjg3MiAzMS40OTU1QzQ3LjI4NzIgMzEuNDk1NSA0Ny40Nzk3IDI2LjQ4ODYgNDcuNjYzNCAyNS42NjM3QzQ3Ljc5MSAyNC45MzM3IDQ4LjA5MTEgMjQuMjQ1OSA0OC41MzggMjMuNjU5MkM0OS40MTI3IDIyLjcwMTIgNTAuMzcwNSAyMS41MTI3IDUwLjUwMTcgMjAuMzM3NUM1MC42MzI5IDE5LjE2MjIgNTEuMzM3IDE4LjE2ODggNTAuMTk1NSAxNi41NDEyQzUwLjAzNjIgMTYuMzI0NSA0OS44NDQ0IDE2LjEzNDUgNDkuNjI3IDE1Ljk3OEM1MC41MzIzIDE2LjM0NjEgNTEuMzE5NSAxNi43ODk2IDUxLjcwNDMgMTcuMzM5NUM1Mi44MjM5IDE4Ljk3NiA1Mi4xMTk4IDE5Ljk2OTQgNTEuOTkzIDIxLjE0NDZaIiBmaWxsPSIjRDBBQTc5Ii8+CiAgICAgICAgPHBhdGggZD0iTTQzLjYzOTkgMTYuNzA1QzQzLjYzOTkgMTYuNzA1IDQ0LjQ3MDggMTYuNDUyMiA0NS42NDczIDE3LjQ2NzhDNDYuODIzNyAxOC40ODM0IDQ2Ljk4NTUgMTkuNTMgNDYuNDgyNiAyMC40OTY4QzQ2LjIzMTkgMjAuOTU1NyA0Ni4wMTU2IDIxLjQzMzEgNDUuODM1MyAyMS45MjQ4TDQ2LjUxNzYgMjIuMzAxOEM0Ni41MTc2IDIyLjMwMTggNDcuMzkyMiAyMC45MDkyIDQ4LjI2NjkgMjEuMjU1MkM0OS4xNDE2IDIxLjYwMTEgNDkuMTQxNiAyMi41ODU2IDQ4LjY3OCAyMy43OTYzQzQ4LjIxNDQgMjUuMDA3IDQ3Ljg5OTUgMjUuNjY3OCA0OC43NzQyIDI2LjI3MUM0OC44OTk2IDI2LjM1MTUgNDkuMDMzIDI2LjQxODQgNDkuMTcyMiAyNi40NzA1QzQ5LjI5OTggMjUuNzQwNSA0OS41OTk5IDI1LjA1MjcgNTAuMDQ2OCAyNC40NjZDNTAuOTQ3OCAyMy41MDM2IDUxLjg3OTMgMjIuMzE5NSA1Mi4wMDYxIDIxLjE0NDNDNTIuMTMyOSAxOS45NjkxIDUyLjg0NTggMTguOTc1NyA1MS43MDQzIDE3LjM0ODFDNTAuNTYyOSAxNS43MjA1IDQ1Ljg1MjggMTUuMDI0MiA0NS4wNzQ0IDE0LjQ2OTlDNDQuMjk1OSAxMy45MTU1IDQzLjYzOTkgMTYuNzA1IDQzLjYzOTkgMTYuNzA1WiIgZmlsbD0iIzMzMzYzRCIvPgogICAgICAgIDxwYXRoIGQ9Ik01MS45OTMgMjEuMTQ0NUM1MS44NjE4IDIyLjMxOTggNTAuOTI1OSAyMy41MDM5IDUwLjAyOTMgMjQuNDYxOEM0OS41ODMxIDI1LjA1MDYgNDkuMjgzMSAyNS43Mzk3IDQ5LjE1NDcgMjYuNDcwOEM0OS4wMTM4IDI2LjQyMDggNDguODggMjYuMzUyMiA0OC43NTY3IDI2LjI2NjhDNDguNTc2NiAyNi4xNTg0IDQ4LjQyNjIgMjYuMDA1OSA0OC4zMTk0IDI1LjgyMzNDNDguNDQ0MiAyNS40Mjg1IDQ4LjY0NjUgMjUuMDYzNCA0OC45MTQxIDI0Ljc1QzQ5LjgxNTEgMjMuNzg3NyA1MC43NDY2IDIyLjYwMzYgNTAuODc3OCAyMS40Mjg0QzUxLjAwOSAyMC4yNTMxIDUxLjcxMzEgMTkuMjU5NyA1MC41NzE2IDE3LjYzNjZDNDkuNTQzOSAxNi4xNjg2IDQ1LjYyMSAxNS40NDU4IDQ0LjI5MTUgMTQuOTE4QzQ0LjUxNDUgMTQuNTI3NyA0NC43ODU3IDE0LjI3OTQgNDUuMDcgMTQuNDc0NUM0NS44NTI4IDE1LjAyIDUwLjU0OTggMTUuNzI5NiA1MS42ODY4IDE3LjM1MjdDNTIuODIzOSAxOC45NzU5IDUyLjExOTggMTkuOTY5MyA1MS45OTMgMjEuMTQ0NVoiIGZpbGw9IiMyNzMxNDkiLz4KICAgICAgICA8cGF0aCBkPSJNNDEuOTczNSAyOS45NTY1QzQwLjM3MjkgMzAuNCAzOC41MzE3IDMxLjUwODcgMzYuNzkxMSAzNC4zOTE0QzM2LjEyMDUgMzUuNDg5NCAzNS42MjE5IDM2LjY4NjIgMzUuMzEyOSAzNy45MzkyQzM0LjYzMjYgNDAuODU4NSAzNC4yOTY0IDQzLjg0OTIgMzQuMzExNCA0Ni44NDg4TDMzLjQzNjggNDcuNTk4M0w0My45OTg0IDUwLjUwMzFDNDQuMDY0IDUwLjM1MjQgNDQuMTI5NiA1MC4yMDE2IDQ0LjE4MjEgNTAuMDU5N0M0NC44MjkzIDQ4Ljk2NDIgNDcuNTY3MSA0My40MDc0IDQ4LjcxNzMgMzguNTI5MUM0OS41MTMyIDM1Ljg2ODIgNDkuOTk4NiAzMy4zMTgxIDQ4LjgzMSAzMS40NjQ0TDQxLjk3MzUgMjkuOTU2NVoiIGZpbGw9IiNBQkFCQUIiLz4KICAgICAgICA8cGF0aCBkPSJNNDguNzE3NCAzOC41MjkxQzQ3LjU2NzIgNDMuNDA3NCA0NC44Mjk1IDQ4Ljk1OTggNDQuMTgyMiA1MC4wNTk2QzQ0LjEyOTggNTAuMjE0OSA0NC4wNjQyIDUwLjM2NTYgNDMuOTk0MiA1MC41MDMxTDMzLjQ2NzUgNDcuNTk4M0wzMy45MDQ5IDQ3LjIzNDdMNDAuNjYxNyA0OS4xMTA2QzQwLjcyMjkgNDguOTU1NCA0MC43ODg1IDQ4LjgwNDYgNDAuODQxIDQ4LjY2NzFDNDEuNDkyNiA0Ny41NzE3IDQ0LjIzMDMgNDIuMDE0OSA0NS4zNzYyIDM3LjEzNjVDNDYuMDcxNSAzNC44MDgyIDQ4LjAwMDIgMzMuMDM4NyA0NS44NTcyIDMwLjgxNjlMNDguODcwNSAzMS40ODY2QzQ5Ljk5ODggMzMuMzI3IDQ5LjUxMzQgMzUuODY4MiA0OC43MTc0IDM4LjUyOTFaIiBmaWxsPSIjODA4MDgzIi8+CiAgICAgICAgPHBhdGggZD0iTTE5LjI2MjkgMzguNDQ5MkMxOS4yNjI5IDM4LjQ0OTIgMjEuMzc1MyA0Ni44IDI2LjA3MjIgNTIuMjIzOEMyNy41MjQyIDUzLjg5NTcgNDAuMzk1IDU2LjAwMjMgNDQuMDAzIDUwLjUyMDhDNDQuMTM4NSA1MC40ODUzIDMzLjgxNzQgNDUuNzM1NiAzMC43NjkyIDM1LjcyNjJDMzAuNzM4NiAzNS42NDIgMTkuMjYyOSAzOC40NDkyIDE5LjI2MjkgMzguNDQ5MloiIGZpbGw9IiM2OTY5NjkiLz4KICAgICAgICA8cGF0aCBkPSJNNDMuOTk0MiA1MC41MjUyQzQwLjM5MDYgNTYuMDAyMyAyNy41MjQyIDUzLjg5NTcgMjYuMDYzNSA1Mi4yMTkzQzIxLjM2NjUgNDYuOCAxOS4yNTg1IDM4LjQ0OTIgMTkuMjU4NSAzOC40NDkyTDIxLjY1OTUgMzcuODYzOEMyMi41Nzc5IDQwLjY2NjYgMjQuNTk0IDQ1Ljg3NzUgMjcuODc4NCA0OS42NjA0QzI5LjA4NTUgNTEuMDQ4NSAzOC4xODY0IDUyLjc2NDggNDMuMjkwMSA1MC4xMDM5QzQzLjc0NDkgNTAuMzc0NCA0My45OTQyIDUwLjUwMzEgNDMuOTk0MiA1MC41MjUyWiIgZmlsbD0iIzY5Njk2OSIvPgogICAgICAgIDxwYXRoIGQ9Ik00MS4zMzk2IDM1LjM4MDJDNDEuNzExMyAzNS4xODUxIDQyLjA4NzUgMzUuMDA3NyA0Mi40Njc5IDM0LjgzNDdMNDQuMDczIDMzLjQ3NzZDNDQuNzE1OCAzMi45NDU1IDQ1LjM4NSAzMi40Mzk5IDQ2LjAyNzggMzEuOTEyMUM0Mi44MTYyIDI4LjkzNCAzOS4wMDA5IDI2LjcwNDMgMzQuODQ5NiAyNS4zNzk2QzMyLjE5NDkgMjIuOTI3MiAyNi4xODE2IDE5LjYzNjUgMjYuMTgxNiAxOS42MzY1TDI1LjA4MzkgMTguODQ3MUMyNC41NzY2IDE3Ljg2NyAyMy4yNzMzIDE1LjY0NTIgMjIuMjM2OCAxNi40MzAxQzIyLjA3MDEgMTYuNTk1MiAyMS45Njk0IDE2LjgxNjkgMjEuOTU0IDE3LjA1MjZDMjEuOTM4NyAxNy4yODg0IDIyLjAwOTggMTcuNTIxNiAyMi4xNTM3IDE3LjcwNzRDMjIuNTM0MiAxOC4zNjgyIDIzLjE4NTggMTguMjU3MyAyMy40MDg5IDE5LjAxNTZDMjIuNDQxMyAxOS4yMDQ0IDIxLjQ0MDMgMTkuMDk5NSAyMC41MzEyIDE4LjcxNDFDMTkuODYyOCAxOC40MDQyIDE5LjIyOTQgMTguMDIyMSAxOC42NDE5IDE3LjU3NDNDMTguNTc3MSAxNy41MjA5IDE4LjQ5ODUgMTcuNDg3NSAxOC40MTU1IDE3LjQ3OEMxOC4zMzI1IDE3LjQ2ODQgMTguMjQ4NiAxNy40ODMyIDE4LjE3MzYgMTcuNTIwNUMxOC4wOTg2IDE3LjU1NzggMTguMDM1NyAxNy42MTYxIDE3Ljk5MjQgMTcuNjg4NkMxNy45NDkxIDE3Ljc2MSAxNy45MjcxIDE3Ljg0NDQgMTcuOTI5MSAxNy45MjkxVjIwLjk2MjVDMTcuOTI5MSAyMS4xMzk5IDE4LjExNzEgMjEuMjEwOSAxOC4xOTU5IDIxLjM3NUMxOC40MDE0IDIxLjgxODUgMTkuNzEzNCAyMi44Mzg1IDIxLjMxNCAyMi44MDc0TDI1LjM2MzggMjMuNDAxN0MyNy4wNzA0IDI1LjMwNjkgMjkuMDY4MyAyNi45MjEyIDMxLjI4MDkgMjguMTgyNEMzMy44OTE0IDMxLjIxNTUgMzYuOTE2NCAzMy44NTQzIDQwLjI2MzggMzYuMDE4OEM0MC42Mzk5IDM1Ljc5NzEgNDEuMDE2IDM1LjU1MzEgNDEuMzM5NiAzNS4zODAyWiIgZmlsbD0iI0U4Qzc5QyIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMi4wOTY4IDE3LjU1MjFDMjEuOTk2NyAxNy4zNzM1IDIxLjk1ODMgMTcuMTY2MiAyMS45ODc2IDE2Ljk2MjlDMjIuMDE2OSAxNi43NTk3IDIyLjExMjMgMTYuNTcyMiAyMi4yNTg2IDE2LjQzMDFDMjIuMzYyMSAxNi4zNTIxIDIyLjQ4MTcgMTYuMjk5IDIyLjYwODUgMTYuMjc0OUMyMi45OTc3IDE2Ljg2OTIgMjMuNjE0MyAxNi43ODkzIDIzLjgyNDMgMTcuNTE2N0MyMy4yNTM1IDE3LjYxNjYgMjIuNjcxMSAxNy42Mjg2IDIyLjA5NjggMTcuNTUyMVoiIGZpbGw9IiNFOEM3OUMiLz4KICAgICAgICA8cGF0aCBkPSJNNDYuMDM2NSAzMS45MTIyQzQ1LjM4OTIgMzIuNDQ0NCA0NC43MjQ1IDMyLjk0MTEgNDQuMDgxNiAzMy40ODIxTDQyLjQ3NjYgMzQuODEyNkM0Mi4wOTYxIDM0Ljk5IDQxLjcyIDM1LjE2MjkgNDEuMzQ4MyAzNS4zNTgxQzQwLjk3NjUgMzUuNTUzMiA0MC42MzU0IDM1Ljc3MDUgNDAuMjQxOCAzNS45OTY3QzM2LjkwMzYgMzMuODM3MyAzMy44ODYyIDMxLjIwNjEgMzEuMjgwOCAyOC4xODI1QzI5LjA2ODkgMjYuOTE4MyAyNy4wNzEyIDI1LjMwMjggMjUuMzYzNyAyMy4zOTczTDIxLjMxMzkgMjIuODA3NUMxOS43MTMzIDIyLjgzNDEgMTguNDA1NyAyMS43OTE5IDE4LjE5NTcgMjEuMzY2MkMxOC4xMTcgMjEuMjA2NSAxNy45MjkgMjEuMTM1NSAxNy45MjkgMjAuOTU4MlYxNy45MjAzQzE3LjkyODUgMTcuODA5MyAxNy45NjkxIDE3LjcwMjEgMTguMDQyOCAxNy42MkMxOC4xMTY1IDE3LjUzNzkgMTguMjE3OSAxNy40ODY4IDE4LjMyNjkgMTcuNDc2OFYxOS40NTkyQzE4LjMyNjkgMTkuNjM2NiAxOC41MTA2IDE5LjcxMiAxOC41ODkzIDE5Ljg3MTZDMTguNzk5MyAyMC4zMTUxIDIwLjExMTMgMjEuMzM1MSAyMS43MDc1IDIxLjMwODVMMjUuNzU3MyAyMS44OTgzQzI3LjQ1NzkgMjMuODAzNSAyOS40NDgxIDI1LjQyMDUgMzEuNjUyNSAyNi42ODhDMzQuMjYyMiAyOS43MjU3IDM3LjI4NzEgMzIuMzY5MSA0MC42MzU0IDM0LjUzNzZDNDEuMDMzNCAzNC4zMTE0IDQxLjQxMzkgMzQuMDk0MSA0MS43NDE5IDMzLjg5OUM0Mi4wNjk5IDMzLjcwMzkgNDIuNDg5NyAzMy41MzA5IDQyLjg3MDIgMzMuMzUzNUw0NC40NzUyIDMyLjAyMzFDNDQuNzYzOCAzMS43ODM2IDQ1LjA1NjkgMzEuNTQ4NSA0NS4zNDk5IDMxLjMxNzlDNDUuNTgxNyAzMS40ODY0IDQ1LjgxMzQgMzEuNjk0OSA0Ni4wMzY1IDMxLjkxMjJaIiBmaWxsPSIjRDBBQTc5Ii8+CiAgICAgICAgPHBhdGggZD0iTTQ2LjQ4NyAzMi4xNzRMNDEuNjg5NSAyOC4wNjc0TDM1Ljg0NjcgMzMuNzcwNkwzOS45NDAxIDM3LjQwNzEiIGZpbGw9IiNBQkFCQUIiLz4KICAgIDwvZz4KICAgIDxkZWZzPgogICAgICAgIDxjbGlwUGF0aCBpZD0iY2xpcDAiPgogICAgICAgICAgICA8cmVjdCB3aWR0aD0iNDkiIGhlaWdodD0iNTIiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4Ljc0ODc4IDIuNjMxODQpIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgIDwvZGVmcz4KPC9zdmc+Cg==\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swIiBtYXNrLXR5cGU9ImFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIxIiB5PSIyIiB3aWR0aD0iMjIiIGhlaWdodD0iMjEiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcgMjNDNyAyMS4zNSA4LjEyNSAyMCA5LjUgMjBIMTAuNzVWMTdIMTJIMTMuMjVWMjBIMTQuNUMxNS44NzUgMjAgMTcgMjEuMzUgMTcgMjNIN1YyM1pNMTguMTExMSAxM0gxNy42MjIyQzE2LjcwNTYgMTUuMTM4OSAxNC41MDU2IDE2LjY2NjcgMTIgMTYuNjY2N0M5LjQ5NDQ0IDE2LjY2NjcgNy4zNTU1NiAxNS4xMzg5IDYuMzc3NzggMTNINS44ODg4OUMyLjI4MzMzIDEzIDEgMTAuMDY2NyAxIDguMTExMTFWNS42NjY2N0MxIDQuOTk0NDQgMS41NSA0LjQ0NDQ0IDIuMjIyMjIgNC40NDQ0NEg1Ljg4ODg5VjMuMjIyMjJDNS44ODg4OSAyLjU1IDYuNDM4ODkgMiA3LjExMTExIDJIMTYuODg4OUMxNy41NjExIDIgMTguMTExMSAyLjU1IDE4LjExMTEgMy4yMjIyMlY0LjQ0NDQ0SDIxLjc3NzhDMjIuNDUgNC40NDQ0NCAyMyA0Ljk5NDQ0IDIzIDUuNjY2NjdWOC4xMTExMUMyMyAxMC4wNjY3IDIxLjcxNjcgMTMgMTguMTExMSAxM1YxM1YxM1pNNS44ODg4OSA2LjI3Nzc3SDIuODMzMzNWNy45MDc0QzIuODMzMzMgOC42NDA3MyAzLjA2MjUgMTEuMTY2NyA1Ljg4ODg5IDExLjE2NjdWNi4yNzc3N1Y2LjI3Nzc3Wk0xNi4yNzc4IDEwLjc1MTZWNi42MDA2MlYzLjgzMzMzSDcuNzIyMjJWNi42MDA2MlYxMC43NTE2VjExLjU4MThMOC4wNzg3IDEyLjM0MjhDOC43OTE2NyAxMy44NjQ4IDEwLjI4ODkgMTQuODMzMyAxMiAxNC44MzMzQzEzLjcxMTEgMTQuODMzMyAxNS4yMDgzIDEzLjg2NDggMTUuOTIxMyAxMi4zNDI4TDE2LjI3NzggMTEuNTgxOFYxMC43NTE2VjEwLjc1MTZaTTIxLjE2NjcgNi4yNzc3N0gxOC4xMTExVjExLjE2NjdDMjEuMDEzOSAxMS4xNjY3IDIxLjE2NjcgOC40Nzc3NyAyMS4xNjY3IDcuOTA3NFY2LjI3Nzc3VjYuMjc3NzdaIiBmaWxsPSJ3aGl0ZSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazApIj4KPHJlY3QgeD0iLTQ3OSIgeT0iLTMyMSIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiIGZpbGw9IiMwNTY4MzkiLz4KPC9nPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUiIGhlaWdodD0iMjUiIHZpZXdCb3g9IjAgMCAyNSAyNSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8zMTI1XzIzMjgpIj4KICAgICAgICA8cGF0aCBkPSJNMjMuODQ4MSAxNy4wNzg2SDE4LjgzODlWMjAuOTJIMTkuODFWMjEuMzA5MkMxOS44MSAyMS41NDcgMjAuMDAyOCAyMS43Mzk3IDIwLjI0MDYgMjEuNzM5N0gyMi40MDA0QzIyLjYzODIgMjEuNzM5NyAyMi44MzA5IDIxLjU0NyAyMi44MzA5IDIxLjMwOTJWMjAuOTJIMjMuODQ4MUMyNC4yMTQ4IDIwLjkyIDI0LjUxMjIgMjAuNjIyNiAyNC41MTIyIDIwLjI1NTlWMTcuNzQyN0MyNC41MTIyIDE3LjM3NTkgMjQuMjE0OSAxNy4wNzg2IDIzLjg0ODEgMTcuMDc4NloiIGZpbGw9ImJsYWNrIi8+CiAgICAgICAgPHBhdGggZD0iTTguNzgzMTEgNy42MDYyNUM5LjgyNjE0IDcuNjA2MjUgMTAuNjcxNyA2Ljc2MDcxIDEwLjY3MTcgNS43MTc2OEMxMC42NzE3IDQuNjc0NjUgOS44MjYxNCAzLjgyOTEgOC43ODMxMSAzLjgyOTFDNy43NDAwNyAzLjgyOTEgNi44OTQ1MyA0LjY3NDY1IDYuODk0NTMgNS43MTc2OEM2Ljg5NDUzIDYuNzYwNzEgNy43NDAwNyA3LjYwNjI1IDguNzgzMTEgNy42MDYyNVoiIGZpbGw9ImJsYWNrIi8+CiAgICAgICAgPHBhdGggZD0iTTE2LjkwMzkgMTQuOTg1QzE2Ljc1OTEgMTQuOTU1MyAxNi44MDk1IDE0Ljk2MjcgMTUuMjk5OCAxNC45NjI3QzE1LjQ4OTUgMTUuMjgzNiAxNS41OTg4IDE1LjY1NzMgMTUuNTk4OCAxNi4wNTYyVjIxLjQ4NDNDMTUuNTk4OCAyMi4xMzkxIDE2LjExODcgMjIuNTc3OCAxNi42ODM1IDIyLjU3NzhDMTcuMjg3NSAyMi41Nzc4IDE3Ljc3NyAyMi4wODgyIDE3Ljc3NyAyMS40ODQzVjE2LjA1NjJDMTcuNzc3IDE1LjUyOCAxNy40MDI1IDE1LjA4NyAxNi45MDM5IDE0Ljk4NVoiIGZpbGw9ImJsYWNrIi8+CiAgICAgICAgPHBhdGggZD0iTTEzLjQ0MjUgMTQuOTYyNUMxMy4yODg2IDE0Ljk2MjUgOS45OTY1OSAxNC45NjI0IDkuOTA0NjIgMTQuOTYyOEwxMy4zMjkyIDE0LjEzODZMMTIuMDI3NiA4Ljg0NTk1TDE1Ljc0MzUgMy44MDEzMUMxNi4wNDIgMy4zOTYxNSAxNS45NTU0IDIuODI1NjUgMTUuNTUwMiAyLjUyNzIyQzE1LjE0NSAyLjIyODc0IDE0LjU3NDYgMi4zMTUyOSAxNC4yNzYxIDIuNzIwNUwxMC41MjAyIDcuODE5NjFDMTAuNDY3IDcuODMwMjQgOC4yMzAxNSA4LjM3Mzg1IDguMDk3NjUgOC40MjUxN0wzLjQ5MzM0IDMuNzM3OTJDMy4xNDA2NyAzLjM3ODk4IDIuNTYzNjkgMy4zNzM3OCAyLjIwNDY5IDMuNzI2NDVDMS44NDU3IDQuMDc5MTIgMS44NDA1NSA0LjY1NjEgMi4xOTMyMiA1LjAxNTA5TDcuNDI0NzcgMTAuMzQwOEM3LjU2NDgyIDEwLjkxMDMgOC42NTc3NCAxNS4zNTQ0IDguODE4NCAxNi4wMDc2QzguODE3NzEgMTYuMDIzOCA4Ljk3MDg4IDE2LjY5OTMgOS4yMTM4OSAxNi44OTk5QzkuMzAyNzggMTYuOTczMyA5LjQwMzkzIDE3LjAzMTkgOS41MTMxMSAxNy4wNzQ0QzguODQzNzkgMTcuMDc0NCA4LjQxOTQgMTcuMDc0NCA3Ljc0ODg2IDE3LjA3NDRWMTcuMDc4N0gxLjE3NjgxQzAuODEwMDU4IDE3LjA3ODcgMC41MTI2OTUgMTcuMzc2MSAwLjUxMjY5NSAxNy43NDI4VjIwLjI1NkMwLjUxMjY5NSAyMC42MjI3IDAuODEwMDU4IDIwLjkyMDEgMS4xNzY4MSAyMC45MjAxSDIuMzM0MjdWMjEuMzA5M0MyLjMzNDI3IDIxLjU0NzEgMi41MjcwMyAyMS43Mzk4IDIuNzY0ODMgMjEuNzM5OEg0LjkyNDYzQzUuMTYyNDQgMjEuNzM5OCA1LjM1NTE5IDIxLjU0NzEgNS4zNTUxOSAyMS4zMDkzVjIwLjkyMDFIMTEuMjg2NFYxOC43NzAxSDExLjI5MDhWMTcuMTQ5NkgxMi4zNDlWMjEuNDg0MUMxMi4zNDkgMjIuMDg4IDEyLjgzODYgMjIuNTc3NiAxMy40NDI1IDIyLjU3NzZDMTQuMDQ2NCAyMi41Nzc2IDE0LjUzNiAyMi4wODggMTQuNTM2IDIxLjQ4NDFWMTYuMDU2QzE0LjUzNiAxNS40NTIxIDE0LjA0NjQgMTQuOTYyNSAxMy40NDI1IDE0Ljk2MjVaIiBmaWxsPSJibGFjayIvPgogICAgPC9nPgogICAgPGRlZnM+CiAgICAgICAgPGNsaXBQYXRoIGlkPSJjbGlwMF8zMTI1XzIzMjgiPgogICAgICAgICAgICA8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjUxMjY5NSAwLjQ2MzM3OSkiLz4KICAgICAgICA8L2NsaXBQYXRoPgogICAgPC9kZWZzPgo8L3N2Zz4K\"","export default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjcwNzEgMS4wNTYxOEgxNy4yOTIxQzE4LjcxMjcgMS4wNTYxOCAxOS45MDUxIDIuMDUwOTUgMjAuMjA5NSAzLjM4MDgxSDkuNzg5NjlDMTAuMDkzNSAyLjA1MDg0IDExLjI4NzIgMS4wNTYxOCAxMi43MDcxIDEuMDU2MThaIiBmaWxsPSIjMDU2ODM5Ii8+CjxwYXRoIGQ9Ik0wIDcuNzE1OTRDMCA2LjA1OTA5IDEuMzQzMTUgNC43MTU5NCAzIDQuNzE1OTRIOS4wNDczNEgyMC45NTI3SDI3QzI4LjY1NjkgNC43MTU5NCAzMCA2LjA1OTA5IDMwIDcuNzE1OTRWMTYuMTYyNkgxNy4yMjU0VjE1LjUwNzFDMTcuMjI1NCAxNS4xMzc5IDE2LjkyNyAxNC44Mzk1IDE2LjU1NzggMTQuODM5NUgxMy40NDIyQzEzLjA3MyAxNC44Mzk1IDEyLjc3NDYgMTUuMTM3OSAxMi43NzQ2IDE1LjUwNzFWMTYuMTYyMUgwVjcuNzE1OTRaIiBmaWxsPSIjMDU2ODM5Ii8+CjxwYXRoIGQ9Ik0xNC4xMDk4IDE2LjgyOTZWMTYuMTc0NkgxNS44OTAyVjE2LjgyOTZWMTguNTEzMkgxNC4xMDk4VjE2LjgyOTZaIiBmaWxsPSIjMDU2ODM5Ii8+CjxwYXRoIGQ9Ik0zMCAyOC45NDM5SDBWMTcuNDk3MkgxMi43NzQ2VjE5LjE4MDJDMTIuNzc0NiAxOS41NDk0IDEzLjA3MyAxOS44NDc4IDEzLjQ0MjIgMTkuODQ3OEgxNi41NTc4QzE2LjkyNyAxOS44NDc4IDE3LjIyNTQgMTkuNTQ5NCAxNy4yMjU0IDE5LjE4MDJWMTcuNDk3MkgzMFYyOC45NDM5WiIgZmlsbD0iIzA1NjgzOSIvPgo8L3N2Zz4K\"","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preloadImagesInModule = exports.getImages = exports.getItemFromProgram = exports.getItemPositionInProgram = exports.getItemFromPatientProgram = exports.getItemPositionInPatientProgram = exports.parseInternalLink = void 0;\nvar htmlUtils_1 = require(\"../youwell-common/htmlUtils\");\nvar parseInternalLink = function (link) {\n var hashIndex = link.url.indexOf('#');\n var taskOrModuleId = link.url;\n var hash = '';\n if (hashIndex > -1) {\n taskOrModuleId = link.url.substring(0, hashIndex);\n hash = \"#\".concat(link.url.substring(hashIndex + 1));\n }\n return { taskOrModuleId: taskOrModuleId, hash: hash };\n};\nexports.parseInternalLink = parseInternalLink;\nvar getItemPositionInPatientProgram = function (patientProgram, taskOrModuleId) {\n var elementGroup = '';\n var elementIndex = -1;\n var taskIndex = -1;\n if (patientProgram) {\n var groups = Object.keys(patientProgram.groupedElements);\n for (var elementGroupIndex = 0; elementGroupIndex < groups.length; elementGroupIndex++) {\n var group = patientProgram.groupedElements[groups[elementGroupIndex]];\n for (elementIndex = 0; elementIndex < group.length; elementIndex++) {\n var el = group[elementIndex];\n elementGroup = el.elementGroup;\n if ((el.id === taskOrModuleId)\n || (el.module && el.module.id === taskOrModuleId)\n || (el.task && el.task.id === taskOrModuleId)) {\n return { elementGroup: elementGroup, elementIndex: elementIndex, taskIndex: taskIndex };\n }\n if (el.module && el.module.tasks) {\n for (taskIndex = 0; taskIndex < el.module.tasks.length; taskIndex++) {\n var task = el.module.tasks[taskIndex];\n if (task.id === taskOrModuleId) {\n return { elementGroup: elementGroup, elementIndex: elementIndex, taskIndex: taskIndex };\n }\n }\n }\n }\n }\n }\n return { elementGroup: elementGroup, elementIndex: elementIndex, taskIndex: taskIndex };\n};\nexports.getItemPositionInPatientProgram = getItemPositionInPatientProgram;\nvar getItemFromPatientProgram = function (patientProgram, elementId) {\n if (patientProgram) {\n var groups = Object.keys(patientProgram.groupedElements);\n for (var elementGroupIndex = 0; elementGroupIndex < groups.length; elementGroupIndex++) {\n var group = patientProgram.groupedElements[groups[elementGroupIndex]];\n for (var elementIndex = 0; elementIndex < group.length; elementIndex++) {\n var el = group[elementIndex];\n // if (el.id === elementId) return el;\n // if (el.module && el.module.id === elementId) return el.module;\n if (el.task && el.task.id === elementId)\n return el.task;\n if (el.module && el.module.tasks) {\n for (var taskIndex = 0; taskIndex < el.module.tasks.length; taskIndex++) {\n if (el.module.tasks[taskIndex].id === elementId) {\n return el.module.tasks[taskIndex];\n }\n }\n }\n }\n }\n }\n return null;\n};\nexports.getItemFromPatientProgram = getItemFromPatientProgram;\nvar getItemPositionInProgram = function (program, elementId) {\n var moduleIndex = -1;\n var taskIndex = -1;\n if (program) {\n for (moduleIndex = 0; moduleIndex < program.modules.length; moduleIndex++) {\n var module_1 = program.modules[moduleIndex];\n if (module_1.id === elementId) {\n return { moduleIndex: moduleIndex, taskIndex: taskIndex };\n }\n if (module_1 && module_1.tasks) {\n for (taskIndex = 0; taskIndex < module_1.tasks.length; taskIndex++) {\n var task = module_1.tasks[taskIndex];\n if (task.id === elementId) {\n return { moduleIndex: moduleIndex, taskIndex: taskIndex };\n }\n }\n }\n }\n }\n return { moduleIndex: moduleIndex, taskIndex: taskIndex };\n};\nexports.getItemPositionInProgram = getItemPositionInProgram;\nvar getItemFromProgram = function (program, elementId) {\n var _a;\n if (program) {\n for (var moduleIndex = 0; moduleIndex < program.modules.length; moduleIndex++) {\n var module_2 = program.modules[moduleIndex];\n if ((module_2 === null || module_2 === void 0 ? void 0 : module_2.id) === elementId) {\n return module_2;\n }\n for (var taskIndex = 0; taskIndex < ((_a = module_2 === null || module_2 === void 0 ? void 0 : module_2.tasks) === null || _a === void 0 ? void 0 : _a.length); taskIndex++) {\n var task = module_2.tasks[taskIndex];\n if ((task === null || task === void 0 ? void 0 : task.id) === elementId) {\n return task;\n }\n }\n }\n }\n return null;\n};\nexports.getItemFromProgram = getItemFromProgram;\nvar getImages = function (task) {\n var _a;\n return ((_a = task.contentElements) === null || _a === void 0 ? void 0 : _a.reduce(function (prev, curr) { return __spreadArray(__spreadArray([], prev, true), (0, htmlUtils_1.findImageUrls)(curr.htmlContent), true); }, [])) || [];\n};\nexports.getImages = getImages;\nvar preloadImagesInModule = function (module) {\n var _a;\n return (_a = module === null || module === void 0 ? void 0 : module.tasks) === null || _a === void 0 ? void 0 : _a.map(function (t) { return (0, exports.getImages)(t).map(function (id) {\n var img = new Image();\n img.src = id;\n return id;\n }); });\n};\nexports.preloadImagesInModule = preloadImagesInModule;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPublicProgramContentLink = exports.getProgramContentLink = exports.getTaskFromElement = exports.getTask = exports.hasElementSetting = void 0;\nvar constants_1 = require(\"./constants\");\nvar stringUtils_1 = require(\"../youwell-common/stringUtils\");\nvar urls_1 = __importDefault(require(\"../app/urls\"));\nvar taskContentUtils_1 = require(\"./taskContentUtils\");\n// Optionally including label search for backward compatibility\nvar hasElementSetting = function (element, requiredSetting, includeLabelSearch) {\n var _a;\n if (includeLabelSearch === void 0) { includeLabelSearch = false; }\n return ((_a = element\n .settings) === null || _a === void 0 ? void 0 : _a.some(function (e) { return e === requiredSetting; }))\n || (includeLabelSearch && element.label === requiredSetting);\n};\nexports.hasElementSetting = hasElementSetting;\nvar getTaskWithDetails = function (element, task, patientProgramId, elementIndex, elementGroupLength, subIndex) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n if (elementIndex === void 0) { elementIndex = 0; }\n if (elementGroupLength === void 0) { elementGroupLength = 0; }\n if (subIndex === void 0) { subIndex = 0; }\n var elementGroup = element.elementGroup;\n var listLength = element.module ? element.module.tasks.length : elementGroupLength;\n var isSeparateItemsInModule = (0, stringUtils_1.parseBoolString)((_b = (_a = element.module) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b['separate-items']);\n var noSideMenu = (0, stringUtils_1.parseBoolString)((_d = (_c = element.module) === null || _c === void 0 ? void 0 : _c.settings) === null || _d === void 0 ? void 0 : _d['no-side-menu']);\n var isWorkSheet = (0, exports.hasElementSetting)(element, constants_1.patientProgramAppElementSettings.worksheet) || (0, stringUtils_1.parseBoolString)((_e = task.settings) === null || _e === void 0 ? void 0 : _e.worksheet);\n var showCompleteButtonForAppItems = (0, stringUtils_1.parseBoolString)((_g = (_f = element.module) === null || _f === void 0 ? void 0 : _f.settings) === null || _g === void 0 ? void 0 : _g['show-complete-button']);\n var isSubmitTask = (0, stringUtils_1.parseBoolString)((_h = task.settings) === null || _h === void 0 ? void 0 : _h.submit); // set if task should send submit=true on \"Next\"/\"Send\" action\n var showNextPrevNavigation = Boolean(element.module && !isSeparateItemsInModule);\n var showHomeNavigation = !isSeparateItemsInModule && listLength === 1;\n var showBackNavigation = isSeparateItemsInModule;\n var showCompleteNavigation = !isSeparateItemsInModule;\n var hidePrevNavigationIfFirstTask = false;\n var saveAndAbortNavigation = false;\n var redirectHomeAfterLastTask = false;\n var showPopupAfterLastTask = false;\n var showSideMenu = !noSideMenu && Boolean((_k = (_j = element.module) === null || _j === void 0 ? void 0 : _j.tasks) === null || _k === void 0 ? void 0 : _k.length);\n var showProgress = false;\n var showFavourite = false;\n if (elementGroup === constants_1.patientProgramElementGroups.main) {\n showPopupAfterLastTask = true;\n showNextPrevNavigation = !isSeparateItemsInModule;\n showProgress = true;\n showFavourite = true;\n }\n else if (elementGroup === constants_1.patientProgramElementGroups.scheduled) {\n showNextPrevNavigation = listLength > 1 && !isSeparateItemsInModule;\n redirectHomeAfterLastTask = true;\n saveAndAbortNavigation = true;\n showSideMenu = false;\n showProgress = true;\n isSubmitTask = ((_l = task.settings) === null || _l === void 0 ? void 0 : _l.submit) !== undefined ? isSubmitTask : !!task.hasQuestions; // use setting if present otherwise always true if has questions\n }\n else if (elementGroup === constants_1.patientProgramElementGroups.app) {\n showHomeNavigation = true;\n showFavourite = true;\n showCompleteNavigation = showCompleteButtonForAppItems || false;\n }\n else if (elementGroup === constants_1.patientProgramElementGroups.consent || elementGroup === constants_1.patientProgramElementGroups.preContent) {\n showNextPrevNavigation = !isSeparateItemsInModule;\n showHomeNavigation = false;\n hidePrevNavigationIfFirstTask = true;\n redirectHomeAfterLastTask = true;\n showSideMenu = false;\n showProgress = true;\n isSubmitTask = ((_m = task.settings) === null || _m === void 0 ? void 0 : _m.submit) !== undefined ? isSubmitTask : !!task.hasQuestions; // use setting if present otherwise always true if has questions\n }\n else if (elementGroup === constants_1.patientProgramElementGroups.default) {\n showFavourite = true;\n }\n else if (elementGroup === constants_1.patientProgramElementGroups.appointment) {\n showHomeNavigation = true;\n redirectHomeAfterLastTask = true;\n }\n return __assign(__assign({}, task), { taskLabels: (0, stringUtils_1.listFromCommaStrings)(task.label), elementId: element.id, taskName: element.task ? element.name : task.name, elementLabel: element.label, moduleName: element.module ? element.name || element.module.name : element.name, module: element.module, patientProgramId: patientProgramId, patientProgramElementId: element.id, elementIndex: elementIndex, elementGroup: elementGroup, currentTaskNr: Number(element.module ? subIndex : elementIndex), listLength: listLength, elementCompleted: element.completed, progress: listLength > 1 ? element.progress : null, showNextPrevNavigation: showNextPrevNavigation, showHomeNavigation: showHomeNavigation, hidePrevNavigationIfFirstTask: hidePrevNavigationIfFirstTask, saveAndAbortNavigation: saveAndAbortNavigation, redirectHomeAfterLastTask: redirectHomeAfterLastTask, showPopupAfterLastTask: showPopupAfterLastTask, showSideMenu: showSideMenu, showProgress: showProgress, showFavourite: showFavourite, showBackNavigation: showBackNavigation, isSeparateItemsInModule: isSeparateItemsInModule, showCompleteNavigation: showCompleteNavigation, isWorkSheet: isWorkSheet, isSubmitTask: isSubmitTask });\n};\nvar getTask = function (programDetails, elementGroup, elementIndex, subIndex) {\n var _a;\n if (subIndex === void 0) { subIndex = 0; }\n if (!programDetails || !programDetails.groupedElements || !programDetails.groupedElements[elementGroup]) {\n return null;\n }\n var elementsInGroup = programDetails.groupedElements[elementGroup];\n var element = elementsInGroup[Number(elementIndex)];\n if (!element) {\n return null;\n }\n var task = ((_a = element.module) === null || _a === void 0 ? void 0 : _a.tasks) ? element.module.tasks[Number(subIndex)] : element.task;\n if (!task) {\n return null;\n }\n return getTaskWithDetails(element, task, programDetails.id, Number(elementIndex), elementsInGroup.length, Number(subIndex));\n};\nexports.getTask = getTask;\nvar getTaskFromElement = function (element, patientProgramId) {\n var _a;\n if (!element) {\n return null;\n }\n var task = ((_a = element.module) === null || _a === void 0 ? void 0 : _a.tasks) ? element.module.tasks[0] : element.task;\n if (!task) {\n return null;\n }\n return getTaskWithDetails(element, task, patientProgramId);\n};\nexports.getTaskFromElement = getTaskFromElement;\nvar getProgramContentLink = function (link, program) {\n if (!link || !program)\n return null;\n var _a = (0, taskContentUtils_1.parseInternalLink)(link), taskOrModuleId = _a.taskOrModuleId, hash = _a.hash;\n var _b = (0, taskContentUtils_1.getItemPositionInPatientProgram)(program, taskOrModuleId), elementGroup = _b.elementGroup, elementIndex = _b.elementIndex, taskIndex = _b.taskIndex;\n if (elementGroup && elementIndex > -1 && taskIndex > -1) {\n return \"\".concat(urls_1.default.inside.program, \"/\").concat(elementGroup, \"/\").concat(elementIndex, \"/\").concat(taskIndex).concat(hash);\n }\n if (elementGroup && elementIndex > -1) {\n return \"\".concat(urls_1.default.inside.program, \"/\").concat(elementGroup, \"/\").concat(elementIndex).concat(hash);\n }\n return \"\".concat(urls_1.default.inside.programLink, \"/\").concat(taskOrModuleId).concat(hash);\n};\nexports.getProgramContentLink = getProgramContentLink;\nvar getPublicProgramContentLink = function (link, program) {\n var _a = (0, taskContentUtils_1.parseInternalLink)(link), taskOrModuleId = _a.taskOrModuleId, hash = _a.hash;\n var _b = (0, taskContentUtils_1.getItemPositionInProgram)(program, taskOrModuleId), moduleIndex = _b.moduleIndex, taskIndex = _b.taskIndex;\n if (moduleIndex > -1 && taskIndex > -1) { // link is to taskId\n return \"\".concat(urls_1.default.public.program, \"/\").concat(program.id, \"/\").concat(moduleIndex, \"/\").concat(taskIndex).concat(hash);\n }\n if (moduleIndex > -1) { // link is to moduleId\n return \"\".concat(urls_1.default.public.program, \"/\").concat(program.id, \"/\").concat(taskOrModuleId).concat(hash);\n }\n return \"\".concat(urls_1.default.public.programLink, \"/\").concat(taskOrModuleId).concat(hash);\n};\nexports.getPublicProgramContentLink = getPublicProgramContentLink;\n","import * as React from 'react';\r\nimport LinkElement from '../youwell-common/components/taskElements/LinkElement';\r\nimport { getVideos } from '../youwell-common/htmlUtils';\r\nimport { linkTypes } from '../youwell-common/constants';\r\n\r\nconst getTaskVideosFromHtmlContent = task => (task && task.contentElements && task.contentElements.reduce((prev, curr) => [...prev, ...getVideos(curr.htmlContent)], [])) || [];\r\nconst getTaskVideosFromLink = task => (task && task.contentElements && task.contentElements.reduce((prev, curr) => (curr.link && (curr.link.linkType === linkTypes.youtube || curr.link.linkType === linkTypes.vimeo || curr.link.linkType === linkTypes.video)\r\n ? [...prev, { Component: }] : prev), [])) || [];\r\n\r\nconst getTaskVideos = (task) => {\r\n const videos = [];\r\n videos.push(...getTaskVideosFromHtmlContent(task).map(html => ({ html })));\r\n videos.push(...getTaskVideosFromLink(task));\r\n return videos;\r\n};\r\n\r\nexport const getVideosForElement = (element) => {\r\n if (!element) {\r\n return [{\r\n none: true,\r\n }];\r\n }\r\n\r\n const videos = [];\r\n if (element.task && element.task.contentElements) {\r\n videos.push(...getTaskVideos(element.task));\r\n }\r\n if (element.module && element.module.tasks) {\r\n videos.push(...element.module.tasks.reduce((prev, curr) => [...prev, ...getTaskVideos(curr)], []));\r\n }\r\n if (videos.length === 0) {\r\n videos.push({\r\n none: true,\r\n });\r\n }\r\n return videos;\r\n};\r\n\r\nexport const countVideos = elementList => (elementList ? elementList.reduce((prev, curr) => prev + getVideosForElement(curr).filter(d => !d.none).length,\r\n 0) : 0);\r\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\n// import { PageNotFound } from '../../youwell-common/components';\nvar components_1 = require(\"../../common/components\");\nvar ParentConsent_1 = __importDefault(require(\"./ParentConsent\"));\nvar Index = /** @class */ (function (_super) {\n __extends(Index, _super);\n function Index() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Index.prototype.render = function () {\n return (React.createElement(components_1.Layout, { hideHeaderLinks: true, hideMenu: true },\n React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.external.consent, \"/:consentId?/:page?\"), component: ParentConsent_1.default }),\n React.createElement(react_router_dom_1.Route, { component: ParentConsent_1.default }))));\n };\n return Index;\n}(React.Component));\nexports.default = Index;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_1 = require(\"react-router\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar components_1 = require(\"../../common/components\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar store_1 = require(\"../../app/store\");\nvar components_2 = require(\"../../youwell-common/components\");\nvar icons_1 = require(\"../../youwell-common/icons\");\nvar externalUserService_1 = require(\"../../app/services/externalUserService\");\nvar dateUtils_1 = require(\"../../youwell-common/dateUtils\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return (0, core_1.createStyles)({\n main: {},\n consents: {\n margin: theme.spacing(2, 0),\n },\n consentList: {\n marginTop: theme.spacing(2),\n padding: theme.spacing(2),\n background: theme.palette.common.white,\n },\n greenIcon: {\n color: theme.youwell.colors.green,\n },\n consent: {\n padding: theme.spacing(2),\n background: theme.palette.common.white,\n },\n actions: {\n marginTop: theme.spacing(8),\n borderTop: theme.youwell.borders.dim,\n padding: theme.spacing(4),\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n },\n consentCheckBox: {\n marginRight: theme.spacing(4),\n },\n sendButton: {\n minWidht: 100,\n },\n radioGroup: {},\n radio: {},\n consentReceipt: {\n margin: theme.spacing(2, 0),\n background: theme.palette.grey[100],\n padding: theme.spacing(2),\n },\n}); });\nvar currentConsentUrlId = 'c';\nvar ParentConsent = function () {\n var _a, _b;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var _c = (0, react_router_1.useParams)(), consentId = _c.consentId, page = _c.page;\n var translate = (0, translate_1.default)();\n var parentConsents = (0, store_1.useYouwellSelector)(function (state) { return state.externalUserStore.consents; });\n var selectedConsent = consentId && consentId !== currentConsentUrlId ? parentConsents === null || parentConsents === void 0 ? void 0 : parentConsents.find(function (c) { return c.id === Number(consentId); }) : (parentConsents === null || parentConsents === void 0 ? void 0 : parentConsents.length) === 1 ? parentConsents[0] : parentConsents === null || parentConsents === void 0 ? void 0 : parentConsents.find(function (c) { return !c.consentDate; });\n var _d = React.useState(null), consentChecked = _d[0], setConsentChecked = _d[1];\n var hasUnansweredConsents = ((parentConsents === null || parentConsents === void 0 ? void 0 : parentConsents.findIndex(function (c) { return !c.consentDate; })) || -1) > -1;\n var pageIndex = Number(page) || 0;\n var selectedConsentTask = selectedConsent && __assign(__assign({}, (_b = (_a = selectedConsent.consentModule) === null || _a === void 0 ? void 0 : _a.tasks) === null || _b === void 0 ? void 0 : _b[pageIndex]), { moduleName: selectedConsent === null || selectedConsent === void 0 ? void 0 : selectedConsent.consentModule.name, sorting: pageIndex, moduleId: selectedConsent.consentModule.id });\n var sendResponse = function () {\n if (selectedConsent) {\n var response = {\n consentId: selectedConsent.id,\n accept: !!consentChecked,\n // responses: ...\n };\n var redirect = hasUnansweredConsents ? urls_1.default.inside.home : undefined;\n (0, externalUserService_1.submitConsents)(dispatch, response, { callback: function () { return setConsentChecked(null); }, redirect: redirect });\n }\n };\n React.useEffect(function () {\n if (!parentConsents) {\n (0, externalUserService_1.fetchConsents)(dispatch);\n }\n }, [dispatch, parentConsents]);\n if (!parentConsents || parentConsents.length === 0) {\n return (React.createElement(components_1.PageLayout, { title: translate('consentPage.consent') },\n React.createElement(components_1.InfoMessage, { messageKey: \"parentConsent.noContent\" })));\n }\n return (React.createElement(components_1.PageLayout, { title: translate('consentPage.consent') },\n React.createElement(\"div\", { className: classes.main }, parentConsents && parentConsents.length > 1 && (React.createElement(\"div\", { className: classes.consents },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", color: \"primary\" }, translate(hasUnansweredConsents ? 'consentPage.youHaveRequiredConsents' : 'consentPage.yourConsents')),\n React.createElement(core_1.List, { className: classes.consentList }, parentConsents.map(function (c) { return (React.createElement(core_1.ListItem, { key: c.id, button: true, component: react_router_dom_1.Link, to: \"\".concat(urls_1.default.inside.pages.consent, \"/\").concat(c.id), selected: Boolean(selectedConsent && c.id === selectedConsent.id) },\n React.createElement(core_1.ListItemIcon, null, c.consent ? React.createElement(icons_1.CheckedIcon, { className: classes.greenIcon }) : React.createElement(icons_1.UncheckedIcon, null)),\n React.createElement(core_1.ListItemText, { primary: c.consentModule.name }))); }))))),\n React.createElement(React.Fragment, null, selectedConsent && selectedConsentTask && (React.createElement(\"div\", { className: classes.consent },\n React.createElement(components_2.TaskContentDisplay, { task: selectedConsentTask }),\n selectedConsent.consent && selectedConsent.consentDate ? (React.createElement(core_1.Typography, { variant: \"subtitle1\", className: classes.consentReceipt }, translate('consentPage.consentOnDate', { date: (0, dateUtils_1.datestamp)(selectedConsent.consentDate) }))) : (React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.RadioGroup, { className: classes.radioGroup, onChange: function (_e, value) { return setConsentChecked(value === 'true'); } },\n React.createElement(core_1.FormControlLabel, { className: classes.radio, value: \"true\", control: React.createElement(core_1.Radio, { checked: consentChecked !== null ? consentChecked : selectedConsent.consentDate ? selectedConsent.consent : undefined }), label: translate('consentPage.yesIConsent') })),\n React.createElement(core_1.Button, { onClick: sendResponse, variant: \"contained\", color: \"primary\", disabled: !!selectedConsent.consentDate && consentChecked === null, className: classes.sendButton }, translate(selectedConsent.consentDate ? 'consentPage.update' : 'consentPage.send')))))))));\n};\nexports.default = ParentConsent;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasMissingData = void 0;\nvar react_1 = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"../../common/icons\");\nvar AuthStore = __importStar(require(\"../../app/store/AuthStore\"));\nvar UserStore = __importStar(require(\"../../app/store/UserStore\"));\nvar constants_1 = require(\"../../youwell-common/constants\");\nvar components_1 = require(\"../../common/components\");\nvar validation_1 = require(\"./components/validation\");\nvar components_2 = require(\"../../youwell-common/components\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar arrayUtils_1 = require(\"../../youwell-common/arrayUtils\");\nvar apiUrls_1 = __importDefault(require(\"../../youwell-common/apiUrls\"));\nvar objectUtils_1 = require(\"../../youwell-common/objectUtils\");\nvar useForm_1 = __importDefault(require(\"../../youwell-common/useForm\"));\nvar breadcrumbUtil_1 = require(\"../../common/breadcrumbUtil\");\nvar ProfileImageEditor_1 = __importDefault(require(\"./components/ProfileImageEditor\"));\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(1),\n },\n header: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n profileData: {\n marginTop: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n },\n topItems: {\n display: 'flex',\n },\n topLeft: {\n flex: '1 1 50%',\n display: 'flex',\n flexDirection: 'column',\n },\n profileImage: {\n border: theme.youwell.borders.dim,\n margin: theme.spacing(2),\n width: 200,\n minHeight: 200,\n },\n textField: {\n marginBottom: theme.spacing(3),\n },\n actions: {\n marginTop: theme.spacing(1),\n display: 'flex',\n justifyContent: 'flex-end',\n },\n content: {\n margin: theme.spacing(4, 0),\n borderTop: theme.youwell.borders.dim,\n paddingTop: theme.spacing(4),\n },\n contentActions: {\n marginTop: theme.spacing(1),\n display: 'flex',\n justifyContent: 'space-between',\n },\n patientDataMissing: {\n padding: theme.spacing(2),\n marginBottom: theme.spacing(3),\n borderRadius: theme.youwell.shapes.borderRadius,\n backgroundColor: theme.palette.secondary.light,\n color: theme.palette.secondary.contrastText,\n },\n bottomActions: {\n margin: theme.spacing(8, 0, 4),\n borderTop: theme.youwell.borders.dim,\n paddingTop: theme.spacing(4),\n display: 'flex',\n justifyContent: 'flex-end',\n },\n saveButton: {\n marginLeft: theme.spacing(1),\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n currentOrg: {\n background: theme.palette.grey[200],\n },\n}); });\nvar hasMissingData = function (profileData, clientConfig) {\n if ((profileData === null || profileData === void 0 ? void 0 : profileData.userLevel) === constants_1.patientUserLevels.person) {\n return !profileData.name || !profileData.phone || !profileData.email;\n }\n if ((profileData === null || profileData === void 0 ? void 0 : profileData.userLevel) === constants_1.patientUserLevels.patient) {\n if (clientConfig.appSetup.features.emailL4) {\n return !profileData.name || !profileData.phone || !profileData.email;\n }\n return !profileData.name || !profileData.phone;\n }\n return false;\n};\nexports.hasMissingData = hasMissingData;\nvar defaultState = {\n userLevel: '',\n username: '',\n email: '',\n phone: '',\n fnr: '',\n name: '',\n sex: '',\n birthDate: '',\n height: '',\n weight: '',\n newPassword: '',\n newPasswordConfirm: '',\n};\nvar stateFromData = function (data) {\n var initialState = __assign({}, defaultState);\n if (!data) {\n return initialState;\n }\n return Object.keys(defaultState).reduce(function (obj, key) {\n var _a;\n return ((0, objectUtils_1.hasValue)(data[key]) ? __assign(__assign({}, obj), (_a = {}, _a[key] = data[key], _a)) : __assign({}, obj));\n }, __assign(__assign({}, initialState), { isInitializedWithData: true }));\n};\nvar Profile = function () {\n var _a, _b, _c, _d;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var translate = (0, translate_1.default)();\n var profileData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var hasActiveProgram = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.isActiveProgram; });\n var patientDataMissing = clientConfig.appSetup.patient.checkMissingData && (0, exports.hasMissingData)(profileData, clientConfig);\n var _e = (0, react_1.useState)(false), editing = _e[0], setEditing = _e[1];\n var validators = (0, validation_1.getRuleValidators)(profileData === null || profileData === void 0 ? void 0 : profileData.userLevel);\n var send = function (_a) {\n var _b;\n var formValues = _a.formValues;\n if (!profileData)\n return;\n var saveData = Object.keys(formValues).reduce(function (prev, curr) {\n var _a;\n return ((0, objectUtils_1.hasValue)(formValues[curr]) ? __assign(__assign({}, prev), (_a = {}, _a[curr] = formValues[curr], _a)) : prev);\n }, {\n id: profileData.id,\n organizationId: (_b = profileData.organization) === null || _b === void 0 ? void 0 : _b.id,\n userLevel: profileData.userLevel,\n userSettings: profileData.userSettings,\n });\n delete saveData.isInitializedWithData;\n switch (saveData.userLevel) {\n case constants_1.patientUserLevels.none: {\n break;\n }\n case constants_1.patientUserLevels.anonymous: {\n delete saveData.fnr;\n delete saveData.email;\n delete saveData.name;\n delete saveData.phone;\n break;\n }\n case constants_1.patientUserLevels.person: {\n delete saveData.username;\n delete saveData.fnr;\n break;\n }\n case constants_1.patientUserLevels.patient: {\n delete saveData.username;\n delete saveData.newPassword;\n break;\n }\n default: {\n break;\n }\n }\n var callback = function () {\n setEditing(false);\n };\n dispatch(AuthStore.actionCreators.saveUserProfile(saveData, { callback: callback, redirect: patientDataMissing ? urls_1.default.inside.home : undefined }));\n };\n var _f = (0, useForm_1.default)(send, validators, stateFromData(profileData)), handleChange = _f.handleChange, handleSubmit = _f.handleSubmit, formValues = _f.formValues, validationErrors = _f.validationErrors, resetForm = _f.resetForm;\n var handleConfigChange = function (name) { return function (event) {\n var _a;\n var userSettings = __assign(__assign({}, profileData === null || profileData === void 0 ? void 0 : profileData.userSettings), (_a = {}, _a[name] = event.target.checked, _a));\n dispatch(AuthStore.actionCreators.updateUserSettings(userSettings));\n }; };\n var startEdit = function () {\n setEditing(true);\n };\n var cancelEditing = function () {\n setEditing(false);\n resetForm();\n };\n var removeSensor = function (sensor) { return function () {\n dispatch(UserStore.actionCreators.removeSensor(sensor));\n }; };\n var deleteUser = function () {\n if (profileData) {\n dispatch(UserStore.actionCreators.deleteUser(profileData, { redirect: urls_1.default.logout }));\n }\n };\n var saveProfilePicture = function (image, callback) {\n dispatch(UserStore.actionCreators.saveProfilePicture(image, { callback: callback }));\n };\n var deleteProfilePicture = function (callback) {\n dispatch(UserStore.actionCreators.deleteProfilePicture({ callback: callback }));\n };\n var changeOrg = function (orgId) { return function () {\n dispatch(AuthStore.actionCreators.logoutOrg(orgId));\n }; };\n (0, react_1.useEffect)(function () {\n if (profileData && !formValues.isInitializedWithData) {\n resetForm();\n }\n }, [formValues.isInitializedWithData, profileData, resetForm]);\n if (!profileData) {\n return null;\n }\n var sensors = (0, arrayUtils_1.toBoolLookup)(profileData.sensors, 'sensorType');\n var allowIdentifyingInformation = formValues.userLevel !== constants_1.patientUserLevels.anonymous;\n var showPassword = clientConfig.appSetup.patient.useUserNameAndPw || formValues.userLevel === constants_1.patientUserLevels.person;\n var allowEmail = formValues.userLevel !== constants_1.patientUserLevels.patient || clientConfig.appSetup.features.emailL4;\n var isEditing = editing || patientDataMissing;\n return (react_1.default.createElement(components_1.PageLayout, { title: translate('profile.profileHeading'), breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(translate('profile.profile'), translate, clientConfig) },\n react_1.default.createElement(\"form\", { onSubmit: handleSubmit },\n react_1.default.createElement(\"div\", { className: classes.profileData },\n patientDataMissing && (react_1.default.createElement(\"div\", { className: classes.patientDataMissing },\n react_1.default.createElement(core_1.Typography, null, translate('profile.patientDataMissing')))),\n react_1.default.createElement(\"div\", { className: classes.topItems },\n react_1.default.createElement(\"div\", { className: classes.topLeft },\n clientConfig.appSetup.patient.useUserNameAndPw && (react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, label: translate('profile.username'), value: formValues.username, onChange: handleChange('username'), disabled: !isEditing, error: !!validationErrors.username, helperText: validationErrors.username ? translate(validationErrors.username) : null })),\n allowIdentifyingInformation && (react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, label: translate('profile.name'), value: formValues.name, onChange: handleChange('name'), disabled: !isEditing, error: !!validationErrors.name, helperText: validationErrors.name ? translate(validationErrors.name) : null })),\n allowIdentifyingInformation && clientConfig.appSetup.patient.mailAndPhone && (react_1.default.createElement(react_1.default.Fragment, null,\n allowEmail && (react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, label: translate('profile.email'), value: formValues.email, onChange: handleChange('email'), disabled: !isEditing, error: !!validationErrors.email, helperText: validationErrors.email ? translate(validationErrors.email) : null })),\n react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, label: translate('profile.phone'), value: formValues.phone, onChange: handleChange('phone'), disabled: !isEditing, error: !!validationErrors.phone, helperText: validationErrors.phone ? translate(validationErrors.phone) : null })))),\n allowIdentifyingInformation && clientConfig.appSetup.patient.profilePicture && (react_1.default.createElement(\"div\", { className: classes.profileImage },\n react_1.default.createElement(ProfileImageEditor_1.default, { currentImageId: profileData.profileImageId, onSave: saveProfilePicture, onDelete: deleteProfilePicture })))),\n clientConfig.appSetup.features.genderAge && (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, label: translate('profile.sex'), value: formValues.sex, onChange: handleChange('sex'), disabled: !isEditing, select: true },\n react_1.default.createElement(core_1.MenuItem, { value: \"\" }, translate('profile.select_sex')),\n react_1.default.createElement(core_1.MenuItem, { value: \"male\" }, translate('profile.male')),\n react_1.default.createElement(core_1.MenuItem, { value: \"female\" }, translate('profile.female')),\n react_1.default.createElement(core_1.MenuItem, { value: \"other\" }, translate('profile.other'))),\n react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, type: \"date\", InputLabelProps: { shrink: true }, label: translate('profile.birthDate'), disabled: !isEditing, value: formValues.birthDate, onChange: handleChange('birthDate') }))),\n clientConfig.appSetup.features.heightWeight && (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, type: \"number\", label: translate('profile.heightInCm'), value: formValues.height, onChange: handleChange('height'), disabled: !isEditing, error: !!validationErrors.height, helperText: validationErrors.height ? translate(validationErrors.height) : null }),\n react_1.default.createElement(core_1.TextField, { variant: \"outlined\", className: classes.textField, type: \"number\", label: translate('profile.weightInKg'), value: formValues.weight, onChange: handleChange('weight'), disabled: !isEditing, error: !!validationErrors.weight, helperText: validationErrors.weight ? translate(validationErrors.weight) : null }))),\n showPassword && (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(core_1.TextField, { variant: \"outlined\", type: \"password\", inputProps: { autoComplete: 'off' }, className: classes.textField, label: translate('profile.new_password'), value: formValues.newPassword, disabled: !isEditing, onChange: handleChange('newPassword'), error: !!validationErrors.newPassword, helperText: validationErrors.newPassword ? translate(validationErrors.newPassword) : null }),\n react_1.default.createElement(core_1.TextField, { variant: \"outlined\", type: \"password\", inputProps: { autoComplete: 'off' }, className: classes.textField, label: translate('profile.new_password_confirm'), value: formValues.newPasswordConfirm, disabled: !isEditing, onChange: handleChange('newPasswordConfirm'), error: !!validationErrors.newPasswordConfirm, helperText: validationErrors.newPasswordConfirm ? translate(validationErrors.newPasswordConfirm) : null })))),\n react_1.default.createElement(\"div\", { className: classes.actions }, isEditing ? (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(core_1.Button, { variant: \"outlined\", onClick: cancelEditing, className: classes.saveButton, color: \"secondary\" },\n react_1.default.createElement(icons_1.CancelIcon, null),\n translate('cancel')),\n react_1.default.createElement(core_1.Button, { variant: \"contained\", type: \"submit\", className: classes.saveButton, color: \"primary\", startIcon: react_1.default.createElement(icons_1.SaveIcon, null) }, translate('common.save')))) : (react_1.default.createElement(core_1.Button, { onClick: startEdit, \"aria-label\": translate('edit'), variant: \"outlined\" },\n react_1.default.createElement(icons_1.EditIcon, { className: classes.buttonIcon }),\n translate('profile.change'))))),\n react_1.default.createElement(react_1.default.Fragment, null, hasActiveProgram && clientConfig.appSetup.features.notifications && allowIdentifyingInformation && (react_1.default.createElement(\"div\", { className: classes.content },\n react_1.default.createElement(core_1.Typography, { variant: \"h6\", color: \"primary\", gutterBottom: true }, translate('profile.notifications')),\n react_1.default.createElement(core_1.Typography, { variant: \"caption\", display: \"block\", gutterBottom: true }, translate('profile.notificationsDescription')),\n allowEmail && (react_1.default.createElement(core_1.FormControlLabel, { disabled: !profileData.email, control: (react_1.default.createElement(core_1.Switch, { checked: ((_a = profileData.userSettings) === null || _a === void 0 ? void 0 : _a.allowEmailNotifications) || false, onChange: handleConfigChange('allowEmailNotifications'), value: \"allowEmailNotifications\" })), label: translate('profile.allowEmailNotifications') })),\n react_1.default.createElement(core_1.FormControlLabel, { disabled: !profileData.phone, control: (react_1.default.createElement(core_1.Switch, { checked: ((_b = profileData.userSettings) === null || _b === void 0 ? void 0 : _b.allowSmsNotifications) || false, onChange: handleConfigChange('allowSmsNotifications'), value: \"allowSmsNotifications\" })), label: translate('profile.allowSmsNotifications') })))),\n react_1.default.createElement(react_1.default.Fragment, null, clientConfig.appSetup.features.sensors && (react_1.default.createElement(\"div\", { className: classes.content },\n react_1.default.createElement(core_1.Typography, { variant: \"h6\", color: \"primary\", gutterBottom: true }, translate('profile.mySensors')),\n react_1.default.createElement(core_1.Typography, { variant: \"caption\", display: \"block\", gutterBottom: true }, translate('profile.mySensorsDescription')),\n react_1.default.createElement(core_1.List, null, (_c = profileData.sensors) === null || _c === void 0 ? void 0 : _c.map(function (s) { return (react_1.default.createElement(core_1.ListItem, { key: s.id },\n react_1.default.createElement(core_1.ListItemText, { primary: s.name }),\n react_1.default.createElement(core_1.ListItemSecondaryAction, null,\n react_1.default.createElement(core_1.IconButton, { onClick: removeSensor(s), \"aria-label\": translate('removeSensor') },\n react_1.default.createElement(icons_1.DeleteIcon, null))))); })),\n react_1.default.createElement(\"div\", { className: classes.contentActions }, !sensors[constants_1.sensorTypes.fitbit] && (react_1.default.createElement(components_2.FormLink, { to: \"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(apiUrls_1.default.route.oauth, \"/fitbit\"), buttonText: translate('profile.addFitbit'), params: [\n { key: 'callbackUrl', value: urls_1.default.inside.profile },\n ] })))))),\n react_1.default.createElement(react_1.default.Fragment, null, ((_d = profileData.connectedOrganizations) === null || _d === void 0 ? void 0 : _d.length) > 1 && (react_1.default.createElement(\"div\", { className: classes.content },\n react_1.default.createElement(core_1.Typography, { variant: \"h6\", color: \"primary\", gutterBottom: true }, translate('profile.myPrograms')),\n react_1.default.createElement(core_1.Typography, { variant: \"caption\", display: \"block\", gutterBottom: true }, translate('profile.myProgramsDescription')),\n react_1.default.createElement(core_1.List, { dense: true }, profileData.connectedOrganizations.map(function (org) {\n var _a;\n var _b;\n return (react_1.default.createElement(core_1.ListItem, { key: org.id, onClick: changeOrg(org.id), button: true, className: (0, classnames_1.default)((_a = {}, _a[classes.currentOrg] = org.id === ((_b = profileData.organization) === null || _b === void 0 ? void 0 : _b.id), _a)) },\n react_1.default.createElement(core_1.ListItemText, { primary: org.name })));\n }))))),\n react_1.default.createElement(\"div\", { className: classes.bottomActions }, clientConfig.appSetup.features.selfDelete && (react_1.default.createElement(components_1.ConfirmButton, { confirmTitle: translate('profile.deleteUser'), confirmText: translate('profile.reallyDeleteUser'), onClick: deleteUser, danger: true }, translate('profile.deleteUser'))))));\n};\nexports.default = Profile;\n","import {\n Button, IconButton, makeStyles,\n} from '@material-ui/core';\nimport React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport AvatarEditor from 'react-avatar-editor';\nimport { getTranslate } from 'react-localize-redux';\nimport { useSelector } from 'react-redux';\nimport classnames from 'classnames';\n\nimport {\n AddImageIcon, RotateIcon, ZoomInIcon, ZoomOutIcon,\n} from '../../../common/icons';\nimport apiUrls from '../../../youwell-common/apiUrls';\nimport { Image } from '../../../youwell-common/components';\nimport PortalModal from '../../../common/components/PortalModal';\nimport { youwellFetch } from '../../../youwell-common/fetchUtils';\n\nconst canvasBorder = 50;\nconst useStyles = makeStyles(theme => ({\n root: {\n minHeight: props => props.width + 2 * canvasBorder,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n upload: {\n display: 'none',\n },\n currentImage: {\n width: props => props.width * 0.7,\n marginBottom: theme.spacing(2),\n },\n uploadButton: {\n marginBottom: theme.spacing(2),\n },\n deleteCurrent: {\n color: theme.palette.error.main,\n },\n editor: {\n border: theme.youwell.borders.dim,\n },\n imageActions: {\n width: props => props.width + 2 * canvasBorder,\n margin: theme.spacing(2, 0),\n display: 'flex',\n },\n flex: {\n flex: '1 1 auto',\n },\n cancelButton: {\n marginRight: theme.spacing(1),\n },\n imageButton: {\n width: '100%',\n },\n noImage: {\n width: '100%',\n height: '100%',\n },\n image: {\n width: '100%',\n },\n addOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: theme.palette.grey[100],\n opacity: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n '$imageButton:hover &': {\n opacity: 0.7,\n },\n\n '$imageButton$noImage &': {\n opacity: 1,\n },\n },\n addIcon: {\n width: '30%',\n height: '30%',\n },\n}));\n\nconst ProfileImageEditor = ({\n width, onSave, onDelete, currentImageId,\n}) => {\n const classes = useStyles({ width });\n const translate = useSelector(state => getTranslate(state.localize));\n const [image, setImage] = useState(null);\n const [scale, setScale] = useState(1.2);\n const [rotation, setRotation] = useState(0);\n const [modalOpen, setModalOpen] = useState(false);\n const editor = useRef(null);\n\n const openModal = () => {\n setModalOpen(true);\n };\n const closeModal = () => {\n setImage(null);\n setRotation(0);\n setScale(1.2);\n setModalOpen(false);\n };\n\n const handleFileUpload = (event) => {\n const file = event.target.files[0];\n setImage(file);\n };\n\n const rotate = () => {\n setRotation(prev => prev - 90);\n };\n const scaleImage = direction => () => {\n setScale(prev => prev + (direction * 0.2));\n };\n\n const onClickSave = () => {\n if (editor.current) {\n // This returns a HTMLCanvasElement, it can be made into a data URL or a blob,\n // drawn on another canvas, or added to the DOM.\n const canvas = editor.current.getImage();\n\n // If you want the image resized to the canvas size (also a HTMLCanvasElement)\n // const canvas = editor.current.getImageScaledToCanvas();\n\n // console.log('save', { canvas, canvasScaled });\n\n const canvasUrl = canvas.toDataURL();\n youwellFetch(canvasUrl)\n .then(res => res.blob())\n .then(blob => onSave(blob, closeModal));\n }\n };\n\n const cancelEdit = () => {\n setImage(null);\n };\n\n const deleteCurrent = () => {\n onDelete(closeModal);\n };\n\n const imageUrl = currentImageId ? `${apiUrls.baseUrl}/${apiUrls.app.user}/image/${currentImageId}` : '';\n\n return (\n <>\n \n \n {!image ? (\n <>\n {imageUrl && (\n
\n )}\n
\n
\n\n {imageUrl && (\n
\n )}\n >\n ) : (\n <>\n
\n
\n
\n \n \n\n
\n \n \n\n
\n \n \n\n
\n\n
\n\n
\n
\n >\n )}\n
\n \n\n \n >\n );\n};\n\nProfileImageEditor.propTypes = {\n onSave: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n width: PropTypes.number,\n currentImageId: PropTypes.number,\n};\n\nProfileImageEditor.defaultProps = {\n width: 250,\n currentImageId: null,\n};\n\nexport default ProfileImageEditor;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRuleValidators = exports.defaultValidators = void 0;\nvar validationUtils_1 = require(\"../../../youwell-common/validationUtils\");\nvar constants_1 = require(\"../../../youwell-common/constants\");\nexports.defaultValidators = {\n fnr: validationUtils_1.validateFnr,\n email: validationUtils_1.validateEmail,\n userLevel: validationUtils_1.validateRequired,\n newPassword: validationUtils_1.validatePassword,\n newPasswordConfirm: validationUtils_1.validatePasswordConfirm,\n};\nvar getRuleValidators = function (userLevel) {\n switch (userLevel) {\n case constants_1.patientUserLevels.none: {\n return {\n userLevel: validationUtils_1.validateRequired,\n name: validationUtils_1.validateRequired,\n fnr: validationUtils_1.validateFnr,\n email: validationUtils_1.validateEmail,\n };\n }\n case constants_1.patientUserLevels.anonymous: {\n return {\n userLevel: validationUtils_1.validateRequired,\n username: validationUtils_1.validateRequired,\n newPassword: validationUtils_1.validatePassword,\n newPasswordConfirm: validationUtils_1.validatePasswordConfirm,\n };\n }\n case constants_1.patientUserLevels.person: {\n return {\n userLevel: validationUtils_1.validateRequired,\n name: validationUtils_1.validateRequired,\n email: [validationUtils_1.validateEmail, validationUtils_1.validateRequired],\n newPassword: validationUtils_1.validatePassword,\n newPasswordConfirm: validationUtils_1.validatePasswordConfirm,\n };\n }\n case constants_1.patientUserLevels.patient: {\n return {\n userLevel: validationUtils_1.validateRequired,\n name: validationUtils_1.validateRequired,\n fnr: [validationUtils_1.validateFnr, validationUtils_1.validateRequired],\n email: validationUtils_1.validateEmail,\n };\n }\n default: {\n return exports.defaultValidators;\n }\n }\n};\nexports.getRuleValidators = getRuleValidators;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\nimport { Link } from 'react-router-dom';\n\nimport {\n withStyles, Typography, Button, LinearProgress, Card, CardActionArea,\n} from '@material-ui/core';\n\nimport { patientProgramStatus } from '../../youwell-common/constants';\nimport { hasValue } from '../../youwell-common/objectUtils';\nimport { HtmlContent, Image, TaskContentDisplay } from '../../youwell-common/components';\nimport { activityLabels, patientProgramElementGroups, patientProgramAppElementSettings } from '../../common/constants';\nimport { InfoMessage, ModuleProgress, TrackedLink } from '../../common/components';\nimport { getTaskFromElement, hasElementSetting } from '../../common/taskUtils';\nimport { PROGRAM_CURRENTPROGRAM_RECEIVED } from '../../app/store/actions';\nimport UnfinishedTasksBox from './components/UnfinishedTasksBox';\nimport ModuleBoxFlat from './components/ModuleBoxFlat';\nimport CurrentModuleBox from './components/CurrentModuleBox';\nimport ScheduledTasksBox from './components/ScheduledTasksBox';\nimport CalendarBox from './components/CalendarBox';\n\nimport { dashboardItems, dashboardItemsCustom } from '../../app/appSetup';\nimport AppointmentBox from './components/AppointmentBox';\nimport TimelineBox from './components/TimelineBox';\nimport { GreyCloud } from '../../common/image';\nimport urls from '../../app/urls';\nimport { getImageUrl } from '../../youwell-common/apiUrls';\n\nconst styles = theme => ({\n root: {\n },\n welcome: {\n // display: 'flex',\n // alignItems: 'center',\n\n [theme.breakpoints.down('md')]: {\n padding: theme.spacing(3, 3),\n },\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(1.5),\n },\n },\n welcomeContent: {\n flex: '1 1 auto',\n },\n welcomeTitle: {\n fontWeight: 500,\n outline: 'none',\n borderLeft: theme.youwell.borders.secondary,\n margin: theme.spacing(2, 0),\n padding: theme.spacing(1, 2),\n },\n inactiveMessage: {\n width: '100%',\n marginBottom: theme.spacing(2),\n padding: theme.spacing(2),\n background: theme.youwell.colors.secondaryBackground,\n color: theme.youwell.colors.primary,\n },\n logo: {\n width: 150,\n\n [theme.breakpoints.down('xs')]: {\n width: 50,\n },\n },\n programDescription: {\n marginTop: theme.spacing(1),\n clear: 'both',\n },\n waitMessage: {\n marginBottom: theme.spacing(8),\n },\n content: {\n marginTop: theme.spacing(8),\n },\n contentBox: {\n padding: theme.spacing(4, 10),\n\n [theme.breakpoints.down('md')]: {\n padding: theme.spacing(3, 3),\n },\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(3, 1.5),\n },\n },\n alternativeContent: {\n background: theme.palette.common.white,\n padding: theme.spacing(2),\n },\n active: {\n // border: theme.youwell.borders.primary,\n },\n mainModules: {\n position: 'relative',\n },\n mainModulesBackgroundImage: {\n position: 'absolute',\n top: 90,\n left: 0,\n width: '100%',\n opacity: 0.6,\n\n [theme.breakpoints.down('md')]: {\n left: 0,\n width: '100%',\n },\n\n [theme.breakpoints.down('sm')]: {\n display: 'none',\n },\n },\n moduleTitle: {\n outline: 'none',\n borderLeft: theme.youwell.borders.secondary,\n padding: theme.spacing(1, 2),\n },\n modules: {\n position: 'relative',\n display: 'flex',\n flexWrap: 'wrap',\n },\n moduleBoxBorder: {\n width: '100%',\n margin: theme.spacing(2, 0),\n borderBottom: theme.youwell.borders.secondary,\n borderBottomWidth: 1,\n\n [theme.breakpoints.down('sm')]: {\n display: 'none',\n },\n },\n\n module: {\n flexBasis: '25%',\n padding: theme.spacing(2),\n\n [theme.breakpoints.down('sm')]: {\n flexBasis: '33%',\n padding: theme.spacing(3, 2),\n },\n\n [theme.breakpoints.down('xs')]: {\n flexBasis: '100%',\n padding: theme.spacing(4, 2),\n },\n },\n exitButtonContainer: {\n display: 'flex',\n justifyContent: 'center',\n marginTop: theme.spacing(8),\n },\n exitButton: {\n minWidth: 300,\n padding: theme.spacing(1),\n },\n infoContent: {\n margin: theme.spacing(2),\n },\n healthTasks: {\n margin: theme.spacing(2, 0),\n },\n healthTasksContent: {\n padding: theme.spacing(3),\n display: 'flex',\n justifyContent: 'space-between',\n },\n progressContainer: {\n display: 'flex',\n flexWrap: 'wrap',\n flexGrow: 2,\n alignItems: 'center',\n justifyContent: 'flex-start',\n\n '@media print': {\n display: 'none',\n },\n },\n programImageContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n\n },\n programImage: {\n marginLeft: theme.spacing(1),\n height: 90,\n\n [theme.breakpoints.down('xs')]: {\n height: 'auto',\n maxWidth: 80,\n },\n },\n progressBar: {\n height: 12,\n maxWidth: 200,\n minWidth: 120,\n flexGrow: 1,\n },\n progressBarRounded: {\n background: theme.palette.primary.main,\n borderRadius: theme.youwell.shapes.borderRadius,\n border: '2px solid',\n },\n progressBarFill: {\n background: theme.youwell.colors.highlight,\n borderRadius: theme.youwell.shapes.borderRadius,\n },\n progressText: {\n marginLeft: theme.spacing(1),\n },\n});\n\nclass Dashboard extends React.Component {\n componentDidMount() {\n if (this.props.prevPathname?.startsWith('/inside/program')) {\n if (this.modulesRef) this.modulesRef.focus();\n }\n }\n\n componentDidUpdate(prevProps) {\n // Perform update when hasLoaded changes\n if (prevProps.hasLoaded !== this.props.hasLoaded) {\n if (this.titleRef) this.titleRef.focus();\n }\n }\n\n getNextElementIndex = () => this.props.programDetails.groupedElements[patientProgramElementGroups.main]?.findIndex(d => !d.completed && !d.disabled)\n\n getIntroElement = completed => this.props.programDetails?.appElements?.find(d => hasElementSetting(d, patientProgramAppElementSettings.intro, true) && !d.disabled && (completed ? d.completed : !d.completed));\n\n getDashboardInfoElement = () => this.props.programDetails?.appElements?.find(d => hasElementSetting(d, patientProgramAppElementSettings.dashboardInfo) && !d.disabled);\n\n renderItem = (item) => {\n const {\n classes, translate, programDetails, profileData, clientConfig,\n } = this.props;\n\n const mainElements = programDetails.groupedElements[patientProgramElementGroups.main] || [];\n const progress = programDetails.completedModules / programDetails.totalModules;\n const isInActiveProgram = programDetails.status === patientProgramStatus.inactive;\n const availableScheduledTasks = programDetails.scheduledElements.filter(d => !d.completed && !d.disabled);\n\n switch (item) {\n case dashboardItems.welcome: {\n const firstVisit = true; // check to be implemented..\n\n return (\n \n {isInActiveProgram ? (\n <>\n {availableScheduledTasks.length > 0 ? (\n
\n {translate('dashboard.inactiveProgramWithQuestionnaires')}\n \n ) : (\n
\n {translate('dashboard.inactiveProgram')}\n \n )}\n >\n ) : (\n <>\n
\n {profileData ? (\n { this.titleRef = thisRef; }} tabIndex=\"-1\">\n {translate(firstVisit ? 'dashboard.welcomeUser' : 'dashboard.welcomeBackUser', { name: profileData.name || '' })}\n \n ) : (\n { this.titleRef = thisRef; }} tabIndex=\"-1\">\n {translate('dashboard.welcome')}\n \n )}\n {/* {this.renderItem(dashboardItems.progress)} */}\n
\n {/* {!programDetails.program.description && this.renderItem(dashboardItems.programIcon)} */}\n
\n {clientConfig.appSetup.features.timeline &&
}\n >\n )}\n
\n );\n }\n case dashboardItems.programIcon: {\n const programImageUrl = programDetails.program.frontImageId ? getImageUrl(programDetails.program.frontImageId) : null;\n\n if (!programImageUrl) return null;\n\n return (\n \n \n
\n );\n }\n case dashboardItems.progress: {\n if (!programDetails.isActiveProgram || !hasValue(progress)) return null;\n return (\n \n \n \n {translate('common.progressCompleted', { progress: Math.round(progress * 100) })}\n \n
\n );\n }\n case dashboardItems.programDescription: {\n return (\n \n );\n }\n case dashboardItems.questionnaires: {\n return (\n \n );\n }\n case dashboardItems.intro: {\n if (!programDetails.isActiveProgram) return null;\n const introElement = this.getIntroElement();\n\n return introElement && (\n \n );\n }\n case dashboardItems.modules: {\n const nextElementIndex = this.getNextElementIndex();\n\n return mainElements?.length > 0 && (\n \n
{ this.modulesRef = thisRef; }} tabIndex=\"-1\">\n {translate('dashboard.modules')}\n \n
\n\n
\n {mainElements.map((element, i) => (\n
\n \n { (i + 1 < mainElements.length) && ((i + 1) % 4 === 0) && (\n \n )}\n \n ))}\n
\n
\n );\n }\n case dashboardItemsCustom.unfinished: {\n if (!programDetails.isActiveProgram) return null;\n const unfinishedElements = mainElements.reduce((prev, curr) => {\n if (!curr || !curr.module || !curr.module.tasks || curr.totalTasksVisited < 1) {\n return prev;\n }\n\n const current = {\n id: curr.id,\n indexInGroup: curr.indexInGroup,\n moduleName: curr.name,\n tasks: curr.module.tasks.map((t, taskIndex) => ({\n id: t.id, name: t.name, taskIndex, ok: t.completed || !t.visited,\n })).filter(d => !d.ok),\n };\n\n if (current.tasks.length === 0) {\n return prev;\n }\n\n return prev.length > 0 ? [...prev, current] : [current];\n }, []);\n\n return (\n \n );\n }\n case dashboardItemsCustom.progress: {\n if (!programDetails.isActiveProgram) return null;\n const nextElementIndex = this.getNextElementIndex();\n const currentModule = nextElementIndex > -1 && nextElementIndex < mainElements.length ? mainElements[nextElementIndex] : null;\n\n return (\n \n );\n }\n case dashboardItemsCustom.calendar: {\n return (\n \n );\n }\n case dashboardItemsCustom.completedIntro: {\n const introElement = this.getIntroElement(true);\n\n return introElement && (\n \n );\n }\n case dashboardItemsCustom.waitingForScheduled: {\n const hasAvailableScheduledTasks = availableScheduledTasks.length > 0;\n\n return hasAvailableScheduledTasks ? null : (\n \n );\n }\n case dashboardItemsCustom.exit: {\n return (\n \n \n
\n );\n }\n case dashboardItemsCustom.info: {\n const infoElement = this.getDashboardInfoElement();\n const task = getTaskFromElement(infoElement);\n\n return task && (\n \n \n
\n );\n }\n case dashboardItems.healthTasks: {\n if (!programDetails.isActiveProgram || !clientConfig.appSetup.features.health) return null;\n\n return (\n \n \n \n {translate('health.rememberYourDaily')}\n \n \n \n \n );\n }\n default:\n return null;\n }\n }\n\n render() {\n const {\n classes, programDetails, hasLoaded, clientConfig,\n } = this.props;\n\n if (!clientConfig) {\n return null;\n }\n\n if (!programDetails) {\n if (hasLoaded) {\n return (\n \n \n
\n );\n }\n return null;\n }\n\n return (\n <>\n {clientConfig.appSetup.features.moduleProgress && }\n\n \n {clientConfig.appSetup.dashboard.map(item => (\n \n {this.renderItem(item)}\n \n ))}\n
\n >\n );\n }\n}\n\nDashboard.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n clientConfig: PropTypes.object,\n programDetails: PropTypes.object,\n hasLoaded: PropTypes.bool,\n prevPathname: PropTypes.string,\n profileData: PropTypes.object,\n};\n\nDashboard.defaultProps = {\n clientConfig: null,\n programDetails: null,\n hasLoaded: false,\n prevPathname: null,\n profileData: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n prevPathname: state.pageSettings.prevPathname,\n profileData: state.auth.profileData,\n clientConfig: state.auth.clientConfig,\n programDetails: state.programStore.currentProgram,\n hasLoaded: Boolean(state.programStore.requests[PROGRAM_CURRENTPROGRAM_RECEIVED]\n && state.programStore.requests[PROGRAM_CURRENTPROGRAM_RECEIVED].completed),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(Dashboard));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar LoadMedicines_1 = __importDefault(require(\"../pages/health/components/LoadMedicines\"));\nvar LoadHealthRegistration_1 = __importDefault(require(\"../pages/health/components/LoadHealthRegistration\"));\nvar youwell_common_1 = require(\"../../youwell-common\");\nvar components_1 = require(\"../../youwell-common/components\");\nvar LoadCurrentProgram_1 = __importDefault(require(\"./components/LoadCurrentProgram\"));\nvar constants_1 = require(\"../../youwell-common/constants\");\nvar UserStore = __importStar(require(\"../../app/store/UserStore\"));\nvar AuthStore = __importStar(require(\"../../app/store/AuthStore\"));\nvar Index_1 = __importDefault(require(\"../pages/Index\"));\nvar Index_2 = __importDefault(require(\"../program/Index\"));\nvar MessageList_1 = __importDefault(require(\"../messages/MessageList\"));\nvar Videochat_1 = __importDefault(require(\"../videochat/Videochat\"));\nvar Profile_1 = __importStar(require(\"../home/Profile\"));\nvar Dashboard_1 = __importDefault(require(\"./Dashboard\"));\nvar Consent_1 = __importDefault(require(\"../pages/Consent\"));\nvar MissingGuardianConsent_1 = __importDefault(require(\"../pages/MissingGuardianConsent\"));\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar LoadCurrentProgramResponses_1 = __importDefault(require(\"./components/LoadCurrentProgramResponses\"));\nvar LoadProfileData_1 = __importDefault(require(\"./components/LoadProfileData\"));\nvar objectUtils_1 = require(\"../../youwell-common/objectUtils\");\nvar constants_2 = require(\"../../common/constants\");\nvar components_2 = require(\"../../common/components\");\nvar taskUtils_1 = require(\"../../common/taskUtils\");\nvar store_1 = require(\"../../app/store\");\nvar USER_IDLE_TIMEOUT_IN_MINUTES = 30;\nvar POLLING_INTERVAL_IN_MINUTES = 5;\nvar Index = function () {\n var _a;\n var dispatch = (0, store_1.useYouwellDispatch)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var profileData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var hasUnansweredConsents = (0, store_1.useYouwellSelector)(function (state) { return state.auth.hasUnansweredConsents; });\n var unAnsweredConsentIndex = (0, store_1.useYouwellSelector)(function (state) { return (state.programStore.currentProgram && (0, objectUtils_1.hasValue)(state.programStore.currentProgram.unAnsweredConsentIndex)\n ? state.programStore.currentProgram.unAnsweredConsentIndex : -1); });\n var unAnsweredPreContentIndex = (0, store_1.useYouwellSelector)(function (state) { return (state.programStore.currentProgram && (0, objectUtils_1.hasValue)(state.programStore.currentProgram.unAnsweredPreContentIndex)\n ? state.programStore.currentProgram.unAnsweredPreContentIndex : -1); });\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n var hasMissingGuardianConsents = (0, store_1.useYouwellSelector)(function (state) { return state.auth.hasMissingGuardianConsents; });\n var healthRegistrationEnabled = !!clientConfig.appSetup.features.health;\n var logoutOnIdle = function () {\n dispatch(AuthStore.actionCreators.logout(constants_1.logoutReasons.idleTimeout));\n };\n var getUserState = function () {\n dispatch(UserStore.actionCreators.getUserState());\n };\n var patientDataMissing = clientConfig.appSetup.patient.checkMissingData && (0, Profile_1.hasMissingData)(profileData, clientConfig);\n var showPrePage = patientDataMissing || hasUnansweredConsents || hasMissingGuardianConsents || unAnsweredConsentIndex > -1 || unAnsweredPreContentIndex > -1;\n var sessionLifetime = youwell_common_1.Auth.getSessionLifetime();\n var getInternalLink = function (link) {\n if (!(link === null || link === void 0 ? void 0 : link.url))\n return null;\n if (link.url.startsWith('page:')) {\n var pageId = link.url.substring(5);\n return urls_1.default.inside[pageId] || urls_1.default.inside.pages[pageId];\n }\n return (0, taskUtils_1.getProgramContentLink)(link, currentProgram);\n };\n var renderPrePage = function () {\n if (hasMissingGuardianConsents) {\n return (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.missingGuardianConsent, component: MissingGuardianConsent_1.default }),\n React.createElement(react_router_dom_1.Route, { render: function () { return (React.createElement(react_router_dom_1.Redirect, { to: { pathname: urls_1.default.inside.pages.missingGuardianConsent } })); } })));\n }\n if (hasUnansweredConsents) {\n return (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.inside.pages.consent, \"/:consentId?\"), component: Consent_1.default }),\n React.createElement(react_router_dom_1.Route, { render: function () { return (React.createElement(react_router_dom_1.Redirect, { to: { pathname: urls_1.default.inside.pages.consent } })); } })));\n }\n if (unAnsweredConsentIndex > -1) {\n // backwards compatibility for old consent-group items\n return (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.inside.program, \"/\").concat(constants_2.patientProgramElementGroups.consent), component: Index_2.default }),\n React.createElement(react_router_dom_1.Route, { render: function () { return (React.createElement(react_router_dom_1.Redirect, { to: { pathname: \"\".concat(\"\".concat(urls_1.default.inside.program, \"/\").concat(constants_2.patientProgramElementGroups.consent), \"/\").concat(unAnsweredConsentIndex, \"/\").concat(urls_1.default.inside.parts.resumeLatest) } })); } })));\n }\n if (unAnsweredPreContentIndex > -1) {\n return (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.inside.program, \"/\").concat(constants_2.patientProgramElementGroups.preContent), component: Index_2.default }),\n React.createElement(react_router_dom_1.Route, { render: function () { return (React.createElement(react_router_dom_1.Redirect, { to: { pathname: \"\".concat(\"\".concat(urls_1.default.inside.program, \"/\").concat(constants_2.patientProgramElementGroups.preContent), \"/\").concat(unAnsweredPreContentIndex, \"/\").concat(urls_1.default.inside.parts.resumeLatest) } })); } })));\n }\n if (patientDataMissing) {\n return (React.createElement(Profile_1.default, null));\n }\n return null;\n };\n return (React.createElement(React.Fragment, null,\n React.createElement(components_1.ErrorBoundary, { id: \"Inside_Top\" },\n React.createElement(components_2.PageTitle, null),\n sessionLifetime > 0 && (React.createElement(components_1.IdleTimer, { timeoutInMinutes: USER_IDLE_TIMEOUT_IN_MINUTES, onIdle: logoutOnIdle, hasInactivityAlert: true })),\n clientConfig.appSetup.patient.pollState && (React.createElement(components_1.PollData, { dataCall: getUserState, pollingIntervalInMinutes: POLLING_INTERVAL_IN_MINUTES }))),\n React.createElement(components_1.ErrorBoundary, { id: \"Inside_Loading\" },\n React.createElement(LoadProfileData_1.default, null),\n React.createElement(LoadCurrentProgram_1.default, null),\n React.createElement(LoadCurrentProgramResponses_1.default, null),\n React.createElement(components_2.InternalLinkLoader, { linkUrlFunction: function (link) { return getInternalLink(link); } }),\n React.createElement(components_2.ContentVariableLoader, { currentProgram: currentProgram, patientData: profileData }),\n healthRegistrationEnabled && React.createElement(LoadHealthRegistration_1.default, null),\n ((_a = clientConfig.appSetup.features.health) === null || _a === void 0 ? void 0 : _a.medicine) && React.createElement(LoadMedicines_1.default, null)),\n React.createElement(components_2.Layout, { hideHeaderLinks: showPrePage, hideMenu: showPrePage }, renderPrePage() || (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { exact: true, path: urls_1.default.inside.home, component: Dashboard_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.profile, component: Profile_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.chat, component: MessageList_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.videochat, component: Videochat_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.program, component: Index_2.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.home, component: Index_1.default }),\n React.createElement(react_router_dom_1.Route, { component: Dashboard_1.default }))))));\n};\nexports.default = Index;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport {\n withStyles, Typography,\n} from '@material-ui/core';\n\nimport * as UserStore from '../../../app/store/UserStore';\n\nimport { dateWithOptionalTime, isFuture } from '../../../youwell-common/dateUtils';\nimport { sortByDateAscending } from '../../../youwell-common/arrayUtils';\nimport urls from '../../../app/urls';\nimport { TrackedLink } from '../../../common/components';\nimport { activityLabels } from '../../../common/constants';\n\nconst styles = theme => ({\n root: {\n border: theme.youwell.borders.dim,\n padding: theme.spacing(1),\n background: theme.palette.grey[50],\n },\n header: {\n display: 'flex',\n },\n date: {\n marginRight: theme.spacing(1),\n },\n content: {\n\n },\n mapIFrame: {\n marginTop: theme.spacing(1),\n width: '100%',\n height: '400px',\n },\n});\n\nclass AppointmentBox extends React.Component {\n render() {\n const {\n classes, translate, className, elements,\n } = this.props;\n\n const futureElements = elements?.filter(d => isFuture(d.startTime, true));\n\n if (!futureElements?.length) {\n return null;\n }\n\n const element = sortByDateAscending(futureElements, 'startTime')[0];\n\n return (\n \n
\n\n \n {translate('dashboard.nextAppointment')}\n \n\n \n \n {dateWithOptionalTime(element.startTime, translate)}\n \n \n {element.name}\n \n
\n \n
\n );\n }\n}\n\nAppointmentBox.propTypes = {\n classes: PropTypes.object.isRequired,\n // clientConfig: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n elements: PropTypes.array,\n className: PropTypes.string,\n};\n\nAppointmentBox.defaultProps = {\n className: null,\n elements: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(UserStore.actionCreators, dispatch),\n});\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(AppointmentBox));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\n\nimport {\n withStyles, Typography,\n} from '@material-ui/core';\n\n\nimport Calendar from '../../pages/Calendar/Calendar';\n\nconst styles = theme => ({\n root: {\n background: theme.palette.grey[100],\n padding: theme.spacing(2),\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(2, 4),\n },\n },\n topContainer: {\n },\n title: {\n marginBottom: theme.spacing(2),\n fontWeight: 500,\n },\n description: {\n marginBottom: theme.spacing(1),\n },\n content: {\n [theme.breakpoints.down('xs')]: {\n background: theme.palette.grey[100],\n },\n },\n});\n\nclass CalendarBox extends React.Component {\n render() {\n const {\n classes, translate, className,\n } = this.props;\n\n return (\n \n
\n \n {translate('dashboard.calendar')}\n \n \n {translate('dashboard.calendarDescription')}\n \n
\n
\n\n \n
\n
\n );\n }\n}\n\nCalendarBox.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n className: PropTypes.string,\n};\n\nCalendarBox.defaultProps = {\n className: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(CalendarBox));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { connect } from 'react-redux';\nimport { Translate, getTranslate } from 'react-localize-redux';\nimport { bindActionCreators } from 'redux';\n\nimport {\n withStyles, Typography, Button,\n} from '@material-ui/core';\n\nimport * as ProgramStore from '../../../app/store/ProgramStore';\n\nimport urls from '../../../app/urls';\nimport { getImageUrl } from '../../../youwell-common/apiUrls';\nimport { Image, HtmlContent } from '../../../youwell-common/components';\nimport { TrackedLink, ProgressBar } from '../../../common/components';\nimport MyTaskContent from '../../program/components/MyTaskContent';\n\nconst styles = theme => ({\n root: {\n background: theme.youwell.colors.lightGreen,\n display: 'flex',\n flexWrap: 'wrap',\n\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n },\n },\n topContainer: {\n flex: '0 0 100%',\n },\n title: {\n margin: theme.spacing(2, 0),\n padding: theme.spacing(1, 2),\n borderLeft: theme.youwell.borders.secondary,\n },\n contentAndImageWrap: {\n display: 'flex',\n width: '100%',\n background: theme.youwell.colors.white,\n borderRadius: 10,\n padding: theme.spacing(4),\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column',\n },\n },\n imageContainer: {\n width: '34%',\n [theme.breakpoints.down('sm')]: {\n width: '75%',\n },\n\n [theme.breakpoints.down('xs')]: {\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n },\n image: {\n width: '100%',\n\n [theme.breakpoints.down('xs')]: {\n height: 'auto', // for safari mobile.. check what is neccesary\n width: '50%',\n alignSelf: 'center', // for safari mobile.. check what is neccesary\n justifySelf: 'center', // for safari mobile.. check what is neccesary\n },\n },\n content: {\n flex: '1 1 50%',\n paddingLeft: theme.spacing(6),\n display: 'flex',\n flexDirection: 'column',\n\n [theme.breakpoints.down('sm')]: {\n flex: '1 1 100%',\n paddingLeft: 0,\n },\n },\n moduleTitle: {\n margin: theme.spacing(6, 1, 1, 1),\n fontSize: '1.14rem',\n color: theme.youwell.colors.green,\n },\n progressContainer: {\n margin: theme.spacing(1),\n },\n progress: {\n width: '100%',\n },\n description: {\n margin: theme.spacing(1),\n },\n actions: {\n flex: '1 1 auto',\n marginTop: theme.spacing(2),\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n },\n startButton: {\n padding: theme.spacing(0.5, 2),\n width: 170,\n height: 40,\n\n [theme.breakpoints.down('xs')]: {\n width: '100%',\n },\n },\n});\n\nclass CurrentModuleBox extends React.Component {\n renderModule = (module) => {\n const {\n classes, element, index, trackLabel, currentProgram, hideProgress, translate,\n } = this.props;\n\n const progress = Math.min(currentProgram.completedModules / currentProgram.totalModules, 1) || 0;\n\n return (\n <>\n \n
\n {module.moduleImageId && (\n \n )}\n
\n\n
\n
\n {element.name || ()}\n \n\n {!hideProgress && (\n
\n )}\n\n
\n\n
\n \n
\n
\n
\n >\n );\n }\n\n completeTask = (elementId, taskId, programId) => () => {\n this.props.visitTask({\n ppeId: elementId,\n id: taskId,\n }, { reducerParams: { patientProgramId: programId, taskId } });\n }\n\n render() {\n const {\n classes, element, className, title, currentProgram,\n } = this.props;\n\n if (!element?.module && !element?.task) {\n return null;\n }\n\n return (\n \n
\n \n {title}\n \n
\n {element.module\n ? this.renderModule(element.module)\n : (\n
\n )}\n
\n );\n }\n}\n\nCurrentModuleBox.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n visitTask: PropTypes.func.isRequired,\n element: PropTypes.object,\n // clientConfig: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired,\n className: PropTypes.string,\n title: PropTypes.string,\n trackLabel: PropTypes.string.isRequired,\n currentProgram: PropTypes.object.isRequired,\n hideProgress: PropTypes.bool,\n};\n\nCurrentModuleBox.defaultProps = {\n className: null,\n title: null,\n element: null,\n hideProgress: false,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n currentProgram: state.programStore.currentProgram,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(ProgramStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(CurrentModuleBox));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport * as ProgramStore from '../../../app/store/ProgramStore';\n\nclass LoadCurrentProgram extends React.Component {\n componentDidMount() {\n if (!this.props.currentProgram) {\n this.props.getCurrentProgram();\n }\n }\n\n render() {\n return null;\n }\n}\n\nLoadCurrentProgram.propTypes = {\n getCurrentProgram: PropTypes.func.isRequired,\n currentProgram: PropTypes.object,\n};\n\nLoadCurrentProgram.defaultProps = {\n currentProgram: null,\n};\n\nconst mapStateToProps = state => ({\n currentProgram: state.programStore.currentProgram,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(ProgramStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LoadCurrentProgram);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport * as ProgramStore from '../../../app/store/ProgramStore';\nimport { PROGRAM_RESPONSES_RECEIVED } from '../../../app/store/actions';\n\nclass LoadCurrentProgramResponses extends React.Component {\n componentDidMount() {\n const { currentProgramId, currentProgramResponsesLoaded } = this.props;\n\n if (currentProgramId && !currentProgramResponsesLoaded) {\n this.loadResponses(currentProgramId);\n }\n }\n\n componentDidUpdate(prevProps) {\n const { currentProgramId, currentProgramResponsesLoaded } = this.props;\n\n if (currentProgramId && currentProgramId !== prevProps.currentProgramId && !currentProgramResponsesLoaded) {\n this.loadResponses(currentProgramId);\n }\n }\n\n loadResponses(patientProgramId) {\n this.props.getProgramResponses(patientProgramId,\n {\n reducerParams: {\n patientProgramId,\n },\n });\n }\n\n render() {\n return null;\n }\n}\n\nLoadCurrentProgramResponses.propTypes = {\n getProgramResponses: PropTypes.func.isRequired,\n currentProgramResponsesLoaded: PropTypes.bool,\n currentProgramId: PropTypes.string,\n};\n\nLoadCurrentProgramResponses.defaultProps = {\n currentProgramResponsesLoaded: false,\n currentProgramId: null,\n};\n\nconst mapStateToProps = state => ({\n currentProgramId: state.programStore.currentProgram ? state.programStore.currentProgram.id : null,\n currentProgramResponsesLoaded: Boolean(state.programStore.requests[PROGRAM_RESPONSES_RECEIVED]\n && state.programStore.requests[PROGRAM_RESPONSES_RECEIVED].completed),\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(ProgramStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LoadCurrentProgramResponses);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport * as AuthStore from '../../../app/store/AuthStore';\nimport Auth, { authTypes } from '../../../youwell-common/Auth';\n\nclass LoadProfileData extends React.Component {\n componentDidMount() {\n if (Auth.isUserAuthenticated(authTypes.user, authTypes.orgSelect) && !this.props.profileData) {\n this.props.getUserProfile();\n }\n }\n\n render() {\n return null;\n }\n}\n\nLoadProfileData.propTypes = {\n getUserProfile: PropTypes.func.isRequired,\n profileData: PropTypes.object,\n};\n\nLoadProfileData.defaultProps = {\n profileData: null,\n};\n\nconst mapStateToProps = state => ({\n profileData: state.auth.profileData,\n});\n\nconst mapDispatchToProps = dispatch => ({\n getUserProfile: bindActionCreators(AuthStore.actionCreators, dispatch).getUserProfile,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LoadProfileData);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { useDispatch } from 'react-redux';\nimport { Translate } from 'react-localize-redux';\nimport { Link } from 'react-router-dom';\n\nimport {\n Typography, Button, makeStyles,\n} from '@material-ui/core';\n\nimport * as UserStore from '../../../app/store/UserStore';\n\nimport urls from '../../../app/urls';\nimport { getImageUrl } from '../../../youwell-common/apiUrls';\nimport { HtmlContent, Image } from '../../../youwell-common/components';\nimport { activityLabels } from '../../../common/constants';\nimport { useYouwellSelector } from '../../../app/store';\nimport useYouwellTranslate from '../../../app/localization/translate';\nimport { getElementActionText } from './ModuleBoxWithOverlay';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2),\n },\n imageContainer: {\n width: '100%',\n\n [theme.breakpoints.down('xs')]: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n },\n image: {\n width: '100%',\n paddingTop: theme.spacing(1),\n\n [theme.breakpoints.down('xs')]: {\n heigth: 'auto', // for safari mobile.. check what is neccesary\n width: '50%',\n alignSelf: 'center', // for safari mobile.. check what is neccesary\n justifySelf: 'center', // for safari mobile.. check what is neccesary\n },\n },\n moduleTitle: {\n margin: theme.spacing(1),\n textAlign: 'center',\n color: theme.youwell.colors.green,\n },\n description: {\n margin: theme.spacing(1),\n },\n actions: {\n flex: '1 1 auto',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-end',\n },\n startButton: {\n width: '75%',\n },\n completed: {\n background: theme.palette.primary.light,\n color: `${theme.youwell.colors.black}d9`,\n },\n});\n\n\nconst useStyles = makeStyles(styles, { name: 'ModuleBoxFlat' });\n\nconst ModuleBoxFlat = ({\n element, index, className, isCurrent, programId,\n}) => {\n const dispatch = useDispatch();\n const classes = useStyles();\n const translate = useYouwellTranslate();\n const patientId = useYouwellSelector(state => state.auth.profileData.id);\n const isActiveProgram = useYouwellSelector(state => state.programStore.currentProgram?.isActiveProgram);\n\n const clickElement = label => (e) => {\n if (element.disabled) {\n e.preventDefault();\n } else {\n dispatch(UserStore.actionCreators.sendActivity({\n pid: patientId,\n ppid: programId,\n l: label,\n start: new Date(),\n }));\n }\n }\n\n if (!element || !element.module) {\n return null;\n }\n\n const isCompletedElement = isActiveProgram && element.completed;\n const isCurrentElement = isActiveProgram && isCurrent;\n\n const module = element.module;\n\n return (\n \n {module.moduleImageId && (\n
\n \n
\n )}\n
\n
\n {element.name || ()}\n \n
\n \n
\n
\n );\n}\n\nModuleBoxFlat.propTypes = {\n programId: PropTypes.string.isRequired,\n element: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired,\n isCurrent: PropTypes.bool,\n className: PropTypes.string,\n};\n\nModuleBoxFlat.defaultProps = {\n className: null,\n isCurrent: false,\n};\n\nexport default ModuleBoxFlat;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElementActionText = exports.moduleBoxStyles = void 0;\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar react_redux_1 = require(\"react-redux\");\nvar react_localize_redux_1 = require(\"react-localize-redux\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar UserStore = __importStar(require(\"../../../app/store/UserStore\"));\nvar apiUrls_1 = require(\"../../../youwell-common/apiUrls\");\nvar components_1 = require(\"../../../youwell-common/components\");\nvar constants_1 = require(\"../../../common/constants\");\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar store_1 = require(\"../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar icons_1 = require(\"../../../common/icons\");\nvar youwell_common_1 = require(\"../../../youwell-common\");\nvar backgroundColorStop = 180;\nvar progressSize = 38;\nvar imageHeight = 180;\nvar moduleBoxStyles = function (theme) { return (0, core_1.createStyles)({\n root: {\n borderRadius: theme.youwell.shapes.borderRadius,\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n boxShadow: theme.youwell.shadows.default,\n minHeight: 400,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n },\n colorCard: {\n height: imageHeight,\n borderTopLeftRadius: theme.youwell.shapes.borderRadius,\n borderTopRightRadius: theme.youwell.shapes.borderRadius,\n },\n card: {\n marginTop: -20,\n backgroundColor: theme.palette.common.white,\n width: '90%',\n },\n imageWrapper: {\n height: imageHeight,\n overflow: 'hidden',\n },\n image: {\n maxWidth: '100%',\n borderTopLeftRadius: theme.youwell.shapes.borderRadius,\n borderTopRightRadius: theme.youwell.shapes.borderRadius,\n },\n moduleTitle: {\n margin: theme.spacing(1),\n },\n description: {\n margin: theme.spacing(1),\n },\n actions: {\n flex: '1 1 auto',\n marginTop: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-end',\n },\n startButton: {\n width: '60%',\n margin: theme.spacing(1),\n position: 'relative',\n textAlign: 'center',\n '&$completed': {\n color: theme.youwell.colors.white,\n },\n },\n completed: {},\n active: {},\n circleProgress: {\n backgroundColor: theme.palette.secondary.main,\n color: theme.youwell.colors.highlight,\n borderRadius: theme.youwell.shapes.borderRadiusRounder,\n position: 'absolute',\n left: -2,\n },\n completeProgress: {\n color: theme.palette.secondary.main,\n },\n checkIcon: {\n color: theme.youwell.colors.white,\n position: 'absolute',\n left: 2,\n zIndex: 1,\n },\n shiftedModuleName: {\n marginLeft: progressSize / 2,\n },\n}); };\nexports.moduleBoxStyles = moduleBoxStyles;\nvar useStyles = (0, core_1.makeStyles)(exports.moduleBoxStyles, { name: 'ModuleBoxWithOverlay' });\nvar getElementActionText = function (el, translate, isCurrent, isActiveProgram) {\n if (!isActiveProgram) {\n return translate('dashboard.open');\n }\n if (el.completed) {\n return translate('dashboard.completed');\n }\n if (el.isNotStarted) {\n return translate('dashboard.moduleOpens', { date: (0, dateUtils_1.datestamp)(el.startTime) });\n }\n if (el.isEnded) {\n return translate('dashboard.moduleEnded');\n }\n if (el.prereqNotCompleted) {\n return translate('dashboard.notAvailableYet');\n }\n return isCurrent ? translate('dashboard.continue') : translate('dashboard.start');\n};\nexports.getElementActionText = getElementActionText;\nvar ModuleBoxWithOverlay = function (_a) {\n var _b;\n var _c;\n var element = _a.element, index = _a.index, className = _a.className, isCurrent = _a.isCurrent, programId = _a.programId, to = _a.to;\n var dispatch = (0, react_redux_1.useDispatch)();\n var classes = useStyles();\n var theme = (0, core_1.useTheme)();\n var translate = (0, translate_1.default)();\n var patientId = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.auth.profileData) === null || _a === void 0 ? void 0 : _a.id; });\n var isActiveProgram = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.isActiveProgram; });\n var clickElement = function (label) { return function (e) {\n if (youwell_common_1.Auth.isUserAuthenticated()) {\n if (element.disabled) {\n e.preventDefault();\n }\n else {\n dispatch(UserStore.actionCreators.sendActivity({\n pid: patientId,\n ppid: programId,\n l: label,\n start: new Date(),\n }));\n }\n }\n }; };\n if (!element || !element.module) {\n return null;\n }\n var isCompletedElement = isActiveProgram && element.completed;\n var isCurrentElement = isActiveProgram && isCurrent;\n var module = element.module;\n var cardColors = [theme.youwell.colors.grayDark, theme.youwell.colors.grayMiddle, theme.youwell.colors.grayLight];\n var backgroundImageColor = cardColors[index % cardColors.length];\n var bottomColor = (isCurrentElement || isCompletedElement) ? theme.youwell.colors.primary : theme.youwell.colors.defaultBackground;\n var backgroundImage = \"linear-gradient(to bottom, \".concat(cardColors[index % cardColors.length], \" \").concat(backgroundColorStop, \"px, \").concat(bottomColor, \" \").concat(backgroundColorStop, \"px)\");\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.root, className), style: { backgroundImage: backgroundImage } },\n React.createElement(\"div\", { className: classes.imageWrapper }, module.moduleImageId ? (React.createElement(components_1.Image, { alt: \"\".concat(translate('dashboard.moduleImg'), \" \").concat((_c = module.moduleImageDescription) !== null && _c !== void 0 ? _c : ''), src: (0, apiUrls_1.getImageUrl)(module.moduleImageId), className: classes.image })) : (React.createElement(\"div\", { role: \"img\", \"aria-label\": translate('dashboard.missingModuleImg'), className: classes.colorCard, style: { backgroundColor: backgroundImageColor } }))),\n React.createElement(\"div\", { className: (0, classnames_1.default)(classes.card) },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.moduleTitle }, element.name || (React.createElement(react_localize_redux_1.Translate, { id: \"dashboard.module\", data: { index: index + 1 } }))),\n React.createElement(components_1.HtmlContent, { html: module.description, className: classes.description })),\n React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Button, { variant: isCurrentElement ? 'contained' : 'outlined', color: \"secondary\", component: react_router_dom_1.Link, to: to, className: (0, classnames_1.default)(classes.startButton, (_b = {}, _b[classes.completed] = isCompletedElement, _b[classes.active] = isCurrentElement, _b)), size: \"small\", disabled: element.disabled, \"aria-label\": element.disabled ? translate('dashboard.unavailableModuleAria') : isCompletedElement ? \"\".concat(translate('dashboard.progressCompleted', { progress: 100 })) : \"\".concat(translate('dashboard.progressCompleted', { progress: (element === null || element === void 0 ? void 0 : element.progress) ? Math.round(element.progress * 100) : 0 })), onClick: clickElement(\"\".concat(constants_1.activityLabels.dashboard.module, \"/\").concat(index)) },\n React.createElement(React.Fragment, null,\n isCompletedElement ? (React.createElement(React.Fragment, null,\n React.createElement(icons_1.CheckMarkIcon, { className: classes.checkIcon }),\n React.createElement(core_1.CircularProgress, { size: progressSize, className: (0, classnames_1.default)(classes.circleProgress, classes.completeProgress), variant: \"determinate\", value: 100 }))) : isCurrentElement && (React.createElement(core_1.CircularProgress, { size: progressSize, thickness: 5, className: classes.circleProgress, variant: \"determinate\", value: ((element === null || element === void 0 ? void 0 : element.progress) || 0) * 100 })),\n React.createElement(\"span\", { className: isCompletedElement || isCurrentElement ? classes.shiftedModuleName : undefined }, (0, exports.getElementActionText)(element, translate, isCurrentElement, isActiveProgram)))))));\n};\nModuleBoxWithOverlay.defaultProps = {\n className: undefined,\n isCurrent: false,\n};\nexports.default = ModuleBoxWithOverlay;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\n\nimport {\n withStyles, Typography, Button,\n} from '@material-ui/core';\n\nimport urls from '../../../app/urls';\nimport { TrackedLink } from '../../../common/components';\nimport { activityLabels } from '../../../common/constants';\n\nconst styles = theme => ({\n root: {\n },\n topContainer: {\n paddingLeft: theme.spacing(2),\n borderLeft: theme.youwell.borders.secondary,\n },\n title: {\n fontWeight: 500,\n },\n description: {\n marginBottom: theme.spacing(3),\n [theme.breakpoints.down('xs')]: {\n fontSize: 16,\n },\n },\n tasks: {\n padding: theme.spacing(2),\n background: theme.palette.grey[100],\n minHeight: 300,\n },\n taskName: {\n paddingBottom: theme.spacing(0.5),\n marginLeft: theme.spacing(2),\n marginBottom: theme.spacing(0.5),\n borderBottom: theme.youwell.borders.dim,\n },\n elements: {\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap',\n alignItems: 'flex-start',\n maxHeight: 400,\n overflowX: 'auto',\n\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'row',\n maxHeight: 'none !important', // override height calculated from elements.length\n },\n },\n linkButton: {\n padding: `${theme.spacing(0.5)}px ${theme.spacing(2)}px`,\n marginBottom: theme.spacing(1),\n color: theme.youwell.colors.green,\n background: theme.youwell.colors.white,\n maxWidth: '45%',\n marginRight: theme.spacing(1),\n\n '&:hover': {\n background: theme.palette.grey[100],\n },\n\n [theme.breakpoints.down('xs')]: {\n width: '100%',\n maxWidth: 'none',\n marginRight: 0,\n },\n },\n firstButton: {\n color: theme.youwell.colors.white,\n background: theme.youwell.colors.green,\n '&:hover': {\n background: theme.youwell.colors.green,\n },\n },\n});\n\nclass ScheduledTasksBox extends React.Component {\n render() {\n const {\n classes, translate, className, elements,\n } = this.props;\n\n if (!elements || elements.length === 0) {\n return null;\n }\n\n const maxHeight = Math.max(elements.length * 50 / 2, 50); // Minimum 50 px\n\n return (\n \n
\n \n {translate('dashboard.scheduledTasks')}\n \n \n {translate('dashboard.scheduledTasksDescription')}\n \n
\n
\n {elements.map((element, index) => (\n \n ))}\n
\n
\n );\n }\n}\n\nScheduledTasksBox.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n elements: PropTypes.array.isRequired,\n className: PropTypes.string,\n};\n\nScheduledTasksBox.defaultProps = {\n className: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(ScheduledTasksBox));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { patientProgramTaskLabels } from '../../../common/constants';\nimport {\n GladRyggIcon, WorkIcon, MedicineIcon, ActivityIcon,\n} from '../../../common/image';\n\nfunction TaskLabelIcon(props) {\n const { label } = props;\n\n // TODO: Create orgConfig which controls which labels we will use?\n switch (label) {\n case patientProgramTaskLabels.gladRygg:\n return ;\n case patientProgramTaskLabels.work:\n return ;\n case patientProgramTaskLabels.medicine:\n return ;\n case patientProgramTaskLabels.activity:\n return ;\n default:\n return null;\n }\n}\n\nTaskLabelIcon.propTypes = {\n label: PropTypes.string,\n};\n\nTaskLabelIcon.defaultProps = {\n label: null,\n};\n\nexport default TaskLabelIcon;\n","import * as React from 'react';\nimport classnames from 'classnames';\n\nimport {\n Button, List, ListItem, makeStyles, ListItemText, IconButton, Tooltip, Typography,\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useState } from 'react';\nimport { useTheme } from '@material-ui/core/styles';\nimport { getTranslate } from 'react-localize-redux';\nimport { useSelector } from 'react-redux';\nimport {\n FormIcon, IntroNightIcon, PhoneCallIcon, RetreatIcon, TrainingIcon, FollowUpIcon, Retreat,\n} from '../../../common/image';\nimport { PortalModal } from '../../../common/components';\nimport { parseBoolString } from '../../../youwell-common/stringUtils';\n\nconst xxsBreakpoint = 330;\n\nconst useStyles = makeStyles(theme => ({\n webTimeline: {\n height: 200,\n background: theme.youwell.colors.white,\n borderRadius: 20,\n margin: theme.spacing(4, 0),\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n\n [theme.breakpoints.down('md')]: {\n display: 'none',\n },\n },\n mobileTimeline: {\n display: 'none',\n [theme.breakpoints.down('md')]: {\n display: 'flex',\n justifyContent: 'center',\n },\n },\n retreatIcon: {\n marginBottom: theme.spacing(1),\n width: 200,\n\n [theme.breakpoints.down('xs')]: {\n width: 150,\n },\n },\n mobileTimelinePhases: {\n display: 'flex',\n },\n mobileTimeLineItems: {\n textTransform: 'capitalize',\n fontWeight: 500,\n padding: theme.spacing(1, 2),\n display: 'flex',\n justifyContent: 'flex-start',\n\n [theme.breakpoints.down(xxsBreakpoint)]: {\n fontSize: 14,\n },\n\n },\n preparationBtn: {\n color: theme.youwell.colors.white,\n background: theme.youwell.colors.mediumGreen,\n paddingRight: theme.spacing(5),\n '&:hover': {\n background: theme.youwell.colors.mediumGreen,\n },\n },\n changeBtn: {\n color: theme.youwell.colors.white,\n background: theme.youwell.colors.green,\n paddingRight: theme.spacing(5),\n marginLeft: theme.spacing(-4),\n '&:hover': {\n background: theme.youwell.colors.green,\n },\n },\n followUpBtn: {\n color: theme.youwell.colors.white,\n background: theme.youwell.colors.blue,\n marginLeft: theme.spacing(-4),\n '&:hover': {\n background: theme.youwell.colors.blue,\n },\n },\n itemGroup: {\n display: 'flex',\n alignItems: 'center',\n\n [theme.breakpoints.down('md')]: {\n flexDirection: 'column',\n },\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(0),\n },\n },\n item: {\n marginRight: theme.spacing(1),\n },\n itemTimeLinePart: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: theme.spacing(2),\n height: 12,\n },\n itemDot: {\n borderRadius: 50,\n minHeight: 12,\n minWidth: 12,\n marginRight: 4,\n },\n itemLine: {\n height: 2,\n width: '90%',\n },\n itemText: {\n fontSize: 13,\n fontWeight: 500,\n color: theme.youwell.colors.white,\n padding: theme.spacing(1),\n borderRadius: 12,\n },\n blueToolTip: {\n backgroundColor: theme.youwell.colors.blue,\n color: theme.youwell.colors.white,\n borderRadius: 8,\n },\n blueTooltipArrow: {\n color: theme.youwell.colors.blue,\n },\n darkGreenToolTip: {\n backgroundColor: theme.youwell.colors.green,\n color: theme.youwell.colors.white,\n borderRadius: 8,\n },\n darkGreenTooltipArrow: {\n color: theme.youwell.colors.green,\n },\n mediumGreenToolTip: {\n backgroundColor: theme.youwell.colors.mediumGreen,\n color: theme.youwell.colors.white,\n borderRadius: 8,\n },\n mediumGreenTooltipArrow: {\n color: theme.youwell.colors.mediumGreen,\n },\n infoBoxList: {\n marginTop: theme.spacing(1),\n },\n infoBoxListItemText: {\n borderBottom: theme.youwell.borders.normal,\n borderBottomColor: 'inherit',\n marginBottom: theme.spacing(1),\n },\n closeIcon: {\n right: 0,\n top: 0,\n position: 'absolute',\n zIndex: 1,\n },\n}));\n\nconst TimelineBox = () => {\n const [phaseInfo, setPhaseInfo] = useState(null);\n\n const theme = useTheme();\n const classes = useStyles();\n const translate = useSelector(state => getTranslate(state.localize));\n const clientConfig = useSelector(state => state.auth.clientConfig);\n\n const mobileTimelineInfo = {\n preparation: { phases: ['clarification', 'preparation'], color: theme.youwell.colors.mediumGreen },\n change: { phases: ['introNight', 'phoneCall1', 'retreat', 'phoneCall2'], color: theme.youwell.colors.green },\n followUp: { phases: ['digitalFollowup'], color: theme.youwell.colors.blue },\n };\n const tooltipClassNames = {\n blue: { tooltip: classes.blueToolTip, arrow: classes.blueTooltipArrow },\n darkGreen: { tooltip: classes.darkGreenToolTip, arrow: classes.darkGreenTooltipArrow },\n mediumGreen: { tooltip: classes.mediumGreenToolTip, arrow: classes.mediumGreenTooltipArrow },\n };\n\n const webTimelineItems = [\n {\n name: 'clarification', color: theme.youwell.colors.blue, tooltipClasses: tooltipClassNames.blue, icon: ,\n },\n {\n name: 'preparation', color: theme.youwell.colors.blue, tooltipClasses: tooltipClassNames.blue, icon: ,\n },\n {\n name: 'introNight', color: theme.youwell.colors.green, tooltipClasses: tooltipClassNames.darkGreen, icon: ,\n },\n {\n name: 'phoneCall1', color: theme.youwell.colors.green, tooltipClasses: tooltipClassNames.darkGreen, icon: ,\n },\n {\n name: 'retreat', color: theme.youwell.colors.green, tooltipClasses: tooltipClassNames.darkGreen, icon: ,\n },\n {\n name: 'phoneCall2', color: theme.youwell.colors.green, tooltipClasses: tooltipClassNames.darkGreen, icon: ,\n },\n {\n name: 'digitalFollowup', color: theme.youwell.colors.blue, tooltipClasses: tooltipClassNames.blue, icon: ,\n },\n ];\n\n if (parseBoolString(clientConfig.customs?.timeline_rygg)) {\n webTimelineItems.splice(6, 0, {\n id: 'gladRyggTraining', name: 'gladRyggTraining', color: theme.youwell.colors.mediumGreen, tooltipClasses: tooltipClassNames.mediumGreen, icon: ,\n });\n mobileTimelineInfo.followUp.phases = ['gladRyggTraining', 'digitalFollowup'];\n }\n\n if (parseBoolString(clientConfig.customs?.timeline_angst)) {\n // Removing introduction night.\n webTimelineItems.splice(2, 1);\n mobileTimelineInfo.change.phases.splice(0, 1);\n\n // Changing \"Forundersøkelse\" => \"Utredningssamtale\".\n webTimelineItems.splice(1, 1, {\n name: 'examinationInterview', color: theme.youwell.colors.blue, tooltipClasses: tooltipClassNames.blue, icon: ,\n });\n mobileTimelineInfo.examinationInterview = { phases: ['clarification', 'examinationInterview'], color: theme.youwell.colors.mediumGreen }\n delete mobileTimelineInfo.preparation;\n }\n\n return (\n <>\n \n
\n {webTimelineItems.map(item => (\n
\n \n {item.icon}\n
\n
\n {translate(`timeline.${item.name}.shortLabel`)}\n \n
\n \n ))}\n
\n
\n\n \n
\n
\n
\n {mobileTimelineInfo?.preparation && (\n \n )}\n {mobileTimelineInfo?.examinationInterview && (\n \n )}\n \n \n
\n
\n
\n\n 0}\n onClose={() => setPhaseInfo(null)}\n >\n setPhaseInfo(null)} className={classes.closeIcon}>\n \n \n \n {phaseInfo?.phases?.map(phase => (\n \n \n \n ))}\n
\n \n >\n );\n};\n\nexport default TimelineBox;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\n\nimport { Link } from 'react-router-dom';\n\nimport {\n withStyles, Typography,\n} from '@material-ui/core';\n\nimport urls from '../../../app/urls';\nimport { patientProgramElementGroups } from '../../../common/constants';\n\nconst styles = theme => ({\n root: {\n background: theme.palette.grey[100],\n padding: theme.spacing(2),\n },\n topContainer: {\n },\n title: {\n marginBottom: theme.spacing(2),\n fontWeight: 500,\n },\n description: {\n marginBottom: theme.spacing(4),\n },\n content: {\n },\n\n tasks: {\n padding: theme.spacing(2),\n background: theme.palette.grey[100],\n minHeight: 300,\n },\n moduleTitle: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(1),\n borderBottom: theme.youwell.borders.dim,\n fontWeight: 500,\n },\n taskName: {\n paddingBottom: theme.spacing(0.5),\n marginLeft: theme.spacing(2),\n marginBottom: theme.spacing(0.5),\n borderBottom: theme.youwell.borders.dim,\n },\n\n\n});\n\nclass UnfinishedTasksBox extends React.Component {\n render() {\n const {\n classes, translate, className, elements,\n } = this.props;\n\n if (!elements || elements.length === 0) {\n return null;\n }\n\n return (\n \n
\n \n {translate('dashboard.unfinishedTasks')}\n \n \n {translate('dashboard.unfinishedTasksDescription')}\n \n
\n
\n {elements.map(element => (\n
\n \n \n {`${this.props.translate('favourites.module')}: ${element.moduleName}`}\n \n \n {element.tasks.map(task => (\n \n \n {task.name}\n \n \n ))}\n
\n ))}\n
\n
\n );\n }\n}\n\nUnfinishedTasksBox.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n elements: PropTypes.array.isRequired,\n className: PropTypes.string,\n};\n\nUnfinishedTasksBox.defaultProps = {\n className: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(UnfinishedTasksBox));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { bindActionCreators } from 'redux';\nimport classnames from 'classnames';\n\nimport {\n Button, Link, Typography,\n} from '@material-ui/core';\n\nimport {\n validateRequired, validateAllFields, validateFieldLecagy_TOBEREMOVED, checkHasErrors,\n} from '../../youwell-common/validationUtils';\n\nimport * as UserStore from '../../app/store/UserStore';\nimport { timestamp } from '../../youwell-common/dateUtils';\nimport { HtmlContent, Image, PollData } from '../../youwell-common/components';\nimport { FileUpload, PageLayout, PortalModal, TextEditor } from '../../common/components';\nimport { getBreadCrumb } from '../../common/breadcrumbUtil';\nimport apiUrls from '../../youwell-common/apiUrls';\nimport { fileTypes } from '../../youwell-common/constants';\n\nconst POLLING_INTERVAL_IN_MINUTES = 1;\nconst NUMBER_OF_MESSAGES_TO_LOAD = 20;\n\nconst styles = theme => ({\n root: {\n height: '100%',\n },\n chats: {\n height: '50%',\n overflowY: 'scroll',\n display: 'flex',\n flexDirection: 'column-reverse',\n margin: theme.spacing(1, 1, 0, 0),\n },\n reverseScrollContainer: {\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2, 1, 2, 2),\n },\n listContainer: {\n display: 'flex',\n flexDirection: 'column-reverse',\n },\n actions: {\n display: 'block',\n marginTop: theme.spacing(2),\n },\n textInput: {\n background: theme.youwell.colors.inputBackground,\n },\n sendLine: {\n marginTop: theme.spacing(1),\n display: 'flex',\n justifyContent: 'flex-end',\n\n [theme.breakpoints.down('xs')]: {\n flexWrap: 'wrap',\n },\n },\n attachFile: {\n marginRight: theme.spacing(2),\n\n [theme.breakpoints.down('xs')]: {\n marginRight: 0,\n marginBottom: theme.spacing(1),\n width: '100%',\n },\n },\n message: {\n marginBottom: theme.spacing(2),\n\n '&$fromOther+&$fromPatient': {\n marginBottom: theme.spacing(3),\n },\n '&$fromPatient+&$fromOther': {\n marginBottom: theme.spacing(3),\n },\n },\n textLine: {\n display: 'flex',\n alignItems: 'center',\n },\n fromPatient: {},\n fromOther: {},\n lineFill: {\n flex: '1 0 20%',\n },\n textBox: {\n padding: theme.spacing(2),\n borderRadius: theme.youwell.shapes.borderRadius,\n\n '$fromPatient &': {\n background: theme.youwell.colors.primary,\n color: theme.youwell.colors.white,\n },\n '$fromOther &': {\n background: theme.youwell.colors.white,\n color: theme.youwell.colors.primary,\n },\n },\n date: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n image: {\n width: '100%',\n },\n attachedFileButton: {\n textTransform: 'none',\n textDecoration: 'underline',\n borderRadius: 0,\n },\n});\n\nconst defaultState = {\n text: '',\n attachmentFileId: '',\n showAttachedFile: null,\n};\n\nconst validators = {\n text: validateRequired,\n};\n\nconst createInitialState = () => ({\n ...defaultState,\n validationErrors: {},\n});\n\nclass MessageList extends React.Component {\n constructor(props) {\n super(props);\n this.bottomRef = React.createRef();\n }\n\n state = createInitialState();\n\n componentDidMount() {\n this.markAsReadIfAny();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.messagesTimestamp !== prevProps.messagesTimestamp) {\n this.markAsReadIfAny();\n\n setTimeout(() => {\n document.getElementById('scrollList').scroll({\n top: document.getElementById('scrollList').scrollHeight,\n behavior: 'smooth',\n });\n }, 200);\n }\n }\n\n getMessagesInitial = () => {\n this.props.checkForNewMessages({\n requestParams: {\n count: NUMBER_OF_MESSAGES_TO_LOAD,\n },\n });\n }\n\n checkForMessages = () => {\n this.props.checkForNewMessages({\n background: true,\n requestParams: {\n timeStamp: this.props.messagesTimestamp,\n },\n });\n }\n\n fetchMoreMessages = () => {\n this.props.checkForNewMessages({\n requestParams: {\n start: this.props.messageList.length,\n count: NUMBER_OF_MESSAGES_TO_LOAD,\n },\n });\n }\n\n markAsReadIfAny = () => {\n if (this.props.messageList && this.props.messageList.filter(d => !d.patientReadTime).length > 0) {\n this.props.markMessagesAsRead(this.props.messagesTimestamp, {\n background: true,\n reducerParams: { timestamp: this.props.messagesTimestamp },\n });\n }\n }\n\n handleChange = name => (event) => {\n this.setState({ [name]: event.target.value }, () => {\n if (validators[name]) {\n const validationErrors = validateFieldLecagy_TOBEREMOVED(this.state, validators[name], name); // eslint-disable-line react/no-access-state-in-setstate\n this.setState({ validationErrors });\n }\n });\n }\n\n sendMessage = () => {\n const validationErrors = validateAllFields(this.state, validators);\n\n if (!checkHasErrors(validationErrors)) {\n const data = {\n patientId: this.props.profile.id,\n text: this.state.text,\n attachedFileId: this.state.attachmentFileId,\n checkTimeStamp: this.props.messagesTimestamp,\n };\n\n this.props.insertMessage(data, {\n callback: () => {\n this.setState(createInitialState());\n },\n });\n } else {\n this.setState({ validationErrors });\n }\n }\n\n onSelectFile = (file) => {\n this.setState({ attachmentFileId: file?.id });\n }\n\n showAttachedFile = attachedFile => (event) => {\n if (attachedFile?.type === fileTypes.image) {\n this.setState({ showAttachedFile: attachedFile });\n event.preventDefault();\n } else {\n this.setState({ showAttachedFile: null });\n }\n }\n\n render() {\n const {\n classes, translate, messageList, profile, clientConfig, canLoadMoreMessages, appConfig,\n } = this.props;\n\n const contentHeight = this.bottomRef.current ? this.bottomRef.current?.getBoundingClientRect()?.height : 0;\n\n if (!profile) {\n return null;\n }\n\n return (\n \n \n
\n
\n\n
\n {this.state.showAttachedFile && (\n \n {this.state.showAttachedFile.type === fileTypes.image ? (\n \n ) : (\n \n {translate('chat.downloadFile')}\n \n )}\n
\n )}\n \n\n
\n
\n {translate('chat.sendMessageToTherapist')}\n \n\n
\n\n
\n {clientConfig.appSetup.features.allowFileUpload && (\n \n )}\n \n
\n
\n
\n \n );\n }\n}\n\nMessageList.propTypes = {\n classes: PropTypes.object.isRequired,\n clientConfig: PropTypes.object.isRequired,\n profile: PropTypes.object,\n translate: PropTypes.func.isRequired,\n checkForNewMessages: PropTypes.func.isRequired,\n markMessagesAsRead: PropTypes.func.isRequired,\n messageList: PropTypes.array,\n insertMessage: PropTypes.func.isRequired,\n messagesTimestamp: PropTypes.string,\n canLoadMoreMessages: PropTypes.bool.isRequired,\n appConfig: PropTypes.object.isRequired,\n};\n\nMessageList.defaultProps = {\n messageList: null,\n profile: null,\n messagesTimestamp: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n profile: state.auth.profileData,\n messageList: state.user.messageList,\n canLoadMoreMessages: !state.user.allMessagesFetched,\n clientConfig: state.auth.clientConfig,\n messagesTimestamp: state.user.messagesTimestamp,\n appConfig: state.pageSettings.appConfig,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(UserStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(MessageList));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport {\n Route, Switch,\n} from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Typography } from '@material-ui/core';\n\nimport Login from './components/Login';\nimport Logout from './components/Logout';\nimport ResetPassword from './components/ResetPassword';\nimport ForgotPassword from './components/ForgotPassword';\nimport urls from '../../app/urls';\nimport { scrollerWidth } from '../../app/style/theme';\nimport { heightBreak } from './components/constants';\nimport { Image, ErrorBoundary } from '../../youwell-common/components';\nimport SelectOrg from './components/SelectOrg';\nimport InsideRedirect from './InsideRedirect';\n\nconst topPadding = 200;\nconst topPaddingHeightBreak = 280;\n\nconst styles = theme => ({\n root: {\n position: 'relative',\n margin: '0 auto',\n height: '100%',\n width: '100%',\n border: theme.youwell.borders.dim,\n background: theme.palette.background.default,\n overflow: 'hidden',\n\n [theme.breakpoints.down('xs')]: {\n border: 'none',\n height: 'auto',\n overflow: 'auto',\n },\n\n [theme.breakpoints.up('lg')]: {\n width: theme.breakpoints.values.lg - scrollerWidth,\n },\n },\n header: {\n height: topPadding,\n background: theme.palette.background.inner,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-end',\n paddingBottom: theme.spacing(5),\n\n [heightBreak]: {\n height: topPaddingHeightBreak,\n },\n\n [theme.breakpoints.down('xs')]: {\n height: 'auto',\n paddingBottom: 0,\n },\n\n },\n titleLogo: {\n maxHeight: 180,\n maxWidth: 500,\n\n [theme.breakpoints.down('xs')]: {\n marginTop: theme.spacing(4),\n maxHeight: 100,\n maxWidth: '90%',\n },\n },\n appTitle: {\n fontWeight: theme.typography.fontWeightMedium,\n paddingTop: 100,\n color: theme.palette.primary.main,\n\n [theme.breakpoints.down('xs')]: {\n paddingTop: 50,\n },\n },\n content: {\n width: 500,\n position: 'absolute',\n zIndex: 10,\n top: topPadding,\n left: '50%',\n backgroundImage: 'linear-gradient(to bottom, white 30%, rgba(255,255,255,0))',\n background: theme.palette.common.white,\n transform: 'translate(-50%, 0)',\n border: theme.youwell.borders.dim,\n borderRadius: 24,\n padding: theme.spacing(4),\n boxShadow: theme.shadows[5],\n minHeight: 300,\n maxHeight: `calc(100vh - ${topPadding}px - 50px)`,\n overflowY: 'auto',\n\n [heightBreak]: {\n maxHeight: `calc(100vh - ${topPaddingHeightBreak}px - 50px)`,\n top: topPaddingHeightBreak,\n },\n\n [theme.breakpoints.down('xs')]: {\n position: 'relative',\n width: '100%',\n left: 0,\n top: 0,\n transform: 'none',\n border: 0,\n borderRadius: 0,\n padding: theme.spacing(2),\n boxShadow: 'none',\n minHeight: 'auto',\n maxHeight: 'none',\n overflowY: 'inherit',\n },\n },\n});\n\nclass Index extends React.Component {\n render() {\n const { classes, appConfig } = this.props;\n\n return (\n \n \n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n {appConfig.appError}\n \n \n
\n
\n );\n }\n}\n\nIndex.propTypes = {\n classes: PropTypes.object.isRequired,\n appConfig: PropTypes.object.isRequired,\n};\n\nconst mapStateToProps = state => ({\n appConfig: state.pageSettings.appConfig,\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(Index));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar store_1 = require(\"../../app/store\");\nvar youwell_common_1 = require(\"../../youwell-common\");\nvar Auth_1 = require(\"../../youwell-common/Auth\");\nvar components_1 = require(\"../../youwell-common/components\");\nvar LoadProfileData_1 = __importDefault(require(\"../inside/components/LoadProfileData\"));\nvar InsideRedirect = function () {\n var appConfig = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.appConfig; });\n var profileData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var hasMoreOrganizations = (profileData === null || profileData === void 0 ? void 0 : profileData.connectedOrganizations) && profileData.connectedOrganizations.length > 1;\n if (!youwell_common_1.Auth.isUserAuthenticated()) {\n return (React.createElement(react_router_dom_1.Redirect, { to: { pathname: urls_1.default.login } }));\n }\n if (hasMoreOrganizations && !(appConfig === null || appConfig === void 0 ? void 0 : appConfig.orgId)) {\n youwell_common_1.Auth.setLoginInfo(youwell_common_1.Auth.getLoginLevel(), youwell_common_1.Auth.getSessionLifetime(), Auth_1.authTypes.orgSelect);\n return (React.createElement(react_router_dom_1.Redirect, { to: \"\".concat(urls_1.default.login, \"/\").concat(urls_1.default.loginParts.selectOrg, \"/first\") }));\n }\n if (profileData) {\n return (React.createElement(react_router_dom_1.Redirect, { to: urls_1.default.inside.home }));\n }\n if (!profileData) {\n return (React.createElement(LoadProfileData_1.default, null));\n }\n return React.createElement(components_1.Loading, null);\n};\nexports.default = InsideRedirect;\n","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter, Link } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport {\r\n Button, Typography, TextField, InputAdornment, CircularProgress,\r\n} from '@material-ui/core';\r\nimport { bindActionCreators } from 'redux';\r\nimport { getTranslate } from 'react-localize-redux';\r\nimport * as AuthStore from '../../../app/store/AuthStore';\r\nimport urls from '../../../app/urls';\r\nimport { checkHasErrors, validateAllFields, validateEmail, validateRequired } from '../../../youwell-common/validationUtils';\r\n\r\nconst styles = theme => ({\r\n login_container: {\r\n padding: theme.spacing(4),\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n padding: theme.spacing(2),\r\n },\r\n },\r\n\r\n loginHeader: {\r\n },\r\n\r\n loginBox: {\r\n margin: theme.spacing(2, 0),\r\n position: 'relative',\r\n },\r\n\r\n loginDescription: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n },\r\n\r\n textField: {\r\n marginBottom: theme.spacing(3),\r\n background: theme.palette.grey[50],\r\n },\r\n loading: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, 0)',\r\n },\r\n actions: {\r\n marginTop: theme.spacing(4),\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n },\r\n sendButton: {\r\n marginLeft: theme.spacing(3),\r\n width: 200,\r\n padding: theme.spacing(1),\r\n },\r\n infoContainer: {\r\n marginTop: theme.spacing(4),\r\n },\r\n completedMessageContainer: {\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(4),\r\n background: theme.palette.grey[100],\r\n color: theme.youwell.colors.secondary,\r\n padding: theme.spacing(2),\r\n borderRadius: theme.youwell.shapes.borderRadius,\r\n border: theme.youwell.borders.dim,\r\n },\r\n homeLink: {\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nconst validators = {\r\n email: [validateEmail, validateRequired],\r\n};\r\n\r\nconst ForgotPassword = ({\r\n translate, forgotPassword, loading, errorMessage, classes,\r\n}) => {\r\n const [{ email, submitted }, setState] = useState({ email: '', submitted: false });\r\n const [validationErrors, setValidation] = useState({});\r\n const [hasClicked, setClicked] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!hasClicked) {\r\n return;\r\n }\r\n\r\n setValidation(validateAllFields({ email }, validators));\r\n }, [email, hasClicked]);\r\n\r\n const handleForgotPassword = (e) => {\r\n e.preventDefault();\r\n setClicked(true);\r\n const errors = validateAllFields({ email }, validators);\r\n\r\n if (!checkHasErrors(errors)) {\r\n setValidation(errors);\r\n forgotPassword(email, {\r\n callback: () => {\r\n setState({\r\n submitted: true,\r\n });\r\n },\r\n });\r\n } else {\r\n setValidation(errors);\r\n }\r\n };\r\n\r\n const completed = submitted && !loading && !errorMessage;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nForgotPassword.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n translate: PropTypes.func.isRequired,\r\n loading: PropTypes.bool.isRequired,\r\n forgotPassword: PropTypes.func.isRequired,\r\n errorMessage: PropTypes.string,\r\n};\r\n\r\nForgotPassword.defaultProps = {\r\n errorMessage: null,\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n translate: getTranslate(state.localize),\r\n loading: state.auth.loading,\r\n sentForgotPasswordEmail: state.auth.sentForgotPasswordEmail,\r\n errorMessage: [].concat(state.auth.errors).filter(val => val).join('
'),\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n ...bindActionCreators(AuthStore.actionCreators, dispatch),\r\n});\r\n\r\nexport default withRouter(\r\n connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n )(withStyles(styles)(ForgotPassword)),\r\n);\r\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar AuthStore = __importStar(require(\"../../../app/store/AuthStore\"));\nvar ProgramStore = __importStar(require(\"../../../app/store/ProgramStore\"));\nvar Auth_1 = __importStar(require(\"../../../youwell-common/Auth\"));\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar apiUrls_1 = __importDefault(require(\"../../../youwell-common/apiUrls\"));\nvar constants_1 = require(\"./constants\");\nvar constants_2 = require(\"../../../youwell-common/constants\");\nvar arrayUtils_1 = require(\"../../../youwell-common/arrayUtils\");\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar store_1 = require(\"../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar externalUserService_1 = require(\"../../../app/services/externalUserService\");\nvar TABS = __assign(__assign({}, constants_2.loginTypes), { serverLogin: 'serverlogin' });\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return ({\n root: {},\n tab: {\n minWidth: 80,\n },\n login_container: (_a = {\n padding: theme.spacing(2, 4, 0)\n },\n _a[constants_1.heightBreak] = {\n padding: theme.spacing(4),\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2),\n },\n _a),\n loginHeader: {},\n loginBox: {\n margin: theme.spacing(2, 0),\n position: 'relative',\n },\n loginDescription: {\n color: theme.palette.grey[700],\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(3),\n },\n textField: {\n marginBottom: theme.spacing(3),\n background: theme.palette.grey[50],\n },\n loginButton: {\n marginTop: theme.spacing(4),\n padding: theme.spacing(1),\n },\n forgotPassword: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n loading: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, 0)',\n },\n infoContainer: {\n marginTop: theme.spacing(4),\n color: theme.youwell.colors.secondary,\n },\n backLinkContainer: {\n marginTop: theme.spacing(6),\n display: 'flex',\n justifyContent: 'flex-end',\n },\n backLink: {\n textDecoration: 'underline',\n },\n });\n}, { name: 'Login' });\nvar Login = function () {\n var _a, _b, _c;\n var classes = useStyles();\n var params = (0, react_router_dom_1.useParams)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var translate = (0, translate_1.default)();\n var loading = (0, store_1.useYouwellSelector)(function (state) { return state.auth.loading; });\n var errorMessage = (0, store_1.useYouwellSelector)(function (state) { return [].concat(state.auth.errors).filter(function (val) { return val; }).join('
'); });\n var appConfig = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.appConfig; });\n var logoutReason = (0, store_1.useYouwellSelector)(function (state) { return state.auth.logoutReason; });\n var redirect = params.redirect ? decodeURIComponent(params.redirect) : urls_1.default.inside.home;\n var redirectLogin = urls_1.default.loginRedirect;\n var externalRouteMatch = (0, react_router_dom_1.useRouteMatch)(\"\".concat(urls_1.default.login, \"/\").concat(urls_1.default.loginParts.external));\n var _d = React.useState(''), email = _d[0], setEmail = _d[1];\n var _e = React.useState(''), password = _e[0], setPassword = _e[1];\n var _f = React.useState((_b = (_a = appConfig === null || appConfig === void 0 ? void 0 : appConfig.allowedLogins) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : TABS.password), tab = _f[0], setTab = _f[1];\n var _g = React.useState(false), isLoggingIn = _g[0], setIsLoggingIn = _g[1];\n var login = function () {\n setIsLoggingIn(true);\n dispatch(AuthStore.actionCreators.login({\n email: email,\n password: password,\n orgId: appConfig === null || appConfig === void 0 ? void 0 : appConfig.orgId,\n }, { redirect: redirectLogin }));\n };\n var startNewSession = function () {\n setIsLoggingIn(true);\n dispatch(AuthStore.actionCreators.startNewSession({\n orgId: appConfig.orgId,\n programId: appConfig.startProgramId,\n programStartDate: (0, dateUtils_1.today)(),\n }, { redirect: redirect }));\n };\n var allowedLogins = (0, arrayUtils_1.toBoolLookup)(appConfig.allowedLogins);\n var isLoggedIn = Auth_1.default.isUserAuthenticated();\n React.useEffect(function () {\n Auth_1.default.setStorageProviderByLoginType(tab);\n }, [tab]);\n React.useEffect(function () {\n if (isLoggingIn) {\n return;\n }\n if (params.accessKey) {\n Auth_1.default.setStorageProviderByLoginType(constants_2.loginTypes.password);\n setIsLoggingIn(true);\n dispatch(AuthStore.actionCreators.loginWithAccessKey({\n key: params.accessKey,\n orgId: appConfig === null || appConfig === void 0 ? void 0 : appConfig.orgId,\n }, { redirect: redirectLogin }));\n }\n else if (params.code) {\n Auth_1.default.setStorageProviderByLoginType(constants_2.loginTypes.idPorten);\n setIsLoggingIn(true);\n var loginState = {\n code: params.code,\n provider: params.provider,\n state: params.state,\n orgId: appConfig === null || appConfig === void 0 ? void 0 : appConfig.orgId,\n appParameters: params.appParameters,\n day: (0, dateUtils_1.today)(),\n };\n if (params.appParameters === 'ext') {\n (0, externalUserService_1.loginExternalUser)(dispatch, loginState, { redirect: urls_1.default.external.home });\n }\n else {\n dispatch(AuthStore.actionCreators.loginWithCode(loginState, { redirect: redirectLogin }));\n }\n }\n else if (isLoggedIn) {\n var loggedInType = Auth_1.default.getLoginType();\n switch (loggedInType) {\n case Auth_1.authTypes.user: {\n setIsLoggingIn(true);\n dispatch(AuthStore.actionCreators.getUserProfile({ redirect: redirect }));\n break;\n }\n case Auth_1.authTypes.external: {\n var extRedirect = params.redirect && params.redirect.startsWith(urls_1.default.external.home) ? decodeURIComponent(params.redirect) : urls_1.default.external.home;\n dispatch(ProgramStore.actionCreators.redirect(extRedirect));\n break;\n }\n case Auth_1.authTypes.orgSelect: {\n dispatch(ProgramStore.actionCreators.redirect(\"\".concat(urls_1.default.login, \"/\").concat(urls_1.default.loginParts.selectOrg)));\n break;\n }\n case Auth_1.authTypes.public:\n default: {\n dispatch(AuthStore.actionCreators.logout(constants_2.logoutReasons.invalidState));\n }\n }\n }\n }, [appConfig === null || appConfig === void 0 ? void 0 : appConfig.orgId, dispatch, isLoggedIn, isLoggingIn, params, params.accessKey, params.code, params.provider, params.state, redirect, redirectLogin]);\n var onEnter = function (action) { return function (e) {\n if (e.key === 'Enter' && email && password) {\n action();\n }\n }; };\n var appLoginParameters = externalRouteMatch ? '?appParameters=ext' : '';\n var currentTab = isLoggedIn || params.code || params.accessKey ? TABS.serverLogin : tab;\n var hasMultipleLoginOptions = ((_c = appConfig.allowedLogins) === null || _c === void 0 ? void 0 : _c.length) > 1;\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(\"div\", { className: classes.login_container },\n hasMultipleLoginOptions && currentTab !== TABS.serverLogin && (React.createElement(core_1.Tabs, { className: classes.tabs, value: currentTab, onChange: function (e, newTab) { return setTab(newTab); }, variant: \"fullWidth\" },\n allowedLogins[constants_2.loginTypes.password] && React.createElement(core_1.Tab, { classes: { root: classes.tab }, label: translate('email'), value: TABS.password }),\n allowedLogins[constants_2.loginTypes.idPorten] && React.createElement(core_1.Tab, { classes: { root: classes.tab }, label: \"IDPorten\", value: TABS.idPorten }),\n allowedLogins[constants_2.loginTypes.selfStart] && React.createElement(core_1.Tab, { classes: { root: classes.tab }, label: translate('start'), value: TABS.selfStart }))),\n React.createElement(\"div\", { className: classes.loginBox },\n loading && (React.createElement(\"div\", { className: classes.loading },\n React.createElement(core_1.CircularProgress, null))),\n currentTab === TABS.password && (React.createElement(React.Fragment, null,\n React.createElement(core_1.TextField, { id: \"email\", type: \"email\", className: classes.textField, value: email, onChange: function (e) { return setEmail(e.target.value); }, variant: \"outlined\", fullWidth: true, InputProps: {\n onKeyPress: onEnter(login),\n startAdornment: React.createElement(core_1.InputAdornment, { disablePointerEvents: true, position: \"start\" }, \"\".concat(translate('email'), \": \")),\n } }),\n React.createElement(core_1.TextField, { id: \"password\", type: \"password\", className: classes.textField, value: password, onChange: function (e) { return setPassword(e.target.value); }, variant: \"outlined\", fullWidth: true, InputProps: {\n onKeyPress: onEnter(login),\n startAdornment: React.createElement(core_1.InputAdornment, { disablePointerEvents: true, position: \"start\" }, \"\".concat(translate('password'), \": \")),\n } }),\n React.createElement(core_1.Button, { onClick: login, variant: \"contained\", fullWidth: true, color: \"primary\", className: classes.loginButton, disabled: loading }, translate('login.login')),\n React.createElement(react_router_dom_1.Link, { to: \"\".concat(urls_1.default.login, \"/\").concat(urls_1.default.loginParts.forgotPassword) },\n React.createElement(core_1.Typography, { variant: \"body2\", align: \"right\", className: classes.forgotPassword, display: \"block\" }, translate('login.forgotPassword'))))),\n currentTab === TABS.idPorten && (React.createElement(React.Fragment, null,\n React.createElement(core_1.Typography, { color: \"inherit\", className: classes.loginDescription }, translate('login.idportenDescription', { appname: appConfig.appName })),\n React.createElement(core_1.Button, { variant: \"contained\", fullWidth: true, color: \"primary\", className: classes.loginButton, href: \"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(apiUrls_1.default.route.oauth, \"/login/\").concat(constants_2.IdProviders.idPorten, \"/\").concat(appLoginParameters), disabled: loading }, translate('login.loginWithIdporten')))),\n currentTab === TABS.selfStart && (React.createElement(React.Fragment, null,\n React.createElement(core_1.Typography, { color: \"inherit\", className: classes.loginDescription }, translate('login.selfStartDescription', { appname: appConfig.appName })),\n React.createElement(core_1.Button, { onClick: startNewSession, variant: \"contained\", fullWidth: true, color: \"primary\", className: classes.loginButton, disabled: loading }, translate('login.start')))),\n currentTab === TABS.serverLogin && (React.createElement(React.Fragment, null,\n React.createElement(core_1.Typography, { color: \"inherit\", className: classes.loginDescription }, translate('login.loginInProgress')))),\n React.createElement(\"div\", { className: classes.infoContainer },\n logoutReason && (React.createElement(core_1.Typography, { color: \"inherit\", gutterBottom: true }, translate(\"errors.\".concat(logoutReason), undefined, { onMissingTranslation: function () { return translate('login.youHaveBeenLoggedOut'); } }))),\n errorMessage && (React.createElement(React.Fragment, null,\n React.createElement(core_1.Typography, { color: \"error\", align: \"center\", display: \"block\" }, errorMessage === '1065' && currentTab === TABS.serverLogin\n ? translate('login.serverLoginFailed')\n : translate(\"errors.\".concat(errorMessage), undefined, { onMissingTranslation: function () { return \"System error (\".concat(errorMessage, \")\"); } })))),\n currentTab === TABS.serverLogin && (React.createElement(\"div\", { className: classes.backLinkContainer },\n React.createElement(\"a\", { href: urls_1.default.logout, className: classes.backLink }, translate('login.backToFrontPage')))))))));\n};\nexports.default = Login;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { bindActionCreators } from 'redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport Loading from '../../../youwell-common/components/Loading';\nimport * as AuthStore from '../../../app/store/AuthStore';\n\nconst styles = () => ({\n root: {\n minHeight: 300,\n },\n});\n\nclass Logout extends React.Component {\n componentDidMount() {\n this.props.logout(this.props.match.params.reason);\n }\n\n render() {\n const { classes, translate } = this.props;\n\n return (\n \n \n
\n );\n }\n}\n\nLogout.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n logout: PropTypes.func.isRequired,\n match: PropTypes.shape({\n params: PropTypes.shape({\n reason: PropTypes.string,\n }),\n }).isRequired,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(AuthStore.actionCreators, dispatch),\n});\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(Logout)));\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter, Link } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { bindActionCreators } from 'redux';\r\nimport { getTranslate } from 'react-localize-redux';\r\nimport {\r\n Button, Typography, CircularProgress, TextField, InputAdornment,\r\n} from '@material-ui/core';\r\nimport * as AuthStore from '../../../app/store/AuthStore';\r\nimport urls from '../../../app/urls';\r\nimport { validatePassword, validateRequired, validateAllFields, checkHasErrors } from '../../../youwell-common/validationUtils';\r\n\r\nconst styles = theme => ({\r\n login_container: {\r\n padding: theme.spacing(4),\r\n\r\n [theme.breakpoints.down('xs')]: {\r\n padding: theme.spacing(2),\r\n },\r\n },\r\n\r\n loginHeader: {\r\n },\r\n\r\n loginLink: {\r\n margin: theme.spacing(3),\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n loginBox: {\r\n margin: theme.spacing(2, 0),\r\n position: 'relative',\r\n },\r\n\r\n loginDescription: {\r\n marginTop: theme.spacing(3),\r\n marginBottom: theme.spacing(3),\r\n },\r\n\r\n textField: {\r\n marginBottom: theme.spacing(3),\r\n background: theme.palette.grey[50],\r\n },\r\n loading: {\r\n position: 'absolute',\r\n left: '50%',\r\n top: '50%',\r\n transform: 'translate(-50%, 0)',\r\n },\r\n actions: {\r\n marginTop: theme.spacing(4),\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'center',\r\n },\r\n sendButton: {\r\n marginLeft: theme.spacing(1),\r\n width: 200,\r\n padding: theme.spacing(1),\r\n },\r\n infoContainer: {\r\n marginTop: theme.spacing(4),\r\n },\r\n completedMessageContainer: {\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(4),\r\n background: theme.palette.grey[100],\r\n color: theme.youwell.colors.secondary,\r\n padding: theme.spacing(2),\r\n borderRadius: theme.youwell.shapes.borderRadius,\r\n border: theme.youwell.borders.dim,\r\n },\r\n homeLink: {\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nconst ResetPassword = ({\r\n match, translate, loading, resetPassword, errorMessage, classes,\r\n}) => {\r\n const [{ password, submitted }, setState] = useState({\r\n password: '',\r\n submitted: false,\r\n });\r\n\r\n const [validationErrors, setValidation] = useState({});\r\n\r\n const handleResetPassword = (e) => {\r\n e.preventDefault();\r\n\r\n if (!loading) {\r\n const errors = validateAllFields({ password }, { password: [validatePassword, validateRequired] });\r\n\r\n if (!checkHasErrors(errors)) {\r\n setValidation(errors);\r\n resetPassword({\r\n newPassword: password,\r\n token: match.params.token,\r\n }, {\r\n callback: () => {\r\n setState({\r\n submitted: true,\r\n });\r\n },\r\n });\r\n } else {\r\n setValidation(errors);\r\n }\r\n }\r\n };\r\n\r\n const completed = submitted && !loading && !errorMessage;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nResetPassword.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n match: PropTypes.object.isRequired,\r\n translate: PropTypes.func.isRequired,\r\n loading: PropTypes.bool.isRequired,\r\n resetPassword: PropTypes.func.isRequired,\r\n errorMessage: PropTypes.string,\r\n};\r\n\r\nResetPassword.defaultProps = {\r\n errorMessage: null,\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n translate: getTranslate(state.localize),\r\n loading: state.auth.loading,\r\n errorMessage: [].concat(state.auth.errors).filter(val => val).join('
'),\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n ...bindActionCreators(AuthStore.actionCreators, dispatch),\r\n});\r\n\r\nexport default withRouter(\r\n connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n )(withStyles(styles)(ResetPassword)),\r\n);\r\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar LoadProfileData_1 = __importDefault(require(\"../../inside/components/LoadProfileData\"));\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar index_1 = require(\"../../../common/icons/index\");\nvar arrayUtils_1 = require(\"../../../youwell-common/arrayUtils\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar AuthStore = __importStar(require(\"../../../app/store/AuthStore\"));\nvar Auth_1 = __importStar(require(\"../../../youwell-common/Auth\"));\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n firstLoginInfo: {\n marginBottom: theme.spacing(1),\n },\n loginHeader: {\n marginBottom: theme.spacing(1),\n },\n content: {},\n progress: {\n marginTop: theme.spacing(1),\n },\n error: {\n marginTop: theme.spacing(1),\n },\n}); });\nvar SelectOrg = function () {\n var translate = (0, translate_1.default)();\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var orgId = (0, react_router_dom_1.useParams)().orgId;\n var loading = (0, store_1.useYouwellSelector)(function (state) { return state.auth.loading; });\n var errors = (0, store_1.useYouwellSelector)(function (state) { return state.auth.errors; });\n var errorMessage = Array.prototype.concat(errors).filter(function (val) { return val; }).join('
');\n var profileData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var connectedOrganizations = profileData === null || profileData === void 0 ? void 0 : profileData.connectedOrganizations;\n var sortedOrganizations = (0, arrayUtils_1.sortByString)(connectedOrganizations, 'name');\n if (!Auth_1.default.isUserAuthenticated(Auth_1.authTypes.orgSelect)) {\n return (React.createElement(react_router_dom_1.Redirect, { to: { pathname: urls_1.default.login } }));\n }\n if (!profileData) {\n return (React.createElement(LoadProfileData_1.default, null));\n }\n if (profileData && (!connectedOrganizations || connectedOrganizations.length === 0)) {\n return (React.createElement(react_router_dom_1.Redirect, { to: { pathname: urls_1.default.login } }));\n }\n var onSelect = function (selectedOrgId) { return function () {\n dispatch(AuthStore.actionCreators.selectOrg(selectedOrgId, { redirect: urls_1.default.home }));\n }; };\n var isFirstLogin = orgId === 'first';\n // Todo:\n // if (!isFirstLogin && orgId) {\n // onSelect(orgId as Guid)();\n // }\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(\"div\", { className: classes.content },\n isFirstLogin ? (React.createElement(React.Fragment, null,\n React.createElement(core_1.Typography, { variant: \"h6\", className: classes.loginHeader }, translate('hi')),\n React.createElement(core_1.Typography, { className: classes.firstLoginInfo }, translate('login.firstLoginSelectOrg')))) : (React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.loginHeader }, translate('profile.selectProgram'))),\n React.createElement(core_1.List, { component: \"nav\" }, sortedOrganizations === null || sortedOrganizations === void 0 ? void 0 : sortedOrganizations.map(function (org) { return (React.createElement(core_1.ListItem, { key: org.id, button: true, onClick: onSelect(org.id) },\n React.createElement(core_1.ListItemIcon, null,\n React.createElement(index_1.OrgIcon, null)),\n React.createElement(core_1.ListItemText, { primary: org.name }))); })),\n loading\n && React.createElement(core_1.CircularProgress, { className: classes.progress }),\n errorMessage && (React.createElement(core_1.Typography, { className: classes.error, color: \"secondary\" }, errorMessage)))));\n};\nexports.default = SelectOrg;\n","export const tmp = null;\r\nexport const heightBreak = '@media screen and (min-height: 800px)';\r\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentWidth = void 0;\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar TaskPage_1 = __importDefault(require(\"./TaskPage\"));\nvar components_1 = require(\"../../youwell-common/components\");\nvar store_1 = require(\"../../app/store\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar ProgramPage_1 = __importDefault(require(\"./ProgramPage\"));\nvar components_2 = require(\"../../common/components\");\nvar theme_1 = require(\"../../app/style/theme\");\nvar appSetup_1 = require(\"../../app/appSetup\");\nvar Login_1 = __importDefault(require(\"../outside/components/Login\"));\nvar ProgramSelect_1 = __importDefault(require(\"./ProgramSelect\"));\nvar Footer_1 = __importDefault(require(\"../../common/components/Footer\"));\nexports.contentWidth = 1080;\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c;\n return (0, core_1.createStyles)({\n root: {\n background: theme.palette.background.default,\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n },\n header: (_a = {\n position: 'fixed',\n width: '100vw',\n paddingRight: theme_1.scrollerWidth,\n height: theme_1.headerHeight,\n background: theme.palette.primary.main,\n display: 'flex',\n justifyContent: 'center',\n zIndex: 100\n },\n _a[theme.breakpoints.down('xs')] = {\n paddingRight: 0,\n },\n _a['@media print'] = {\n display: 'none',\n },\n _a),\n headerContent: (_b = {\n width: '100%',\n maxWidth: exports.contentWidth\n },\n _b[theme.breakpoints.up('lg')] = {\n width: exports.contentWidth - theme_1.scrollerWidth,\n },\n _b),\n content: (_c = {\n marginTop: theme_1.headerHeight,\n width: '100%',\n minHeight: '100vh',\n maxWidth: exports.contentWidth\n },\n // background: theme.palette.common.white,\n // boxShadow: theme.shadows[1],\n _c[theme.breakpoints.up('lg')] = {\n width: exports.contentWidth - theme_1.scrollerWidth,\n },\n _c[theme.breakpoints.down('xs')] = {\n boxShadow: 'none',\n minHeight: 0,\n },\n _c['@media print'] = {\n marginTop: 0,\n minHeight: 0,\n },\n _c),\n mainContent: {},\n });\n});\nvar Index = function () {\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var pageNotFound = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.pageNotFound; });\n var _a = React.useState(false), showLoginBox = _a[0], setShowLoginBox = _a[1];\n var currentOrgId = (0, store_1.useYouwellSelector)(function (state) { return state.outsideStore.currentOrgId; });\n return (React.createElement(\"div\", { className: classes.root },\n currentOrgId && React.createElement(components_2.LoadOrgConfig, { orgId: currentOrgId }),\n React.createElement(components_1.ErrorBoundary, { id: \"OutsideLayout_Header\" },\n React.createElement(\"div\", { className: classes.header },\n React.createElement(\"div\", { className: classes.headerContent },\n React.createElement(components_2.Header, { hideMenu: true, hideLinks: true, defaultItems: [appSetup_1.headerItems.title, appSetup_1.headerItems.flex, appSetup_1.headerItems.customActions], headerActions: [{ text: translate('login.login'), action: function () { return setShowLoginBox(true); } }] })))),\n React.createElement(\"div\", { className: classes.content },\n React.createElement(components_1.ErrorBoundary, { id: \"OutsideLayout_Content\" }, pageNotFound ? (React.createElement(components_1.PageNotFound, null)) : (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classes.mainContent },\n React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.outsideProgram.task, \"/:programId/:moduleIndex/:taskIndex\"), component: TaskPage_1.default }),\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.outsideProgram.program, \"/:programId?\"), component: ProgramPage_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.outsideProgram.programSelect, component: ProgramSelect_1.default }),\n React.createElement(react_router_dom_1.Route, { component: ProgramSelect_1.default }))))))),\n React.createElement(Footer_1.default, null),\n React.createElement(components_1.ErrorBoundary, { id: \"OutsideLayout_Login\" },\n React.createElement(components_2.PortalModal, { open: showLoginBox, onClose: function () { return setShowLoginBox(false); }, heading: translate('login.login') },\n React.createElement(Login_1.default, null)))));\n};\nexports.default = Index;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_router_1 = require(\"react-router\");\nvar components_1 = require(\"../../youwell-common/components\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar outsideService_1 = require(\"../../app/services/outsideService\");\nvar store_1 = require(\"../../app/store\");\nvar ModuleBoxWithOverlay_1 = __importDefault(require(\"../inside/components/ModuleBoxWithOverlay\"));\nvar components_2 = require(\"../../common/components\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d;\n return (0, core_1.createStyles)({\n root: (_a = {\n padding: theme.spacing(6, 12)\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(3, 4.5),\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1.5),\n },\n _a),\n content: {\n marginTop: theme.spacing(8),\n },\n programDescription: {\n margin: theme.spacing(2, 0, 4),\n },\n modules: {\n display: 'flex',\n flexWrap: 'wrap',\n clear: 'both', // to avoid overflowing image from description\n },\n moduleTitle: {\n borderLeft: theme.youwell.borders.secondary,\n borderLeftWidth: 4,\n paddingLeft: theme.spacing(2),\n marginBottom: theme.spacing(2),\n outline: 'none',\n },\n module: (_b = {\n flexBasis: \"calc(-\".concat(theme.spacing(4), \"px + 33.3333%)\"),\n marginBottom: theme.spacing(4),\n '&:nth-child(3n+2)': (_c = {},\n _c[theme.breakpoints.up('md')] = {\n marginLeft: theme.spacing(6),\n marginRight: theme.spacing(6),\n },\n _c)\n },\n _b[theme.breakpoints.down('sm')] = {\n flexBasis: \"calc(-\".concat(theme.spacing(2), \"px + 50%)\"), // IE calc. Renders wrong for `calc((100% - ${theme.spacing(4)}px) / 2)`\n },\n _b['&:nth-child(2n + 1)'] = (_d = {},\n _d[theme.breakpoints.down('sm')] = {\n marginRight: theme.spacing(4),\n },\n _d[theme.breakpoints.down('xs')] = {\n marginRight: 0,\n },\n _d),\n _b[theme.breakpoints.down('xs')] = {\n flexBasis: '100%',\n justifyContent: 'center',\n },\n _b),\n });\n});\nvar ProgramPage = function () {\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var programIdFromParams = (0, react_router_1.useParams)().programId;\n var publicProgramId = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.pageSettings.appConfig) === null || _a === void 0 ? void 0 : _a.publicProgramId; });\n var programId = programIdFromParams !== null && programIdFromParams !== void 0 ? programIdFromParams : publicProgramId;\n var program = (0, store_1.useYouwellSelector)(function (state) { return state.outsideStore.programDetails[programId]; });\n var loading = (0, store_1.useYouwellSelector)(function (state) { return state.requestStatusStore.loading; });\n (0, react_1.useEffect)(function () {\n if (!program && programId) {\n (0, outsideService_1.fetchOutsideProgram)(dispatch, programId);\n }\n }, [dispatch, program, programId]);\n if (!programId) {\n return (react_1.default.createElement(react_router_1.Redirect, { to: urls_1.default.home }));\n }\n return (react_1.default.createElement(\"div\", { className: classes.root },\n react_1.default.createElement(components_1.Loading, { loading: loading }),\n react_1.default.createElement(\"div\", { className: classes.content },\n react_1.default.createElement(core_1.Typography, { variant: \"h6\", className: classes.moduleTitle, tabIndex: -1 }, program === null || program === void 0 ? void 0 : program.name),\n !loading && !program && (react_1.default.createElement(components_2.InfoMessage, { messageKey: \"noContent\" })),\n react_1.default.createElement(components_1.HtmlContent, { html: program === null || program === void 0 ? void 0 : program.description, className: classes.programDescription }),\n react_1.default.createElement(\"div\", { className: classes.modules }, program === null || program === void 0 ? void 0 : program.modules.map(function (module, i) { return (react_1.default.createElement(ModuleBoxWithOverlay_1.default, { key: module.id, programId: program.id, element: {\n module: module,\n name: module.name,\n }, index: i, className: classes.module, to: \"\".concat(urls_1.default.outsideProgram.task, \"/\").concat(programId, \"/\").concat(i, \"/0\") })); })))));\n};\nexports.default = ProgramPage;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_router_1 = require(\"react-router\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar store_1 = require(\"../../app/store\");\nvar components_1 = require(\"../../common/components\");\nvar heightBreak = '@media screen and (min-height: 800px)';\nvar topPadding = 200;\nvar topPaddingHeightBreak = 280;\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b;\n return (0, core_1.createStyles)({\n root: (_a = {\n padding: theme.spacing(6, 12)\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(3, 4.5),\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1.5),\n },\n _a),\n content: (_b = {\n width: 500,\n position: 'absolute',\n zIndex: 10,\n top: topPadding,\n left: '50%',\n backgroundImage: 'linear-gradient(to bottom, white 30%, rgba(255,255,255,0))',\n background: theme.palette.common.white,\n transform: 'translate(-50%, 0)',\n border: theme.youwell.borders.dim,\n borderRadius: 24,\n padding: theme.spacing(4),\n boxShadow: theme.shadows[5],\n minHeight: 300,\n maxHeight: \"calc(100vh - \".concat(topPadding, \"px - 50px)\"),\n overflowY: 'auto'\n },\n _b[heightBreak] = {\n maxHeight: \"calc(100vh - \".concat(topPaddingHeightBreak, \"px - 50px)\"),\n top: topPaddingHeightBreak,\n },\n _b[theme.breakpoints.down('xs')] = {\n position: 'relative',\n width: '100%',\n left: 0,\n top: 0,\n transform: 'none',\n border: 0,\n borderRadius: 0,\n padding: theme.spacing(2),\n boxShadow: 'none',\n minHeight: 'auto',\n maxHeight: 'none',\n overflowY: 'inherit',\n },\n _b),\n programs: {\n padding: theme.spacing(4),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n },\n program: {\n flex: '1 1 auto',\n background: theme.youwell.colors.secondaryBackground,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(4),\n margin: theme.spacing(2),\n },\n });\n});\nvar ProgramSelect = function () {\n var classes = useStyles();\n var programs = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.pageSettings.appConfig) === null || _a === void 0 ? void 0 : _a.publicPrograms; });\n var singlePublicProgram = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.pageSettings.appConfig) === null || _a === void 0 ? void 0 : _a.publicProgramId; });\n if (!programs || programs.length === 0) {\n if (singlePublicProgram) {\n return (react_1.default.createElement(react_router_1.Redirect, { to: urls_1.default.outsideProgram.program }));\n }\n return (react_1.default.createElement(react_router_1.Redirect, { to: urls_1.default.home }));\n }\n if (programs.length === 1) {\n return (react_1.default.createElement(react_router_1.Redirect, { to: urls_1.default.outsideProgram.program }));\n }\n return (react_1.default.createElement(\"div\", { className: classes.root },\n react_1.default.createElement(\"div\", { className: classes.content },\n programs.length < 2 && (react_1.default.createElement(components_1.InfoMessage, { messageKey: \"noContent\" })),\n react_1.default.createElement(\"div\", { className: classes.programs }, programs.map(function (program) { return (react_1.default.createElement(react_router_dom_1.Link, { key: program.id, className: classes.program, to: \"\".concat(urls_1.default.outsideProgram.program, \"/\").concat(program.id) },\n react_1.default.createElement(core_1.Typography, { variant: \"button\", noWrap: true, align: \"center\", display: \"block\" }, program.name))); })))));\n};\nexports.default = ProgramSelect;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar components_1 = require(\"../../common/components\");\nvar TaskNavigation_1 = __importDefault(require(\"./components/TaskNavigation\"));\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar OutsideTaskContent_1 = __importDefault(require(\"./components/OutsideTaskContent\"));\nvar outsideService_1 = require(\"../../app/services/outsideService\");\nvar Task = function () {\n var _a, _b;\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var _c = (0, react_router_dom_1.useParams)(), programId = _c.programId, moduleIndex = _c.moduleIndex, taskIndex = _c.taskIndex;\n var program = (0, store_1.useYouwellSelector)(function (state) { return state.outsideStore.programDetails[programId]; });\n var loadingProgram = (0, store_1.useYouwellSelector)(function (state) { return state.requestStatusStore.loading; });\n var module = (_a = program === null || program === void 0 ? void 0 : program.modules) === null || _a === void 0 ? void 0 : _a[Number(moduleIndex)];\n var task = (_b = module === null || module === void 0 ? void 0 : module.tasks) === null || _b === void 0 ? void 0 : _b[Number(taskIndex) || 0];\n (0, react_1.useEffect)(function () {\n if (!program && programId) {\n (0, outsideService_1.fetchOutsideProgram)(dispatch, programId);\n }\n }, [dispatch, program, programId]);\n if (!task || !module) {\n return loadingProgram ? null : react_1.default.createElement(components_1.InfoMessage, { messageKey: \"noTask\" });\n }\n var sideMenu = {\n currentIndex: Number(taskIndex) || 0,\n title: task.moduleName,\n menuItems: module.tasks.map(function (t, i) { return ({\n text: t.name,\n url: \"\".concat(urls_1.default.outsideProgram.task, \"/\").concat(programId, \"/\").concat(moduleIndex, \"/\").concat(i),\n }); }),\n };\n return (react_1.default.createElement(components_1.PageLayout, { title: task.name, task: task, sideMenu: sideMenu, key: task.id },\n react_1.default.createElement(components_1.PageTitle, { title: \"\".concat(translate('header.title'), \" - \").concat(task.moduleName) }),\n react_1.default.createElement(OutsideTaskContent_1.default, { task: task }),\n react_1.default.createElement(TaskNavigation_1.default, { task: __assign(__assign({}, task), { elementIndex: Number(moduleIndex), currentTaskNr: Number(taskIndex), listLength: module.tasks.length, programId: programId }) })));\n};\nexports.default = Task;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar prop_types_1 = __importDefault(require(\"prop-types\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar PreviewStore = __importStar(require(\"../../../app/store/PreviewStore\"));\nvar components_1 = require(\"../../../youwell-common/components\");\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar taskContentUtils_1 = require(\"../../../common/taskContentUtils\");\nvar responseUtils_1 = require(\"../../../youwell-common/responseUtils\");\nvar store_1 = require(\"../../../app/store\");\nvar useStyles = (0, styles_1.makeStyles)(function () { return (0, core_1.createStyles)({\n root: {\n // Flex-display with wrap needed for card-layout on page\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n '@media print': {\n display: 'block',\n },\n },\n}); });\nvar OutsideTaskContent = function (_a) {\n var _b;\n var forwardedRef = _a.forwardedRef, task = _a.task;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var allTaskResponses = (0, store_1.useYouwellSelector)(function (state) { return state.previewStore.responses; });\n var allTasksDetails = (0, store_1.useYouwellSelector)(function (state) { return state.previewStore.details; });\n // hack because task.patientProgramElementId is \"undefined\".. but this works.. Should maybe make more robust?\n var responsesForCurrentTask = (_b = allTaskResponses === null || allTaskResponses === void 0 ? void 0 : allTaskResponses[undefined]) === null || _b === void 0 ? void 0 : _b[task.id];\n var updateResponse = function (responses) {\n var responseData = {\n taskId: task.id,\n taskVersion: task.version,\n responses: responses,\n };\n dispatch(PreviewStore.actionCreators.updateResponse(responseData));\n };\n var saveChanges = function (callback) {\n if (callback) {\n callback();\n }\n };\n var getLinkUrl = function (link) {\n var _a = (0, taskContentUtils_1.parseInternalLink)(link), taskOrModuleId = _a.taskOrModuleId, hash = _a.hash;\n return \"\".concat(urls_1.default.preview.home, \"/\").concat(taskOrModuleId).concat(hash);\n };\n var getProgramItem = function (id) { return (allTasksDetails && id ? allTasksDetails[id] : null); };\n return (React.createElement(components_1.TaskContent, { ref: forwardedRef, className: (0, classnames_1.default)(classes.root), LinkElementProps: {\n getLinkUrl: getLinkUrl,\n autoplayVideos: false, // clientConfig.appSetup.features.autoplayVideos,\n }, task: task, taskResponses: responsesForCurrentTask, getProgramItem: getProgramItem, getResponses: (0, responseUtils_1.getGetResponseFunc)(allTaskResponses, responsesForCurrentTask), onResponse: updateResponse, onSaveChanges: saveChanges }));\n};\nOutsideTaskContent.propTypes = {\n forwardedRef: prop_types_1.default.object,\n task: prop_types_1.default.object.isRequired,\n};\nOutsideTaskContent.defaultProps = {\n forwardedRef: null,\n};\nvar WithRef = React.forwardRef(function (props, ref) { return React.createElement(OutsideTaskContent, __assign({}, props, { forwardedRef: ref })); });\nexports.default = WithRef;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar redux_1 = require(\"redux\");\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar ProgramStore_1 = require(\"../../../app/store/ProgramStore\");\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return (0, styles_1.createStyles)({\n navActions: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n margin: theme.spacing(8, 0),\n '@media print': {\n display: 'none',\n },\n },\n appActions: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n margin: theme.spacing(4, 0),\n '@media print': {\n display: 'none',\n },\n },\n navButton: {\n margin: theme.spacing(0, 6),\n },\n navIconLeft: {\n marginRight: theme.spacing(1),\n },\n navIconRight: {\n marginLeft: theme.spacing(1),\n },\n}); });\nvar TaskNavigation = function (_a) {\n var task = _a.task;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var translate = (0, translate_1.default)();\n var redirect = (0, redux_1.bindActionCreators)(ProgramStore_1.actionCreators, dispatch).redirect;\n var elementIndex = task.elementIndex, currentTaskNr = task.currentTaskNr, programId = task.programId;\n var isLastTask = currentTaskNr === task.listLength - 1;\n var isFirstTask = currentTaskNr === 0;\n var clickNext = function (nextDirection) {\n var nextTaskNr = currentTaskNr + nextDirection;\n var redirectUrl = '';\n if (isLastTask && nextDirection > 0) {\n redirectUrl = \"\".concat(urls_1.default.outsideProgram.program, \"/\").concat(programId);\n }\n else if (isFirstTask && nextDirection < 0) {\n redirectUrl = \"\".concat(urls_1.default.outsideProgram.program, \"/\").concat(programId);\n }\n else {\n redirectUrl = \"\".concat(urls_1.default.outsideProgram.task, \"/\").concat(programId, \"/\").concat(elementIndex, \"/\").concat(nextTaskNr);\n }\n redirect(redirectUrl);\n };\n return (react_1.default.createElement(\"div\", { className: classes.navActions },\n react_1.default.createElement(core_1.Button, { variant: \"outlined\", color: \"secondary\", onClick: function () { return clickNext(-1); } }, translate(isFirstTask ? 'cancel' : 'task.goBack')),\n react_1.default.createElement(core_1.Button, { color: \"secondary\", variant: \"contained\", onClick: function () { return clickNext(1); } }, translate(isLastTask ? 'task.completeTask' : 'task.goForward'))));\n};\nexports.default = TaskNavigation;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\nimport { bindActionCreators } from 'redux';\n\nimport { Link } from 'react-router-dom';\nimport {\n Typography, IconButton,\n} from '@material-ui/core';\n\nimport urls from '../../../app/urls';\nimport {\n datestamp, isSameDate, getWeekStartDate, addDays, timeOnly, hasTime, isToday, today, msInOneWeek, getWeekNumberFromDate,\n} from '../../../youwell-common/dateUtils';\n\nimport * as PageSettingStore from '../../../app/store/PageSettingStore';\n\nimport { PrevIcon, NextIcon, AddIcon } from '../../../common/icons';\nimport { sortByDateAscending } from '../../../youwell-common/arrayUtils';\nimport EditTask from './components/EditTask';\nimport { isTouchDevice } from '../../../youwell-common/browserUtils';\nimport AddCustomTask from './components/AddCustomTask';\nimport { patientProgramElementGroups } from '../../../common/constants';\nimport { ModalAction } from '../../../common/components';\n\nconst styles = theme => ({\n root: {\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n },\n noTasksInWeek: {\n margin: theme.spacing(4, 2),\n padding: theme.spacing(1),\n background: theme.palette.primary.light,\n textAlign: 'center',\n fontSize: theme.typography.body2.fontSize,\n\n [theme.breakpoints.up('sm')]: {\n display: 'none',\n },\n [theme.breakpoints.down('xs')]: {\n margin: theme.spacing(1, 0),\n },\n },\n weekTitle: {\n flex: '1 1 auto',\n },\n calendar: {\n padding: theme.spacing(1),\n border: theme.youwell.borders.normal,\n borderTopColor: theme.palette.primary.main,\n borderTopWidth: 4,\n backgroundColor: theme.palette.common.white,\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(0),\n border: 0,\n backgroundColor: 'transparent',\n },\n },\n week: {\n display: 'flex',\n flexWrap: 'wrap',\n\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column',\n\n '$noTasksInWeek + &': {\n display: 'none',\n },\n },\n },\n day: {\n flex: 1,\n padding: theme.spacing(0.5),\n display: 'flex',\n flexDirection: 'column',\n minHeight: 150,\n overflow: 'hidden',\n\n [theme.breakpoints.down('xs')]: {\n padding: 0,\n minHeight: 0,\n },\n },\n outOfDate: {\n [theme.breakpoints.down('xs')]: {\n opacity: 0.5,\n },\n },\n borderLeft: {\n borderLeft: theme.youwell.borders.dim,\n [theme.breakpoints.down('xs')]: {\n borderLeft: 0,\n },\n },\n dayHeader: {\n textTransform: 'uppercase',\n padding: theme.spacing(0, 0.5),\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(0.5),\n background: theme.palette.primary.light,\n marginTop: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n },\n },\n mobileFlex: {\n [theme.breakpoints.down('xs')]: {\n flex: '1 1 auto',\n },\n },\n mobileDate: {\n marginRight: theme.spacing(1),\n [theme.breakpoints.up('sm')]: {\n display: 'none',\n },\n },\n mobileAddTask: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginTop: theme.spacing(4),\n\n [theme.breakpoints.up('sm')]: {\n display: 'none',\n },\n },\n dayHeaderDate: {\n padding: theme.spacing(0, 0.5),\n borderBottom: theme.youwell.borders.dim,\n marginBottom: theme.spacing(0.5),\n\n [theme.breakpoints.down('xs')]: {\n display: 'none',\n },\n },\n taskList: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n },\n current: {\n backgroundColor: theme.palette.grey[300],\n [theme.breakpoints.down('xs')]: {\n backgroundColor: 'transparent',\n },\n },\n task: {\n position: 'relative',\n userSelect: 'none',\n maxWidth: 150,\n border: theme.youwell.borders.dim,\n padding: theme.spacing(1),\n margin: theme.spacing(0.5),\n backgroundColor: theme.palette.grey[50],\n\n [theme.breakpoints.down('xs')]: {\n maxWidth: '100%',\n margin: theme.spacing(0, 0, 1),\n border: 'none',\n },\n },\n taskTopLine: {\n display: 'flex',\n justifyContent: 'flex-end',\n borderBottom: theme.youwell.borders.dim,\n },\n taskTime: {\n },\n taskName: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n editIcon: {\n position: 'absolute',\n bottom: 2,\n right: 2,\n padding: 4,\n display: 'none',\n color: theme.palette.primary.main,\n\n '$task:hover &': {\n display: 'inline',\n },\n },\n noContent: {\n [theme.breakpoints.down('xs')]: {\n display: 'none',\n },\n },\n addIcon: {\n color: 'transparent',\n alignSelf: 'center',\n\n '&:focus, &:hover, $day:hover &': {\n color: theme.palette.primary.main,\n transition: theme.transitions.create('color', { duration: 200 }),\n },\n\n '$day$touchDevice &': {\n color: theme.palette.primary.main,\n opacity: 0.7,\n },\n '$day$touchDevice:active &, $day$touchDevice:focus &, $day$touchDevice:focus-within &': {\n opacity: 1,\n },\n\n [theme.breakpoints.down('xs')]: {\n display: 'none',\n },\n },\n touchDevice: {\n },\n});\n\n\nclass Calendar extends React.Component {\n state = {\n editItem: null,\n }\n\n setWeek = add => () => {\n const newDate = new Date(this.props.calendarDate.getTime() + (add * msInOneWeek));\n this.props.setCalendarDate(newDate);\n }\n\n clickTask = element => (event) => {\n if (element.createdByPatient) {\n this.setState({ editItem: element });\n event.preventDefault();\n }\n }\n\n closeEditElement = () => {\n this.setState({ editItem: null });\n }\n\n render() {\n const {\n classes, translate, currentProgram, calendarDate,\n } = this.props;\n\n if (!currentProgram) {\n return null;\n }\n\n const elements = currentProgram.groupedElements\n ? [].concat(currentProgram.groupedElements[patientProgramElementGroups.default] || [],\n currentProgram.groupedElements[patientProgramElementGroups.appointment] || [])\n : [];\n\n const currentWeek = getWeekNumberFromDate(calendarDate);\n const weekStartDate = getWeekStartDate(currentWeek);\n const week = [\n { key: '1', elements: [], date: weekStartDate },\n { key: '2', elements: [], date: addDays(weekStartDate, 1) },\n { key: '3', elements: [], date: addDays(weekStartDate, 2) },\n { key: '4', elements: [], date: addDays(weekStartDate, 3) },\n { key: '5', elements: [], date: addDays(weekStartDate, 4) },\n { key: '6', elements: [], date: addDays(weekStartDate, 5) },\n { key: '0', elements: [], date: addDays(weekStartDate, 6) },\n ];\n\n if (elements) {\n for (let i = 0; i < elements.length; i++) {\n if (elements[i].startDay > 0 && elements[i].startDay < 7) {\n week[elements[i].startDay - 1].elements.push(elements[i]);\n } else if (elements[i].startDay === 0) {\n week[6].elements.push(elements[i]);\n } else if (elements[i].startTime) {\n for (let j = 0; j < week.length; j++) {\n if (isSameDate(elements[i].startTime, week[j].date)) {\n week[j].elements.push(elements[i]);\n }\n }\n }\n }\n }\n\n const todayDate = today();\n const noElementsInWeek = week.reduce((prev, curr) => prev + curr.elements.length, 0) < 1;\n\n return (\n \n
\n
\n
\n {translate('calendar.weekNr', { weekNr: currentWeek })}\n \n
\n
\n
\n {noElementsInWeek && (\n
\n {translate('calendar.noElementsInWeek')}\n \n )}\n
\n {week.map((day, dayIndex) => (\n
0,\n [classes.noContent]: day.elements.length < 1,\n [classes.current]: isToday(day.date),\n [classes.outOfDate]: day.date < todayDate,\n [classes.touchDevice]: isTouchDevice,\n })}\n >\n
\n {translate(`time.weekdays.${day.key}`)}\n \n \n {datestamp(day.date)}\n \n \n
\n {datestamp(day.date)}\n \n
\n {sortByDateAscending(day.elements, 'startTime').map(element => (\n
\n {hasTime(element.startTime) && (\n
\n \n {timeOnly(element.startTime, translate)}\n \n
\n )}\n
\n {element.name}\n \n \n ))}\n
\n
\n
\n ))}\n
\n
\n
\n\n {this.state.editItem && (\n
\n )}\n
\n );\n }\n}\n\nCalendar.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n currentProgram: PropTypes.object,\n calendarDate: PropTypes.object.isRequired,\n setCalendarDate: PropTypes.func.isRequired,\n};\n\nCalendar.defaultProps = {\n currentProgram: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n currentProgram: state.programStore.currentProgram,\n calendarDate: state.pageSettings.calendarDate,\n});\n\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(PageSettingStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(Calendar));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport { CalendarIcon } from '../../../common/icons';\nimport { PageLayout } from '../../../common/components';\nimport Calendar from './Calendar';\nimport { getBreadCrumb } from '../../../common/breadcrumbUtil';\n\nconst styles = theme => ({\n root: {\n },\n week: {\n minHeight: 400,\n\n [theme.breakpoints.down('xs')]: {\n minHeight: 0,\n },\n },\n});\n\n\nclass Index extends React.Component {\n render() {\n const {\n classes, translate, clientConfig,\n } = this.props;\n\n return (\n \n \n \n );\n }\n}\n\nIndex.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n clientConfig: PropTypes.object.isRequired,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n});\n\n\nexport default connect(mapStateToProps)(withStyles(styles)(Index));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport { bindActionCreators } from 'redux';\n\nimport {\n TextField, Button,\n} from '@material-ui/core';\n\nimport * as ProgramStore from '../../../../app/store/ProgramStore';\n\nconst styles = theme => ({\n content: {\n padding: theme.spacing(2),\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n\n [theme.breakpoints.down('xs')]: {\n overflowY: 'initial',\n },\n },\n actions: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n taskField: {\n marginBottom: theme.spacing(3),\n },\n addCustomButton: {\n marginLeft: theme.spacing(2),\n },\n});\n\nclass AddCustomTask extends React.Component {\n state = {\n validationError: false,\n time: '12:00',\n name: '',\n description: '',\n }\n\n handleChange = name => (event) => {\n this.setState({ [name]: event.target.value });\n }\n\n save = () => {\n if (this.state.name) {\n const startTime = this.props.date;\n startTime.setHours(this.state.time.slice(0, 2), this.state.time.slice(3, 5), 0, 0);\n\n const elementToAdd = {\n patientProgramId: this.props.currentProgram.id,\n displayName: this.state.name,\n properties: {\n description: this.state.description,\n },\n startTime,\n };\n\n this.props.insertPatientElement(elementToAdd, {\n callback: this.props.onClose,\n reducerParams: { patientProgramId: elementToAdd.patientProgramId },\n });\n } else {\n this.setState({ validationError: true });\n }\n }\n\n render() {\n const {\n classes, translate, disabled,\n } = this.props;\n\n return (\n \n
\n \n\n \n\n \n
\n\n
\n \n
\n
\n );\n }\n}\n\nAddCustomTask.propTypes = {\n translate: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n insertPatientElement: PropTypes.func.isRequired,\n currentProgram: PropTypes.object.isRequired,\n date: PropTypes.instanceOf(Date),\n disabled: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nAddCustomTask.defaultProps = {\n disabled: false,\n date: null,\n onClose: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n currentProgram: state.programStore.currentProgram,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(ProgramStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(AddCustomTask));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport { bindActionCreators } from 'redux';\n\nimport {\n Button, TextField,\n} from '@material-ui/core';\n\nimport * as ProgramStore from '../../../../app/store/ProgramStore';\nimport {\n datestamp, getLocalDate, pad2,\n} from '../../../../youwell-common/dateUtils';\nimport { PortalModal } from '../../../../common/components';\n\nconst styles = theme => ({\n content: {\n padding: theme.spacing(2),\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n\n [theme.breakpoints.down('xs')]: {\n overflowY: 'initial',\n },\n },\n taskField: {\n marginBottom: theme.spacing(3),\n },\n actions: {\n marginTop: theme.spacing(2),\n display: 'flex',\n justifyContent: 'space-between',\n },\n});\n\nconst getTimeText = (date) => {\n const startTime = getLocalDate(date);\n return `${pad2(startTime.getHours())}:${pad2(startTime.getMinutes())}`;\n};\n\nclass EditTask extends React.Component {\n state = {\n time: getTimeText(this.props.element.startTime),\n name: this.props.element.name,\n description: this.props.element.properties?.description || '',\n }\n\n closeDialog = () => {\n this.props.onClose();\n }\n\n handleChange = name => (event) => {\n this.setState({ [name]: event.target.value });\n }\n\n update = () => {\n const startTime = getLocalDate(this.props.element.startTime);\n startTime.setHours(this.state.time.slice(0, 2), this.state.time.slice(3, 5), 0, 0);\n\n const elementToUpdate = {\n ...this.props.element,\n displayName: this.state.name,\n properties: {\n description: this.state.description,\n },\n startTime,\n };\n\n this.props.updatePatientElement(elementToUpdate, {\n callback: this.closeDialog,\n reducerParams: { patientProgramId: this.props.currentProgram.id },\n });\n }\n\n delete = () => {\n this.props.deletePatientElement(this.props.element, {\n callback: this.closeDialog,\n reducerParams: { patientProgramId: this.props.currentProgram.id },\n });\n }\n\n render() {\n const {\n classes, translate, disabled, element,\n } = this.props;\n\n return (\n \n \n \n\n \n\n \n
\n\n \n \n \n
\n \n );\n }\n}\n\nEditTask.propTypes = {\n translate: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n updatePatientElement: PropTypes.func.isRequired,\n deletePatientElement: PropTypes.func.isRequired,\n element: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n currentProgram: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n};\n\nEditTask.defaultProps = {\n disabled: false,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n currentProgram: state.programStore.currentProgram,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(ProgramStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(EditTask));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_1 = require(\"react-router\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar patientConsentService_1 = require(\"../../app/services/patientConsentService\");\nvar components_1 = require(\"../../common/components\");\nvar breadcrumbUtil_1 = require(\"../../common/breadcrumbUtil\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar store_1 = require(\"../../app/store\");\nvar components_2 = require(\"../../youwell-common/components\");\nvar icons_1 = require(\"../../youwell-common/icons\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return (0, core_1.createStyles)({\n main: {},\n consents: {\n margin: theme.spacing(2, 0),\n },\n consentList: {\n marginTop: theme.spacing(2),\n padding: theme.spacing(2),\n background: theme.palette.common.white,\n },\n greenIcon: {\n color: theme.youwell.colors.green,\n },\n consent: {\n padding: theme.spacing(2),\n background: theme.palette.common.white,\n },\n actions: {\n marginTop: theme.spacing(8),\n borderTop: theme.youwell.borders.dim,\n padding: theme.spacing(4),\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n },\n consentCheckBox: {\n marginRight: theme.spacing(4),\n },\n sendButton: {\n minWidht: 100,\n },\n radioGroup: {},\n radio: {},\n}); });\nvar Consent = function () {\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var consentId = (0, react_router_1.useParams)().consentId;\n var translate = (0, translate_1.default)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var patientConsents = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.auth.profileData) === null || _a === void 0 ? void 0 : _a.patientConsents; });\n var selectedConsent = consentId ? patientConsents === null || patientConsents === void 0 ? void 0 : patientConsents.find(function (c) { return c.id === Number(consentId); }) : (patientConsents === null || patientConsents === void 0 ? void 0 : patientConsents.length) === 1 ? patientConsents[0] : patientConsents === null || patientConsents === void 0 ? void 0 : patientConsents.find(function (c) { return !c.consentDate; });\n var selectedConsentTask = (0, store_1.useYouwellSelector)(function (state) { var _a; return (selectedConsent ? (_a = state.patientConsentStore.taskDetails) === null || _a === void 0 ? void 0 : _a[selectedConsent.consentTaskId] : null); });\n var _a = React.useState(null), consentChecked = _a[0], setConsentChecked = _a[1];\n var hasUnansweredConsents = (0, store_1.useYouwellSelector)(function (state) { return state.auth.hasUnansweredConsents; });\n var sendResponse = function () {\n if (selectedConsent) {\n var response = {\n consentId: selectedConsent.id,\n consentTaskVersion: selectedConsentTask === null || selectedConsentTask === void 0 ? void 0 : selectedConsentTask.version,\n accept: !!consentChecked,\n };\n var redirect = hasUnansweredConsents ? urls_1.default.inside.home : undefined;\n (0, patientConsentService_1.submitConsents)(dispatch, response, { callback: function () { return setConsentChecked(null); }, redirect: redirect });\n }\n };\n React.useEffect(function () {\n if (selectedConsent && !selectedConsentTask) {\n (0, patientConsentService_1.fetchConsentTaskDetails)(dispatch, selectedConsent.consentTaskId);\n }\n }, [dispatch, selectedConsent, selectedConsentTask]);\n return (React.createElement(components_1.PageLayout\n // title={translate('consentPage.consent')}\n , { \n // title={translate('consentPage.consent')}\n breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(translate('consentPage.consent'), translate, clientConfig) },\n React.createElement(\"div\", { className: classes.main }, patientConsents && patientConsents.length > 1 && (React.createElement(\"div\", { className: classes.consents },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", color: \"primary\" }, translate(hasUnansweredConsents ? 'consentPage.youHaveRequiredConsents' : 'consentPage.yourConsents')),\n React.createElement(core_1.List, { className: classes.consentList }, patientConsents.map(function (c) { return (React.createElement(core_1.ListItem, { key: c.id, button: true, component: react_router_dom_1.Link, to: \"\".concat(urls_1.default.inside.pages.consent, \"/\").concat(c.id), selected: Boolean(selectedConsent && c.id === selectedConsent.id) },\n React.createElement(core_1.ListItemIcon, null, c.consent ? React.createElement(icons_1.CheckedIcon, { className: classes.greenIcon }) : React.createElement(icons_1.UncheckedIcon, null)),\n React.createElement(core_1.ListItemText, { primary: c.consentName }))); }))))),\n React.createElement(React.Fragment, null, selectedConsent && selectedConsentTask && (React.createElement(\"div\", { className: classes.consent },\n React.createElement(components_2.TaskContentDisplay, { task: selectedConsentTask }),\n React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.RadioGroup, { className: classes.radioGroup, onChange: function (_e, value) { return setConsentChecked(value === 'true'); } },\n React.createElement(core_1.FormControlLabel, { className: classes.radio, value: \"true\", control: React.createElement(core_1.Radio, { checked: consentChecked === null ? selectedConsent.consent : consentChecked }), label: translate('consentPage.yesIConsent') }),\n React.createElement(core_1.FormControlLabel, { className: classes.radio, value: \"false\", control: React.createElement(core_1.Radio, { checked: !(consentChecked === null ? selectedConsent.consent : consentChecked) }), label: translate('consentPage.noIDontConsent') })),\n React.createElement(core_1.Button, { onClick: sendResponse, variant: \"contained\", color: \"primary\", disabled: selectedConsent.consentDate && consentChecked === null, className: classes.sendButton }, translate(selectedConsent.consentDate ? 'consentPage.update' : 'consentPage.send'))))))));\n};\nexports.default = Consent;\n","import * as React from 'react';\nimport { useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport {\n makeStyles,\n Typography,\n} from '@material-ui/core';\n\nimport { useParams } from 'react-router';\nimport classnames from 'classnames';\nimport { contentWidth } from '../../common/components/Layout';\nimport { PageLayout } from '../../common/components';\nimport { getBreadCrumb } from '../../common/breadcrumbUtil';\nimport { patientProgramElementGroups } from '../../common/constants';\nimport TaskElement from '../../youwell-common/components/taskElements/TaskElement';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(4),\n },\n element: {\n marginBottom: theme.spacing(4),\n },\n elementHeading: {\n borderBottom: theme.youwell.borders.normal,\n borderBottomColor: theme.palette.secondary.main,\n borderBottomWidth: 4,\n display: 'flex',\n alignItems: 'center',\n },\n elementHeadingTitle: {\n flex: '1 1 auto',\n },\n items: {\n display: 'flex',\n flexDirection: 'column',\n\n '&.et_BullsEye': {\n flexDirection: 'row',\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n maxWidth: contentWidth,\n\n [theme.breakpoints.down('sm')]: {\n justifyContent: 'space-evenly',\n },\n [theme.breakpoints.down('xs')]: {\n justifyContent: 'center',\n },\n },\n },\n item: {\n margin: theme.spacing(2, 0),\n },\n elementTaskTitle: {\n marginBottom: theme.spacing(1),\n },\n noElements: {\n margin: theme.spacing(2, 0),\n },\n}), { name: 'ElementSummary' });\n\nconst getItems = (task, elementType) => task.contentElements\n ?.filter(d => (elementType ? d.elementType === elementType : d.questions?.length))\n .map(d => ({ key: `${task.id}-${d.id}`, element: d, task })) || [];\n\nconst getElements = (element, elementType) => {\n if (element) {\n if (element.task) {\n return getItems(element.task, elementType);\n }\n if (element.module?.tasks) {\n return element.module.tasks.reduce((prev, curr) => [\n ...prev, ...getItems(curr, elementType)], []);\n }\n }\n return [];\n};\n\nconst renderElements = (element, elementType, classes, translate, allTaskResponsesForElement) => {\n const list = getElements(element, elementType);\n\n if (!list.length) {\n return (\n \n {translate('elementsPage.noItems')}\n \n );\n }\n\n return list.map((item, i) => (\n \n \n {item.task.name}\n \n\n {}}\n getResponses={() => {}}\n element={item.element}\n taskResponses={allTaskResponsesForElement[item.task.id]}\n TaskFormProps={{ readOnly: true, small: true }}\n // LinkElementProps={LinkElementProps}\n elementIndex={i}\n onResponse={() => {}}\n />\n
\n ));\n};\n\nconst ElementSummary = () => {\n const classes = useStyles();\n const { elementType } = useParams();\n const translate = useSelector(state => getTranslate(state.localize));\n const clientConfig = useSelector(state => state.auth.clientConfig);\n const currentProgram = useSelector(state => state.programStore.currentProgram);\n const allTaskResponses = useSelector(state => state.programStore.currentProgramTaskResponses || {});\n\n if (!currentProgram) {\n return null;\n }\n\n const mainElements = (currentProgram.groupedElements && currentProgram.groupedElements[patientProgramElementGroups.main]) || [];\n\n return (\n \n \n {mainElements.map(element => (\n
\n\n
\n \n {element.name}\n \n
\n\n
\n {renderElements(element, elementType, classes, translate, allTaskResponses[element.id] || {})}\n
\n
\n ))}\n
\n \n );\n};\n\nexport default ElementSummary;\n","import * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport { Link } from 'react-router-dom';\nimport {\n createStyles,\n IconButton,\n makeStyles,\n Typography,\n} from '@material-ui/core';\n\nimport urls from '../../app/urls';\nimport { InfoMessage, PageLayout } from '../../common/components';\nimport { getBreadCrumb } from '../../common/breadcrumbUtil';\nimport { getImageUrl } from '../../youwell-common/apiUrls';\nimport { DeleteIcon } from '../../common/icons';\nimport * as ProgramStore from '../../app/store/ProgramStore';\nimport { Image } from '../../youwell-common/components';\nimport { sortByMany, toLookup } from '../../youwell-common/arrayUtils';\n\nconst useStyles = makeStyles(theme => createStyles({\n main: {\n },\n tasks: {\n paddingTop: theme.spacing(2),\n minHeight: 300,\n },\n task: {\n marginTop: theme.spacing(2),\n background: theme.youwell.colors.inputBackground,\n minHeight: theme.spacing(15),\n wordBreak: 'break-word',\n },\n moduleTitle: {\n paddingTop: theme.spacing(4),\n marginLeft: theme.spacing(20),\n fontWeight: 500,\n\n [theme.breakpoints.down('xs')]: {\n paddingTop: theme.spacing(2),\n marginLeft: theme.spacing(2),\n },\n },\n taskDescription: {\n marginLeft: theme.spacing(20),\n textDecoration: 'underline',\n\n [theme.breakpoints.down('xs')]: {\n marginLeft: theme.spacing(2),\n },\n },\n imageDisplay: {\n margin: theme.spacing(2.5),\n width: 120,\n height: 80,\n objectFit: 'contain',\n float: 'left',\n\n [theme.breakpoints.down('xs')]: {\n width: 60,\n height: 40,\n margin: theme.spacing(2.5, 1),\n },\n },\n deleteButton: {\n float: 'right',\n },\n}));\n\nconst buildFavouriteViewModel = (favTask, elementLookup, groupedElements) => {\n let el = elementLookup[favTask.patientProgramElementId];\n if (!el) {\n return null;\n }\n\n const elementGroup = el.elementGroup;\n el = groupedElements[elementGroup].find(d => d.id === el.id);\n\n let task;\n let elementName;\n let elementSubIndex;\n\n if (el.task && el.task.id === favTask.taskId) {\n task = el.task;\n elementName = el.name || el.task.name;\n } else if (el.module && el.module.tasks) {\n elementSubIndex = el.module.tasks.findIndex(d => d.id === favTask.taskId);\n task = el.module.tasks[elementSubIndex];\n elementName = task?.name;\n }\n\n return {\n task,\n elementName,\n elementGroup,\n indexInGroup: el.indexInGroup,\n elementSubIndex,\n patientProgramElementId: el.id,\n moduleName: el.module?.name,\n moduleImageId: el.module?.moduleImageId,\n };\n};\n\nconst Favourites = () => {\n const classes = useStyles();\n const dispatch = useDispatch();\n const translate = useSelector(state => getTranslate(state.localize));\n const clientConfig = useSelector(state => state.auth.clientConfig);\n const currentProgram = useSelector(state => state.programStore.currentProgram);\n\n const deleteFavourite = favToDelete => () => {\n const data = {\n taskId: favToDelete.task.id,\n patientProgramElementId: favToDelete.patientProgramElementId,\n patientProgramId: currentProgram.id,\n };\n\n dispatch(ProgramStore.actionCreators.toggleFavourite(data, { reducerParams: { patientProgramId: data.patientProgramId } }));\n };\n\n if (!currentProgram) {\n return null;\n }\n\n const elementLookup = toLookup(currentProgram.elements);\n const favouriteList = sortByMany(\n currentProgram.favouriteTasks\n .map(t => buildFavouriteViewModel(t, elementLookup, currentProgram.groupedElements))\n .filter(d => d),\n 'elementGroup', 'indexInGroup', 'elementSubIndex',\n ) || [];\n\n return (\n \n \n {!favouriteList.length && (\n
\n )}\n
\n {favouriteList.map(fav => (\n
\n \n \n \n \n {fav.moduleImageId && (\n \n ) }\n {fav.moduleName && (\n \n {`${translate('favourites.module')}: ${fav.moduleName}`}\n \n ) }\n \n {fav.elementName}\n \n \n
\n ))}\n
\n
\n \n );\n};\n\nexport default Favourites;\n","import * as React from 'react';\nimport { useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport {\n createStyles,\n makeStyles,\n} from '@material-ui/core';\n\nimport { FeedbackForm, PageLayout } from '../../common/components';\nimport { getBreadCrumb } from '../../common/breadcrumbUtil';\n\nconst useStyles = makeStyles(() => createStyles({\n main: {\n },\n}));\n\nconst Feedback = () => {\n const classes = useStyles();\n const translate = useSelector(state => getTranslate(state.localize));\n const clientConfig = useSelector(state => state.auth.clientConfig);\n\n return (\n \n \n \n
\n \n );\n};\n\nexport default Feedback;\n","import * as React from 'react';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { PageNotFound } from '../../youwell-common/components';\nimport urls from '../../app/urls';\nimport Favourites from './Favourites';\nimport Videos from './Videos';\nimport Calendar from './Calendar/Index';\nimport ActivityDiary from './activityDiary/ActivityDiary';\nimport Performance from './Performance';\nimport SleepDiary from './sleepDiary/Index';\nimport PrintFiles from './PrintFiles';\nimport ElementSummary from './ElementSummary';\nimport Feedback from './Feedback';\nimport Consent from './Consent';\nimport SingleTaskPage from '../singlepage/SingleTaskPage';\nimport MissingGuardianConsent from './MissingGuardianConsent';\nimport Health from './health/Index';\n\nconst Index = () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default Index;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar components_1 = require(\"../../common/components\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return (0, core_1.createStyles)({\n root: {\n padding: theme.spacing(2),\n },\n description: {\n border: theme.youwell.borders.dim,\n padding: theme.spacing(2),\n },\n}); });\nvar MissingGuardianConsent = function () {\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n return (React.createElement(components_1.PageLayout, null,\n React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", className: classes.description }, translate('missingGuardianConsent.description')))));\n};\nexports.default = MissingGuardianConsent;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport PropTypes from 'prop-types';\nimport {\n withStyles, Typography,\n} from '@material-ui/core';\nimport { getBreadCrumb } from '../../common/breadcrumbUtil';\nimport { InfoMessage, PageLayout } from '../../common/components';\nimport OverviewPerformanceChart from './components/OverviewPerformanceChart';\nimport DetailedPerformanceChart from './components/DetailedPerformanceChart';\nimport { PROGRAM_CURRENTPROGRAM_RECEIVED } from '../../app/store/actions';\n\nconst styles = theme => ({\n root: {\n margin: theme.spacing(6, 12),\n\n [theme.breakpoints.down('sm')]: {\n margin: theme.spacing(3, 5),\n },\n\n [theme.breakpoints.down('xs')]: {\n margin: theme.spacing(1.5, 2),\n },\n },\n baselineChartContainer: {\n marginTop: theme.spacing(2),\n },\n detailsChartContainer: {\n marginTop: theme.spacing(7),\n },\n});\n\nfunction Performance(props) {\n const {\n classes, translate, clientConfig, programDetails, hasLoaded,\n } = props;\n\n if (!programDetails) {\n if (hasLoaded) {\n return (\n \n \n
\n );\n }\n return null;\n }\n\n return (\n \n \n {translate('performance.header')}\n \n\n \n \n
\n\n \n \n
\n \n );\n}\n\nPerformance.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n clientConfig: PropTypes.object.isRequired,\n programDetails: PropTypes.object,\n hasLoaded: PropTypes.bool,\n};\n\nPerformance.defaultProps = {\n programDetails: null,\n hasLoaded: false,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n programDetails: state.programStore.currentProgram,\n hasLoaded: Boolean(state.programStore.requests[PROGRAM_CURRENTPROGRAM_RECEIVED]\n && state.programStore.requests[PROGRAM_CURRENTPROGRAM_RECEIVED].completed),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(Performance));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport {\n Typography,\n} from '@material-ui/core';\n\nimport { PageLayout } from '../../common/components';\nimport { getBreadCrumb } from '../../common/breadcrumbUtil';\nimport { patientProgramElementGroups } from '../../common/constants';\nimport apiUrls from '../../youwell-common/apiUrls';\n\nconst styles = theme => ({\n root: {\n marginTop: theme.spacing(4),\n },\n element: {\n marginBottom: theme.spacing(4),\n },\n elementHeading: {\n marginBottom: theme.spacing(2),\n borderBottom: theme.youwell.borders.normal,\n borderBottomColor: theme.palette.secondary.main,\n borderBottomWidth: 4,\n display: 'flex',\n alignItems: 'center',\n },\n elementHeadingTitle: {\n flex: '1 1 auto',\n },\n elementContent: {\n padding: theme.spacing(1, 2),\n },\n print: {\n marginBottom: theme.spacing(2),\n display: 'block',\n },\n underline: {\n color: theme.youwell.colors.secondary,\n borderBottom: theme.youwell.borders.normal,\n borderBottomColor: theme.youwell.colors.secondary,\n },\n noPrints: {\n margin: theme.spacing(2, 0),\n },\n});\n\n\nclass PrintFiles extends React.Component {\n render() {\n const {\n classes, translate, currentProgram, clientConfig,\n } = this.props;\n\n if (!currentProgram) {\n return null;\n }\n\n const printModules = ((currentProgram.groupedElements && currentProgram.groupedElements[patientProgramElementGroups.main]) || [])\n .map((element) => {\n const tasksWithPrint = element.module?.tasks?.filter(d => !!d.printFileId);\n return {\n ...element.module,\n modulePrintFileId: element.module?.printFileId,\n tasksWithPrint,\n noPrints: !element.module?.printFileId && !tasksWithPrint?.length,\n };\n });\n // .filter(d => d.modulePrintFileId);\n\n const hasPrints = printModules.some(d => d.modulePrintFileId);\n\n return (\n \n \n {hasPrints ? printModules.map(module => (\n
\n\n
\n \n {module.name}\n \n
\n\n
\n
\n )) : (\n
\n {translate('printFiles.noPrintFilesAvailable')}\n \n )}\n
\n \n );\n }\n}\n\nPrintFiles.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n clientConfig: PropTypes.object.isRequired,\n currentProgram: PropTypes.object,\n};\n\nPrintFiles.defaultProps = {\n currentProgram: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n currentProgram: state.programStore.currentProgram,\n});\n\n\nexport default connect(mapStateToProps)(withStyles(styles)(PrintFiles));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport {\n Typography,\n} from '@material-ui/core';\n\nimport { PageLayout } from '../../common/components';\nimport { getVideosForElement } from '../../common/videoUtil';\nimport { getBreadCrumb } from '../../common/breadcrumbUtil';\nimport { patientProgramElementGroups } from '../../common/constants';\n\nconst styles = theme => ({\n root: {\n marginTop: theme.spacing(4),\n },\n element: {\n marginBottom: theme.spacing(4),\n },\n elementHeading: {\n borderBottom: theme.youwell.borders.normal,\n borderBottomColor: theme.palette.secondary.main,\n borderBottomWidth: 4,\n display: 'flex',\n alignItems: 'center',\n },\n elementHeadingTitle: {\n flex: '1 1 auto',\n },\n videos: {\n display: 'flex',\n },\n video: {\n flex: '0 1 50%',\n padding: theme.spacing(2),\n },\n noVideos: {\n margin: theme.spacing(2),\n },\n});\n\n\nclass Videos extends React.Component {\n render() {\n const {\n classes, translate, currentProgram, clientConfig,\n } = this.props;\n\n if (!currentProgram) {\n return null;\n }\n\n const mainElements = (currentProgram.groupedElements && currentProgram.groupedElements[patientProgramElementGroups.main]) || [];\n\n return (\n \n \n {mainElements.map(element => (\n
\n\n
\n \n {element.name}\n \n
\n\n
\n {getVideosForElement(element).map((video, cI) => (\n // eslint-disable-next-line react/no-array-index-key\n
\n {video.html && (\n /* eslint-disable react/no-danger */\n \n /* eslint-enable react/no-danger */\n )}\n {video.Component && (\n \n {video.Component}\n
\n )}\n {video.none && (\n \n {translate('videos.noVideosForModule')}\n \n )}\n \n ))}\n
\n
\n ))}\n
\n \n );\n }\n}\n\nVideos.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n clientConfig: PropTypes.object.isRequired,\n currentProgram: PropTypes.object,\n};\n\nVideos.defaultProps = {\n currentProgram: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n currentProgram: state.programStore.currentProgram,\n});\n\n\nexport default connect(mapStateToProps)(withStyles(styles)(Videos));\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_redux_1 = require(\"react-redux\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar pickers_1 = require(\"@material-ui/pickers\");\nvar react_1 = require(\"react\");\nvar components_1 = require(\"../../../common/components\");\nvar breadcrumbUtil_1 = require(\"../../../common/breadcrumbUtil\");\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar image_1 = require(\"../../../common/image\");\nvar ActivityTable_1 = __importDefault(require(\"./components/ActivityTable\"));\nvar AddEditActivityDialog_1 = __importDefault(require(\"./components/AddEditActivityDialog\"));\nvar DateDetails_1 = __importDefault(require(\"./components/DateDetails\"));\nvar objectUtils_1 = require(\"../../../youwell-common/objectUtils\");\nvar ActivityList_1 = __importDefault(require(\"./components/ActivityList\"));\nvar arrayUtils_1 = require(\"../../../youwell-common/arrayUtils\");\nvar constants_1 = require(\"../../../common/constants\");\nvar activityService_1 = require(\"../../../app/services/activityService\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d, _e, _f;\n return (0, core_1.createStyles)({\n top: (_a = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n marginBottom: theme.spacing(4)\n },\n _a[theme.breakpoints.down('md')] = {\n padding: theme.spacing(3, 3),\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1, 0),\n },\n _a),\n sectionTitle: {\n borderLeft: theme.youwell.borders.secondary,\n marginBottom: theme.spacing(3),\n padding: theme.spacing(1, 2),\n },\n tabs: {\n padding: theme.spacing(1, 2),\n },\n followUpActivitiesTableContainer: (_b = {\n backgroundColor: theme.youwell.colors.secondaryBackground,\n padding: theme.spacing(5, 4),\n borderRadius: theme.youwell.shapes.borderRadiusRounder,\n width: '100%'\n },\n _b[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(2, 2),\n },\n _b[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2, 1),\n },\n _b),\n flexContainer: {\n display: 'flex',\n alignItems: 'flex-start',\n },\n followUpActivitiesTable: {\n flex: '1 1 auto',\n },\n effortDescription: {\n display: 'flex',\n alignItems: 'center',\n },\n flagIcon: (_c = {\n margin: theme.spacing(4, 5, 0, 5)\n },\n _c[theme.breakpoints.down('sm')] = {\n display: 'none',\n },\n _c),\n flagIconSmall: (_d = {\n margin: theme.spacing(0, 1)\n },\n _d[theme.breakpoints.up('md')] = {\n display: 'none',\n },\n _d),\n content: (_e = {\n padding: theme.spacing(4, 10),\n marginBottom: theme.spacing(4),\n '&:last-child': {\n marginBottom: theme.spacing(12),\n }\n },\n _e[theme.breakpoints.down('md')] = {\n padding: theme.spacing(3, 3),\n },\n _e[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1, 0),\n },\n _e),\n calendar: {\n background: theme.palette.common.white,\n borderRadius: theme.youwell.shapes.borderRadiusRounder,\n width: '100%',\n minHeight: 340,\n overflowX: 'hidden',\n },\n day: {\n width: 36,\n height: 36,\n margin: 2,\n fontSize: theme.typography.caption.fontSize,\n borderRadius: theme.youwell.shapes.borderRadius,\n color: 'inherit',\n '&:hover': {\n color: theme.palette.common.white,\n background: theme.palette.primary.light,\n },\n },\n notCompleted: {\n background: 'url(\"data:image/svg+xml;utf8,\")',\n backgroundColor: \"\".concat(theme.palette.secondary.main, \"aa\"),\n color: theme.palette.common.white,\n },\n notRegistered: {\n background: theme.palette.grey[200],\n },\n completed: {\n background: theme.palette.secondary.main,\n color: theme.palette.common.white,\n },\n today: {\n fontWeight: theme.typography.fontWeightBold,\n border: theme.youwell.borders.primary,\n },\n futurePlans: {\n background: theme.palette.secondary.dark,\n color: theme.palette.common.white,\n },\n nonCurrentMonthDay: {\n background: theme.palette.common.white,\n color: theme.palette.text.disabled,\n },\n noActivityRegistered: (_f = {\n padding: theme.spacing(3),\n textAlign: 'center'\n },\n _f[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2),\n },\n _f),\n addActivityModal: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n });\n}, { name: 'ActivityDiary' });\nvar getActivityLookup = function (activities) { return (activities === null || activities === void 0 ? void 0 : activities.reduce(function (prev, activity) {\n var _a;\n var future = (0, dateUtils_1.isFuture)(activity.date);\n return __assign(__assign({}, prev), (_a = {}, _a[(0, dateUtils_1.isoDate)(activity.date)] = {\n entry: activity,\n future: future,\n notCompleted: activity.effortRating === -1,\n notRegistered: !activity.effortRating,\n completed: activity.effortRating && activity.effortRating > 0,\n }, _a));\n}, {})) || {}; };\nvar ActivityDiary = function () {\n var classes = useStyles();\n var dispatch = (0, react_redux_1.useDispatch)();\n var translate = (0, translate_1.default)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var patientId = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData && state.auth.profileData.id; });\n var activities = (0, store_1.useYouwellSelector)(function (state) { return state.activityDataStore.activities; }); // TODO: add || [] in the end? does not work... entries will not load then..\n var activitiesLoadedFrom = (0, store_1.useYouwellSelector)(function (state) { return state.activityDataStore.activitiesLoadedFrom; });\n var _a = React.useState(null), activitiesToFollowUp = _a[0], setActivitiesToFolluwUp = _a[1];\n var _b = React.useState({}), followupHashset = _b[0], setFollowupHashset = _b[1];\n var _c = React.useState(true), showUpcoming = _c[0], setShowUpcoming = _c[1];\n var _d = React.useState(null), addEditActivity = _d[0], setAddEditActivity = _d[1];\n var _e = React.useState(null), selectedDate = _e[0], setSelectedDate = _e[1];\n (0, react_1.useEffect)(function () {\n if (!activities && patientId) {\n (0, activityService_1.fetchActivitiesData)(dispatch);\n }\n }, [dispatch, patientId, activities]);\n var todayDate = React.useMemo(function () { return (0, dateUtils_1.today)(); }, []);\n (0, react_1.useEffect)(function () {\n // Using hashset to set isRated on elements. For fade out visualization after registration of effort\n if (activities && activities.length > 0) {\n var newActivitiesToFollowUp = activities === null || activities === void 0 ? void 0 : activities.filter(function (d) {\n var ld = (0, dateUtils_1.getLocalDate)(d.date);\n return ld !== null && todayDate >= ld && (!d.effortRating || (followupHashset && d.id && followupHashset[d.id]));\n }).map(function (d) { return (__assign(__assign({}, d), { isRated: (0, objectUtils_1.hasValue)(d.effortRating) && (followupHashset && d.id && followupHashset[d.id]) })); });\n var newLookup = newActivitiesToFollowUp.reduce(function (prev, curr) {\n var _a;\n return (curr.id ? __assign(__assign({}, prev), (_a = {}, _a[curr.id.toString()] = true, _a)) : __assign({}, prev));\n }, followupHashset);\n setActivitiesToFolluwUp(newActivitiesToFollowUp);\n setFollowupHashset(newLookup);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activities, todayDate]); // dont depend on followupHashset-changes.\n var dateLookup = React.useMemo(function () { return (activities && activities.length > 0 ? getActivityLookup(activities) : {}); }, [activities]);\n var upcomingActivities = React.useMemo(function () { return (activities && activities.length > 0 ? activities.filter(function (activity) { var _a; return dateLookup && ((_a = dateLookup[(0, dateUtils_1.isoDate)(activity.date)]) === null || _a === void 0 ? void 0 : _a.future); }) : []); }, [activities, dateLookup]);\n var pastActivities = React.useMemo(function () { return (activities && activities.length > 0 ? activities.filter(function (activity) { var _a; return dateLookup && !((_a = dateLookup[(0, dateUtils_1.isoDate)(activity.date)]) === null || _a === void 0 ? void 0 : _a.future); }) : []); }, [activities, dateLookup]);\n var onClickDate = function (date) {\n if (!date) {\n return;\n }\n var dateWithoutTime = new Date(date);\n dateWithoutTime.setHours(0, 0, 0, 0);\n var activitiesOnSelectedDate = activities === null || activities === void 0 ? void 0 : activities.filter(function (a) { return (0, dateUtils_1.isSameDate)(a.date, dateWithoutTime); });\n if (activitiesOnSelectedDate && activitiesOnSelectedDate.length > 0) {\n setSelectedDate(dateWithoutTime);\n }\n else {\n setAddEditActivity({ date: dateWithoutTime, category: constants_1.activityCategories.physical });\n }\n };\n var renderCalendarDay = function (date, _selected, dayInCurrentMonth) {\n var _a;\n var dayClassName;\n if (dateLookup) {\n var d = dateLookup[(0, dateUtils_1.isoDate)(date)] || {};\n dayClassName = (0, classnames_1.default)(classes.day, (_a = {},\n _a[classes.today] = (0, dateUtils_1.isSameDate)(date, todayDate),\n _a[classes.nonCurrentMonthDay] = !dayInCurrentMonth,\n _a[classes.notCompleted] = !d.future && d.notCompleted,\n _a[classes.notRegistered] = !d.future && d.notRegistered,\n _a[classes.completed] = d.completed,\n _a[classes.futurePlans] = d.future,\n _a));\n }\n return (React.createElement(core_1.ButtonBase, { className: dayClassName, disabled: !dayInCurrentMonth },\n React.createElement(\"span\", null, dayInCurrentMonth && date ? date.getDate() : '')));\n };\n var loadMonth = function (date) {\n var d = (0, dateUtils_1.getLocalDate)(activitiesLoadedFrom);\n if (d !== null && date !== null && date < d) {\n (0, activityService_1.fetchActivitiesData)(dispatch, {\n start: (0, dateUtils_1.addDays)(date, -30),\n end: activitiesLoadedFrom,\n });\n }\n };\n var hasActivitiesToFollowUp = Boolean((activitiesToFollowUp === null || activitiesToFollowUp === void 0 ? void 0 : activitiesToFollowUp.length) && activitiesToFollowUp.length > 0);\n return (React.createElement(components_1.PageLayout, { breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(translate('activityDiary.header'), translate, clientConfig) },\n React.createElement(React.Fragment, null, hasActivitiesToFollowUp && (React.createElement(\"div\", { className: classes.top },\n React.createElement(\"div\", { className: classes.sectionTitle },\n React.createElement(core_1.Typography, { variant: \"h6\" }, translate('activityDiary.activities'))),\n React.createElement(\"div\", { className: classes.followUpActivitiesTableContainer },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", className: classes.effortDescription },\n React.createElement(\"div\", { className: classes.flagIconSmall },\n React.createElement(image_1.FlagIcon, null)),\n translate('activityDiary.registerYourEffort')),\n React.createElement(\"div\", { className: classes.flexContainer },\n React.createElement(\"div\", { className: classes.flagIcon },\n React.createElement(image_1.FlagIcon, null)),\n React.createElement(\"div\", { className: classes.followUpActivitiesTable },\n React.createElement(ActivityTable_1.default, { data: activitiesToFollowUp, onEditClick: function (activity) { return setAddEditActivity(activity); }, showRating: true }))))))),\n React.createElement(\"div\", { className: classes.content },\n React.createElement(\"div\", { className: classes.sectionTitle },\n React.createElement(core_1.Typography, { variant: \"h6\" }, translate('activityDiary.calendar')),\n React.createElement(core_1.Typography, { variant: \"subtitle1\" }, translate('activityDiary.calendarInfo'))),\n React.createElement(\"div\", { className: classes.calendar },\n React.createElement(pickers_1.Calendar, { onMonthChange: loadMonth, date: todayDate, onChange: onClickDate, renderDay: renderCalendarDay, allowKeyboardControl: false }))),\n React.createElement(core_1.Tabs, { className: classes.tabs, value: showUpcoming ? 0 : 1, onChange: function (event, value) { return setShowUpcoming(value === 0); }, variant: \"fullWidth\" },\n React.createElement(core_1.Tab, { label: translate('activityDiary.upcoming'), value: 0 }),\n React.createElement(core_1.Tab, { label: translate('activityDiary.pastActivities'), value: 1 })),\n showUpcoming ? (React.createElement(\"div\", { className: classes.content }, upcomingActivities && upcomingActivities.length > 0 ? (React.createElement(ActivityList_1.default, { data: upcomingActivities, onEditClick: function (activity) { return setAddEditActivity(activity); } }))\n : (React.createElement(core_1.Typography, { className: classes.noActivityRegistered, variant: \"subtitle1\", color: \"textSecondary\" }, translate('activityDiary.noActivitiesRegistered'))))) : (React.createElement(\"div\", { className: classes.content }, pastActivities && pastActivities.length > 0 ? (React.createElement(ActivityList_1.default, { data: (0, arrayUtils_1.reverse)(pastActivities), onEditClick: function (activity) { return setAddEditActivity(activity); }, showRating: true }))\n : (React.createElement(core_1.Typography, { className: classes.noActivityRegistered, variant: \"subtitle1\", color: \"textSecondary\" }, translate('activityDiary.noActivitiesRegistered'))))),\n React.createElement(DateDetails_1.default, { open: Boolean(selectedDate), onClose: function () { return setSelectedDate(null); }, onAddClick: function (date) { return setAddEditActivity({ date: date }); }, onEditClick: function (activity) { return setAddEditActivity(activity); }, date: selectedDate }),\n React.createElement(core_1.Modal, { open: Boolean(addEditActivity), onClose: function () { return setAddEditActivity(null); }, className: classes.addActivityModal },\n React.createElement(\"div\", null, addEditActivity && (React.createElement(AddEditActivityDialog_1.default, { onClose: function () { return setAddEditActivity(null); }, activity: addEditActivity }))))));\n};\nexports.default = ActivityDiary;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@material-ui/core\");\nvar Rating_1 = __importDefault(require(\"@material-ui/lab/Rating\"));\nvar React = __importStar(require(\"react\"));\nvar icons_1 = require(\"../../../../common/icons\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return (0, core_1.createStyles)({\n root: {},\n dateCell: (_a = {\n flex: '0 0 100px'\n },\n _a[theme.breakpoints.down('xs')] = {\n flex: '0 0 68px',\n },\n _a),\n item: {\n display: 'flex',\n width: '100%',\n textAlign: 'left',\n justifyContent: 'flex-start',\n background: theme.palette.common.white,\n marginBottom: theme.spacing(1),\n padding: theme.spacing(0.5, 1),\n },\n itemContent: {\n flex: '1 1 auto',\n },\n activityText: {},\n activitySubText: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n loadMore: {\n marginTop: theme.spacing(4),\n display: 'flex',\n justifyContent: 'flex-end',\n },\n });\n}, { name: 'ActivityList' });\nvar defaultShowCount = 10;\nvar ActivityList = function (_a) {\n var data = _a.data, onEditClick = _a.onEditClick, showRating = _a.showRating;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var _b = React.useState(defaultShowCount), showCount = _b[0], setShowCount = _b[1];\n if (!data) {\n return null;\n }\n var editActivity = function (activity) { return function () {\n if (onEditClick) {\n onEditClick(activity);\n }\n }; };\n return (React.createElement(\"div\", { className: classes.root }, data === null || data === void 0 ? void 0 :\n data.map(function (activity, i) { return (i < showCount ? (React.createElement(core_1.ButtonBase, { onClick: editActivity(activity), key: activity.id, className: classes.item },\n React.createElement(core_1.Typography, { variant: \"caption\", className: classes.dateCell }, (0, dateUtils_1.shortDate)(activity.date, translate)),\n React.createElement(\"div\", { className: classes.itemContent },\n React.createElement(core_1.Typography, { variant: \"subtitle2\" }, activity.activity),\n React.createElement(\"div\", { className: classes.activitySubText },\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"textSecondary\" }, (0, dateUtils_1.hourCount)(activity.durationInMinutes, translate)),\n showRating && (React.createElement(\"div\", null, activity.effortRating === -1 ? (React.createElement(core_1.Tooltip, { title: translate('activityDiary.notCompleted'), placement: \"top\" },\n React.createElement(icons_1.NotInterestedIcon, { color: \"disabled\" }))) : (React.createElement(Rating_1.default, { size: \"small\", name: \"effortRating-\".concat(activity.id), value: activity.effortRating || 0, color: \"primary\", disabled: true })))))))) : null); }),\n data.length > showCount && (React.createElement(\"div\", { className: classes.loadMore },\n React.createElement(core_1.Button, { size: \"small\", onClick: function () { return setShowCount(function (prev) { return prev + defaultShowCount; }); } }, translate('activityDiary.loadMore'))))));\n};\nActivityList.defaultProps = {\n data: null,\n onEditClick: null,\n showRating: false,\n};\nexports.default = ActivityList;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@material-ui/core\");\nvar Rating_1 = __importDefault(require(\"@material-ui/lab/Rating\"));\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar react_redux_1 = require(\"react-redux\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar activityService_1 = require(\"../../../../app/services/activityService\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return (0, core_1.createStyles)({\n root: {\n margin: theme.spacing(1, 0),\n },\n item: {\n maxHeight: 1000,\n marginBottom: theme.spacing(2),\n padding: theme.spacing(1),\n '$white &': {\n marginBottom: theme.spacing(3),\n padding: 0,\n },\n },\n hiddenWhenRated: {\n opacity: 0,\n margin: 0,\n padding: 0,\n maxHeight: 0,\n transition: 'all 0.5s linear',\n },\n itemContent: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: theme.palette.grey[100],\n padding: theme.spacing(1),\n minHeight: 50,\n '$white &': {\n backgroundColor: theme.palette.common.white,\n },\n },\n dateLabel: {\n display: 'block',\n marginBottom: theme.spacing(0.5),\n '&:first-letter': {\n textTransform: 'capitalize',\n },\n },\n white: {},\n notCompletedIcon: {\n color: theme.palette.error.main,\n },\n activityText: {\n flex: '1 1 auto',\n },\n editIcon: {\n marginLeft: theme.spacing(1),\n },\n actions: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n border: theme.youwell.borders.primary,\n borderStyle: 'dotted',\n padding: theme.spacing(0, 1),\n },\n registerLabel: (_a = {\n marginRight: theme.spacing(1)\n },\n _a[theme.breakpoints.down('xs')] = {\n display: 'none',\n },\n _a),\n ratingEffortTitle: {\n padding: theme.spacing(1),\n fontSize: 18,\n },\n });\n}, { name: 'ActivityTable' });\nvar ActivityTable = function (_a) {\n var _b;\n var data = _a.data, onEditClick = _a.onEditClick, white = _a.white, showRating = _a.showRating;\n var dispatch = (0, react_redux_1.useDispatch)();\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n if (!data) {\n return null;\n }\n var editActivity = function (activity) { return function () {\n if (onEditClick) {\n onEditClick(activity);\n }\n }; };\n var handleRatingChange = function (activity, rating) {\n if (rating === null) {\n return;\n }\n var updatedActivity = __assign(__assign({}, activity), { effortRating: rating });\n (0, activityService_1.updateActivitiesData)(dispatch, updatedActivity);\n };\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.root, (_b = {}, _b[classes.white] = white, _b)) }, data.map(function (activity) {\n var _a;\n return (React.createElement(\"div\", { key: activity.id, className: (0, classnames_1.default)(classes.item, (_a = {}, _a[classes.hiddenWhenRated] = activity.isRated, _a)) },\n React.createElement(core_1.Typography, { color: \"primary\", variant: \"caption\", className: classes.dateLabel }, (0, dateUtils_1.shortDate)(activity.date, translate, false, true)),\n React.createElement(\"div\", { className: classes.itemContent },\n React.createElement(\"div\", { className: classes.activityText },\n React.createElement(core_1.Typography, { variant: \"subtitle2\" }, activity.activity),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"textSecondary\" }, (0, dateUtils_1.hourCount)(activity.durationInMinutes, translate))),\n React.createElement(core_1.IconButton, { className: classes.editIcon, onClick: editActivity(activity) },\n React.createElement(icons_1.EditIcon, null))),\n showRating && (React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Typography, { variant: \"caption\", color: \"primary\", className: classes.registerLabel }, \"\".concat(translate('activityDiary.effort'), \": \")),\n React.createElement(core_1.Tooltip, { title: translate('activityDiary.notCompleted'), placement: \"top\" },\n React.createElement(core_1.IconButton, { className: classes.notCompletedIcon, onClick: function () { return handleRatingChange(activity, -1); } },\n React.createElement(icons_1.NotInterestedIcon, null))),\n React.createElement(Rating_1.default, { name: \"effortRating-\".concat(activity.id), onChange: function (e, r) { return handleRatingChange(activity, r); }, value: activity.effortRating || 0, color: \"primary\" })))));\n })));\n};\nActivityTable.defaultProps = {\n data: null,\n onEditClick: null,\n white: false,\n showRating: false,\n};\nexports.default = ActivityTable;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar Rating_1 = __importDefault(require(\"@material-ui/lab/Rating\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar react_redux_1 = require(\"react-redux\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar constants_1 = require(\"../../../../common/constants\");\nvar activityService_1 = require(\"../../../../app/services/activityService\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar store_1 = require(\"../../../../app/store\");\nvar useStyles = (0, styles_1.makeStyles)(function (theme) {\n var _a, _b;\n return (0, core_1.createStyles)({\n root: (_a = {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.background.default,\n borderRadius: theme.youwell.shapes.borderRadiusRounder,\n padding: theme.spacing(5, 6)\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(3),\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2, 1),\n },\n _a),\n heading: (_b = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n margin: theme.spacing(0, 0, 4, 0)\n },\n _b[theme.breakpoints.down('sm')] = {\n marginBottom: theme.spacing(3),\n },\n _b),\n title: {\n borderLeft: theme.youwell.borders.secondary,\n padding: theme.spacing(1, 2),\n },\n formInput: {\n margin: theme.spacing(0.5),\n },\n durationTableCell: {\n paddingRight: theme.spacing(1),\n width: 120,\n },\n selectCategory: {\n minWidth: 160,\n '& :focus': {\n backgroundColor: theme.palette.background.default,\n },\n },\n activityActions: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: theme.spacing(6),\n },\n cancelBtn: {\n marginRight: theme.spacing(1),\n },\n form: {\n margin: theme.spacing(1),\n },\n textField: {\n marginBottom: theme.spacing(3),\n },\n durationAdornment: {\n marginLeft: theme.spacing(1),\n },\n effortValues: {\n display: 'flex',\n alignItems: 'center',\n },\n });\n}, { name: 'AddEditActivityDialog' });\nvar AddEditActivityDialog = function (_a) {\n var activity = _a.activity, onClose = _a.onClose;\n var classes = useStyles();\n var dispatch = (0, react_redux_1.useDispatch)();\n var translate = (0, translate_1.default)();\n var patientId = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.auth.profileData) === null || _a === void 0 ? void 0 : _a.id; });\n var _b = React.useState(__assign({}, activity)), activityData = _b[0], setActivityData = _b[1];\n if (!activity || !patientId) {\n return null;\n }\n var addActivity = function () {\n var newActivity = {\n patientId: patientId,\n category: activityData.category,\n activity: activityData.activity,\n date: activityData.date,\n durationInMinutes: Number(activityData.durationInMinutes) || 0,\n effortRating: activityData.effortRating,\n };\n (0, activityService_1.insertActivityData)(dispatch, newActivity, { callback: onClose });\n };\n var updateActivity = function () {\n var updatedActivity = {\n id: activity.id,\n category: activityData.category,\n activity: activityData.activity,\n date: activityData.date,\n durationInMinutes: Number(activityData.durationInMinutes) || 0,\n effortRating: activityData.effortRating,\n };\n (0, activityService_1.updateActivitiesData)(dispatch, updatedActivity, { callback: onClose });\n };\n var addOrUpdate = function () {\n if (activity.id) {\n updateActivity();\n }\n else {\n addActivity();\n }\n };\n var onEnter = function (e) {\n if (e.key === 'Enter' && activityData.category && activityData.activity && activityData.durationInMinutes) {\n addOrUpdate();\n }\n };\n var today = new Date();\n var todayIso = (0, dateUtils_1.isoDateWithoutTimezone)(today);\n var isPastDate = todayIso >= (0, dateUtils_1.isoDate)(activity.date);\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(\"div\", { className: classes.heading },\n React.createElement(core_1.Typography, { className: classes.title, variant: \"subtitle2\" }, \"\".concat(translate('activityDiary.addActivity'), \" | \").concat((0, dateUtils_1.datestamp)(activity.date))),\n React.createElement(core_1.IconButton, { onClick: onClose },\n React.createElement(icons_1.CancelOutlinedIcon, null))),\n React.createElement(\"div\", { className: classes.form },\n React.createElement(core_1.TextField, { className: classes.textField, variant: \"outlined\", value: activityData.category || '', onChange: function (e) { return setActivityData(__assign(__assign({}, activityData), { category: e.target.value })); }, select: true, label: translate('activityDiary.category'), InputLabelProps: { shrink: true }, fullWidth: true }, Object.keys(constants_1.activityCategories).map(function (categoryKey) { return (React.createElement(core_1.MenuItem, { key: categoryKey, value: constants_1.activityCategories[categoryKey] }, translate(\"activityDiary.categories.\".concat(constants_1.activityCategories[categoryKey])))); })),\n React.createElement(core_1.TextField, { className: classes.textField, variant: \"outlined\", label: translate('activityDiary.activity'), value: activityData.activity || '', onChange: function (e) { return setActivityData(__assign(__assign({}, activityData), { activity: e.target.value })); }, placeholder: translate('activityDiary.activityPlaceholder'), InputLabelProps: { shrink: true }, fullWidth: true }),\n React.createElement(core_1.TextField, { className: classes.textField, variant: \"outlined\", label: translate('activityDiary.duration'), type: \"number\", value: activityData.durationInMinutes || '', onChange: function (e) { return setActivityData(__assign(__assign({}, activityData), { durationInMinutes: Math.abs(Number(e.target.value)) })); }, placeholder: translate('activityDiary.durationPlaceholder'), onKeyPress: onEnter, InputProps: { endAdornment: React.createElement(\"span\", { className: classes.durationAdornment }, translate('time.minutes')) }, InputLabelProps: { shrink: true }, fullWidth: true }),\n isPastDate && activityData.id && (React.createElement(React.Fragment, null,\n React.createElement(core_1.Typography, { variant: \"caption\" }, \"\".concat(translate('activityDiary.effort'), \": \")),\n React.createElement(\"div\", { className: classes.effortValues },\n React.createElement(core_1.IconButton, { color: activityData.effortRating === -1 ? 'primary' : 'default', onClick: function () { return setActivityData(__assign(__assign({}, activityData), { effortRating: -1 })); } },\n React.createElement(icons_1.NotInterestedIcon, null)),\n React.createElement(Rating_1.default, { name: \"effortRating-edit\", onChange: function (e, r) { return setActivityData(r !== null ? __assign(__assign({}, activityData), { effortRating: r }) : __assign(__assign({}, activityData), { effortRating: undefined })); }, color: \"primary\", value: activityData.effortRating }))))),\n React.createElement(\"div\", { className: classes.activityActions },\n React.createElement(core_1.Button, { className: classes.cancelBtn, variant: \"outlined\", color: \"primary\", onClick: onClose }, translate('activityDiary.cancel')),\n React.createElement(core_1.Button, { disabled: !(activityData.category && activityData.activity), variant: \"contained\", color: \"primary\", onClick: addOrUpdate }, translate('activityDiary.save')))));\n};\nexports.default = AddEditActivityDialog;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_redux_1 = require(\"react-redux\");\nvar Rating_1 = __importDefault(require(\"@material-ui/lab/Rating\"));\nvar icons_1 = require(\"../../../../common/icons\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar activityService_1 = require(\"../../../../app/services/activityService\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar store_1 = require(\"../../../../app/store\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b;\n return (0, core_1.createStyles)({\n editActivityModal: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n content: (_a = {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.background.default,\n borderRadius: theme.youwell.shapes.borderRadiusRounder,\n padding: theme.spacing(5)\n },\n _a[theme.breakpoints.down('sm')] = {\n padding: theme.spacing(3),\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2),\n },\n _a),\n header: (_b = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(4)\n },\n _b[theme.breakpoints.down('sm')] = {\n marginBottom: theme.spacing(3),\n },\n _b),\n editActivityModalTitle: {\n borderLeft: theme.youwell.borders.secondary,\n padding: theme.spacing(1, 2),\n },\n cancelIcon: {},\n item: {\n marginBottom: theme.spacing(3),\n },\n itemTop: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n itemContent: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: theme.palette.common.white,\n paddingLeft: theme.spacing(1),\n },\n activityText: {\n flex: '1 1 auto',\n },\n actions: {\n marginTop: theme.spacing(6),\n display: 'flex',\n justifyContent: 'center',\n },\n });\n}, { name: 'DateDetails' });\nvar DateDetails = function (_a) {\n var open = _a.open, onClose = _a.onClose, date = _a.date, onAddClick = _a.onAddClick, onEditClick = _a.onEditClick;\n var classes = useStyles();\n var dispatch = (0, react_redux_1.useDispatch)();\n var translate = (0, translate_1.default)();\n var allActivities = (0, store_1.useYouwellSelector)(function (state) { return state.activityDataStore.activities; });\n if (!date) {\n return null;\n }\n var activitiesOnSelectedDate = allActivities === null || allActivities === void 0 ? void 0 : allActivities.filter(function (a) { return (0, dateUtils_1.isSameDate)(a.date, date); });\n var addNew = function () {\n onAddClick(date);\n };\n var editActivity = function (activity) { return function () {\n onEditClick(activity);\n }; };\n var deleteActivity = function (activity) { return function () {\n (0, activityService_1.deleteActivityData)(dispatch, activity, { callback: onClose });\n }; };\n return (React.createElement(core_1.Modal, { open: open, onClose: onClose, className: classes.editActivityModal },\n React.createElement(\"div\", { className: classes.content },\n React.createElement(\"div\", { className: classes.header },\n React.createElement(core_1.Typography, { className: classes.editActivityModalTitle, variant: \"subtitle2\" }, \"\".concat(translate('activityDiary.plannedActivities'), \" | \").concat((0, dateUtils_1.datestamp)(date))),\n React.createElement(core_1.IconButton, { onClick: onClose },\n React.createElement(icons_1.CancelOutlinedIcon, { className: classes.cancelIcon }))),\n React.createElement(\"div\", null, activitiesOnSelectedDate && activitiesOnSelectedDate.map(function (activity) { return (React.createElement(\"div\", { key: activity.id, className: classes.item },\n React.createElement(\"div\", { className: classes.itemTop },\n activity.category && (React.createElement(core_1.Typography, { variant: \"body2\" }, translate(\"activityDiary.categories.\".concat(activity.category)))),\n React.createElement(core_1.Typography, { variant: \"body2\" }, (0, dateUtils_1.hourCount)(activity.durationInMinutes, translate))),\n React.createElement(\"div\", { className: classes.itemContent },\n React.createElement(\"div\", { className: classes.activityText },\n React.createElement(core_1.Typography, null, activity.activity),\n activity.effortRating && activity.effortRating > 0 ? (React.createElement(Rating_1.default, { size: \"small\", name: \"effortRating-\".concat(activity.id), value: activity.effortRating, color: \"primary\" })) : activity.effortRating === -1 ? (React.createElement(core_1.Typography, { variant: \"caption\" }, translate('activityDiary.notCompleted'))) : (React.createElement(core_1.Typography, { variant: \"caption\" }, translate('activityDiary.effortNotRegistered')))),\n React.createElement(core_1.IconButton, { onClick: deleteActivity(activity) },\n React.createElement(icons_1.DeleteIcon, null)),\n React.createElement(core_1.IconButton, { onClick: editActivity(activity) },\n React.createElement(icons_1.EditIcon, null))))); })),\n React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Button, { onClick: addNew, color: \"primary\" }, translate('activityDiary.addNewActivity'))))));\n};\nDateDetails.defaultProps = {\n date: null,\n};\nexports.default = DateDetails;\n","import React, { useState } from 'react';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport PropTypes from 'prop-types';\nimport {\n ResponsiveContainer, LineChart, Line, YAxis, XAxis, Tooltip,\n} from 'recharts';\nimport {\n withStyles, Typography, Tabs, Tab, IconButton,\n} from '@material-ui/core';\nimport { today, addMonths } from '../../../youwell-common/dateUtils';\nimport { patientProgramTaskLabels, performanceDetailedPeriods } from '../../../common/constants';\nimport TaskLabelIcon from '../../inside/components/TaskLabelIcon';\nimport { PrevIcon, NextIcon } from '../../../common/icons';\nimport { moduloBase1 } from '../../../youwell-common/numberUtils';\nimport { getDetailedCompleteRateForPeriod } from './utils';\n\nconst styles = theme => ({\n root: {\n },\n tabsContainer: {\n boxShadow: '0px -5px 10px rgba(0, 0, 0, 0.1)',\n borderRadius: '10px 10px 0px 0px',\n },\n chartNavigationButtons: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n periodTitle: {\n flex: '1 1 auto',\n },\n chartContainer: {\n marginTop: theme.spacing(2),\n },\n chartHeader: {\n marginBottom: theme.spacing(1),\n },\n chart: {\n marginLeft: theme.spacing(-2),\n },\n});\n\nfunction DetailedPerformanceChart(props) {\n const {\n classes, translate, tasksToDisplay, theme,\n } = props;\n\n // TODO: Get this list from some config setting?\n const taskLabelsForPerformance = [\n patientProgramTaskLabels.gladRygg,\n patientProgramTaskLabels.work,\n patientProgramTaskLabels.medicine,\n patientProgramTaskLabels.activity,\n ];\n\n const [period, setPeriod] = useState(performanceDetailedPeriods.month);\n const [periodOffset, setPeriodOffset] = useState(0);\n const [currentLabel, setCurrentLabel] = useState(taskLabelsForPerformance[0]);\n\n const detailedCompleteRate = getDetailedCompleteRateForPeriod(\n tasksToDisplay,\n currentLabel,\n period,\n periodOffset,\n );\n const chartData = detailedCompleteRate.map((element, index) => ({\n index: (index + 1).toString(),\n value: element,\n }));\n\n const currentMonth = moduloBase1(today().getMonth() + 1 + periodOffset, 12);\n\n // Get year user is viewing based on the offset for current period\n const currentYear = period === performanceDetailedPeriods.month\n ? addMonths(today(), periodOffset).getFullYear()\n : today().getFullYear() + periodOffset;\n\n return (\n <>\n \n {\n setCurrentLabel(value);\n setPeriodOffset(0);\n }}\n variant=\"fullWidth\"\n >\n {taskLabelsForPerformance\n && taskLabelsForPerformance.map(label => (\n }\n aria-label={translate(`taskLabels.${label}`)}\n value={label}\n key={`taskLabel-${label}`}\n />\n ))\n }\n \n
\n\n \n
setPeriodOffset(periodOffset - 1)}\n aria-label={translate('performance.previous')}\n >\n \n \n {period === performanceDetailedPeriods.month\n && (\n
\n {translate(`calendar.month${currentMonth}`)}\n {' '}\n {currentYear}\n \n )}\n {period === performanceDetailedPeriods.year\n && (\n
\n {currentYear}\n \n )}\n
setPeriodOffset(periodOffset + 1)}\n aria-label={translate('performance.next')}\n >\n \n \n
\n\n \n {\n setPeriod(value);\n setPeriodOffset(0);\n }}\n centered\n >\n \n \n \n
\n\n \n
\n \n {translate('performance.detailedChartHeader', { label: translate(`taskLabels.${currentLabel}`) })}\n \n \n {translate('performance.detailedChartSubtitle')}\n \n
\n\n
\n \n \n \n \n \n \n \n \n \n \n data.value === 100) ? theme.palette.primary.main : 'url(#colorValue)'}\n strokeWidth={5}\n dot={false}\n />\n \n \n \n
\n
\n >\n );\n}\n\nDetailedPerformanceChart.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n theme: PropTypes.object.isRequired,\n tasksToDisplay: PropTypes.array,\n};\n\nDetailedPerformanceChart.defaultProps = {\n tasksToDisplay: [],\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n tasksToDisplay: state.programStore.tasksToDisplay,\n});\n\nexport default connect(mapStateToProps)(withStyles(styles, { withTheme: true })(DetailedPerformanceChart));\n","import React, { useState } from 'react';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport PropTypes from 'prop-types';\nimport {\n ResponsiveContainer, BarChart, Bar, Cell, YAxis, XAxis, Tooltip,\n} from 'recharts';\nimport classnames from 'classnames';\nimport {\n withStyles, Tabs, Tab, IconButton, Typography,\n} from '@material-ui/core';\nimport {\n getWeekNumberFromDate, today, addDays, addMonths,\n} from '../../../youwell-common/dateUtils';\nimport { patientProgramTaskLabels, performanceOverviewPeriods } from '../../../common/constants';\nimport { moduloBase1 } from '../../../youwell-common/numberUtils';\nimport { PrevIcon, NextIcon } from '../../../common/icons';\nimport { getCompleteRateForPeriod } from './utils';\n\nconst styles = theme => ({\n root: {\n },\n tabsContainer: {\n boxShadow: '0px -5px 10px rgba(0, 0, 0, 0.1)',\n borderRadius: '10px 10px 0px 0px',\n },\n chartNavigationButtons: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n hidden: {\n visibility: 'hidden',\n },\n periodTitle: {\n flex: '1 1 auto',\n },\n chartHeader: {\n marginBottom: theme.spacing(1),\n },\n chart: {\n marginLeft: theme.spacing(-2),\n },\n});\n\nfunction OverviewPerformanceChart(props) {\n const {\n classes, translate, tasksToDisplay, theme,\n } = props;\n\n // TODO: Get this list from some config setting?\n const taskLabelsForPerformance = [\n patientProgramTaskLabels.gladRygg,\n patientProgramTaskLabels.work,\n patientProgramTaskLabels.medicine,\n patientProgramTaskLabels.activity,\n ];\n\n const [period, setPeriod] = useState(performanceOverviewPeriods.week);\n const [periodOffset, setPeriodOffset] = useState(0);\n\n const currentWeek = moduloBase1(getWeekNumberFromDate() + periodOffset, 52);\n const currentMonth = moduloBase1(today().getMonth() + 1 + periodOffset, 12);\n\n // Get year user is viewing based on the offset for current period\n const currentYear = period === performanceOverviewPeriods.month\n ? addMonths(today(), periodOffset).getFullYear()\n : period === performanceOverviewPeriods.week\n ? addDays(today(), periodOffset * 7).getFullYear()\n : today().getFullYear() + periodOffset;\n\n const chartData = taskLabelsForPerformance.map(label => ({\n name: translate(`taskLabels.${label}`),\n value: getCompleteRateForPeriod(tasksToDisplay, label, period, periodOffset),\n }));\n\n return (\n <>\n \n {\n setPeriod(value);\n setPeriodOffset(0);\n }}\n variant=\"fullWidth\"\n >\n \n \n \n \n \n
\n\n \n
setPeriodOffset(periodOffset - 1)}\n aria-label={translate('performance.previous')}\n >\n \n \n {period === performanceOverviewPeriods.week\n && (\n
\n {translate('calendar.weekNr', { weekNr: currentWeek })}\n {' '}\n {currentYear}\n \n )}\n {period === performanceOverviewPeriods.month\n && (\n
\n {translate(`calendar.month${currentMonth}`)}\n {' '}\n {currentYear}\n \n )}\n {period === performanceOverviewPeriods.year\n && (\n
\n {currentYear}\n \n )}\n
setPeriodOffset(periodOffset + 1)}\n aria-label={translate('performance.next')}\n >\n \n \n
\n\n \n \n {translate('performance.overviewChartHeader')}\n \n \n {translate('performance.overviewChartSubtitle')}\n \n
\n\n \n \n \n \n \n \n {chartData.map(entry => (\n | \n ))}\n \n \n \n \n
\n >\n );\n}\n\nOverviewPerformanceChart.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n theme: PropTypes.object.isRequired,\n tasksToDisplay: PropTypes.array,\n};\n\nOverviewPerformanceChart.defaultProps = {\n tasksToDisplay: [],\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n tasksToDisplay: state.programStore.tasksToDisplay,\n});\n\nexport default connect(mapStateToProps)(withStyles(styles, { withTheme: true })(OverviewPerformanceChart));\n","import urls from '../../../app/urls';\r\nimport { patientProgramElementGroups, performanceDetailedPeriods, performanceOverviewPeriods } from '../../../common/constants';\r\nimport {\r\n getLocalDate, tomorrow, addDays, addMonths, getWeekStartDate, getWeekNumberFromDate, today,\r\n} from '../../../youwell-common/dateUtils';\r\n\r\nconst getAllTasksFromElementGroup = (programDetails, elementGroup) => {\r\n const elements = (programDetails && programDetails.groupedElements && programDetails.groupedElements[elementGroup]) || [];\r\n\r\n return elements.reduce((tasks, element, elementIndex) => {\r\n if (!element || !element.module || !element.module.tasks || element.module.tasks.length < 1) {\r\n if (element && element.task) {\r\n const taskWithStartTime = {\r\n ...element.task,\r\n startTime: element.startTime != null ? element.startTime : element.created,\r\n elementGroup,\r\n taskIndex: elementIndex,\r\n elementId: element.id,\r\n urlToTask: `${urls.inside.program}/${elementGroup}/${elementIndex}`,\r\n };\r\n return tasks.length > 0 ? tasks.concat(taskWithStartTime) : [taskWithStartTime];\r\n }\r\n return tasks;\r\n }\r\n\r\n const tasksWithStartTime = [];\r\n element.module.tasks.forEach((task, taskIndex) => {\r\n tasksWithStartTime.push({\r\n ...task,\r\n startTime: element.startTime != null ? element.startTime : element.created,\r\n elementGroup,\r\n moduleIndex: elementIndex,\r\n moduleName: element.module.name,\r\n taskIndex,\r\n elementId: element.id,\r\n urlToTask: `${urls.inside.program}/${elementGroup}/${elementIndex}/${taskIndex}`,\r\n });\r\n });\r\n\r\n if (tasksWithStartTime.length === 0) {\r\n return tasks;\r\n }\r\n\r\n return tasks.length > 0 ? tasks.concat(tasksWithStartTime) : tasksWithStartTime;\r\n }, []);\r\n};\r\n\r\nexport const getAllTasksToDisplay = (programDetails) => {\r\n // TODO: Which tasks should we display and calculate \"complete rates\"/performace for?\r\n // const mainTasks = getAllTasksFromElementGroup(programDetails, patientProgramElementGroups.main);\r\n const calendarTasks = getAllTasksFromElementGroup(programDetails, patientProgramElementGroups.calendar);\r\n const defaultTasks = getAllTasksFromElementGroup(programDetails, patientProgramElementGroups.default);\r\n\r\n return [].concat(calendarTasks, defaultTasks);\r\n};\r\n\r\nconst getCompleteRateForTasks = tasks => (tasks.length ? (tasks.filter(task => task.completed).length / tasks.length) * 100 : 100);\r\n\r\nconst getFromAndToDateForPeriod = (period, offset) => {\r\n let fromDate = null;\r\n let toDate = null;\r\n\r\n if (period === performanceOverviewPeriods.week) {\r\n // First and last date in week\r\n fromDate = getWeekStartDate(getWeekNumberFromDate() + offset);\r\n toDate = addDays(fromDate, 6);\r\n }\r\n if (period === performanceOverviewPeriods.month\r\n || period === performanceDetailedPeriods.month) {\r\n // First and last date in month\r\n fromDate = new Date(today().getFullYear(), today().getMonth() + offset, 1);\r\n toDate = new Date(today().getFullYear(), today().getMonth() + (offset + 1), 0);\r\n }\r\n if (period === performanceDetailedPeriods.year) {\r\n // First and last date in year\r\n fromDate = new Date(today().getFullYear() + offset, 0, 1);\r\n toDate = new Date(today().getFullYear() + offset, 11, 31);\r\n }\r\n if (period === performanceOverviewPeriods.total) {\r\n // Min and max dates\r\n fromDate = new Date(-8640000000000000);\r\n toDate = new Date(8640000000000000);\r\n }\r\n\r\n return [fromDate, toDate];\r\n};\r\n\r\nconst getTasksPastDueDateWithLabelForPeriod = (tasks, label, period, offset) => {\r\n const [fromDate, toDate] = getFromAndToDateForPeriod(period, offset);\r\n\r\n return tasks.filter(\r\n task => task.label === label\r\n && getLocalDate(task.startTime) >= fromDate\r\n && getLocalDate(task.startTime) <= toDate\r\n && getLocalDate(task.startTime) <= tomorrow(),\r\n );\r\n};\r\n\r\nexport const getCompleteRateForPeriod = (tasks, label, period, offset) => {\r\n const tasksPastDueDateWithLabelForPeriod = getTasksPastDueDateWithLabelForPeriod(tasks, label, period, offset);\r\n return getCompleteRateForTasks(tasksPastDueDateWithLabelForPeriod);\r\n};\r\n\r\nexport const getDetailedCompleteRateForPeriod = (tasks, label, period, offset) => {\r\n const completeRateParts = [];\r\n const tasksPastDueDateWithLabelForPeriod = getTasksPastDueDateWithLabelForPeriod(tasks, label, period, offset);\r\n const [fromDate] = getFromAndToDateForPeriod(period, offset);\r\n\r\n if (period === performanceDetailedPeriods.month) {\r\n // Dividing the month into 6 parts\r\n for (let i = 0; i < 6; i++) {\r\n const tasksForPeriod = tasksPastDueDateWithLabelForPeriod.filter(\r\n task => getLocalDate(task.startTime) >= addDays(fromDate, 5 * i)\r\n && getLocalDate(task.startTime) <= addDays(fromDate, 5 * (i + 1)),\r\n );\r\n\r\n // Calculate complete rate for tasks in current part of period (100% if no tasks)\r\n completeRateParts.push(getCompleteRateForTasks(tasksForPeriod));\r\n }\r\n }\r\n\r\n if (period === performanceDetailedPeriods.year) {\r\n // Dividing the year into 12 parts\r\n for (let i = 0; i < 12; i++) {\r\n const tasksForPeriod = tasksPastDueDateWithLabelForPeriod.filter(\r\n task => getLocalDate(task.startTime) >= addMonths(fromDate, i)\r\n && getLocalDate(task.startTime) <= addMonths(fromDate, i + 1),\r\n );\r\n\r\n // Calculate complete rate for tasks in current part of period (100% if no tasks)\r\n completeRateParts.push(getCompleteRateForTasks(tasksForPeriod));\r\n }\r\n }\r\n\r\n return completeRateParts;\r\n};\r\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar healthUtils_1 = require(\"./utils/healthUtils\");\nvar HealthGraph_1 = __importDefault(require(\"./components/HealthGraph\"));\nvar HealthTable_1 = __importDefault(require(\"./components/HealthTable\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar WeekSelectorCard_1 = __importDefault(require(\"./components/WeekSelectorCard\"));\nvar HealthRegistrationGoalsCard_1 = __importDefault(require(\"./components/HealthRegistrationGoalsCard\"));\nvar HealthRegistrationTaskLogging_1 = __importDefault(require(\"./components/HealthRegistrationTaskLogging\"));\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\n// Scaleren vilker feil, du må velge et tall mellom 7-13 (0.5 pt), 14-15 (1pt), 17-20 (2pt).\n// Talle er ikke skalet rett ettersom de starter feil på skalen i forhold til en linjer funksjon.\n// Det er også 0.5 mellom 0.5 og 1, men 1 mellom 1 og 2, som gir en større spreding over mindre avstand.\n// Hvis du vil gi en score mellom 0-6 hvordan gjøres dette? Hvorfor starte på 7???\nvar weeklyValueModifications = (_a = {},\n _a[healthConstants_1.ActivityPropKeys.Score] = healthConstants_1.WeeklyValueModification.Add,\n _a[healthConstants_1.ActivityPropKeys.ScoreWeeklyGoal] = healthConstants_1.WeeklyValueModification.Keep,\n _a[healthConstants_1.ActivityPropKeys.Minutes] = healthConstants_1.WeeklyValueModification.Add,\n _a);\nvar dailyMinutesMaxValue = 999;\nvar getActivitySetup = function (translate) { return ({\n type: healthRegistration_1.HealthRegistrationType.Activity,\n registrationInterval: healthConstants_1.RegistrationInterval.Daily,\n tasks: [\n {\n key: healthConstants_1.ActivityPropKeys.Category,\n longLabel: 'activity.category',\n shortLabel: 'activity.categoryShort',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: (0, healthUtils_1.generateDropdownItemData)(3, 'activity.dropdownItemsCategory'),\n placeHolder: 'activity.categoryShort',\n visualizationProps: {\n valueTypeTranslateKey: 'activity.dropdownItemsCategory',\n },\n },\n {\n key: healthConstants_1.ActivityPropKeys.Name,\n longLabel: 'activity.name',\n shortLabel: 'activity.nameShort',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n placeHolderTranslateKey: 'activity.nameExample',\n },\n {\n key: healthConstants_1.ActivityPropKeys.Minutes,\n longLabel: 'activity.minutes',\n shortLabel: 'activity.minutesShort',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: dailyMinutesMaxValue,\n placeHolder: 30,\n },\n {\n key: healthConstants_1.ActivityPropKeys.Intensity,\n longLabel: 'activity.intensity',\n shortLabel: 'activity.intensityShort',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: [\n {\n key: '0.5',\n value: translate('activity.dropdownItemsIntensity.0.5'),\n },\n {\n key: '1',\n value: translate('activity.dropdownItemsIntensity.1'),\n },\n {\n key: '2',\n value: translate('activity.dropdownItemsIntensity.2'),\n },\n ],\n visualizationProps: {\n valueTypeTranslateKey: 'activity.dropdownItemsIntensity',\n },\n },\n ],\n goals: [\n {\n key: healthConstants_1.ActivityPropKeys.MinutesDailyGoal,\n longLabel: 'activity.minutesDailyGoal',\n shortLabel: 'activity.minutesShort',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: dailyMinutesMaxValue,\n placeHolder: 30,\n },\n {\n key: healthConstants_1.ActivityPropKeys.ScoreWeeklyGoal,\n longLabel: 'activity.scoreGoal',\n shortLabel: 'activity.scoreShort',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: 9999,\n placeHolder: 150,\n },\n ],\n}); };\nvar Activity = function () {\n var _a, _b;\n var translate = (0, translate_1.default)();\n var _c = React.useState((0, dateUtils_1.getWeek)()), selectedWeek = _c[0], setSelectedWeek = _c[1];\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var activitySetup = getActivitySetup(translate);\n var healthRegistrationLogs = (_a = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === activitySetup.type; })) === null || _a === void 0 ? void 0 : _a.healthRegistrationLogs;\n var healthRegistrationLogsFiltredByDate = (0, healthUtils_1.filterHealthRegistrationLogsByDate)(healthRegistrationLogs, selectedWeek.start, selectedWeek.end);\n var dailyVisualizationData = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogsFiltredByDate, translate);\n var weeklyVisualizationData = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogs, translate, true, weeklyValueModifications);\n var cellValueTranslateKeys = (0, healthUtils_1.generateCellValueTranslateKeys)(activitySetup.tasks);\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.activity') },\n React.createElement(HealthRegistrationTaskLogging_1.default, { setup: activitySetup }),\n React.createElement(HealthRegistrationGoalsCard_1.default, { healthRegistrationSetup: activitySetup }),\n React.createElement(WeekSelectorCard_1.default, { selectedWeek: selectedWeek, onChange: setSelectedWeek }),\n React.createElement(HealthTable_1.default, { header: translate('health.activityHistoryDaily'), data: dailyVisualizationData, headerTranslateKeys: __spreadArray(__spreadArray([], activitySetup.tasks.map(function (d) { return d.shortLabel; }), true), ['activity.scoreShort'], false), cellValueTranslateKeys: cellValueTranslateKeys, dataKeys: __spreadArray(__spreadArray([], (_b = activitySetup.tasks) === null || _b === void 0 ? void 0 : _b.map(function (d) { return d.key; }), true), [healthConstants_1.ActivityPropKeys.Score], false) }),\n React.createElement(HealthGraph_1.default, { measuringUnit: \"activity.scoreShort\", title: translate('activity.weeklyActivityPoints'), data: weeklyVisualizationData, dataKeys: {\n valueKey: healthConstants_1.ActivityPropKeys.Score,\n minGoalKey: healthConstants_1.ActivityPropKeys.ScoreWeeklyGoal,\n } }),\n React.createElement(HealthTable_1.default, { header: translate('health.activityHistoryWeekly'), data: weeklyVisualizationData, headerTranslateKeys: ['activity.scoreShort', 'activity.scoreGoalLabel', 'activity.minutesLabel'], cellValueTranslateKeys: cellValueTranslateKeys, dataKeys: [healthConstants_1.ActivityPropKeys.Score, healthConstants_1.ActivityPropKeys.ScoreWeeklyGoal, healthConstants_1.ActivityPropKeys.Minutes] })));\n};\nexports.default = Activity;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar healthUtils_1 = require(\"./utils/healthUtils\");\nvar HealthGraph_1 = __importDefault(require(\"./components/HealthGraph\"));\nvar HealthTable_1 = __importDefault(require(\"./components/HealthTable\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar WeekSelectorCard_1 = __importDefault(require(\"./components/WeekSelectorCard\"));\nvar HealthRegistrationGoalsCard_1 = __importDefault(require(\"./components/HealthRegistrationGoalsCard\"));\nvar HealthRegistrationTasksCard_1 = __importDefault(require(\"./components/HealthRegistrationTasksCard\"));\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\nvar bloodSugarMaxValue = 20;\nvar bloodSugarSetup = {\n type: healthRegistration_1.HealthRegistrationType.BloodSugar,\n registrationInterval: healthConstants_1.RegistrationInterval.Daily,\n tasks: [\n {\n key: healthConstants_1.BloodSugarPropKeys.BloodSugarScore,\n shortLabel: 'bloodSugar.millimolPerLiter',\n longLabel: 'bloodSugar.bloodSugarToday',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: bloodSugarMaxValue,\n placeHolder: 5,\n },\n ],\n goals: [\n {\n key: healthConstants_1.BloodSugarPropKeys.BloodSugarMaxGoal,\n shortLabel: 'bloodSugar.millimolPerLiter',\n longLabel: 'bloodSugar.bloodSugarMaxGoal',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: bloodSugarMaxValue,\n placeHolder: 5.4,\n },\n {\n key: healthConstants_1.BloodSugarPropKeys.BloodSugarMinGoal,\n shortLabel: 'bloodSugar.millimolPerLiter',\n longLabel: 'bloodSugar.bloodSugarMinGoal',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: bloodSugarMaxValue,\n placeHolder: 4,\n },\n ],\n};\nvar BloodSugar = function () {\n var _a;\n var translate = (0, translate_1.default)();\n var _b = React.useState((0, dateUtils_1.getWeek)()), selectedWeek = _b[0], setSelectedWeek = _b[1];\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var healthRegistrationLogs = (_a = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === bloodSugarSetup.type; })) === null || _a === void 0 ? void 0 : _a.healthRegistrationLogs;\n var healthRegistrationLogsFiltredByDate = (0, healthUtils_1.filterHealthRegistrationLogsByDate)(healthRegistrationLogs, selectedWeek.start, selectedWeek.end);\n var visualizationData = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogsFiltredByDate, translate);\n var currentTasksAndGoals = __spreadArray(__spreadArray([], bloodSugarSetup.tasks, true), bloodSugarSetup.goals, true);\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.bloodSugar') },\n React.createElement(HealthRegistrationTasksCard_1.default, { healthRegistrationSetup: bloodSugarSetup }),\n React.createElement(HealthRegistrationGoalsCard_1.default, { healthRegistrationSetup: bloodSugarSetup }),\n React.createElement(WeekSelectorCard_1.default, { selectedWeek: selectedWeek, onChange: setSelectedWeek }),\n React.createElement(HealthTable_1.default, { headerTranslateKeys: currentTasksAndGoals.map(function (d) { return d.longLabel; }), dataKeys: currentTasksAndGoals.map(function (d) { return d.key; }), data: visualizationData }),\n React.createElement(HealthGraph_1.default, { measuringUnit: \"bloodSugar.millimolPerLiter\", title: translate('bloodSugar.bloodSugarMillimolPerLiter'), data: visualizationData, dataKeys: {\n valueKey: healthConstants_1.BloodSugarPropKeys.BloodSugarScore,\n maxGoalKey: healthConstants_1.BloodSugarPropKeys.BloodSugarMaxGoal,\n minGoalKey: healthConstants_1.BloodSugarPropKeys.BloodSugarMinGoal,\n } })));\n};\nexports.default = BloodSugar;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar icons_1 = require(\"@material-ui/icons\");\nvar core_1 = require(\"@material-ui/core\");\nvar stringUtils_1 = require(\"../../../youwell-common/stringUtils\");\nvar store_1 = require(\"../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar healthUtils_1 = require(\"./utils/healthUtils\");\nvar WeekSelectorCard_1 = __importDefault(require(\"./components/WeekSelectorCard\"));\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\nvar HealthRegistrationGoalLogging_1 = __importDefault(require(\"./components/HealthRegistrationGoalLogging\"));\nvar HealthRegistrationGoalsEditing_1 = __importDefault(require(\"./components/HealthRegistrationGoalsEditing\"));\nvar arrayUtils_1 = require(\"../../../youwell-common/arrayUtils\");\nvar HealthTable_1 = __importDefault(require(\"./components/HealthTable\"));\nvar getDietSetup = function (translate) { return ({\n type: healthRegistration_1.HealthRegistrationType.Diet,\n registrationInterval: healthConstants_1.RegistrationInterval.Daily,\n tasks: [\n {\n key: healthConstants_1.DietPropKeys.Completed,\n shortLabel: 'diet.completed',\n longLabel: 'diet.completed',\n type: healthConstants_1.TaskOrGoalInputType.Checkbox,\n },\n ],\n goals: [\n {\n key: healthConstants_1.DietPropKeys.Name,\n shortLabel: 'diet.nameShort',\n longLabel: 'diet.name',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n placeHolder: translate('diet.namePlaceholder'),\n },\n ],\n}); };\nvar getChartData = function (theme, translate, programStartDate, healthRegistrationLogs, selectedWeek) {\n var _a;\n var loggedTasks = healthRegistrationLogs === null || healthRegistrationLogs === void 0 ? void 0 : healthRegistrationLogs.filter(function (d) { return d.type === healthRegistration_1.HealthRegistrationLogType.Task; });\n var healthRegistrationLogsFiltredByDate = (_a = (0, healthUtils_1.filterHealthRegistrationLogsByDate)(loggedTasks, selectedWeek.start, selectedWeek.end)) !== null && _a !== void 0 ? _a : [];\n var dailyVisualizationDataWeek = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogsFiltredByDate, translate, true);\n var dailyVisualizationDataAllDays = (0, healthUtils_1.generateVisualizationData)(loggedTasks, translate);\n var CheckedRegistrationWeek = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataWeek, healthConstants_1.VisualizationPropsKeys.RegisteredCount);\n var uncheckedRegistrationWeek = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataWeek, healthConstants_1.VisualizationPropsKeys.UnregisteredCount);\n var forgotRegistrationWeek = (dailyVisualizationDataWeek === null || dailyVisualizationDataWeek === void 0 ? void 0 : dailyVisualizationDataWeek.length) ? 0 : 1;\n var fullRegistrationsAllDays = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataAllDays, healthConstants_1.VisualizationPropsKeys.FullRegistration);\n var partialRegistrationsAllDays = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataAllDays, healthConstants_1.VisualizationPropsKeys.PartialRegistration);\n var noRegistrationsAllDays = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataAllDays, healthConstants_1.VisualizationPropsKeys.NoRegistration);\n var forgotRegistrationAllDays = programStartDate && dailyVisualizationDataAllDays ? Math.max((0, dateUtils_1.getNumberOfDays)(new Date(programStartDate), new Date()) - ((dailyVisualizationDataAllDays === null || dailyVisualizationDataAllDays === void 0 ? void 0 : dailyVisualizationDataAllDays.length) * 7), 0) : 1;\n var historyTableRecord = healthRegistrationLogsFiltredByDate.reduce(function (prev, curr) {\n var _a;\n var _b, _c;\n return (__assign(__assign({}, prev), (_a = {}, _a[(0, dateUtils_1.getTextfieldDateString)(curr.date)] = __spreadArray(__spreadArray(__spreadArray([], (_b = prev[(0, dateUtils_1.getTextfieldDateString)(curr.date)]) !== null && _b !== void 0 ? _b : [], true), (_c = prev[(0, dateUtils_1.getTextfieldDateString)(curr.date)]) !== null && _c !== void 0 ? _c : [], true), [curr], false), _a)));\n }, {});\n var historyTableData = (0, arrayUtils_1.sortByDateAscending)(Object.entries(historyTableRecord)\n .map(function (_a, i) {\n var _b;\n var key = _a[0], values = _a[1];\n var date = new Date(key);\n var dayNumber = date && new Date(date).getDay();\n var dayName = (0, stringUtils_1.firstLetterUp)(translate(\"time.weekdays_short.\".concat(dayNumber)));\n var week = date && (0, dateUtils_1.getWeekNumberFromDate)(date).toString();\n var weekName = \"\".concat((0, stringUtils_1.firstLetterUp)(translate('time.week')), \" \").concat(week);\n var weekAndYearKey = (0, dateUtils_1.generateWeekAndYearKey)(date) || '';\n return _b = {\n date: date.toISOString(),\n weekAndYearKey: weekAndYearKey,\n healthRegistrationId: i,\n dayName: dayName,\n weekName: weekName,\n timePeriod: dayName\n },\n _b[healthConstants_1.VisualizationPropsKeys.FullRegistration] = values.every(function (v) { var _a; return (_a = v.properties) === null || _a === void 0 ? void 0 : _a.checked; }) ? '✔️👍' : '❌',\n _b[healthConstants_1.VisualizationPropsKeys.NoRegistration] = values.filter(function (v) { var _a; return !((_a = v.properties) === null || _a === void 0 ? void 0 : _a.checked); }).length,\n _b;\n }), 'date');\n var pieChart1Data = [\n {\n name: translate('diet.checked'),\n value: CheckedRegistrationWeek,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.green,\n icon: icons_1.ThumbUp,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('diet.unchecked'),\n value: uncheckedRegistrationWeek,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.red,\n icon: icons_1.Close,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('diet.unregistred'),\n value: forgotRegistrationWeek,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.grayDark,\n icon: icons_1.HelpOutline,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n ];\n var pieChart2Data = [\n {\n name: translate('diet.all'),\n value: fullRegistrationsAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.green,\n icon: icons_1.ThumbUp,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('diet.some'),\n value: partialRegistrationsAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.yellow,\n icon: icons_1.Remove,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('diet.none'),\n value: noRegistrationsAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.red,\n icon: icons_1.Close,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('diet.unregistred'),\n value: forgotRegistrationAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.grayDark,\n icon: icons_1.HelpOutline,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n ];\n return {\n pieChart1Data: pieChart1Data,\n pieChart2Data: pieChart2Data,\n healthRegistrationLogsFiltredByDate: healthRegistrationLogsFiltredByDate,\n historyTableData: historyTableData,\n };\n};\nvar Diet = function () {\n var _a;\n var theme = (0, core_1.useTheme)();\n var translate = (0, translate_1.default)();\n var programStartDate = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.startDate; });\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var _b = React.useState((0, dateUtils_1.getWeek)()), selectedWeek = _b[0], setSelectedWeek = _b[1];\n var dietSetup = getDietSetup(translate);\n var healthRegistrationLogs = (_a = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === dietSetup.type; })) === null || _a === void 0 ? void 0 : _a.healthRegistrationLogs;\n var chartData = getChartData(theme, translate, programStartDate, healthRegistrationLogs, selectedWeek);\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.diet') },\n React.createElement(HealthRegistrationGoalLogging_1.default, { setup: dietSetup }),\n React.createElement(HealthRegistrationGoalsEditing_1.default, { setup: dietSetup }),\n React.createElement(WeekSelectorCard_1.default, { selectedWeek: selectedWeek, onChange: setSelectedWeek }),\n React.createElement(HealthTable_1.default, { data: chartData.historyTableData, headerTranslateKeys: [\n 'diet.completed',\n ], dataKeys: [\n healthConstants_1.VisualizationPropsKeys.FullRegistration,\n ] })));\n};\nexports.default = Diet;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar makeStyles_1 = __importDefault(require(\"@material-ui/core/styles/makeStyles\"));\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar healthRegistrationService_1 = require(\"../../../app/services/healthRegistrationService\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar QuestionAndInput_1 = __importDefault(require(\"./components/QuestionAndInput\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\nvar useStyles = (0, makeStyles_1.default)(function (theme) { return ({\n actions: {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n}); });\nvar goalsAndBarriersSetup = {\n type: healthRegistration_1.HealthRegistrationType.Goals,\n registrationInterval: healthConstants_1.RegistrationInterval.Once,\n tasks: [],\n goals: [\n {\n key: 'purpose',\n longLabel: 'goalsAndBarriers.treatmentPurpose',\n shortLabel: '',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n },\n {\n key: 'subtasks',\n longLabel: 'goalsAndBarriers.subtasks',\n shortLabel: '',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n },\n {\n key: 'obstacles',\n longLabel: 'goalsAndBarriers.obstacles',\n shortLabel: '',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n },\n {\n key: 'responsibility',\n longLabel: 'goalsAndBarriers.responsibility',\n shortLabel: '',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n },\n ],\n};\nvar GoalsAndBarriers = function () {\n var _a;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var _b = React.useState({}), updatedAnswers = _b[0], setUpdatedAnswers = _b[1];\n var _c = React.useState(false), hasUnsavedChanges = _c[0], setHasUnsavedChanges = _c[1];\n var goalsRegistration = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === healthRegistration_1.HealthRegistrationType.Goals; });\n var lastResponse = (_a = goalsRegistration === null || goalsRegistration === void 0 ? void 0 : goalsRegistration.healthRegistrationLogs) === null || _a === void 0 ? void 0 : _a.at(-1);\n var hasAnsweredPreviously = goalsAndBarriersSetup.goals.some(function (q) { var _a; return Boolean((_a = lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.properties) === null || _a === void 0 ? void 0 : _a[q.key]); });\n var questionsWithAnswers = goalsAndBarriersSetup.goals.map(function (d) {\n var _a, _b;\n return ({\n key: d.key,\n question: translate(d.longLabel),\n answer: (_a = updatedAnswers[d.key]) !== null && _a !== void 0 ? _a : (_b = lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.properties) === null || _b === void 0 ? void 0 : _b[d.key],\n });\n });\n var handleQuestionResponseChange = function (name) { return function (text) {\n setUpdatedAnswers(function (prevState) {\n var _a;\n return (__assign(__assign({}, prevState), (_a = {}, _a[name] = text, _a)));\n });\n setHasUnsavedChanges(true);\n }; };\n var clearChanges = function () {\n setUpdatedAnswers({});\n setHasUnsavedChanges(false);\n };\n var handleSaveResponse = function () {\n var answerProps = questionsWithAnswers.reduce(function (prev, curr) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[curr.key] = curr.answer, _a)));\n }, {});\n var callback = function () { return clearChanges(); };\n if (goalsRegistration === null || goalsRegistration === void 0 ? void 0 : goalsRegistration.id) {\n var healthRegistrationLog = {\n id: 0,\n type: healthRegistration_1.HealthRegistrationLogType.Task,\n date: new Date().toISOString(),\n healthRegistrationId: goalsRegistration === null || goalsRegistration === void 0 ? void 0 : goalsRegistration.id,\n properties: answerProps,\n };\n (0, healthRegistrationService_1.insertHealthRegistrationLogsData)(dispatch, healthRegistrationLog, { callback: callback });\n }\n else {\n var healthRegistration = {\n type: healthRegistration_1.HealthRegistrationType.Goals,\n healthRegistrationLogs: [{\n id: 0,\n date: new Date(),\n type: healthRegistration_1.HealthRegistrationLogType.Task,\n properties: answerProps,\n }],\n };\n (0, healthRegistrationService_1.insertHealthRegistrationsData)(dispatch, healthRegistration, { callback: callback });\n }\n };\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.goalsAndBarriers') },\n React.createElement(React.Fragment, null,\n questionsWithAnswers.map(function (question) { return (React.createElement(QuestionAndInput_1.default, { key: question.key, label: question.question, onChange: handleQuestionResponseChange(question.key), value: question.answer })); }),\n React.createElement(\"div\", { className: classes.actions },\n hasUnsavedChanges && (React.createElement(core_1.Button, { onClick: clearChanges }, translate('cancel'))),\n (!hasAnsweredPreviously || hasUnsavedChanges) && (React.createElement(core_1.Button, { disabled: !hasUnsavedChanges, variant: \"contained\", color: \"secondary\", onClick: handleSaveResponse }, translate(hasAnsweredPreviously ? 'update' : 'save')))))));\n};\nexports.default = GoalsAndBarriers;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar makeStyles_1 = __importDefault(require(\"@material-ui/core/styles/makeStyles\"));\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"@material-ui/icons\");\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar breadcrumbUtil_1 = require(\"../../../common/breadcrumbUtil\");\nvar components_1 = require(\"../../../common/components\");\nvar VerticalLineheader_1 = __importDefault(require(\"./components/VerticalLineheader\"));\nvar TitleButtonCard_1 = __importDefault(require(\"./components/TitleButtonCard\"));\nvar HealthProgressCard_1 = __importDefault(require(\"./components/HealthProgressCard\"));\nexports.useStyles = (0, makeStyles_1.default)(function (theme) { return ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n },\n goalsCard: {\n display: 'flex',\n padding: theme.spacing(3),\n justifyContent: 'space-between',\n },\n healthProgressCardActionAeria: {\n padding: theme.spacing(3),\n height: '100%',\n },\n healthProgressCard: {\n height: '100%',\n },\n}); });\nvar Health = function () {\n var _a;\n var classes = (0, exports.useStyles)();\n var translate = (0, translate_1.default)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var healthPagesData = [\n {\n key: 'medicine',\n icon: React.createElement(icons_1.LocalHospital, { color: \"primary\" }),\n titleTranslateKey: 'healthPage.medicine',\n descriptionTranslateKey: 'healthPage.medicineDescription',\n url: urls_1.default.inside.pages.health.medicine,\n },\n {\n key: 'activity',\n icon: React.createElement(icons_1.DirectionsRun, { color: \"primary\" }),\n titleTranslateKey: 'healthPage.activity',\n descriptionTranslateKey: 'healthPage.activityDescription',\n url: urls_1.default.inside.pages.health.activity,\n },\n {\n key: 'weight',\n icon: React.createElement(icons_1.Assessment, { color: \"primary\" }),\n titleTranslateKey: 'healthPage.weight',\n descriptionTranslateKey: 'healthPage.weightDescription',\n url: urls_1.default.inside.pages.health.weight,\n },\n {\n key: 'diet',\n icon: React.createElement(icons_1.EmojiFoodBeverage, { color: \"primary\" }),\n titleTranslateKey: 'healthPage.diet',\n descriptionTranslateKey: 'healthPage.dietDescription',\n url: urls_1.default.inside.pages.health.diet,\n },\n {\n key: 'smoking',\n icon: React.createElement(icons_1.SmokeFree, { color: \"primary\" }),\n titleTranslateKey: 'healthPage.smoking',\n descriptionTranslateKey: 'healthPage.smokingDescription',\n url: urls_1.default.inside.pages.health.smoking,\n },\n {\n key: 'bloodSugar',\n icon: React.createElement(icons_1.Favorite, { color: \"primary\" }),\n titleTranslateKey: 'healthPage.bloodSugar',\n descriptionTranslateKey: 'healthPage.bloodSugarDescription',\n url: urls_1.default.inside.pages.health.bloodSugar,\n },\n {\n key: 'psychosocial',\n icon: React.createElement(icons_1.EmojiPeople, { color: \"primary\" }),\n titleTranslateKey: 'healthPage.psychosocial',\n descriptionTranslateKey: 'healthPage.psychosocialDescription',\n url: urls_1.default.inside.pages.health.psychosocial,\n },\n ];\n return (React.createElement(components_1.PageLayout, { breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(translate('healthPage.header'), translate, clientConfig, undefined, []) },\n React.createElement(\"div\", { className: classes.root },\n React.createElement(VerticalLineheader_1.default, { title: translate('healthPage.header'), icon: React.createElement(icons_1.DirectionsRun, null) }),\n ((_a = clientConfig.appSetup.features.health) === null || _a === void 0 ? void 0 : _a.goals) && (React.createElement(TitleButtonCard_1.default, { title: translate('healthPage.goalsAndBarriers'), buttonText: translate('goalsAndBarriers.open'), buttonUrl: urls_1.default.inside.pages.health.goals })),\n React.createElement(core_1.Grid, { container: true, spacing: 2 }, healthPagesData.filter(function (element) { var _a; return (_a = clientConfig.appSetup.features.health) === null || _a === void 0 ? void 0 : _a[element.key]; }).map(function (element) { return (React.createElement(HealthProgressCard_1.default, { key: element.key, element: element })); })))));\n};\nexports.default = Health;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar Health_1 = __importDefault(require(\"./Health\"));\nvar Activity_1 = __importDefault(require(\"./Activity\"));\nvar BloodSugar_1 = __importDefault(require(\"./BloodSugar\"));\nvar Diet_1 = __importDefault(require(\"./Diet\"));\nvar Medicine_1 = __importDefault(require(\"./Medicine\"));\nvar Psychosocial_1 = __importDefault(require(\"./Psychosocial\"));\nvar Smoking_1 = __importDefault(require(\"./Smoking\"));\nvar Weight_1 = __importDefault(require(\"./Weight\"));\nvar GoalsAndBarriers_1 = __importDefault(require(\"./GoalsAndBarriers\"));\nvar Index = function () { return (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.medicine, component: Medicine_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.activity, component: Activity_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.weight, component: Weight_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.diet, component: Diet_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.smoking, component: Smoking_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.bloodSugar, component: BloodSugar_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.psychosocial, component: Psychosocial_1.default }),\n React.createElement(react_router_dom_1.Route, { path: urls_1.default.inside.pages.health.goals, component: GoalsAndBarriers_1.default }),\n React.createElement(react_router_dom_1.Route, { component: Health_1.default }))); };\nexports.default = Index;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar icons_1 = require(\"@material-ui/icons\");\nvar core_1 = require(\"@material-ui/core\");\nvar stringUtils_1 = require(\"../../../youwell-common/stringUtils\");\nvar store_1 = require(\"../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar healthUtils_1 = require(\"./utils/healthUtils\");\nvar WeekSelectorCard_1 = __importDefault(require(\"./components/WeekSelectorCard\"));\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar HealthTable_1 = __importDefault(require(\"./components/HealthTable\"));\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\nvar MyMedications_1 = __importDefault(require(\"./components/MyMedications\"));\nvar MedicationLogging_1 = __importDefault(require(\"./components/MedicationLogging\"));\nvar medicineService_1 = require(\"../../../app/services/medicineService\");\nvar arrayUtils_1 = require(\"../../../youwell-common/arrayUtils\");\nvar getMedicineSetup = function (translate) { return ([\n {\n key: 'name',\n shortLabel: 'medicine.nameShort',\n longLabel: 'medicine.name',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n placeHolder: translate('medicine.namePlaceholder'),\n },\n {\n key: 'dosage',\n shortLabel: 'medicine.dosageShort',\n longLabel: 'medicine.dosage',\n type: healthConstants_1.TaskOrGoalInputType.Text,\n placeHolder: '200 mg',\n },\n {\n key: 'administrationTime',\n shortLabel: 'medicine.timeofDay',\n longLabel: 'medicine.timeOfDayShort',\n type: healthConstants_1.TaskOrGoalInputType.MultipleSelect,\n dropdownItems: [\n {\n key: 'medicine.morning',\n value: translate('medicine.morning'),\n },\n {\n key: 'medicine.evening',\n value: translate('medicine.evening'),\n },\n ],\n },\n]); };\nvar getChartData = function (theme, translate, selectedWeek, programStartDate, medicationLogs) {\n var healthRegistrationLogs = Object.values(medicationLogs !== null && medicationLogs !== void 0 ? medicationLogs : {}).reduce(function (prev, curr) { return (__spreadArray(__spreadArray([], prev, true), Object.values(curr !== null && curr !== void 0 ? curr : {}).reduce(function (p, c) { return (__spreadArray(__spreadArray([], p, true), [{\n id: c.id,\n type: healthRegistration_1.HealthRegistrationLogType.Task,\n healthRegistrationId: c.medicationId,\n date: c.date,\n properties: {},\n }], false)); }, []), true)); }, []);\n var healthRegistrationLogsFiltredByDate = (0, healthUtils_1.filterHealthRegistrationLogsByDate)(healthRegistrationLogs, selectedWeek.start, selectedWeek.end);\n var dailyVisualizationDataWeek = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogsFiltredByDate, translate);\n var dailyVisualizationDataAllDays = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogs, translate);\n var fullRegistrationWeek = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataWeek, healthConstants_1.VisualizationPropsKeys.FullRegistration);\n var partialRegistrationWeek = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataWeek, healthConstants_1.VisualizationPropsKeys.PartialRegistration);\n var noRegistrationWeek = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataWeek, healthConstants_1.VisualizationPropsKeys.NoRegistration);\n var forgotRegistrationWeek = 7 - ((dailyVisualizationDataWeek === null || dailyVisualizationDataWeek === void 0 ? void 0 : dailyVisualizationDataWeek.length) || 0);\n var fullRegistrationsAllDays = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataAllDays, healthConstants_1.VisualizationPropsKeys.FullRegistration);\n var partialRegistrationsAllDays = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataAllDays, healthConstants_1.VisualizationPropsKeys.PartialRegistration);\n var noRegistrationsAllDays = (0, healthUtils_1.sumObjectValue)(dailyVisualizationDataAllDays, healthConstants_1.VisualizationPropsKeys.NoRegistration);\n var forgotRegistrationAllDays = programStartDate && dailyVisualizationDataAllDays ? Math.max((0, dateUtils_1.getNumberOfDays)(new Date(programStartDate), new Date()) - (dailyVisualizationDataAllDays === null || dailyVisualizationDataAllDays === void 0 ? void 0 : dailyVisualizationDataAllDays.length), 0) : 1;\n var historyTableRecord = Object.values(medicationLogs !== null && medicationLogs !== void 0 ? medicationLogs : {}).reduce(function (prev, curr) { return (__assign({}, Object.values(curr !== null && curr !== void 0 ? curr : {}).reduce(function (p, c) {\n var _a;\n var _b, _c;\n return (__assign(__assign({}, p), (_a = {}, _a[(0, dateUtils_1.getTextfieldDateString)(c.date)] = __spreadArray(__spreadArray(__spreadArray([], (_b = p[(0, dateUtils_1.getTextfieldDateString)(c.date)]) !== null && _b !== void 0 ? _b : [], true), (_c = prev[(0, dateUtils_1.getTextfieldDateString)(c.date)]) !== null && _c !== void 0 ? _c : [], true), [c], false), _a)));\n }, {}))); }, {});\n var historyTableData = (0, arrayUtils_1.sortByDateAscending)(Object.entries(historyTableRecord)\n .filter(function (_a) {\n var date = _a[0];\n return (new Date(date) >= selectedWeek.start && new Date(date) <= selectedWeek.end);\n })\n .map(function (_a, i) {\n var _b;\n var key = _a[0], values = _a[1];\n var date = new Date(key);\n var dayNumber = date && new Date(date).getDay();\n var dayName = (0, stringUtils_1.firstLetterUp)(translate(\"time.weekdays_short.\".concat(dayNumber)));\n var week = date && (0, dateUtils_1.getWeekNumberFromDate)(date).toString();\n var weekName = \"\".concat((0, stringUtils_1.firstLetterUp)(translate('time.week')), \" \").concat(week);\n var weekAndYearKey = (0, dateUtils_1.generateWeekAndYearKey)(date) || '';\n return _b = {\n date: date.toISOString(),\n weekAndYearKey: weekAndYearKey,\n healthRegistrationId: i,\n dayName: dayName,\n weekName: weekName,\n timePeriod: dayName\n },\n _b[healthConstants_1.VisualizationPropsKeys.FullRegistration] = values.every(function (v) { return v.medTaken; }) ? '✔️👍' : '❌',\n _b[healthConstants_1.VisualizationPropsKeys.NoRegistration] = values.filter(function (v) { return !v.medTaken; }).length,\n _b;\n }), 'date');\n var pieChart1Data = [\n {\n name: translate('medicine.all'),\n value: fullRegistrationWeek,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.green,\n icon: icons_1.ThumbUp,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('medicine.some'),\n value: partialRegistrationWeek,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.yellow,\n icon: icons_1.Remove,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('medicine.none'),\n value: noRegistrationWeek,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.red,\n icon: icons_1.Close,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('medicine.unregistred'),\n value: forgotRegistrationWeek,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.grayDark,\n icon: icons_1.HelpOutline,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n ];\n var pieChart2Data = [\n {\n name: translate('medicine.all'),\n value: fullRegistrationsAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.green,\n icon: icons_1.ThumbUp,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('medicine.some'),\n value: partialRegistrationsAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.yellow,\n icon: icons_1.Remove,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('medicine.none'),\n value: noRegistrationsAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.red,\n icon: icons_1.Close,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n {\n name: translate('medicine.unregistred'),\n value: forgotRegistrationAllDays,\n color: theme === null || theme === void 0 ? void 0 : theme.youwell.colors.grayDark,\n icon: icons_1.HelpOutline,\n iconColor: theme === null || theme === void 0 ? void 0 : theme.palette.common.white,\n },\n ];\n return {\n pieChart1Data: pieChart1Data,\n pieChart2Data: pieChart2Data,\n historyTableData: historyTableData,\n };\n};\nvar Medicine = function () {\n var theme = (0, core_1.useTheme)();\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var _a = React.useState((0, dateUtils_1.getWeek)()), selectedWeek = _a[0], setSelectedWeek = _a[1];\n var programStartDate = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.startDate; });\n var medications = (0, store_1.useYouwellSelector)(function (state) { return state.medicationStore.medications; });\n var medicationLogs = (0, store_1.useYouwellSelector)(function (state) { return state.medicationStore.medicationLogs; });\n React.useEffect(function () {\n if (!medicationLogs) {\n (0, medicineService_1.fetchMedicationLogData)(dispatch);\n }\n }, [dispatch, medicationLogs]);\n var chartData = getChartData(theme, translate, selectedWeek, programStartDate, medicationLogs);\n var medicineSetup = getMedicineSetup(translate);\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.medicine') },\n React.createElement(MedicationLogging_1.default, { medications: medications, medicationLogs: medicationLogs }),\n React.createElement(MyMedications_1.default, { medications: medications, medicationSetup: medicineSetup }),\n React.createElement(WeekSelectorCard_1.default, { selectedWeek: selectedWeek, onChange: setSelectedWeek }),\n React.createElement(HealthTable_1.default, { data: chartData.historyTableData, headerTranslateKeys: [\n 'medicine.tookAllMedicine',\n 'medicine.didNotTake',\n ], dataKeys: [\n healthConstants_1.VisualizationPropsKeys.FullRegistration,\n healthConstants_1.VisualizationPropsKeys.NoRegistration,\n ] })));\n};\nexports.default = Medicine;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar healthUtils_1 = require(\"./utils/healthUtils\");\nvar HealthGraph_1 = __importDefault(require(\"./components/HealthGraph\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar HealthTable_1 = __importDefault(require(\"./components/HealthTable\"));\nvar HealthRegistrationTasksCard_1 = __importDefault(require(\"./components/HealthRegistrationTasksCard\"));\nvar HealthRegistrationGoalsCard_1 = __importDefault(require(\"./components/HealthRegistrationGoalsCard\"));\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\nvar dropdownItems = (0, healthUtils_1.generateDropdownItemData)(4, 'psychosocial.dropdownItems');\nvar getPsychosocialSetup = function (theme) { return ({\n type: healthRegistration_1.HealthRegistrationType.Psychosocial,\n registrationInterval: healthConstants_1.RegistrationInterval.Weekly,\n tasks: [\n {\n key: healthConstants_1.PsychosocialPropKeys.SafeScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.safeAndCalm',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.greenLight,\n bottomHalfColor: theme.youwell.colors.redLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.CheerfulScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.cheerfulAndOptimistic',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.greenLight,\n bottomHalfColor: theme.youwell.colors.redLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.NervousScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.nervous',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.AnxietyScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.anxiety',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.IrritableScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.irritable',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.DepressedScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.depressed',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.LonelyScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.lonely',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.TenseScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.tense',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.PessimisticScore,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.pessimistic',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: dropdownItems,\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItems',\n },\n },\n {\n key: healthConstants_1.PsychosocialPropKeys.Awake,\n shortLabel: 'psychosocial.alternative',\n longLabel: 'psychosocial.awake',\n type: healthConstants_1.TaskOrGoalInputType.Dropdown,\n dropdownItems: (0, healthUtils_1.generateDropdownItemData)(7, 'psychosocial.dropdownItemsAwake'),\n visualizationProps: {\n topHalfColor: theme.youwell.colors.yellow,\n bottomHalfColor: theme.youwell.colors.greenLight,\n valueTypeTranslateKey: 'psychosocial.dropdownItemsAwake',\n },\n },\n ],\n goals: [],\n}); };\nvar Psychosocial = function () {\n var _a, _b, _c;\n var theme = (0, core_1.useTheme)();\n var translate = (0, translate_1.default)();\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var psychosocialSetup = getPsychosocialSetup(theme);\n var healthRegistrationLogs = (_a = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === psychosocialSetup.type; })) === null || _a === void 0 ? void 0 : _a.healthRegistrationLogs;\n var visualizationData = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogs, translate, true);\n var cellValueTranslateKeys = (0, healthUtils_1.generateCellValueTranslateKeys)(psychosocialSetup.tasks);\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.psychosocial') },\n React.createElement(HealthRegistrationTasksCard_1.default, { healthRegistrationSetup: psychosocialSetup }),\n React.createElement(HealthRegistrationGoalsCard_1.default, { healthRegistrationSetup: psychosocialSetup }),\n React.createElement(HealthTable_1.default, { data: visualizationData, headerTranslateKeys: (_b = psychosocialSetup.tasks) === null || _b === void 0 ? void 0 : _b.map(function (d) { return d.longLabel; }), dataKeys: (_c = psychosocialSetup.tasks) === null || _c === void 0 ? void 0 : _c.map(function (d) { return d.key; }), cellValueTranslateKeys: cellValueTranslateKeys, lineHighlightDirection: healthConstants_1.LineHighlightDirection === null || healthConstants_1.LineHighlightDirection === void 0 ? void 0 : healthConstants_1.LineHighlightDirection.Vertical }),\n React.createElement(React.Fragment, null, psychosocialSetup.tasks.map(function (task) {\n var _a, _b, _c;\n return (React.createElement(HealthGraph_1.default, { key: task.key, title: translate(task.longLabel), data: visualizationData, dataKeys: { valueKey: task.key }, valueTypeTranslateKey: (_a = task.visualizationProps) === null || _a === void 0 ? void 0 : _a.valueTypeTranslateKey, topHalfColor: (_b = task.visualizationProps) === null || _b === void 0 ? void 0 : _b.topHalfColor, bottomHalfColor: (_c = task.visualizationProps) === null || _c === void 0 ? void 0 : _c.bottomHalfColor, noFill: true, hideYAxisLabels: true }));\n }))));\n};\nexports.default = Psychosocial;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar healthUtils_1 = require(\"./utils/healthUtils\");\nvar HealthGraph_1 = __importDefault(require(\"./components/HealthGraph\"));\nvar HealthTable_1 = __importDefault(require(\"./components/HealthTable\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar WeekSelectorCard_1 = __importDefault(require(\"./components/WeekSelectorCard\"));\nvar HealthRegistrationTasksCard_1 = __importDefault(require(\"./components/HealthRegistrationTasksCard\"));\nvar HealthRegistrationGoalsCard_1 = __importDefault(require(\"./components/HealthRegistrationGoalsCard\"));\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\nvar nicotineMaxValue = 99;\nvar nicotineSetup = {\n type: healthRegistration_1.HealthRegistrationType.SmokeStop,\n registrationInterval: healthConstants_1.RegistrationInterval.Daily,\n tasks: [\n {\n key: healthConstants_1.SmokingPropKeys.CigarettesScore,\n shortLabel: 'smoking.count',\n longLabel: 'smoking.cigarettesSmokedToday',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: nicotineMaxValue,\n placeHolder: 30,\n },\n {\n key: healthConstants_1.SmokingPropKeys.SnusScore,\n shortLabel: 'smoking.count',\n longLabel: 'smoking.snusTakenToday',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: nicotineMaxValue,\n placeHolder: 20,\n },\n ],\n goals: [\n {\n key: healthConstants_1.SmokingPropKeys.CigarettesGoal,\n shortLabel: 'smoking.count',\n longLabel: 'smoking.cigarettesDaylyGoal',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: nicotineMaxValue,\n placeHolder: 25,\n },\n {\n key: healthConstants_1.SmokingPropKeys.SnusGoal,\n shortLabel: 'smoking.count',\n longLabel: 'smoking.snusDailyGoal',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: nicotineMaxValue,\n placeHolder: 15,\n },\n ],\n};\nvar Smoking = function () {\n var _a;\n var translate = (0, translate_1.default)();\n var _b = React.useState((0, dateUtils_1.getWeek)()), selectedWeek = _b[0], setSelectedWeek = _b[1];\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var healthRegistrationLogs = (_a = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === nicotineSetup.type; })) === null || _a === void 0 ? void 0 : _a.healthRegistrationLogs;\n var healthRegistrationLogsFiltredByDate = (0, healthUtils_1.filterHealthRegistrationLogsByDate)(healthRegistrationLogs, selectedWeek.start, selectedWeek.end);\n var visualizationData = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogsFiltredByDate, translate);\n var currentTasksAndGoals = __spreadArray(__spreadArray([], nicotineSetup.tasks, true), nicotineSetup.goals, true);\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.smoking') },\n React.createElement(HealthRegistrationTasksCard_1.default, { healthRegistrationSetup: nicotineSetup }),\n React.createElement(HealthRegistrationGoalsCard_1.default, { healthRegistrationSetup: nicotineSetup }),\n React.createElement(WeekSelectorCard_1.default, { selectedWeek: selectedWeek, onChange: setSelectedWeek }),\n React.createElement(HealthTable_1.default, { headerTranslateKeys: currentTasksAndGoals.map(function (d) { return d.longLabel; }), dataKeys: currentTasksAndGoals.map(function (d) { return d.key; }), data: visualizationData }),\n React.createElement(HealthGraph_1.default, { measuringUnit: \"smoking.count\", title: translate('smoking.smokedCount'), data: visualizationData, dataKeys: {\n maxGoalKey: healthConstants_1.SmokingPropKeys.CigarettesGoal,\n valueKey: healthConstants_1.SmokingPropKeys.CigarettesScore,\n } }),\n React.createElement(HealthGraph_1.default, { measuringUnit: \"smoking.count\", title: translate('smoking.snusCount'), data: visualizationData, dataKeys: {\n maxGoalKey: healthConstants_1.SmokingPropKeys.SnusGoal,\n valueKey: healthConstants_1.SmokingPropKeys.SnusScore,\n } })));\n};\nexports.default = Smoking;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar store_1 = require(\"../../../app/store\");\nvar healthUtils_1 = require(\"./utils/healthUtils\");\nvar HealthGraph_1 = __importDefault(require(\"./components/HealthGraph\"));\nvar HealthTable_1 = __importDefault(require(\"./components/HealthTable\"));\nvar healthConstants_1 = require(\"./utils/healthConstants\");\nvar HealthPageWrapper_1 = __importDefault(require(\"./components/HealthPageWrapper\"));\nvar HealthRegistrationTasksCard_1 = __importDefault(require(\"./components/HealthRegistrationTasksCard\"));\nvar HealthRegistrationGoalsCard_1 = __importDefault(require(\"./components/HealthRegistrationGoalsCard\"));\nvar healthRegistration_1 = require(\"../../../app/store/types/healthRegistration\");\nvar weightMaxValue = 700;\nvar waistMaxValue = 300;\nvar WeightAndSizePropKeys;\n(function (WeightAndSizePropKeys) {\n WeightAndSizePropKeys[\"KgGoal\"] = \"kgGoal\";\n WeightAndSizePropKeys[\"KgScore\"] = \"kgScore\";\n WeightAndSizePropKeys[\"CmGoal\"] = \"cmGoal\";\n WeightAndSizePropKeys[\"CmScore\"] = \"cmScore\";\n})(WeightAndSizePropKeys || (WeightAndSizePropKeys = {}));\nvar weightAndWaistSetup = {\n type: healthRegistration_1.HealthRegistrationType.WeightAndSize,\n registrationInterval: healthConstants_1.RegistrationInterval.Weekly,\n tasks: [\n {\n key: WeightAndSizePropKeys.KgScore,\n shortLabel: 'weightAndSize.kg',\n longLabel: 'weightAndSize.kgToday',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: weightMaxValue,\n placeHolder: 80,\n },\n {\n key: WeightAndSizePropKeys.CmScore,\n shortLabel: 'weightAndSize.cm',\n longLabel: 'weightAndSize.cmToday',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: waistMaxValue,\n placeHolder: 100,\n },\n ],\n goals: [\n {\n key: WeightAndSizePropKeys.KgGoal,\n shortLabel: 'weightAndSize.kg',\n longLabel: 'weightAndSize.kgGoalLabel',\n columnHeaderLabel: 'weightAndSize.kgGoal',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: weightMaxValue,\n placeHolder: 70,\n },\n {\n key: WeightAndSizePropKeys.CmGoal,\n shortLabel: 'weightAndSize.cm',\n longLabel: 'weightAndSize.cmGoalLabel',\n columnHeaderLabel: 'weightAndSize.cmGoal',\n type: healthConstants_1.TaskOrGoalInputType.Number,\n maxValue: waistMaxValue,\n placeHolder: 80,\n },\n ],\n};\nvar Weight = function () {\n var _a;\n var translate = (0, translate_1.default)();\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var healthRegistrationLogs = (_a = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === weightAndWaistSetup.type; })) === null || _a === void 0 ? void 0 : _a.healthRegistrationLogs;\n var weeklyVisualizationData = (0, healthUtils_1.generateVisualizationData)(healthRegistrationLogs, translate, true);\n var currentTasksAndGoals = __spreadArray(__spreadArray([], weightAndWaistSetup.tasks, true), weightAndWaistSetup.goals, true);\n return (React.createElement(HealthPageWrapper_1.default, { title: translate('healthPage.weight') },\n React.createElement(HealthRegistrationTasksCard_1.default, { healthRegistrationSetup: weightAndWaistSetup }),\n React.createElement(HealthRegistrationGoalsCard_1.default, { healthRegistrationSetup: weightAndWaistSetup }),\n React.createElement(HealthTable_1.default, { data: weeklyVisualizationData, headerTranslateKeys: currentTasksAndGoals.map(function (d) { var _a; return (_a = d.columnHeaderLabel) !== null && _a !== void 0 ? _a : d.longLabel; }), dataKeys: currentTasksAndGoals.map(function (d) { return d.key; }) }),\n React.createElement(HealthGraph_1.default, { data: weeklyVisualizationData, measuringUnit: \"weightAndSize.kg\", title: translate('weightAndSize.weight'), dataKeys: {\n maxGoalKey: WeightAndSizePropKeys.KgGoal,\n valueKey: WeightAndSizePropKeys.KgScore,\n } }),\n React.createElement(HealthGraph_1.default, { data: weeklyVisualizationData, measuringUnit: \"weightAndSize.cm\", title: translate('weightAndSize.size'), dataKeys: {\n maxGoalKey: WeightAndSizePropKeys.CmGoal,\n valueKey: WeightAndSizePropKeys.CmScore,\n } })));\n};\nexports.default = Weight;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar recharts_1 = require(\"recharts\");\nvar icons_1 = require(\"@material-ui/icons\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nexports.useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return ({\n root: {\n padding: theme.spacing(3, 0),\n position: 'relative',\n },\n leftLable: (_a = {\n backgroundColor: theme.palette.primary.main,\n padding: theme.spacing(0.5, 2.5, 0.5, 4),\n position: 'absolute',\n top: 'calc(60px + 18%)',\n left: theme.spacing(-1),\n borderTopRightRadius: theme.youwell.shapes.borderRadiusRound,\n borderBottomRightRadius: theme.youwell.shapes.borderRadiusRound\n },\n _a[theme.breakpoints.down('xs')] = {\n display: 'none',\n },\n _a),\n leftLableTitle: {\n color: theme.palette.common.white,\n },\n customToolTip: {\n padding: theme.spacing(2),\n display: 'flex',\n gap: theme.spacing(0.5),\n flexDirection: 'column',\n },\n tableHeaderContainer: {\n padding: theme.spacing(2, 4),\n },\n customToolTipTitle: {\n fontWeight: theme.typography.fontWeightMedium,\n },\n composedChartContainer: {\n // Reset auto left margin from rechart to center graph\n marginLeft: -20,\n },\n });\n});\nvar ICON_SIZE = 32;\nvar TABLE_MIN_WIDTH = 300;\nvar TABLE_ASPECT_RADIO = 16 / 9;\nvar DOMAIN_MULTIPLIER = 1.15;\nvar CustomDots = function (_a) {\n var payload = _a.payload, cx = _a.cx, cy = _a.cy, dataKeys = _a.dataKeys;\n var minGoalKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.minGoalKey;\n var minGoal = minGoalKey ? payload === null || payload === void 0 ? void 0 : payload[minGoalKey] : undefined;\n var maxGoalKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.maxGoalKey;\n var maxGoal = maxGoalKey ? payload === null || payload === void 0 ? void 0 : payload[maxGoalKey] : undefined;\n var valueKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.valueKey;\n var value = valueKey ? payload === null || payload === void 0 ? void 0 : payload[valueKey] : undefined;\n var goalSatisfied = (((minGoal && maxGoal && value) && (value >= minGoal && value <= maxGoal))\n || ((minGoal && !maxGoal && value) && value >= minGoal)\n || ((maxGoal && !minGoal && value) && value <= maxGoal));\n if (goalSatisfied) {\n return (React.createElement(core_1.Hidden, { xsDown: true },\n React.createElement(icons_1.EmojiEmotions, { width: ICON_SIZE, height: ICON_SIZE, x: cx - (ICON_SIZE / 2), y: cy - (ICON_SIZE * 1.4), color: \"secondary\", fill: \"white\", colorProfile: \"white\", colorRendering: \"white\" })));\n }\n return null;\n};\nvar CustomToolTip = function (_a) {\n var _b, _c;\n var tooltipProps = _a.tooltipProps, measuringUnit = _a.measuringUnit, dataKeys = _a.dataKeys, valueTypeTranslateKey = _a.valueTypeTranslateKey;\n var classes = (0, exports.useStyles)();\n var translate = (0, translate_1.default)();\n var data = (_c = (_b = tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.payload) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.payload;\n var momentText = data === null || data === void 0 ? void 0 : data.timePeriod;\n var measuringUnitText = measuringUnit && translate(measuringUnit).toLowerCase();\n var valueKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.valueKey;\n var value = valueKey && (data === null || data === void 0 ? void 0 : data[valueKey]);\n var measurmentText = measuringUnit && \"\".concat(translate('healthGraph.now'), \": \").concat(value, \" \").concat(measuringUnitText);\n var valueTypeText = valueTypeTranslateKey && translate(\"\".concat(valueTypeTranslateKey, \".\").concat(value));\n var valueText = value && (measurmentText || valueTypeText);\n var minGoalKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.minGoalKey;\n var minGoal = minGoalKey ? data === null || data === void 0 ? void 0 : data[minGoalKey] : minGoalKey;\n var minGoalText = \"\".concat(translate('healthGraph.minGoal'), \": \").concat(minGoal, \" \").concat(measuringUnitText);\n var maxGoalKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.maxGoalKey;\n var maxGoal = maxGoalKey && (data === null || data === void 0 ? void 0 : data[maxGoalKey]);\n var maxGoalText = \"\".concat(translate('healthGraph.maxGoal'), \": \").concat(maxGoal, \" \").concat(measuringUnitText);\n return (React.createElement(core_1.Card, { className: classes.customToolTip },\n React.createElement(core_1.Typography, { variant: \"body2\", className: classes.customToolTipTitle }, momentText),\n valueText && (React.createElement(core_1.Typography, { variant: \"body2\" }, valueText)),\n maxGoal && (React.createElement(core_1.Typography, { variant: \"body2\" }, maxGoalText)),\n minGoal && (React.createElement(core_1.Typography, { variant: \"body2\" }, minGoalText))));\n};\nvar getHighestNumber = function (data, dataKeys) {\n var highestNumber = (data === null || data === void 0 ? void 0 : data.reduce(function (prev, curr) {\n var valueKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.valueKey;\n var value = valueKey ? Number(curr === null || curr === void 0 ? void 0 : curr[valueKey]) : 0;\n var minGoalKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.minGoalKey;\n var minGoal = minGoalKey ? Number(curr === null || curr === void 0 ? void 0 : curr[minGoalKey]) : 0;\n var maxGoalKey = dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.maxGoalKey;\n var maxGoal = maxGoalKey ? Number(curr === null || curr === void 0 ? void 0 : curr[maxGoalKey]) : 0;\n var largestCurrNumber = Math.max(value, minGoal, maxGoal);\n if (largestCurrNumber > prev) {\n return largestCurrNumber;\n }\n return prev;\n }, 0)) || 0;\n return highestNumber;\n};\nvar HealthGraph = function (_a) {\n var data = _a.data, title = _a.title, dataKeys = _a.dataKeys, measuringUnit = _a.measuringUnit, valueTypeTranslateKey = _a.valueTypeTranslateKey, noFill = _a.noFill, topHalfColor = _a.topHalfColor, bottomHalfColor = _a.bottomHalfColor, hideYAxisLabels = _a.hideYAxisLabels;\n var classes = (0, exports.useStyles)();\n var theme = (0, core_1.useTheme)();\n var scaledTableMargins = ICON_SIZE / 2;\n var highestNumber = getHighestNumber(data, dataKeys) + 1;\n var halfHighestNumber = highestNumber / 2;\n var topDomain = topHalfColor && bottomHalfColor ? highestNumber : highestNumber * DOMAIN_MULTIPLIER;\n var domain = [0, topDomain];\n var translate = (0, translate_1.default)();\n if (!data || data.length < 2) {\n return null;\n }\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(\"div\", { className: classes.tableHeaderContainer },\n React.createElement(VerticalLineheader_1.default, { title: title })),\n React.createElement(recharts_1.ResponsiveContainer, { width: \"100%\", aspect: TABLE_ASPECT_RADIO, minWidth: TABLE_MIN_WIDTH },\n React.createElement(recharts_1.ComposedChart, { data: data || undefined, className: classes.composedChartContainer, margin: {\n top: scaledTableMargins,\n right: scaledTableMargins,\n left: scaledTableMargins,\n bottom: scaledTableMargins,\n } },\n topHalfColor && (React.createElement(recharts_1.ReferenceArea, { y1: halfHighestNumber, y2: highestNumber, fill: topHalfColor })),\n bottomHalfColor && (React.createElement(recharts_1.ReferenceArea, { y1: 0, y2: halfHighestNumber, fill: bottomHalfColor })),\n React.createElement(recharts_1.XAxis, { allowDataOverflow: true, dataKey: \"timePeriod\", padding: { left: scaledTableMargins, right: scaledTableMargins } }),\n React.createElement(recharts_1.YAxis, { type: \"number\", allowDataOverflow: true, domain: domain, axisLine: false, tickFormatter: function (tick) { return (hideYAxisLabels ? '' : Math.round(tick).toString()); } }),\n React.createElement(recharts_1.Tooltip, { wrapperStyle: { zIndex: theme.zIndex.modal }, content: function (tooltipProps) { return (React.createElement(CustomToolTip, { tooltipProps: tooltipProps, measuringUnit: measuringUnit, valueTypeTranslateKey: valueTypeTranslateKey, dataKeys: dataKeys })); } }),\n React.createElement(recharts_1.Area\n // Labels sometimes disappear recharts bug\n // https://github.com/recharts/recharts/issues/829\n , { \n // Labels sometimes disappear recharts bug\n // https://github.com/recharts/recharts/issues/829\n isAnimationActive: false, type: \"monotone\", dataKey: (dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.valueKey) || '', fill: theme.palette.secondary.light, fillOpacity: noFill ? 0 : undefined, strokeWidth: 4, stroke: theme.palette.secondary.main, dot: function (_a) {\n var payload = _a.payload, cx = _a.cx, cy = _a.cy, index = _a.index;\n return (React.createElement(CustomDots, { key: index, payload: payload, dataKeys: dataKeys, cx: cx, cy: cy }));\n } }),\n React.createElement(recharts_1.Line\n // Labels sometimes disappear recharts bug\n // https://github.com/recharts/recharts/issues/829\n , { \n // Labels sometimes disappear recharts bug\n // https://github.com/recharts/recharts/issues/829\n isAnimationActive: false, type: \"monotone\", dataKey: dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.minGoalKey, stroke: theme.palette.primary.light, strokeWidth: 4, strokeDasharray: \"16 8 16 8\", dot: false }),\n React.createElement(recharts_1.Line\n // Labels sometimes disappear recharts bug\n // https://github.com/recharts/recharts/issues/829\n , { \n // Labels sometimes disappear recharts bug\n // https://github.com/recharts/recharts/issues/829\n isAnimationActive: false, type: \"monotone\", dataKey: dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.maxGoalKey, stroke: theme.palette.primary.light, strokeWidth: 4, strokeDasharray: \"16 8 16 8\", dot: false }))),\n measuringUnit && (React.createElement(\"div\", { className: classes.leftLable },\n React.createElement(core_1.Typography, { className: classes.leftLableTitle, variant: \"body1\" }, translate(measuringUnit))))));\n};\nHealthGraph.defaultProps = {\n measuringUnit: undefined,\n valueTypeTranslateKey: undefined,\n noFill: false,\n topHalfColor: undefined,\n bottomHalfColor: undefined,\n hideYAxisLabels: false,\n};\nexports.default = HealthGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar translate_1 = __importStar(require(\"../../../../app/localization/translate\"));\nvar healthConstants_1 = require(\"../utils/healthConstants\");\nvar useStyles = (0, core_1.makeStyles)(function () { return ({\n root: {},\n select: {\n minWidth: 200,\n },\n text: {\n flex: '1 1 auto',\n },\n number: {},\n}); });\nvar HealthInput = function (_a) {\n var _b;\n var _c, _d, _e;\n var healthFieldSetup = _a.healthFieldSetup, value = _a.value, onChange = _a.onChange, disabled = _a.disabled, required = _a.required;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var handleMultipleSelectChange = function (event) {\n var _a;\n // On autofill we might get a stringified value.\n var arrayValue = typeof event.target.value === 'string' ? event.target.value.split(',') : event.target.value;\n // Remove empty entries and join to commaseparated string\n var val = (_a = arrayValue === null || arrayValue === void 0 ? void 0 : arrayValue.filter(function (d) { return d; }).join(',')) !== null && _a !== void 0 ? _a : '';\n onChange(val);\n };\n var handleChange = function (event) {\n onChange(event.target.value);\n };\n switch (healthFieldSetup.type) {\n case healthConstants_1.TaskOrGoalInputType.Dropdown: {\n return (React.createElement(core_1.FormControl, { disabled: disabled, required: required, variant: \"outlined\", className: (0, classnames_1.default)(classes.root, classes.select) },\n React.createElement(core_1.InputLabel, { disabled: disabled, required: required }, translate(healthFieldSetup.shortLabel)),\n React.createElement(core_1.Select, { disabled: disabled, required: required, value: value, onChange: handleChange, label: translate(healthFieldSetup.shortLabel) }, (_c = healthFieldSetup === null || healthFieldSetup === void 0 ? void 0 : healthFieldSetup.dropdownItems) === null || _c === void 0 ? void 0 : _c.map(function (element) { return (React.createElement(core_1.MenuItem, { key: element.key, value: element.key }, element.value)); }))));\n }\n case healthConstants_1.TaskOrGoalInputType.MultipleSelect: {\n var arrayValue_1 = Array.isArray(value) ? value : value ? value === null || value === void 0 ? void 0 : value.split(',') : [];\n var dropdownItems_1 = (_d = healthFieldSetup.dropdownItems) !== null && _d !== void 0 ? _d : [];\n var itemsNotIncludedInDropdown = arrayValue_1.filter(function (d) { return !dropdownItems_1.some(function (item) { return item.key === d; }); }).map(function (d) { return ({ key: d, value: d }); });\n return (React.createElement(core_1.FormControl, { disabled: disabled, required: required, variant: \"outlined\", className: (0, classnames_1.default)(classes.root, classes.select) },\n React.createElement(core_1.InputLabel, { disabled: disabled, required: required }, translate(healthFieldSetup.shortLabel)),\n React.createElement(core_1.Select, { multiple: true, disabled: disabled, required: required, value: arrayValue_1, renderValue: function (selected) { return (typeof selected === 'string' ? selected : selected.map(function (d) { return (0, translate_1.translateWithDefault)(translate, d); }).join(', ')); }, onChange: handleMultipleSelectChange, label: translate(healthFieldSetup.shortLabel) }, __spreadArray(__spreadArray([], itemsNotIncludedInDropdown, true), dropdownItems_1, true).map(function (element) { return (React.createElement(core_1.MenuItem, { key: element.key, value: element.key },\n React.createElement(core_1.Checkbox, { checked: arrayValue_1.indexOf(element.key) > -1 }),\n React.createElement(core_1.ListItemText, { primary: element.value }))); }))));\n }\n case healthConstants_1.TaskOrGoalInputType.Text:\n case healthConstants_1.TaskOrGoalInputType.Number:\n default: {\n return (React.createElement(core_1.TextField, { className: (0, classnames_1.default)(classes.root, (_b = {}, _b[classes.text] = healthFieldSetup.type === healthConstants_1.TaskOrGoalInputType.Text, _b[classes.number] = healthFieldSetup.type === healthConstants_1.TaskOrGoalInputType.Number, _b)), label: translate(healthFieldSetup.shortLabel), type: healthFieldSetup.type, variant: \"outlined\", placeholder: ((_e = healthFieldSetup === null || healthFieldSetup === void 0 ? void 0 : healthFieldSetup.placeHolder) === null || _e === void 0 ? void 0 : _e.toString()) || ((healthFieldSetup === null || healthFieldSetup === void 0 ? void 0 : healthFieldSetup.placeHolderTranslateKey) ? translate(healthFieldSetup.placeHolderTranslateKey) : ''), InputLabelProps: { shrink: true }, value: value, onChange: handleChange, disabled: disabled, required: required, onKeyPress: healthFieldSetup.type === healthConstants_1.TaskOrGoalInputType.Number ? function (event) {\n if ((event === null || event === void 0 ? void 0 : event.key) === '-' || (event === null || event === void 0 ? void 0 : event.key) === '+') {\n event.preventDefault();\n }\n } : undefined }));\n }\n }\n};\nHealthInput.defaultProps = {\n disabled: false,\n required: false,\n};\nexports.default = HealthInput;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar core_1 = require(\"@material-ui/core\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar urls_1 = __importDefault(require(\"../../../../app/urls\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar breadcrumbUtil_1 = require(\"../../../../common/breadcrumbUtil\");\nvar components_1 = require(\"../../../../common/components\");\nvar store_1 = require(\"../../../../app/store\");\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar icons_1 = require(\"../../../../youwell-common/icons\");\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return ({\n root: {\n display: 'flex',\n gap: theme.spacing(3, 0),\n flexDirection: 'column',\n },\n bottomActions: {\n marginTop: theme.spacing(8),\n display: 'flex',\n justifyContent: 'center',\n },\n}); });\nvar HealthPageWrapper = function (_a) {\n var title = _a.title, children = _a.children;\n var translate = (0, translate_1.default)();\n var classes = useStyles();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n return (React.createElement(components_1.PageLayout, { breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(title, translate, clientConfig, undefined, [\n {\n text: translate('healthPage.header'),\n url: \"\".concat(urls_1.default.inside.pages.health.health),\n },\n ]) },\n React.createElement(\"div\", { className: classes.root },\n React.createElement(VerticalLineheader_1.default, { title: title }),\n children,\n React.createElement(\"div\", { className: classes.bottomActions },\n React.createElement(core_1.Button, { component: react_router_dom_1.Link, to: urls_1.default.inside.pages.health.health, startIcon: React.createElement(icons_1.BackIcon, null) }, translate('healthPage.backToMyHealth'))))));\n};\nexports.default = HealthPageWrapper;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nexports.useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n healthProgressCardActionAeria: {\n padding: theme.spacing(3),\n height: '100%',\n },\n healthProgressCard: {\n height: '100%',\n },\n header: {\n fontWeight: theme.typography.fontWeightBold,\n },\n}); });\nvar HealthProgressCard = function (_a) {\n var element = _a.element;\n var translate = (0, translate_1.default)();\n var classes = (0, exports.useStyles)();\n return (React.createElement(core_1.Grid, { item: true, xs: 12, sm: 6, md: 4 },\n React.createElement(core_1.Card, { className: classes.healthProgressCard },\n React.createElement(core_1.CardActionArea, { className: classes.healthProgressCardActionAeria, component: react_router_dom_1.Link, to: element.url },\n element.icon,\n React.createElement(core_1.Grid, { item: true },\n React.createElement(core_1.Typography, { className: classes.header, variant: \"body1\" }, translate(element.titleTranslateKey))),\n React.createElement(core_1.Grid, { item: true },\n React.createElement(core_1.Typography, { variant: \"body2\" }, translate(element.descriptionTranslateKey)))))));\n};\nexports.default = HealthProgressCard;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_redux_1 = require(\"react-redux\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar icons_1 = require(\"../../../../common/icons\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar healthRegistration_1 = require(\"../../../../app/store/types/healthRegistration\");\nvar DaySelector_1 = __importDefault(require(\"../../../../common/components/DaySelector\"));\nvar store_1 = require(\"../../../../app/store\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar healthRegistrationService_1 = require(\"../../../../app/services/healthRegistrationService\");\nvar arrayUtils_1 = require(\"../../../../youwell-common/arrayUtils\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(4),\n display: 'flex',\n gap: theme.spacing(2),\n flexDirection: 'column',\n },\n headerContainer: {\n marginBottom: theme.spacing(2),\n },\n daySelector: {\n display: 'flex',\n justifyContent: 'center',\n },\n items: {\n marginBottom: theme.spacing(1),\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n borderBottom: theme.youwell.borders.dim,\n '&:hover': {\n background: theme.youwell.colors.defaultBackground,\n },\n },\n itemName: {\n flex: '1 1 auto',\n },\n itemInfo: {\n width: 200,\n },\n green: {\n color: theme.youwell.colors.green,\n },\n red: {\n color: theme.youwell.colors.red,\n },\n dimmed: {\n opacity: 0.3,\n },\n actions: {\n display: 'flex',\n gap: theme.spacing(1),\n justifyContent: 'flex-end',\n },\n deleteIcon: {\n marginLeft: 59,\n color: theme.youwell.colors.red,\n },\n}); });\nvar HealthRegistrationTaskLogging = function (_a) {\n var setup = _a.setup;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, react_redux_1.useDispatch)();\n var healthRegistrationLogs = (0, store_1.useYouwellSelector)(function (state) { var _a, _b, _c; return (_c = (_b = (_a = state.healthRegistrationStore.healthRegistrations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.type === setup.type; })) === null || _b === void 0 ? void 0 : _b.healthRegistrationLogs) !== null && _c !== void 0 ? _c : []; });\n var goalsToLog = healthRegistrationLogs.filter(function (d) { return d.type === healthRegistration_1.HealthRegistrationLogType.Goal; });\n var _b = React.useState(new Date()), selectedDate = _b[0], setSelectedDate = _b[1];\n if (goalsToLog.length === 0)\n return null;\n var todaysRegistrations = (0, arrayUtils_1.toLookup)(healthRegistrationLogs\n .filter(function (d) { return d.type === healthRegistration_1.HealthRegistrationLogType.Task && (0, dateUtils_1.isSameDate)(selectedDate, d.date); }), 'properties.goalId');\n var getLogValue = function (goalItem) { var _a, _b; return (_b = (_a = todaysRegistrations[goalItem.id]) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.checked; };\n var updateItem = function (goalItem, checked) { return function () {\n var _a;\n var currentValue = todaysRegistrations[goalItem.id];\n var saveData = {\n id: (_a = currentValue === null || currentValue === void 0 ? void 0 : currentValue.id) !== null && _a !== void 0 ? _a : 0,\n type: healthRegistration_1.HealthRegistrationLogType.Task,\n date: selectedDate,\n healthRegistrationId: goalItem.healthRegistrationId,\n properties: {\n goalId: goalItem.id,\n checked: checked,\n },\n };\n if (saveData.id) {\n (0, healthRegistrationService_1.updateHealthRegistrationLogsData)(dispatch, saveData);\n }\n else {\n (0, healthRegistrationService_1.insertHealthRegistrationLogsData)(dispatch, saveData);\n }\n }; };\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(\"div\", { className: classes.headerContainer },\n React.createElement(VerticalLineheader_1.default, { title: translate('health.dailyTask') })),\n React.createElement(\"div\", { className: classes.daySelector },\n React.createElement(DaySelector_1.default, { onChange: setSelectedDate, selectedDate: selectedDate })),\n React.createElement(\"div\", { className: classes.items }, goalsToLog.map(function (goal) {\n var _a, _b;\n return (React.createElement(\"div\", { key: goal.id, className: classes.item },\n setup.goals.map(function (field) {\n var _a;\n return (React.createElement(core_1.Typography, { key: field.key, className: classes.itemName }, (_a = goal.properties) === null || _a === void 0 ? void 0 : _a[field.key]));\n }),\n React.createElement(core_1.IconButton, { onClick: updateItem(goal, false) },\n React.createElement(icons_1.CloseIcon, { className: (0, classnames_1.default)((_a = {}, _a[classes.red] = getLogValue(goal) === false, _a[classes.dimmed] = getLogValue(goal) === true, _a)) })),\n React.createElement(core_1.IconButton, { onClick: updateItem(goal, true) },\n React.createElement(icons_1.CheckMarkIcon, { className: (0, classnames_1.default)((_b = {}, _b[classes.green] = getLogValue(goal) === true, _b[classes.dimmed] = getLogValue(goal) === false, _b)) }))));\n }))));\n};\nexports.default = HealthRegistrationTaskLogging;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar store_1 = require(\"../../../../app/store\");\nvar healthRegistrationService_1 = require(\"../../../../app/services/healthRegistrationService\");\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar healthUtils_1 = require(\"../utils/healthUtils\");\nvar healthConstants_1 = require(\"../utils/healthConstants\");\nvar healthRegistration_1 = require(\"../../../../app/store/types/healthRegistration\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n card: {\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(4),\n gap: theme.spacing(3, 0),\n },\n goalStartDescription: {\n marginBottom: theme.spacing(2),\n },\n inputFieldSection: {\n display: 'flex',\n alignItems: 'center',\n paddingBottom: theme.spacing(1),\n borderBottom: theme.youwell.borders.dim,\n },\n input: {\n width: 200,\n padding: 16,\n },\n inputLabel: {\n marginLeft: theme.spacing(2),\n },\n action: {\n display: 'flex',\n gap: theme.spacing(1),\n justifyContent: 'flex-end',\n },\n}); });\nvar HealthRegistrationGoalsCard = function (_a) {\n var healthRegistrationSetup = _a.healthRegistrationSetup;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var _b = React.useState([]), updatedGoals = _b[0], setUpdatedGoals = _b[1];\n var _c = React.useState({}), errors = _c[0], setErrors = _c[1];\n if (healthRegistrationSetup.goals.length < 1)\n return null;\n var latestHealthReg = (0, healthUtils_1.findLatestHealthReg)(healthRegistrationSetup.type, healthRegistrations);\n var latestGoal = latestHealthReg === null || latestHealthReg === void 0 ? void 0 : latestHealthReg.properties;\n var updateInputErrors = function (input, value) {\n setErrors(function (prevState) {\n var _a;\n return (__assign(__assign({}, prevState), (_a = {}, _a[input.key] = !value, _a)));\n });\n };\n var handleChange = function (event, fieldSetup) {\n var _a, _b;\n var indexToReplace = updatedGoals.findIndex(function (t) { return t[fieldSetup.key]; });\n var value = fieldSetup.type === healthConstants_1.TaskOrGoalInputType.Number ? Number(event.target.value) : event.target.value;\n if (fieldSetup.maxValue ? value >= 0 && value <= fieldSetup.maxValue : true) {\n if (indexToReplace !== -1) {\n var prevGoalArr = __spreadArray([], updatedGoals, true);\n prevGoalArr.splice(indexToReplace, 1, (_a = {}, _a[fieldSetup.key] = value, _a));\n setUpdatedGoals(__spreadArray([], prevGoalArr, true));\n }\n else\n setUpdatedGoals(__spreadArray(__spreadArray([], updatedGoals, true), [(_b = {}, _b[fieldSetup.key] = value, _b)], false));\n }\n updateInputErrors(fieldSetup, value);\n };\n var submitGoal = function () {\n var _a, _b;\n var submitErrors = healthRegistrationSetup.tasks.reduce(function (prev, currentTask) {\n var _a;\n var index = updatedGoals.findIndex(function (g) { return g[currentTask.key]; });\n return __assign(__assign({}, prev), (_a = {}, _a[currentTask.key] = !updatedGoals[index], _a));\n }, {});\n var saveData = {\n type: healthRegistrationSetup.type,\n properties: {},\n healthRegistrationLogs: [],\n };\n var newGoal = {};\n healthRegistrationSetup.goals.forEach(function (goalItem) {\n var _a, _b;\n var index = updatedGoals.findIndex(function (g) { return g[goalItem.key]; });\n newGoal[goalItem.key] = (_b = (_a = updatedGoals[index]) === null || _a === void 0 ? void 0 : _a[goalItem.key]) !== null && _b !== void 0 ? _b : latestGoal === null || latestGoal === void 0 ? void 0 : latestGoal[goalItem.key];\n if (healthRegistrations && healthRegistrations.length > 0 && latestHealthReg) {\n saveData.id = latestHealthReg.id;\n }\n });\n saveData.properties = newGoal;\n var newLog = {\n id: 0,\n date: new Date().toISOString(),\n type: healthRegistration_1.HealthRegistrationLogType.Goal,\n properties: {},\n };\n newLog.healthRegistrationId = latestHealthReg === null || latestHealthReg === void 0 ? void 0 : latestHealthReg.id;\n newLog.properties = __assign(__assign({}, newLog.properties), newGoal);\n // Finds current logs for health registration and add them to the list\n if (latestHealthReg === null || latestHealthReg === void 0 ? void 0 : latestHealthReg.healthRegistrationLogs) {\n (_a = saveData.healthRegistrationLogs) === null || _a === void 0 ? void 0 : _a.push.apply(_a, latestHealthReg === null || latestHealthReg === void 0 ? void 0 : latestHealthReg.healthRegistrationLogs);\n }\n // Adds new log for health registration\n (_b = saveData.healthRegistrationLogs) === null || _b === void 0 ? void 0 : _b.push(newLog);\n var callback = function () {\n setUpdatedGoals([]);\n };\n if (latestHealthReg) {\n (0, healthRegistrationService_1.updateHealthRegistrationsData)(dispatch, saveData, { callback: callback });\n }\n else {\n // Makes sure user has entered all updatedGoals on insert of first healthRegistration.\n var inputGoalKeys = healthRegistrationSetup.goals.map(function (input) { return input.key; });\n var allGoalsHaveResponse = inputGoalKeys === null || inputGoalKeys === void 0 ? void 0 : inputGoalKeys.every(function (key) {\n var updatedGoalsHasKey = updatedGoals.some(function (goal) { return goal[key]; });\n var keyHasError = !!submitErrors[key];\n return updatedGoalsHasKey && !keyHasError;\n });\n if (allGoalsHaveResponse) {\n (0, healthRegistrationService_1.insertHealthRegistrationsData)(dispatch, saveData, { callback: callback });\n }\n else {\n setErrors(submitErrors);\n }\n }\n };\n var currentGoalValue = function (currentGoal) { var _a; return ((_a = latestGoal === null || latestGoal === void 0 ? void 0 : latestGoal[currentGoal.key]) !== null && _a !== void 0 ? _a : null); };\n var hasCreatedGoals = healthRegistrationSetup.goals.every(function (g) { return currentGoalValue(g); });\n return (React.createElement(core_1.Card, { className: classes.card },\n React.createElement(VerticalLineheader_1.default, { title: translate('health.myGoal') }),\n !hasCreatedGoals && (React.createElement(core_1.Typography, { className: classes.goalStartDescription }, translate('health.goalStartDescription'))),\n healthRegistrationSetup.goals.map(function (goalItem) {\n var _a, _b, _c, _d;\n return (React.createElement(\"div\", { key: goalItem.key, className: classes.inputFieldSection },\n React.createElement(core_1.TextField, { label: translate(goalItem.shortLabel), type: goalItem.type, value: (_c = (_a = (0, healthUtils_1.objKeyInArray)(goalItem.key, updatedGoals)) !== null && _a !== void 0 ? _a : (_b = currentGoalValue(goalItem)) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : '', variant: \"outlined\", size: \"small\", placeholder: ((_d = goalItem === null || goalItem === void 0 ? void 0 : goalItem.placeHolder) === null || _d === void 0 ? void 0 : _d.toString()) || ((goalItem === null || goalItem === void 0 ? void 0 : goalItem.placeHolderTranslateKey) ? translate(goalItem.placeHolderTranslateKey) : ''), InputProps: { classes: { input: classes.input }, inputProps: { min: 0, max: goalItem.maxValue } }, InputLabelProps: { shrink: true }, onChange: function (e) { return handleChange(e, goalItem); }, required: true, helperText: errors[goalItem.key] && !currentGoalValue(goalItem) ? translate('health.mandatoryQuestion') : '', error: errors[goalItem.key] && !currentGoalValue(goalItem), onKeyPress: goalItem.type === healthConstants_1.TaskOrGoalInputType.Number ? function (event) {\n if ((event === null || event === void 0 ? void 0 : event.key) === '-' || (event === null || event === void 0 ? void 0 : event.key) === '+') {\n event.preventDefault();\n }\n } : undefined }),\n React.createElement(core_1.Typography, { className: classes.inputLabel }, translate(\"\".concat(goalItem.longLabel)))));\n }),\n React.createElement(\"div\", { className: classes.action },\n hasCreatedGoals && updatedGoals.length > 0 && (React.createElement(core_1.Button, { onClick: function () { return setUpdatedGoals([]); } }, translate('cancel'))),\n React.createElement(core_1.Button, { variant: \"contained\", color: \"primary\", onClick: submitGoal, disabled: updatedGoals.length < 1 }, translate(hasCreatedGoals ? 'update' : 'save')))));\n};\nexports.default = HealthRegistrationGoalsCard;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_redux_1 = require(\"react-redux\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar healthRegistration_1 = require(\"../../../../app/store/types/healthRegistration\");\nvar store_1 = require(\"../../../../app/store\");\nvar HealthInput_1 = __importDefault(require(\"./HealthInput\"));\nvar components_1 = require(\"../../../../common/components\");\nvar healthUtils_1 = require(\"../utils/healthUtils\");\nvar healthRegistrationService_1 = require(\"../../../../app/services/healthRegistrationService\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(4),\n display: 'flex',\n gap: theme.spacing(2),\n flexDirection: 'column',\n },\n headerContainer: {\n marginBottom: theme.spacing(2),\n },\n daySelector: {\n display: 'flex',\n justifyContent: 'center',\n },\n items: {\n marginBottom: theme.spacing(1),\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(2),\n '&:hover': {\n background: theme.youwell.colors.defaultBackground,\n },\n },\n actions: {\n display: 'flex',\n gap: theme.spacing(1),\n justifyContent: 'flex-end',\n },\n deleteIcon: {\n marginLeft: 59,\n color: theme.youwell.colors.red,\n },\n}); });\nvar HealthRegistrationGoalsEditing = function (_a) {\n var _b, _c;\n var setup = _a.setup;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, react_redux_1.useDispatch)();\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var healthRegistrationLogs = (_c = (_b = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === setup.type; })) === null || _b === void 0 ? void 0 : _b.healthRegistrationLogs) !== null && _c !== void 0 ? _c : [];\n var currentHealthReg = (0, healthUtils_1.findLatestHealthReg)(setup.type, healthRegistrations);\n var _d = React.useState({}), updatedValues = _d[0], setUpdatedValues = _d[1];\n var _e = React.useState(null), editingItem = _e[0], setEditingItem = _e[1];\n var cancelEdit = function () {\n setUpdatedValues({});\n setEditingItem(null);\n };\n var onAddItem = function () {\n setEditingItem({\n id: 0,\n type: healthRegistration_1.HealthRegistrationLogType.Goal,\n date: new Date(),\n healthRegistrationId: currentHealthReg === null || currentHealthReg === void 0 ? void 0 : currentHealthReg.id,\n properties: {},\n });\n };\n var saveChanges = function () {\n if (editingItem) {\n var saveData = __assign(__assign({}, editingItem), { properties: __assign(__assign({}, editingItem.properties), updatedValues) });\n var callback = function () { return cancelEdit(); };\n if (saveData.id) {\n (0, healthRegistrationService_1.updateHealthRegistrationLogsData)(dispatch, saveData, { callback: callback });\n }\n else if (saveData.healthRegistrationId) {\n (0, healthRegistrationService_1.insertHealthRegistrationLogsData)(dispatch, saveData, { callback: callback });\n }\n else {\n var newHealthReg = {\n type: setup.type,\n healthRegistrationLogs: [\n saveData,\n ],\n };\n (0, healthRegistrationService_1.insertHealthRegistrationsData)(dispatch, newHealthReg, { callback: callback });\n }\n }\n };\n var deleteItem = function (registration) { return function () {\n (0, healthRegistrationService_1.deleteHealthRegistrationLogsData)(dispatch, registration);\n }; };\n var handleFieldChange = function (registration, fieldKey) { return function (value) {\n if (editingItem == null)\n setEditingItem(registration);\n setUpdatedValues(function (prev) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[fieldKey] = value, _a)));\n });\n }; };\n var getValue = function (registration, key) {\n var _a, _b, _c, _d, _e;\n if ((editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === registration.id) {\n return (_c = (_a = updatedValues[key]) !== null && _a !== void 0 ? _a : (_b = registration.properties) === null || _b === void 0 ? void 0 : _b[key]) !== null && _c !== void 0 ? _c : '';\n }\n return (_e = (_d = registration.properties) === null || _d === void 0 ? void 0 : _d[key]) !== null && _e !== void 0 ? _e : '';\n };\n var currentGoals = healthRegistrationLogs.filter(function (d) { return d.type === healthRegistration_1.HealthRegistrationLogType.Goal; });\n var registrationsList = (editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === 0 ? __spreadArray(__spreadArray([], currentGoals, true), [editingItem], false) : currentGoals;\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(\"div\", { className: classes.headerContainer },\n React.createElement(VerticalLineheader_1.default, { title: translate('health.myGoals') })),\n React.createElement(\"div\", { className: classes.items },\n registrationsList.map(function (registration) { return (React.createElement(\"div\", { key: registration.id, className: classes.item },\n setup.goals.map(function (field) { return (React.createElement(HealthInput_1.default, { disabled: Boolean(editingItem && editingItem.id !== registration.id), key: field.key, value: getValue(registration, field.key), healthFieldSetup: field, onChange: handleFieldChange(registration, field.key) })); }),\n (editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === registration.id ? (React.createElement(React.Fragment, null,\n React.createElement(core_1.IconButton, { onClick: cancelEdit },\n React.createElement(icons_1.CancelIcon, null)),\n React.createElement(core_1.IconButton, { onClick: saveChanges },\n React.createElement(icons_1.SaveIcon, { color: \"primary\" })))) : (React.createElement(components_1.ConfirmButton, { buttonClassName: classes.deleteIcon, variant: \"iconbutton\", confirmText: translate('health.deleteGoalConfirm'), onClick: deleteItem(registration) },\n React.createElement(icons_1.DeleteIcon, null))))); }),\n registrationsList.length === 0 && (React.createElement(core_1.Typography, null, translate('health.noGoalsRegistered')))),\n editingItem === null && (React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Button, { variant: \"contained\", color: \"secondary\", onClick: onAddItem, disabled: false }, translate('health.add'))))));\n};\nexports.default = HealthRegistrationGoalsEditing;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_redux_1 = require(\"react-redux\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar healthRegistration_1 = require(\"../../../../app/store/types/healthRegistration\");\nvar DaySelector_1 = __importDefault(require(\"../../../../common/components/DaySelector\"));\nvar store_1 = require(\"../../../../app/store\");\nvar HealthInput_1 = __importDefault(require(\"./HealthInput\"));\nvar components_1 = require(\"../../../../common/components\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar healthRegistrationService_1 = require(\"../../../../app/services/healthRegistrationService\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(4),\n display: 'flex',\n gap: theme.spacing(2),\n flexDirection: 'column',\n },\n headerContainer: {\n marginBottom: theme.spacing(2),\n },\n daySelector: {\n display: 'flex',\n justifyContent: 'center',\n },\n items: {\n marginBottom: theme.spacing(1),\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(2),\n '&:hover': {\n background: theme.youwell.colors.defaultBackground,\n },\n },\n actions: {\n display: 'flex',\n gap: theme.spacing(1),\n justifyContent: 'flex-end',\n },\n deleteIcon: {\n marginLeft: 59,\n color: theme.youwell.colors.red,\n },\n}); });\nvar HealthRegistrationTaskLogging = function (_a) {\n var setup = _a.setup;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, react_redux_1.useDispatch)();\n var healthRegistrationLogs = (0, store_1.useYouwellSelector)(function (state) { var _a, _b, _c; return (_c = (_b = (_a = state.healthRegistrationStore.healthRegistrations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.type === setup.type; })) === null || _b === void 0 ? void 0 : _b.healthRegistrationLogs) !== null && _c !== void 0 ? _c : []; });\n var currentGoal = healthRegistrationLogs.filter(function (d) { return d.type === healthRegistration_1.HealthRegistrationLogType.Goal; }).at(-1);\n var _b = React.useState({}), updatedValues = _b[0], setUpdatedValues = _b[1];\n var _c = React.useState(null), editingItem = _c[0], setEditingItem = _c[1];\n var _d = React.useState(new Date()), selectedDate = _d[0], setSelectedDate = _d[1];\n if (!currentGoal)\n return null;\n var cancelEdit = function () {\n setUpdatedValues({});\n setEditingItem(null);\n };\n var onAddItem = function () {\n setEditingItem({\n id: 0,\n type: healthRegistration_1.HealthRegistrationLogType.Task,\n date: selectedDate,\n healthRegistrationId: currentGoal.healthRegistrationId,\n properties: __assign({}, currentGoal.properties),\n });\n };\n var saveChanges = function () {\n if (editingItem) {\n var saveData = __assign(__assign({}, editingItem), { properties: __assign(__assign({}, editingItem.properties), updatedValues) });\n var callback = function () { return cancelEdit(); };\n if (saveData.id) {\n (0, healthRegistrationService_1.updateHealthRegistrationLogsData)(dispatch, saveData, { callback: callback });\n }\n else {\n (0, healthRegistrationService_1.insertHealthRegistrationLogsData)(dispatch, saveData, { callback: callback });\n }\n }\n };\n var deleteItem = function (registration) { return function () {\n (0, healthRegistrationService_1.deleteHealthRegistrationLogsData)(dispatch, registration);\n }; };\n var handleFieldChange = function (registration, fieldKey) { return function (value) {\n if (editingItem == null)\n setEditingItem(registration);\n setUpdatedValues(function (prev) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[fieldKey] = value, _a)));\n });\n }; };\n var getValue = function (logItem, key) {\n var _a, _b, _c, _d, _e;\n if ((editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === logItem.id) {\n return (_c = (_a = updatedValues[key]) !== null && _a !== void 0 ? _a : (_b = logItem.properties) === null || _b === void 0 ? void 0 : _b[key]) !== null && _c !== void 0 ? _c : '';\n }\n return (_e = (_d = logItem.properties) === null || _d === void 0 ? void 0 : _d[key]) !== null && _e !== void 0 ? _e : '';\n };\n var todaysRegistrations = healthRegistrationLogs.filter(function (d) { return d.type === healthRegistration_1.HealthRegistrationLogType.Task && (0, dateUtils_1.isSameDate)(selectedDate, d.date); });\n var registrationsList = (editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === 0 ? __spreadArray(__spreadArray([], todaysRegistrations, true), [editingItem], false) : todaysRegistrations;\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(\"div\", { className: classes.headerContainer },\n React.createElement(VerticalLineheader_1.default, { title: translate('health.dailyTask') })),\n React.createElement(\"div\", { className: classes.daySelector },\n React.createElement(DaySelector_1.default, { onChange: setSelectedDate, selectedDate: selectedDate })),\n React.createElement(\"div\", { className: classes.items },\n registrationsList.map(function (registration) { return (React.createElement(\"div\", { key: registration.id, className: classes.item },\n setup.tasks.map(function (field) { return (React.createElement(HealthInput_1.default, { disabled: Boolean(editingItem && editingItem.id !== registration.id), key: field.key, value: getValue(registration, field.key), healthFieldSetup: field, onChange: handleFieldChange(registration, field.key) })); }),\n (editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === registration.id ? (React.createElement(React.Fragment, null,\n React.createElement(core_1.IconButton, { onClick: cancelEdit },\n React.createElement(icons_1.CancelIcon, null)),\n React.createElement(core_1.IconButton, { onClick: saveChanges },\n React.createElement(icons_1.SaveIcon, { color: \"primary\" })))) : (React.createElement(components_1.ConfirmButton, { buttonClassName: classes.deleteIcon, variant: \"iconbutton\", confirmText: translate('activity.deleteConfirm'), onClick: deleteItem(registration) },\n React.createElement(icons_1.DeleteIcon, null))))); }),\n todaysRegistrations.length === 0 && (React.createElement(core_1.Typography, null, translate('activity.noRegistrationsToday')))),\n editingItem === null && (React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Button, { variant: \"contained\", color: \"secondary\", onClick: onAddItem, disabled: false }, translate('health.add'))))));\n};\nexports.default = HealthRegistrationTaskLogging;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRegistrationHeading = void 0;\nvar core_1 = require(\"@material-ui/core\");\nvar React = __importStar(require(\"react\"));\nvar pickers_1 = require(\"@material-ui/pickers\");\nvar lodash_1 = require(\"lodash\");\nvar InputLabel_1 = __importDefault(require(\"@material-ui/core/InputLabel\"));\nvar MenuItem_1 = __importDefault(require(\"@material-ui/core/MenuItem\"));\nvar FormControl_1 = __importDefault(require(\"@material-ui/core/FormControl\"));\nvar Select_1 = __importDefault(require(\"@material-ui/core/Select\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar store_1 = require(\"../../../../app/store\");\nvar healthRegistrationService_1 = require(\"../../../../app/services/healthRegistrationService\");\nvar healthUtils_1 = require(\"../utils/healthUtils\");\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar healthConstants_1 = require(\"../utils/healthConstants\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar healthRegistration_1 = require(\"../../../../app/store/types/healthRegistration\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n card: {\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(4),\n gap: theme.spacing(3, 0),\n },\n inputFieldSection: {\n display: 'flex',\n alignItems: 'center',\n paddingBottom: theme.spacing(1),\n borderBottom: theme.youwell.borders.dim,\n },\n input: {\n width: 200,\n padding: 16,\n },\n inputLabel: {\n marginLeft: theme.spacing(2),\n },\n dateLabel: {\n marginRight: theme.spacing(2),\n },\n regDateInput: {\n width: 120,\n },\n error: {\n color: theme.youwell.colors.red,\n },\n errorLabel: {\n marginBottom: theme.spacing(1),\n },\n action: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n },\n}); });\nvar getRegistrationHeading = function (registrationInterval, translate) {\n switch (registrationInterval) {\n case healthConstants_1.RegistrationInterval.Weekly:\n return translate('health.weeklyTask');\n case healthConstants_1.RegistrationInterval.Daily:\n default:\n return translate('health.dailyTask');\n }\n};\nexports.getRegistrationHeading = getRegistrationHeading;\nvar HealthRegistrationTasksCard = function (_a) {\n var _b, _c;\n var healthRegistrationSetup = _a.healthRegistrationSetup, allowMultipleLogsPrPeriod = _a.allowMultipleLogsPrPeriod;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var programStartDate = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.programStore.currentProgram) === null || _a === void 0 ? void 0 : _a.startDate; });\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var healthRegistrationLogs = (_b = healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.find(function (d) { return d.type === healthRegistrationSetup.type; })) === null || _b === void 0 ? void 0 : _b.healthRegistrationLogs;\n var _d = React.useState(new Date()), registrationDate = _d[0], setRegistrationDate = _d[1];\n var _e = React.useState([]), updatedTasks = _e[0], setUpdatedTasks = _e[1];\n var _f = React.useState({}), errors = _f[0], setErrors = _f[1];\n var _g = React.useState(false), hasLoggedThisPeriod = _g[0], setHasLoggedThisPeriod = _g[1];\n if (healthRegistrationSetup.tasks.length < 1)\n return null;\n var currentHealthReg = (0, healthUtils_1.findLatestHealthReg)(healthRegistrationSetup.type, healthRegistrations);\n var latestGoal = currentHealthReg === null || currentHealthReg === void 0 ? void 0 : currentHealthReg.properties;\n var hasCreatedGoals = healthRegistrationSetup.goals.every(function (g) { return latestGoal === null || latestGoal === void 0 ? void 0 : latestGoal[g.key]; });\n if (!hasCreatedGoals)\n return null; // Must define a goal before starting to register activities (if goals are defined..).\n var getHasLoggedThisPeriod = function (date) {\n var _a, _b;\n if (allowMultipleLogsPrPeriod)\n return false;\n var loggedDates = healthRegistrationLogs === null || healthRegistrationLogs === void 0 ? void 0 : healthRegistrationLogs.map(function (d) { return d.date && d.type === healthRegistration_1.HealthRegistrationLogType.Task && (0, dateUtils_1.datestamp)(d.date); }).filter(Boolean);\n var loggedWeeks = (0, lodash_1.uniq)(healthRegistrationLogs === null || healthRegistrationLogs === void 0 ? void 0 : healthRegistrationLogs.map(function (d) { return d.date && d.type === healthRegistration_1.HealthRegistrationLogType.Task && (0, dateUtils_1.generateWeekAndYearKey)(new Date(d.date)); })).filter(Boolean);\n switch (healthRegistrationSetup.registrationInterval) {\n case healthConstants_1.RegistrationInterval.Weekly:\n return (_a = loggedWeeks === null || loggedWeeks === void 0 ? void 0 : loggedWeeks.includes((0, dateUtils_1.generateWeekAndYearKey)(date))) !== null && _a !== void 0 ? _a : false;\n case healthConstants_1.RegistrationInterval.Daily:\n default:\n return (_b = loggedDates === null || loggedDates === void 0 ? void 0 : loggedDates.includes((0, dateUtils_1.datestamp)(date))) !== null && _b !== void 0 ? _b : false;\n }\n };\n var updateInputErrors = function (taskOrGoal, updatedValue) {\n setErrors(function (prevState) {\n var _a;\n return (__assign(__assign({}, prevState), (_a = {}, _a[taskOrGoal.key] = !updatedValue, _a)));\n });\n setHasLoggedThisPeriod(getHasLoggedThisPeriod(registrationDate));\n };\n var handleRegistrationDateChange = function (date) {\n var newDate = date !== null && date !== void 0 ? date : new Date();\n setRegistrationDate(newDate);\n setHasLoggedThisPeriod(getHasLoggedThisPeriod(newDate));\n };\n var handleChange = function (event, taskOrGoal) {\n var _a, _b;\n var indexToReplace = updatedTasks.findIndex(function (t) { return t[taskOrGoal.key]; });\n var value = taskOrGoal.type === healthConstants_1.TaskOrGoalInputType.Number ? Number(event.target.value) : event.target.value;\n if (taskOrGoal.maxValue ? value <= taskOrGoal.maxValue : true) {\n if (indexToReplace !== -1) {\n var prevTaskArr = __spreadArray([], updatedTasks, true);\n prevTaskArr.splice(indexToReplace, 1, (_a = {}, _a[taskOrGoal.key] = value, _a));\n setUpdatedTasks(__spreadArray([], prevTaskArr, true));\n }\n else\n setUpdatedTasks(__spreadArray(__spreadArray([], updatedTasks, true), [(_b = {}, _b[taskOrGoal.key] = value, _b)], false));\n }\n updateInputErrors(taskOrGoal, value);\n };\n var submitTask = function () {\n var submitErrors = healthRegistrationSetup.tasks.reduce(function (prev, currentTask) {\n var _a;\n var index = updatedTasks.findIndex(function (g) { return g[currentTask.key]; });\n return __assign(__assign({}, prev), (_a = {}, _a[currentTask.key] = !updatedTasks[index], _a));\n }, {});\n var saveData = {\n id: 0,\n date: registrationDate.toISOString(),\n type: healthRegistration_1.HealthRegistrationLogType.Task,\n properties: {},\n };\n var newLogObj = {};\n healthRegistrationSetup.tasks.forEach(function (currentTask) {\n // Adds new score to propObject (e.g. 'cm_score')\n var index = updatedTasks.findIndex(function (task) { return task[currentTask.key]; });\n if (updatedTasks[index]) {\n newLogObj[currentTask.key] = updatedTasks[index][currentTask.key];\n // Adds current goal for latest health reg. to propObject (e.g. 'cm_goal')\n // Adds healthRegistrationId on healthRegistrationLog\n if (latestGoal) {\n newLogObj = __assign(__assign({}, newLogObj), latestGoal);\n saveData.healthRegistrationId = currentHealthReg === null || currentHealthReg === void 0 ? void 0 : currentHealthReg.id;\n }\n }\n });\n // Makes sure user has entered values for all tasks\n var inputGoalKeys = healthRegistrationSetup.tasks.map(function (input) { return input.key; });\n var allTasksHaveResponse = inputGoalKeys === null || inputGoalKeys === void 0 ? void 0 : inputGoalKeys.every(function (key) {\n var _a;\n var updatedTasksHasKey = updatedTasks.some(function (task) { return task[key]; });\n var keyHasError = (_a = submitErrors[key]) !== null && _a !== void 0 ? _a : false;\n return updatedTasksHasKey && !keyHasError;\n });\n saveData.properties = __assign(__assign({}, saveData.properties), newLogObj);\n var callback = function () {\n setUpdatedTasks([]);\n };\n if (allTasksHaveResponse) {\n if (currentHealthReg) {\n (0, healthRegistrationService_1.insertHealthRegistrationLogsData)(dispatch, saveData, { callback: callback });\n }\n else {\n var healthRegistration = {\n type: healthRegistrationSetup.type,\n properties: {},\n healthRegistrationLogs: [saveData],\n };\n (0, healthRegistrationService_1.insertHealthRegistrationsData)(dispatch, healthRegistration, { callback: callback });\n }\n }\n else {\n setErrors(submitErrors);\n }\n };\n var currentTaskValue = function (currentTask) { var _a; return ((_a = latestGoal === null || latestGoal === void 0 ? void 0 : latestGoal[currentTask.key]) !== null && _a !== void 0 ? _a : null); };\n var registrationStartDate = (_c = (0, dateUtils_1.getLocalDate)(programStartDate)) !== null && _c !== void 0 ? _c : (0, dateUtils_1.addDays)(null, -30);\n return (React.createElement(core_1.Card, { className: classes.card },\n React.createElement(VerticalLineheader_1.default, { title: (0, exports.getRegistrationHeading)(healthRegistrationSetup.registrationInterval, translate) }),\n healthRegistrationSetup.tasks.map(function (input) {\n var _a, _b, _c, _d;\n return (React.createElement(\"div\", { key: input.key, className: classes.inputFieldSection },\n input.type === healthConstants_1.TaskOrGoalInputType.Dropdown && (React.createElement(FormControl_1.default, { variant: \"outlined\", style: { width: 230 }, error: errors[input.key] && !currentTaskValue(input), required: true },\n React.createElement(InputLabel_1.default, null, translate(input.shortLabel)),\n React.createElement(Select_1.default, { value: (0, healthUtils_1.objKeyInArray)(input.key, updatedTasks) || '', onChange: function (event) { return handleChange(event, input); }, label: translate(input.shortLabel) }, (_a = input.dropdownItems) === null || _a === void 0 ? void 0 : _a.map(function (element) { return (React.createElement(MenuItem_1.default, { key: element.key, value: element.key }, element.value)); })))),\n (input.type === healthConstants_1.TaskOrGoalInputType.Text || input.type === healthConstants_1.TaskOrGoalInputType.Number) && (React.createElement(core_1.TextField, { label: translate(input.shortLabel), type: input.type, value: (_b = (0, healthUtils_1.objKeyInArray)(input.key, updatedTasks)) !== null && _b !== void 0 ? _b : '', variant: \"outlined\", size: \"small\", placeholder: ((_c = currentTaskValue(input)) === null || _c === void 0 ? void 0 : _c.toString()) || ((_d = input === null || input === void 0 ? void 0 : input.placeHolder) === null || _d === void 0 ? void 0 : _d.toString()) || ((input === null || input === void 0 ? void 0 : input.placeHolderTranslateKey) ? translate(input.placeHolderTranslateKey) : ''), InputProps: { classes: { input: classes.input }, inputProps: { min: 0, max: input.maxValue } }, InputLabelProps: { shrink: true }, onChange: function (event) { return handleChange(event, input); }, required: true, helperText: errors[input.key] && !currentTaskValue(input) ? translate('health.mandatoryQuestion') : '', error: errors[input.key] && !currentTaskValue(input), onKeyPress: input.type === healthConstants_1.TaskOrGoalInputType.Number ? function (event) {\n if ((event === null || event === void 0 ? void 0 : event.key) === '-' || (event === null || event === void 0 ? void 0 : event.key) === '+') {\n event.preventDefault();\n }\n } : undefined })),\n React.createElement(core_1.Typography, { className: classes.inputLabel }, translate(input.longLabel))));\n }),\n React.createElement(\"div\", { className: classes.action },\n React.createElement(core_1.Typography, { variant: \"caption\", className: classes.dateLabel }, \"\".concat(translate('health.registrationDate'), \":\")),\n React.createElement(pickers_1.DatePicker, { value: registrationDate, InputProps: { disableUnderline: true, classes: { error: classes.error, input: classes.regDateInput }, error: hasLoggedThisPeriod }, format: \"dd.MM.yyyy\", onChange: handleRegistrationDateChange, disableFuture: true, disableToolbar: true, autoOk: true, minDate: registrationStartDate }),\n React.createElement(core_1.Button, { variant: \"contained\", color: \"primary\", onClick: submitTask, disabled: updatedTasks.length < 1 || hasLoggedThisPeriod }, translate('health.register'))),\n hasLoggedThisPeriod && (React.createElement(core_1.Typography, { variant: \"body2\", color: \"error\", className: classes.errorLabel }, translate('health.alreadyLoggedThisPeriod')))));\n};\nHealthRegistrationTasksCard.defaultProps = {\n allowMultipleLogsPrPeriod: false,\n};\nexports.default = HealthRegistrationTasksCard;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar healthConstants_1 = require(\"../utils/healthConstants\");\nexports.useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n tableTitle: {\n padding: theme.spacing(6, 4, 2, 4),\n },\n darkTableRow: {\n backgroundColor: theme.youwell.colors.defaultBackground,\n },\n cellHeader: {\n fontWeight: theme.typography.fontWeightBold,\n },\n cell: {\n whiteSpace: 'nowrap',\n },\n}); });\nvar highlightTablePart = function (direction, lineHighlightDirection, index, classes) { return ((((index + 1) % 2\n && lineHighlightDirection\n && lineHighlightDirection === direction\n && (0, classnames_1.default)(classes.cell, classes.darkTableRow))\n || classes.cell)); };\nvar HealthTable = function (_a) {\n var headerTranslateKeys = _a.headerTranslateKeys, data = _a.data, dataKeys = _a.dataKeys, cellValueTranslateKeys = _a.cellValueTranslateKeys, lineHighlightDirection = _a.lineHighlightDirection, header = _a.header;\n var classes = (0, exports.useStyles)();\n var translate = (0, translate_1.default)();\n var cellHeaderClass = (0, classnames_1.default)(classes.cell, classes.cellHeader);\n if (!(data === null || data === void 0 ? void 0 : data.length) || 0) {\n return null;\n }\n return (React.createElement(core_1.Card, null,\n React.createElement(\"div\", { className: classes.tableTitle },\n React.createElement(VerticalLineheader_1.default, { title: header !== null && header !== void 0 ? header : translate('health.history') })),\n React.createElement(core_1.TableContainer, null,\n React.createElement(core_1.Table, null,\n React.createElement(core_1.TableHead, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: cellHeaderClass }, translate('health.timePeriod')), headerTranslateKeys === null || headerTranslateKeys === void 0 ? void 0 :\n headerTranslateKeys.map(function (headerTranslateKey) { return (React.createElement(core_1.TableCell, { key: headerTranslateKey, className: cellHeaderClass }, translate(headerTranslateKey))); }))),\n React.createElement(core_1.TableBody, null, data === null || data === void 0 ? void 0 : data.map(function (row, rowIndex) { return (React.createElement(core_1.TableRow\n // eslint-disable-next-line react/no-array-index-key\n , { \n // eslint-disable-next-line react/no-array-index-key\n key: rowIndex, className: highlightTablePart(healthConstants_1.LineHighlightDirection.Horizontal, lineHighlightDirection, rowIndex, classes) },\n React.createElement(core_1.TableCell, null, row === null || row === void 0 ? void 0 : row.timePeriod), dataKeys === null || dataKeys === void 0 ? void 0 :\n dataKeys.map(function (dataKey, index) {\n var valueTypeTranslateKey = cellValueTranslateKeys === null || cellValueTranslateKeys === void 0 ? void 0 : cellValueTranslateKeys[dataKey];\n var cellValue = row === null || row === void 0 ? void 0 : row[dataKey];\n var valueTypeTranslated = translate(\"\".concat(valueTypeTranslateKey, \".\").concat(cellValue), undefined, { onMissingTranslation: function () { var _a; return (_a = cellValue === null || cellValue === void 0 ? void 0 : cellValue.toString()) !== null && _a !== void 0 ? _a : ''; } });\n var cell = valueTypeTranslateKey ? valueTypeTranslated : cellValue;\n return (React.createElement(core_1.TableCell\n // eslint-disable-next-line react/no-array-index-key\n , { \n // eslint-disable-next-line react/no-array-index-key\n key: index, className: highlightTablePart(healthConstants_1.LineHighlightDirection.Vertical, lineHighlightDirection, index, classes) }, cell));\n }))); }))))));\n};\nHealthTable.defaultProps = {\n header: null,\n cellValueTranslateKeys: undefined,\n lineHighlightDirection: healthConstants_1.LineHighlightDirection.Horizontal,\n};\nexports.default = HealthTable;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar healthRegistrationService_1 = require(\"../../../../app/services/healthRegistrationService\");\nvar store_1 = require(\"../../../../app/store\");\nvar LoadHealthRegistration = function () {\n var healthRegistrations = (0, store_1.useYouwellSelector)(function (state) { return state.healthRegistrationStore.healthRegistrations; });\n var dispatch = (0, store_1.useYouwellDispatch)();\n var notLoadedHealthRegistration = !(healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.length);\n React.useEffect(function () {\n if (notLoadedHealthRegistration) {\n (0, healthRegistrationService_1.fetchHealthRegistrationData)(dispatch);\n }\n }, [dispatch, notLoadedHealthRegistration]);\n return null;\n};\nexports.default = LoadHealthRegistration;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar store_1 = require(\"../../../../app/store\");\nvar medicineService_1 = require(\"../../../../app/services/medicineService\");\nvar LoadMedicines = function () {\n var medicines = (0, store_1.useYouwellSelector)(function (state) { return state.medicationStore.medications; });\n var dispatch = (0, store_1.useYouwellDispatch)();\n var hasLoaded = medicines !== null;\n React.useEffect(function () {\n if (!hasLoaded) {\n (0, medicineService_1.fetchMedicationData)(dispatch);\n }\n }, [dispatch, hasLoaded]);\n return null;\n};\nexports.default = LoadMedicines;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_redux_1 = require(\"react-redux\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar icons_1 = require(\"../../../../common/icons\");\nvar translate_1 = __importStar(require(\"../../../../app/localization/translate\"));\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar medicineService_1 = require(\"../../../../app/services/medicineService\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar DaySelector_1 = __importDefault(require(\"../../../../common/components/DaySelector\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(4),\n display: 'flex',\n gap: theme.spacing(2),\n flexDirection: 'column',\n },\n headerContainer: {\n marginBottom: theme.spacing(2),\n },\n daySelector: {\n display: 'flex',\n justifyContent: 'center',\n },\n medicines: {\n marginBottom: theme.spacing(1),\n },\n medication: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n borderBottom: theme.youwell.borders.dim,\n '&:hover': {\n background: theme.youwell.colors.defaultBackground,\n },\n },\n medicationName: {\n flex: '1 1 auto',\n },\n medicationTime: {\n width: 200,\n },\n green: {\n color: theme.youwell.colors.green,\n },\n red: {\n color: theme.youwell.colors.redLight,\n },\n dimmed: {\n opacity: 0.3,\n },\n}); });\nvar MedicationLogging = function (_a) {\n var medications = _a.medications, medicationLogs = _a.medicationLogs;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, react_redux_1.useDispatch)();\n var _b = React.useState(new Date()), selectedDate = _b[0], setSelectedDate = _b[1];\n var selectedDateTextString = (0, dateUtils_1.getTextfieldDateString)(selectedDate);\n var getLogValue = function (medication) { var _a; return (_a = medicationLogs === null || medicationLogs === void 0 ? void 0 : medicationLogs[medication.id]) === null || _a === void 0 ? void 0 : _a[selectedDateTextString]; };\n var hasCurrentAdministrationTime = function (medication, currTime) {\n var med = getLogValue(medication);\n if (!med)\n return undefined;\n if (!currTime)\n return true;\n if (med.administrationTime === null || med.administrationTime === undefined)\n return true;\n return med.administrationTime.split(',').includes(currTime);\n };\n var updateMedication = function (medication, medTaken) { return function () {\n var _a, _b, _c;\n var currentLog = getLogValue(medication);\n var administrationTime;\n if (medication.administrationTime) {\n var currentAdmTimes = (_b = (_a = currentLog === null || currentLog === void 0 ? void 0 : currentLog.administrationTime) === null || _a === void 0 ? void 0 : _a.split(',')) !== null && _b !== void 0 ? _b : [];\n if (medTaken)\n currentAdmTimes.push(medication.administrationTime);\n else {\n currentAdmTimes = currentAdmTimes.filter(function (d) { return d !== medication.administrationTime; });\n }\n administrationTime = currentAdmTimes.join(',');\n }\n var saveData = {\n id: (_c = currentLog === null || currentLog === void 0 ? void 0 : currentLog.id) !== null && _c !== void 0 ? _c : 0,\n date: selectedDate,\n medicationId: medication.id,\n administrationTime: administrationTime,\n medTaken: medTaken || !!administrationTime,\n };\n if (saveData.id) {\n (0, medicineService_1.updateMedicationLogData)(dispatch, saveData);\n }\n else {\n (0, medicineService_1.insertMedicationLogData)(dispatch, saveData);\n }\n }; };\n if (!medications || medications.length === 0)\n return null;\n var unwrappedMedications = medications.reduce(function (prev, curr) {\n var _a, _b;\n var times = (_b = (_a = curr.administrationTime) === null || _a === void 0 ? void 0 : _a.split(',')) !== null && _b !== void 0 ? _b : [];\n if (times.length < 2)\n return __spreadArray(__spreadArray([], prev, true), [curr], false);\n return __spreadArray(__spreadArray([], prev, true), times.map(function (t) { return (__assign(__assign({}, curr), { administrationTime: t })); }), true);\n }, [])\n .map(function (med) { return (__assign(__assign({}, med), { checked: hasCurrentAdministrationTime(med, med.administrationTime) })); });\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(\"div\", { className: classes.headerContainer },\n React.createElement(VerticalLineheader_1.default, { title: translate('medicine.dailyRegistration') })),\n React.createElement(\"div\", { className: classes.daySelector },\n React.createElement(DaySelector_1.default, { onChange: setSelectedDate, selectedDate: selectedDate })),\n React.createElement(\"div\", { className: classes.medicines }, unwrappedMedications.map(function (medication) {\n var _a, _b;\n return (React.createElement(\"div\", { key: \"\".concat(medication.id, \"-\").concat(medication.administrationTime), className: classes.medication },\n React.createElement(core_1.Typography, { className: classes.medicationName }, \"\".concat(medication.name, \" (\").concat(medication.dosage, \")\")),\n React.createElement(core_1.Typography, { className: classes.medicationTime }, (0, translate_1.translateWithDefault)(translate, medication.administrationTime)),\n React.createElement(core_1.IconButton, { onClick: updateMedication(medication, false) },\n React.createElement(icons_1.CloseIcon, { className: (0, classnames_1.default)((_a = {}, _a[classes.red] = medication.checked === false, _a[classes.dimmed] = medication.checked === true, _a)) })),\n React.createElement(core_1.IconButton, { onClick: updateMedication(medication, true) },\n React.createElement(icons_1.CheckMarkIcon, { className: (0, classnames_1.default)((_b = {}, _b[classes.green] = medication.checked === true, _b[classes.dimmed] = medication.checked === false, _b)) }))));\n }))));\n};\nexports.default = MedicationLogging;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_redux_1 = require(\"react-redux\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar VerticalLineheader_1 = __importDefault(require(\"./VerticalLineheader\"));\nvar medicineService_1 = require(\"../../../../app/services/medicineService\");\nvar HealthInput_1 = __importDefault(require(\"./HealthInput\"));\nvar components_1 = require(\"../../../../common/components\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(4),\n display: 'flex',\n gap: theme.spacing(2),\n flexDirection: 'column',\n },\n headerContainer: {\n marginBottom: theme.spacing(2),\n },\n medicines: {\n marginBottom: theme.spacing(1),\n },\n medication: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n marginBottom: theme.spacing(2),\n },\n actions: {\n display: 'flex',\n gap: theme.spacing(1),\n justifyContent: 'flex-end',\n },\n deleteIcon: {\n marginLeft: 59,\n color: theme.youwell.colors.red,\n },\n}); });\nvar MyMedications = function (_a) {\n var medications = _a.medications, medicationSetup = _a.medicationSetup;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, react_redux_1.useDispatch)();\n var _b = React.useState({}), updatedValues = _b[0], setUpdatedValues = _b[1];\n var _c = React.useState(null), editingItem = _c[0], setEditingItem = _c[1];\n var cancelEdit = function () {\n setUpdatedValues({});\n setEditingItem(null);\n };\n var onAddMedicine = function () {\n setEditingItem({\n id: 0,\n name: '',\n dosage: '',\n administrationTime: '',\n });\n };\n var saveChanges = function () {\n if (editingItem) {\n var saveData = __assign(__assign({}, editingItem), updatedValues);\n var callback = function () { return cancelEdit(); };\n if (saveData.id) {\n (0, medicineService_1.updateMedicationData)(dispatch, saveData, { callback: callback });\n }\n else {\n (0, medicineService_1.insertMedicationData)(dispatch, saveData, { callback: callback });\n }\n }\n };\n var deleteMedicine = function (medication) { return function () {\n (0, medicineService_1.deleteMedicationData)(dispatch, medication);\n }; };\n var handleFieldChange = function (medication, fieldKey) { return function (value) {\n if (editingItem == null)\n setEditingItem(medication);\n setUpdatedValues(function (prev) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[fieldKey] = value, _a)));\n });\n }; };\n var getValue = function (medication, key) {\n var _a, _b, _c;\n if ((editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === medication.id) {\n return (_b = (_a = updatedValues[key]) !== null && _a !== void 0 ? _a : medication[key]) !== null && _b !== void 0 ? _b : '';\n }\n return (_c = medication[key]) !== null && _c !== void 0 ? _c : '';\n };\n var medicationList = (editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === 0 ? __spreadArray(__spreadArray([], medications !== null && medications !== void 0 ? medications : [], true), [editingItem], false) : medications !== null && medications !== void 0 ? medications : [];\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(\"div\", { className: classes.headerContainer },\n React.createElement(VerticalLineheader_1.default, { title: translate('medicine.myMedicines') })),\n React.createElement(\"div\", { className: classes.medicines },\n medicationList.map(function (medication) { return (React.createElement(\"div\", { key: medication.id, className: classes.medication },\n medicationSetup.map(function (field) { return (React.createElement(HealthInput_1.default, { disabled: Boolean(editingItem && editingItem.id !== medication.id), key: field.key, value: getValue(medication, field.key), healthFieldSetup: field, onChange: handleFieldChange(medication, field.key) })); }),\n (editingItem === null || editingItem === void 0 ? void 0 : editingItem.id) === medication.id ? (React.createElement(React.Fragment, null,\n React.createElement(core_1.IconButton, { onClick: cancelEdit },\n React.createElement(icons_1.CancelIcon, null)),\n React.createElement(core_1.IconButton, { onClick: saveChanges },\n React.createElement(icons_1.SaveIcon, { color: \"primary\" })))) : (React.createElement(components_1.ConfirmButton, { buttonClassName: classes.deleteIcon, variant: \"iconbutton\", confirmText: translate('medicine.deleteMedicineConfirm'), onClick: deleteMedicine(medication) },\n React.createElement(icons_1.DeleteIcon, null))))); }),\n (!medications || medications.length === 0) && (React.createElement(core_1.Typography, null, translate('medicine.noMedications')))),\n editingItem === null && (React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Button, { variant: \"contained\", color: \"secondary\", onClick: onAddMedicine, disabled: false }, translate('health.add'))))));\n};\nexports.default = MyMedications;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"@material-ui/icons\");\nvar React = __importStar(require(\"react\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nexports.useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n inputTitleText: {\n fontWeight: theme.typography.fontWeightMedium,\n paddingBottom: theme.spacing(1),\n },\n input: {\n backgroundColor: theme.palette.background.paper,\n },\n}); });\nvar QuestionAndInput = function (_a) {\n var label = _a.label, onChange = _a.onChange, value = _a.value;\n var classes = (0, exports.useStyles)();\n var translate = (0, translate_1.default)();\n var _b = React.useState(false), editing = _b[0], setEditing = _b[1];\n var handleChange = function (event) {\n onChange(event.target.value);\n };\n return (React.createElement(\"div\", null,\n React.createElement(core_1.Typography, { className: classes.inputTitleText, variant: \"body1\" }, label),\n React.createElement(core_1.TextField, { value: value, onChange: handleChange, className: classes.input, onFocus: function () { return setEditing(true); }, onBlur: function () { return setEditing(false); }, fullWidth: true, multiline: true, variant: \"outlined\", placeholder: translate('goalsAndBarriers.yourAnswerHere'), InputProps: {\n startAdornment: (React.createElement(core_1.InputAdornment, { position: \"start\" },\n React.createElement(icons_1.Edit, { color: editing ? 'primary' : 'disabled' }))),\n } })));\n};\nexports.default = QuestionAndInput;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nexports.useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {},\n actionArea: {\n padding: theme.spacing(3),\n display: 'flex',\n justifyContent: 'space-between',\n },\n header: {\n fontWeight: theme.typography.fontWeightBold,\n },\n}); });\nvar TitleButtonCard = function (_a) {\n var title = _a.title, buttonText = _a.buttonText, buttonUrl = _a.buttonUrl;\n var classes = (0, exports.useStyles)();\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(core_1.CardActionArea, { component: react_router_dom_1.Link, to: buttonUrl, className: classes.actionArea },\n React.createElement(core_1.Typography, { className: classes.header, variant: \"h6\" }, title),\n React.createElement(core_1.Button, { variant: \"contained\", color: \"secondary\" }, buttonText))));\n};\nexports.default = TitleButtonCard;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar makeStyles_1 = __importDefault(require(\"@material-ui/core/styles/makeStyles\"));\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nexports.useStyles = (0, makeStyles_1.default)(function (theme) { return ({\n root: {\n display: 'flex',\n },\n header: {\n fontWeight: theme.typography.fontWeightBold,\n },\n headerDevider: {\n backgroundColor: theme.palette.primary.main,\n width: theme.spacing(0.5),\n marginRight: theme.spacing(1),\n },\n icon: {\n alignSelf: 'center',\n display: 'flex',\n padding: theme.spacing(0, 1),\n },\n}); });\nvar VerticalLineHeader = function (_a) {\n var title = _a.title, icon = _a.icon;\n var classes = (0, exports.useStyles)();\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.Divider, { orientation: \"vertical\", flexItem: true, className: classes.headerDevider }),\n React.createElement(core_1.Typography, { className: classes.header, variant: \"h5\" }, title),\n React.createElement(\"div\", { className: classes.icon }, icon)));\n};\nVerticalLineHeader.defaultProps = {\n icon: null,\n};\nexports.default = VerticalLineHeader;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useStyles = void 0;\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar WeekSelector_1 = __importDefault(require(\"../../../../common/components/WeekSelector\"));\nexports.useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n}); });\nvar WeekSelectorCard = function (_a) {\n var onChange = _a.onChange, selectedWeek = _a.selectedWeek;\n var classes = (0, exports.useStyles)();\n return (React.createElement(core_1.Card, { className: classes.root },\n React.createElement(WeekSelector_1.default, { onChange: onChange, selectedWeek: selectedWeek })));\n};\nexports.default = WeekSelectorCard;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VisualizationPropsKeys = exports.WeeklyValueModification = exports.LineHighlightDirection = exports.TaskOrGoalInputType = exports.DietPropKeys = exports.PsychosocialPropKeys = exports.ActivityPropKeys = exports.RegistrationInterval = exports.BloodSugarPropKeys = exports.SmokingPropKeys = void 0;\nvar SmokingPropKeys;\n(function (SmokingPropKeys) {\n SmokingPropKeys[\"CigarettesGoal\"] = \"cigarettesGoal\";\n SmokingPropKeys[\"CigarettesScore\"] = \"cigarettesScore\";\n SmokingPropKeys[\"SnusScore\"] = \"snusScore\";\n SmokingPropKeys[\"SnusGoal\"] = \"snusGoal\";\n})(SmokingPropKeys = exports.SmokingPropKeys || (exports.SmokingPropKeys = {}));\nvar BloodSugarPropKeys;\n(function (BloodSugarPropKeys) {\n BloodSugarPropKeys[\"BloodSugarMaxGoal\"] = \"bloodSugarMaxGoal\";\n BloodSugarPropKeys[\"BloodSugarMinGoal\"] = \"bloodSugarMinGoal\";\n BloodSugarPropKeys[\"BloodSugarScore\"] = \"bloodSugarScore\";\n})(BloodSugarPropKeys = exports.BloodSugarPropKeys || (exports.BloodSugarPropKeys = {}));\nvar RegistrationInterval;\n(function (RegistrationInterval) {\n RegistrationInterval[RegistrationInterval[\"Daily\"] = 0] = \"Daily\";\n RegistrationInterval[RegistrationInterval[\"Weekly\"] = 1] = \"Weekly\";\n RegistrationInterval[RegistrationInterval[\"Once\"] = 2] = \"Once\";\n})(RegistrationInterval = exports.RegistrationInterval || (exports.RegistrationInterval = {}));\nvar ActivityPropKeys;\n(function (ActivityPropKeys) {\n ActivityPropKeys[\"Category\"] = \"category\";\n ActivityPropKeys[\"Name\"] = \"navn\";\n ActivityPropKeys[\"Minutes\"] = \"minutes\";\n ActivityPropKeys[\"Intensity\"] = \"intensity\";\n ActivityPropKeys[\"Score\"] = \"score\";\n ActivityPropKeys[\"MinutesDailyGoal\"] = \"minutesDailyGoal\";\n ActivityPropKeys[\"ScoreWeeklyGoal\"] = \"scoreWeeklyGoal\";\n})(ActivityPropKeys = exports.ActivityPropKeys || (exports.ActivityPropKeys = {}));\nvar PsychosocialPropKeys;\n(function (PsychosocialPropKeys) {\n PsychosocialPropKeys[\"SafeScore\"] = \"safeScore\";\n PsychosocialPropKeys[\"CheerfulScore\"] = \"cheerfulScore\";\n PsychosocialPropKeys[\"NervousScore\"] = \"nervousScore\";\n PsychosocialPropKeys[\"AnxietyScore\"] = \"anxietyScore\";\n PsychosocialPropKeys[\"IrritableScore\"] = \"irritableScore\";\n PsychosocialPropKeys[\"DepressedScore\"] = \"depressedScore\";\n PsychosocialPropKeys[\"LonelyScore\"] = \"lonelyScore\";\n PsychosocialPropKeys[\"TenseScore\"] = \"tenseScore\";\n PsychosocialPropKeys[\"PessimisticScore\"] = \"pessimisticScore\";\n PsychosocialPropKeys[\"Awake\"] = \"awake\";\n})(PsychosocialPropKeys = exports.PsychosocialPropKeys || (exports.PsychosocialPropKeys = {}));\nvar DietPropKeys;\n(function (DietPropKeys) {\n DietPropKeys[\"Name\"] = \"name\";\n DietPropKeys[\"Completed\"] = \"completed\";\n})(DietPropKeys = exports.DietPropKeys || (exports.DietPropKeys = {}));\nvar TaskOrGoalInputType;\n(function (TaskOrGoalInputType) {\n TaskOrGoalInputType[\"Text\"] = \"text\";\n TaskOrGoalInputType[\"Number\"] = \"number\";\n TaskOrGoalInputType[\"Dropdown\"] = \"dropdown\";\n TaskOrGoalInputType[\"Checkbox\"] = \"checkbox\";\n TaskOrGoalInputType[\"MultipleSelect\"] = \"multiple-select\";\n})(TaskOrGoalInputType = exports.TaskOrGoalInputType || (exports.TaskOrGoalInputType = {}));\nvar LineHighlightDirection;\n(function (LineHighlightDirection) {\n LineHighlightDirection[\"Vertical\"] = \"vertical\";\n LineHighlightDirection[\"Horizontal\"] = \"horizontal\";\n})(LineHighlightDirection = exports.LineHighlightDirection || (exports.LineHighlightDirection = {}));\nvar WeeklyValueModification;\n(function (WeeklyValueModification) {\n WeeklyValueModification[WeeklyValueModification[\"Add\"] = 0] = \"Add\";\n WeeklyValueModification[WeeklyValueModification[\"Keep\"] = 1] = \"Keep\";\n WeeklyValueModification[WeeklyValueModification[\"Average\"] = 2] = \"Average\";\n})(WeeklyValueModification = exports.WeeklyValueModification || (exports.WeeklyValueModification = {}));\nvar VisualizationPropsKeys;\n(function (VisualizationPropsKeys) {\n VisualizationPropsKeys[\"FullRegistration\"] = \"fullRegistration\";\n VisualizationPropsKeys[\"PartialRegistration\"] = \"partialRegistration\";\n VisualizationPropsKeys[\"NoRegistration\"] = \"noRegistration\";\n VisualizationPropsKeys[\"RegistrationIcon\"] = \"registrationIcon\";\n VisualizationPropsKeys[\"RegistrationLeftOutKeys\"] = \"registrationLeftOutKeys\";\n VisualizationPropsKeys[\"RegisteredCount\"] = \"registeredCount\";\n VisualizationPropsKeys[\"UnregisteredCount\"] = \"unregisteredCount\";\n})(VisualizationPropsKeys = exports.VisualizationPropsKeys || (exports.VisualizationPropsKeys = {}));\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sumObjectValue = exports.generateCellValueTranslateKeys = exports.generateDropdownItemData = exports.filterHealthRegistrationLogsByDate = exports.checkHasHealthRehistrationLog = exports.generateVisualizationData = exports.findLatestHealthReg = exports.objKeyInArray = void 0;\nvar lodash_1 = require(\"lodash\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar stringUtils_1 = require(\"../../../../youwell-common/stringUtils\");\nvar arrayUtils_1 = require(\"../../../../youwell-common/arrayUtils\");\nvar healthConstants_1 = require(\"./healthConstants\");\nvar healthRegistration_1 = require(\"../../../../app/store/types/healthRegistration\");\nvar objKeyInArray = function (key, array) {\n var _a, _b;\n if ((array === null || array === void 0 ? void 0 : array.length) > 0) {\n var index = array === null || array === void 0 ? void 0 : array.findIndex(function (t) { return t === null || t === void 0 ? void 0 : t[key]; });\n return (_b = ((array === null || array === void 0 ? void 0 : array[index]) && ((_a = array === null || array === void 0 ? void 0 : array[index]) === null || _a === void 0 ? void 0 : _a[key]))) !== null && _b !== void 0 ? _b : null;\n }\n return null;\n};\nexports.objKeyInArray = objKeyInArray;\n// Finds the latest health registration of a certain type (e.g. 'WeightAndSize')\nvar findLatestHealthReg = function (type, healthRegistrations) {\n var currentTypeHealthReg = healthRegistrations && (healthRegistrations === null || healthRegistrations === void 0 ? void 0 : healthRegistrations.filter(function (h) { return h.type === type; }));\n return currentTypeHealthReg === null || currentTypeHealthReg === void 0 ? void 0 : currentTypeHealthReg[(currentTypeHealthReg === null || currentTypeHealthReg === void 0 ? void 0 : currentTypeHealthReg.length) - 1];\n};\nexports.findLatestHealthReg = findLatestHealthReg;\nvar generateVisualizationData = function (healthRegistrationLogs, translate, weekly, weeklyValueModifications) {\n if (weekly === void 0) { weekly = false; }\n var dailyData = healthRegistrationLogs === null || healthRegistrationLogs === void 0 ? void 0 : healthRegistrationLogs.reduce(function (prevHealthRegistrations, currHealthRegistration) {\n var _a;\n var _b, _c;\n if ((currHealthRegistration === null || currHealthRegistration === void 0 ? void 0 : currHealthRegistration.type) === healthRegistration_1.HealthRegistrationLogType.Task) {\n var date = currHealthRegistration.date ? new Date(currHealthRegistration.date) : undefined;\n var healthRegistrationId = currHealthRegistration === null || currHealthRegistration === void 0 ? void 0 : currHealthRegistration.healthRegistrationId;\n var dayNumber = date && new Date(date).getDay();\n var dayName = (0, stringUtils_1.firstLetterUp)(translate(\"time.weekdays_short.\".concat(dayNumber)));\n var week = date && (0, dateUtils_1.getWeekNumberFromDate)(date).toString();\n var weekName = \"\".concat((0, stringUtils_1.firstLetterUp)(translate('time.week')), \" \").concat(week);\n var weekAndYearKey = (0, dateUtils_1.generateWeekAndYearKey)(date) || '';\n var properties_1 = currHealthRegistration === null || currHealthRegistration === void 0 ? void 0 : currHealthRegistration.properties;\n var intensity = properties_1 === null || properties_1 === void 0 ? void 0 : properties_1[healthConstants_1.ActivityPropKeys.Intensity];\n var minutes = properties_1 === null || properties_1 === void 0 ? void 0 : properties_1[healthConstants_1.ActivityPropKeys.Minutes];\n var scoreCalc = Number(minutes) * Number(intensity);\n var score = Number.isNaN(scoreCalc) ? undefined : scoreCalc;\n var propertyValues = Object.values(properties_1 || {});\n var propertyKeys = Object.keys(properties_1 || {});\n var fullRegistration = (propertyValues === null || propertyValues === void 0 ? void 0 : propertyValues.every(function (d) { return d === true; })) ? 1 : 0;\n var partialRegistration = (propertyValues === null || propertyValues === void 0 ? void 0 : propertyValues.some(function (d) { return d === true; })) && !fullRegistration ? 1 : 0;\n var noRegistration = (propertyValues === null || propertyValues === void 0 ? void 0 : propertyValues.every(function (d) { return d === false; })) ? 1 : 0;\n var registeredCount = (_b = propertyValues === null || propertyValues === void 0 ? void 0 : propertyValues.filter(function (d) { return d === true; })) === null || _b === void 0 ? void 0 : _b.length;\n var unregisteredCount = (_c = propertyValues === null || propertyValues === void 0 ? void 0 : propertyValues.filter(function (d) { return d === false; })) === null || _c === void 0 ? void 0 : _c.length;\n var fullRegistrationIcon = fullRegistration ? '✔️👍' : '❌';\n var registrationLeftOutKeys = (propertyKeys === null || propertyKeys === void 0 ? void 0 : propertyKeys.map(function (key) { return ((properties_1 === null || properties_1 === void 0 ? void 0 : properties_1[key]) === false && key); }).filter(Boolean)).join(', ');\n var newDailyData = __assign(__assign({}, properties_1), (_a = { date: date === null || date === void 0 ? void 0 : date.toISOString(), weekAndYearKey: weekAndYearKey, healthRegistrationId: healthRegistrationId, dayName: dayName, weekName: weekName, timePeriod: dayName }, _a[healthConstants_1.ActivityPropKeys.Score] = score, _a[healthConstants_1.VisualizationPropsKeys.FullRegistration] = fullRegistration, _a[healthConstants_1.VisualizationPropsKeys.PartialRegistration] = partialRegistration, _a[healthConstants_1.VisualizationPropsKeys.NoRegistration] = noRegistration, _a[healthConstants_1.VisualizationPropsKeys.RegistrationIcon] = fullRegistrationIcon, _a[healthConstants_1.VisualizationPropsKeys.RegistrationLeftOutKeys] = registrationLeftOutKeys, _a[healthConstants_1.VisualizationPropsKeys.RegisteredCount] = registeredCount, _a[healthConstants_1.VisualizationPropsKeys.UnregisteredCount] = unregisteredCount, _a));\n return __spreadArray(__spreadArray([], prevHealthRegistrations, true), [newDailyData], false);\n }\n return prevHealthRegistrations;\n }, []);\n if (weekly) {\n var weeklyData = dailyData === null || dailyData === void 0 ? void 0 : dailyData.reduce(function (prevDataPoints, currDataPoint) {\n var weekAdded = prevDataPoints === null || prevDataPoints === void 0 ? void 0 : prevDataPoints.find(function (element) { return (element === null || element === void 0 ? void 0 : element.weekAndYearKey) === (currDataPoint === null || currDataPoint === void 0 ? void 0 : currDataPoint.weekAndYearKey); });\n if (weekAdded) {\n var currentWeekKeys = Object.keys(weekAdded || {});\n var averageWeek_1 = currentWeekKeys.reduce(function (prevKeys, currKey) {\n var _a, _b;\n var weekAddedCurrValue = weekAdded === null || weekAdded === void 0 ? void 0 : weekAdded[currKey];\n var weekAddedCurrValueNumber = Number(weekAddedCurrValue);\n var weekAddedCurrValueIsNumber = !Number.isNaN(weekAddedCurrValueNumber);\n var currDataPointCurrValue = currDataPoint === null || currDataPoint === void 0 ? void 0 : currDataPoint[currKey];\n var currDataPointCurrValueNumber = Number(currDataPointCurrValue);\n var currDataPointCurrValueIsNumber = !Number.isNaN(currDataPointCurrValueNumber);\n if (weekAddedCurrValueIsNumber && currDataPointCurrValueIsNumber) {\n var value = 0;\n switch (weeklyValueModifications === null || weeklyValueModifications === void 0 ? void 0 : weeklyValueModifications[currKey]) {\n case healthConstants_1.WeeklyValueModification.Add:\n value = weekAddedCurrValueNumber + currDataPointCurrValueNumber;\n break;\n case healthConstants_1.WeeklyValueModification.Keep:\n value = weekAddedCurrValueNumber;\n break;\n default:\n value = (weekAddedCurrValueNumber + currDataPointCurrValueNumber) / 2;\n }\n return __assign(__assign({}, prevKeys), (_a = {}, _a[currKey] = Math.round(value), _a));\n }\n return __assign(__assign({}, prevKeys), (_b = {}, _b[currKey] = currDataPoint === null || currDataPoint === void 0 ? void 0 : currDataPoint[currKey], _b));\n }, {});\n var removeOldWeekAverage = prevDataPoints === null || prevDataPoints === void 0 ? void 0 : prevDataPoints.filter(function (d) { return d.weekAndYearKey !== (averageWeek_1 === null || averageWeek_1 === void 0 ? void 0 : averageWeek_1.weekAndYearKey); });\n var averageWeekWithTimePeriod = __assign(__assign(__assign({}, currDataPoint), averageWeek_1), { timePeriod: averageWeek_1 === null || averageWeek_1 === void 0 ? void 0 : averageWeek_1.weekName });\n return __spreadArray(__spreadArray([], (removeOldWeekAverage || []), true), [averageWeekWithTimePeriod], false);\n }\n var currDataPointWithTimePeriod = __assign(__assign({}, currDataPoint), { timePeriod: currDataPoint === null || currDataPoint === void 0 ? void 0 : currDataPoint.weekName });\n return __spreadArray(__spreadArray([], prevDataPoints, true), [currDataPointWithTimePeriod], false);\n }, []);\n var sortedWeeklyData = (0, arrayUtils_1.sortByString)(weeklyData, 'date');\n return sortedWeeklyData;\n }\n var stortedDailyData = (0, arrayUtils_1.sortByString)(dailyData, 'date');\n return stortedDailyData;\n};\nexports.generateVisualizationData = generateVisualizationData;\nvar checkHasHealthRehistrationLog = function (healthRegistrationLogs, propertyKeys) { return Boolean(healthRegistrationLogs === null || healthRegistrationLogs === void 0 ? void 0 : healthRegistrationLogs.find(function (d) { return propertyKeys.every(function (a) { return Object.keys((d === null || d === void 0 ? void 0 : d.properties) || {}).includes(a); }); })); };\nexports.checkHasHealthRehistrationLog = checkHasHealthRehistrationLog;\nvar filterHealthRegistrationLogsByDate = function (healthRegistrationLogs, start, end) { return ((0, arrayUtils_1.sortByString)(healthRegistrationLogs === null || healthRegistrationLogs === void 0 ? void 0 : healthRegistrationLogs.filter(function (log) { return log.date && new Date(log.date) >= start && new Date(log.date) <= end; }), 'date')); };\nexports.filterHealthRegistrationLogsByDate = filterHealthRegistrationLogsByDate;\nvar generateDropdownItemData = function (maxValue, partialTranslateKey) {\n var dropdownItemData = Array.from(Array(maxValue).keys()).map(function (index) {\n var value = index + 1;\n return {\n key: value.toString(),\n value: \"\".concat(partialTranslateKey, \".\").concat(value),\n };\n });\n return dropdownItemData;\n};\nexports.generateDropdownItemData = generateDropdownItemData;\nvar generateCellValueTranslateKeys = function (currentTaskOrGaol) { return currentTaskOrGaol === null || currentTaskOrGaol === void 0 ? void 0 : currentTaskOrGaol.reduce(function (prev, curr) {\n var _a;\n var _b;\n return ((curr === null || curr === void 0 ? void 0 : curr.type) === healthConstants_1.TaskOrGoalInputType.Dropdown\n ? __assign(__assign({}, prev), (_a = {}, _a[curr === null || curr === void 0 ? void 0 : curr.key] = (_b = curr === null || curr === void 0 ? void 0 : curr.visualizationProps) === null || _b === void 0 ? void 0 : _b.valueTypeTranslateKey, _a)) : prev);\n}, {}); };\nexports.generateCellValueTranslateKeys = generateCellValueTranslateKeys;\nvar sumObjectValue = function (data, valueKey) { return ((0, lodash_1.sum)(data === null || data === void 0 ? void 0 : data.map(function (element) { return element === null || element === void 0 ? void 0 : element[valueKey]; }))); };\nexports.sumObjectValue = sumObjectValue;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar store_1 = require(\"../../../app/store\");\nvar sleepService_1 = require(\"../../../app/services/sleepService\");\nvar components_1 = require(\"../../../youwell-common/components\");\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar SleepDiary_1 = __importDefault(require(\"./SleepDiary\"));\nvar LogDay_1 = __importDefault(require(\"./LogDay\"));\nvar Index = function () {\n var dispatch = (0, store_1.useYouwellDispatch)();\n var sleepEntries = (0, store_1.useYouwellSelector)(function (state) { return state.sleepDataStore.entries; });\n React.useEffect(function () {\n if (!sleepEntries) {\n var startDate = new Date();\n startDate.setMonth(startDate.getMonth() - 1);\n (0, sleepService_1.fetchEntriesData)(dispatch, { startDate: startDate });\n }\n }, [dispatch, sleepEntries]);\n if (!sleepEntries) {\n return null;\n }\n return (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.inside.pages.sleepDiary, \"/log/:date\"), component: LogDay_1.default }),\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.inside.pages.sleepDiary) },\n React.createElement(SleepDiary_1.default, null)),\n React.createElement(react_router_dom_1.Route, { component: components_1.PageNotFound })));\n};\nexports.default = Index;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_router_1 = require(\"react-router\");\nvar colors_1 = require(\"@material-ui/core/colors\");\nvar sleepService_1 = require(\"../../../app/services/sleepService\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar components_1 = require(\"../../../common/components\");\nvar breadcrumbUtil_1 = require(\"../../../common/breadcrumbUtil\");\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar useAutosaveForm_1 = __importDefault(require(\"../../../youwell-common/useAutosaveForm\"));\nvar constants_1 = require(\"./constants\");\nvar icons_1 = require(\"../../../common/icons\");\nvar validationUtils_1 = require(\"../../../youwell-common/validationUtils\");\nvar utils_1 = require(\"./utils\");\nvar store_1 = require(\"../../../app/store\");\nvar image_1 = require(\"../../../common/image\");\nvar LogWakeups_1 = __importDefault(require(\"./components/LogWakeups\"));\nvar LogNaps_1 = __importDefault(require(\"./components/LogNaps\"));\nvar DayView_1 = __importDefault(require(\"./components/DayView\"));\nvar styles = function (theme) {\n var _a, _b, _c, _d, _e;\n return (0, core_1.createStyles)({\n top: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: theme.spacing(2),\n },\n futureWarning: {\n border: theme.youwell.borders.dim,\n background: theme.palette.grey[100],\n padding: theme.spacing(4, 2),\n margin: theme.spacing(4, 0),\n },\n content: {\n marginTop: theme.spacing(4),\n '&$disabled': {\n opacity: 0.6,\n },\n },\n disabled: {},\n box: (_a = {\n marginBottom: theme.spacing(4),\n boxShadow: theme.shadows[2],\n backgroundColor: colors_1.grey[100],\n borderRadius: theme.youwell.shapes.borderRadius\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2),\n },\n _a),\n entry: {\n '&+&': {\n marginTop: theme.spacing(6),\n },\n },\n inline: {\n display: 'flex',\n flexDirection: 'column',\n },\n entryLabelFlexWrapper: (_b = {\n marginBottom: theme.spacing(1),\n display: 'flex'\n },\n _b[theme.breakpoints.down('xs')] = {\n flexDirection: 'column',\n },\n _b),\n textAndIconWrapper: {\n display: 'flex',\n },\n entryLabel: {\n marginRight: theme.spacing(2),\n },\n entryTitle: {},\n timeInput: {\n width: '100%',\n border: theme.youwell.borders.dim,\n padding: theme.spacing(1),\n },\n emptyInput: {\n backgroundColor: theme.palette.common.white,\n },\n filledInInput: {\n background: theme.youwell.colors.inputBackground,\n },\n errorInput: {\n border: theme.youwell.borders.error,\n },\n textInput: {\n border: theme.youwell.borders.dim,\n padding: theme.spacing(1, 3),\n },\n slider: {\n marginTop: theme.spacing(2),\n },\n entryDescription: {\n marginBottom: theme.spacing(1),\n },\n bottom: (_c = {\n margin: theme.spacing(6, 0, 12),\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center'\n },\n _c[theme.breakpoints.down('xs')] = {\n justifyContent: 'center',\n },\n _c),\n bottomValidation: {\n marginRight: theme.spacing(2),\n },\n doneBtn: {\n padding: theme.spacing(1, 10),\n margin: theme.spacing(2, 0, 2, 1),\n },\n alwaysPresentContent: {\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(4),\n borderRadius: theme.youwell.shapes.borderRadius,\n },\n ratingSliderIconSection: {\n display: 'flex',\n justifyContent: 'space-between',\n margin: theme.spacing(0, 2),\n },\n remindUserToAnswerText: (_d = {\n color: theme.palette.error.main,\n marginLeft: theme.spacing(1)\n },\n _d[theme.breakpoints.down('xs')] = {\n marginLeft: 0,\n },\n _d),\n remindUserToAnswerTextNextLine: {\n color: theme.palette.error.main,\n },\n skipAnsweringText: (_e = {\n color: theme.palette.error.main,\n textDecoration: 'underline',\n marginLeft: theme.spacing(1),\n '&:hover': {\n cursor: 'pointer',\n }\n },\n _e[theme.breakpoints.down('xs')] = {\n marginLeft: 0,\n },\n _e),\n requiredMessage: {\n marginTop: theme.spacing(1),\n },\n });\n};\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return styles(theme); }, { name: 'LogDay' });\nvar validators = {\n bedTime: validationUtils_1.validateRequired,\n sleepAtemptTime: validationUtils_1.validateRequired,\n sleepTime: validationUtils_1.validateRequired,\n wakeTime: validationUtils_1.validateRequired,\n outOfBedTime: validationUtils_1.validateRequired,\n};\nvar LogDay = function () {\n var _a, _b, _c, _d, _e, _f;\n var _g, _h;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var translate = (0, translate_1.default)();\n var theme = (0, core_1.useTheme)();\n var dateString = (0, react_router_1.useParams)().date;\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var sleepEntries = (0, store_1.useYouwellSelector)(function (state) { return state.sleepDataStore.entries; });\n var date = React.useMemo(function () { return (0, dateUtils_1.getLocalDate)(dateString); }, [dateString]);\n var currentValues = React.useMemo(function () { return sleepEntries === null || sleepEntries === void 0 ? void 0 : sleepEntries.find(function (d) { return (0, dateUtils_1.isSameDate)(d.date, date); }); }, [date, sleepEntries]);\n var _j = React.useState(false), showDayView = _j[0], setShowDayView = _j[1];\n var _k = React.useState(false), shouldValidate = _k[0], setShouldValidate = _k[1];\n var _l = React.useState({ hasErrors: false }), validationErrors = _l[0], setValidationErrors = _l[1];\n // reset internal state on date change\n React.useEffect(function () {\n setValidationErrors({ hasErrors: false });\n setShowDayView(false);\n setShouldValidate(false);\n }, [dateString]);\n var saveData = React.useCallback(function (updatedValues, callback, background) {\n var _a, _b, _c, _d, _e;\n var lastNightWakeupHasNoWakeTime = (_c = (_a = updatedValues.nightWakeups) === null || _a === void 0 ? void 0 : _a[((_b = updatedValues.nightWakeups) === null || _b === void 0 ? void 0 : _b.length) - 1]) === null || _c === void 0 ? void 0 : _c.wakeTime;\n var nightWakeupsWithWaketime = (_d = updatedValues.nightWakeups) === null || _d === void 0 ? void 0 : _d.filter(function (d) { return d.wakeTime; });\n var allNightWakeupsHaveWakeTime = (nightWakeupsWithWaketime === null || nightWakeupsWithWaketime === void 0 ? void 0 : nightWakeupsWithWaketime.length) === ((_e = updatedValues.nightWakeups) === null || _e === void 0 ? void 0 : _e.length);\n if (allNightWakeupsHaveWakeTime || lastNightWakeupHasNoWakeTime) {\n var sleepData = {\n entry: __assign(__assign({}, updatedValues), { date: date, nightWakeups: lastNightWakeupHasNoWakeTime ? nightWakeupsWithWaketime : updatedValues.nightWakeups }),\n };\n (0, sleepService_1.updateSleepEntry)(dispatch, sleepData, { background: background, callback: callback });\n }\n }, [date, dispatch]);\n var _m = (0, useAutosaveForm_1.default)(saveData, { date: date }, currentValues), values = _m.values, handleSliderChange = _m.handleSliderChange, handleValueChange = _m.handleValueChange, ensureSaved = _m.ensureSaved;\n React.useEffect(function () {\n if (shouldValidate) {\n var allValidationErrors = (0, validationUtils_1.validateAllFields)(values, validators);\n setValidationErrors(allValidationErrors);\n }\n }, [shouldValidate, values]);\n var handleSubPropertyChange = function (name) { return function (event) {\n var _a;\n var updated = __assign(__assign({}, values.sleepProperties), (_a = {}, _a[name] = event.target.value, _a));\n handleValueChange('sleepProperties')(updated);\n }; };\n var handleTimeChange = function (name) { return function (value) {\n var timeWithCorrectDate = (0, utils_1.getTimeWithCorrectDate)(value, date, utils_1.SleepLoggingType.dayLogging);\n handleValueChange(name)(timeWithCorrectDate);\n }; };\n var handleChange = function (name) { return function (value) {\n handleTimeChange(name)(value);\n }; };\n var clickDone = function () {\n var allValidationErrors = (0, validationUtils_1.validateAllFields)(values, validators);\n if (!(0, validationUtils_1.checkHasErrors)(allValidationErrors)) {\n ensureSaved(function () {\n setShowDayView(true);\n });\n }\n else {\n setShouldValidate(true);\n setValidationErrors(allValidationErrors);\n }\n };\n var dateIsFuture = (0, dateUtils_1.isFuture)(date);\n return (React.createElement(components_1.PageLayout, { title: translate('sleepDiary.header'), breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(translate('sleepDiary.logNight'), translate, clientConfig, undefined, [{ text: translate('sleepDiary.header'), url: urls_1.default.inside.pages.sleepDiary }]) },\n React.createElement(\"div\", { className: classes.top },\n React.createElement(core_1.Typography, { variant: \"h6\" }, translate('sleepDiary.registrationForDescription', { dateStart: (0, dateUtils_1.longDate)((0, dateUtils_1.addDays)(date, -1), translate), dateEnd: (0, dateUtils_1.longDate)(date, translate) }))),\n React.createElement(React.Fragment, null, dateIsFuture && (React.createElement(core_1.Typography, { className: classes.futureWarning, color: \"primary\" }, translate('sleepDiary.cannotRegisterInFuture')))),\n React.createElement(\"div\", { className: (0, classnames_1.default)(classes.content, (_a = {}, _a[classes.disabled] = dateIsFuture, _a)) },\n React.createElement(\"div\", { className: classes.box },\n React.createElement(\"div\", { className: classes.alwaysPresentContent },\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryTitle }, translate('sleepDiary.activityRatingTitle')),\n React.createElement(core_1.Typography, { variant: \"body2\", className: classes.entryDescription }, translate('sleepDiary.activityRatingDescription')),\n React.createElement(components_1.YouwellSlider, { disabled: dateIsFuture, className: classes.slider, value: values.daytimeActivityRating, onChange: handleSliderChange('daytimeActivityRating'), min: 1, max: 5, marks: constants_1.daytimeActivityRatings.map(function (d) { return ({ value: d.id, label: translate(d.label) }); }) }),\n React.createElement(\"div\", { className: classes.ratingSliderIconSection },\n React.createElement(image_1.WorkingWithLaptopIcon, { color: theme.palette.primary.main }),\n React.createElement(image_1.WalkingWithDogIcon, { color: theme.palette.primary.main }),\n React.createElement(image_1.PlayingSoccerIcon, { color: theme.palette.primary.main }))),\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryTitle }, translate('sleepDiary.drugsOrAlcoholUse')),\n React.createElement(core_1.Typography, { variant: \"body2\", className: classes.entryDescription }, translate('sleepDiary.drugsOrAlcoholUseDescription')),\n React.createElement(\"div\", null,\n React.createElement(core_1.Input, { id: \"sleepMedication\", className: (0, classnames_1.default)(classes.textInput, ((_g = values.sleepProperties) === null || _g === void 0 ? void 0 : _g.sleepMedication) ? classes.filledInInput : classes.emptyInput), value: ((_h = values.sleepProperties) === null || _h === void 0 ? void 0 : _h.sleepMedication) || '', placeholder: translate('sleepDiary.drugsOrAlcoholInputPlaceHolder'), onChange: handleSubPropertyChange('sleepMedication'), fullWidth: true, disabled: dateIsFuture, disableUnderline: true, required: true })))),\n React.createElement(LogNaps_1.default, { values: values, date: date, disabled: dateIsFuture, handleValueChange: handleValueChange })),\n React.createElement(\"div\", { className: classes.box },\n React.createElement(\"div\", { className: classes.alwaysPresentContent },\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(\"div\", { className: classes.inline },\n React.createElement(\"div\", { className: classes.entryLabelFlexWrapper },\n React.createElement(\"div\", { className: classes.textAndIconWrapper },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryLabel }, translate('sleepDiary.whenDidYouGoToSleep')),\n React.createElement(icons_1.SleepIcon, null))),\n React.createElement(components_1.TimePicker, { className: (0, classnames_1.default)(classes.timeInput, values.bedTime ? classes.filledInInput : classes.emptyInput, (_b = {}, _b[classes.errorInput] = !!validationErrors.bedTime, _b)), value: values.bedTime, onChange: handleChange('bedTime'), validation: (0, utils_1.validateTimeBeforeThan)(values.sleepAtemptTime, date, utils_1.SleepLoggingType.nightLogging), validationMessage: \"\".concat(translate('sleepDiary.inCorrectSleepDataInputOrder')), disabled: dateIsFuture, defaultValue: constants_1.defaultSleepTime, disableUnderline: true, inputAdornmentBeforeInput: true }),\n !!validationErrors.bedTime && (React.createElement(core_1.Typography, { variant: \"caption\", color: \"error\", className: classes.requiredMessage }, translate('sleepDiary.rememberToFillOut'))))),\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(\"div\", { className: classes.inline },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryLabel }, translate('sleepDiary.whenDidYouTryToSleep')),\n React.createElement(components_1.TimePicker, { className: (0, classnames_1.default)(classes.timeInput, values.sleepAtemptTime ? classes.filledInInput : classes.emptyInput, (_c = {}, _c[classes.errorInput] = !!validationErrors.sleepAtemptTime, _c)), value: values.sleepAtemptTime, onChange: handleChange('sleepAtemptTime'), validation: (0, utils_1.validateTimeLaterThan)(values.bedTime, date, utils_1.SleepLoggingType.nightLogging), validationMessage: \"\".concat(translate('sleepDiary.inCorrectSleepDataInputOrder')), disabled: dateIsFuture, defaultValue: constants_1.defaultSleepTime, disableUnderline: true, inputAdornmentBeforeInput: true }),\n !!validationErrors.sleepAtemptTime && (React.createElement(core_1.Typography, { variant: \"caption\", color: \"error\", className: classes.requiredMessage }, translate('sleepDiary.rememberToFillOut'))))),\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(\"div\", { className: classes.inline },\n React.createElement(\"div\", { className: classes.entryLabelFlexWrapper },\n React.createElement(\"div\", { className: classes.textAndIconWrapper },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryLabel }, translate('sleepDiary.whenDidYouSleep')),\n React.createElement(image_1.SleepSmileyIcon, null))),\n React.createElement(components_1.TimePicker, { className: (0, classnames_1.default)(classes.timeInput, values.sleepTime ? classes.filledInInput : classes.emptyInput, (_d = {}, _d[classes.errorInput] = !!validationErrors.sleepTime, _d)), value: values.sleepTime, onChange: handleChange('sleepTime'), validation: (0, utils_1.validateTimeLaterThan)(values.sleepAtemptTime, date, utils_1.SleepLoggingType.nightLogging), validationMessage: \"\".concat(translate('sleepDiary.inCorrectSleepDataInputOrder')), disabled: dateIsFuture, defaultValue: constants_1.defaultSleepTime, disableUnderline: true, inputAdornmentBeforeInput: true }),\n !!validationErrors.sleepTime && (React.createElement(core_1.Typography, { variant: \"caption\", color: \"error\", className: classes.requiredMessage }, translate('sleepDiary.rememberToFillOut'))))))),\n React.createElement(LogWakeups_1.default, { values: values, handleValueChange: handleValueChange, disabled: dateIsFuture }),\n React.createElement(\"div\", { className: classes.box },\n React.createElement(\"div\", { className: classes.alwaysPresentContent },\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(\"div\", { className: classes.inline },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryLabel }, translate('sleepDiary.whenDidYouWakeUp')),\n React.createElement(components_1.TimePicker, { className: (0, classnames_1.default)(classes.timeInput, values.wakeTime ? classes.filledInInput : classes.emptyInput, (_e = {}, _e[classes.errorInput] = !!validationErrors.wakeTime, _e)), value: values.wakeTime, onChange: handleTimeChange('wakeTime'), validation: (0, utils_1.validateTimeBeforeThan)(values.outOfBedTime, date, utils_1.SleepLoggingType.dayLogging), validationMessage: \"\".concat(translate('sleepDiary.inCorrectSleepDataInputOrder')), disabled: dateIsFuture, defaultValue: constants_1.defaultWakeTime, disableUnderline: true, inputAdornmentBeforeInput: true }),\n !!validationErrors.wakeTime && (React.createElement(core_1.Typography, { variant: \"caption\", color: \"error\", className: classes.requiredMessage }, translate('sleepDiary.rememberToFillOut'))))),\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(\"div\", { className: classes.inline },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryLabel }, translate('sleepDiary.whenDidYouGetOutOfBed')),\n React.createElement(components_1.TimePicker, { className: (0, classnames_1.default)(classes.timeInput, values.outOfBedTime ? classes.filledInInput : classes.emptyInput, (_f = {}, _f[classes.errorInput] = !!validationErrors.outOfBedTime, _f)), value: values.outOfBedTime, onChange: handleTimeChange('outOfBedTime'), validation: (0, utils_1.validateTimeLaterThan)(values.wakeTime, date, utils_1.SleepLoggingType.dayLogging), validationMessage: \"\".concat(translate('sleepDiary.inCorrectSleepDataInputOrder')), disabled: dateIsFuture, defaultValue: constants_1.defaultWakeTime, disableUnderline: true, inputAdornmentBeforeInput: true }),\n !!validationErrors.outOfBedTime && (React.createElement(core_1.Typography, { variant: \"caption\", color: \"error\", className: classes.requiredMessage }, translate('sleepDiary.rememberToFillOut'))))),\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryTitle }, translate('sleepDiary.sleepRating')),\n React.createElement(components_1.YouwellSlider, { className: classes.slider, value: values.sleepRating, onChange: handleSliderChange('sleepRating'), min: 1, max: 5, marks: constants_1.sleepRatings.map(function (d) { return ({ value: d.id, label: translate(d.label) }); }), disabled: dateIsFuture }),\n React.createElement(\"div\", { className: classes.ratingSliderIconSection },\n React.createElement(image_1.BadFaceIcon, { color: theme.palette.primary.main }),\n React.createElement(image_1.OkFaceIcon, { color: theme.palette.primary.main }),\n React.createElement(image_1.HappyFaceIcon, { color: theme.palette.primary.main })))))),\n React.createElement(\"div\", { className: classes.bottom },\n validationErrors.hasErrors && (React.createElement(core_1.Typography, { variant: \"subtitle2\", color: \"error\", className: classes.bottomValidation }, translate('sleepDiary.pleaseFillOutAllFields'))),\n React.createElement(core_1.Button, { className: classes.doneBtn, variant: \"contained\", color: \"secondary\", onClick: clickDone, disabled: dateIsFuture }, translate('sleepDiary.done'))),\n React.createElement(DayView_1.default, { date: date, open: showDayView, onClose: function () { return setShowDayView(false); } })));\n};\nexports.default = LogDay;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar recharts_1 = require(\"recharts\");\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"../../../common/icons\");\nvar image_1 = require(\"../../../common/image\");\nvar sleepService_1 = require(\"../../../app/services/sleepService\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar components_1 = require(\"../../../common/components\");\nvar breadcrumbUtil_1 = require(\"../../../common/breadcrumbUtil\");\nvar store_1 = require(\"../../../app/store\");\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar arrayUtils_1 = require(\"../../../youwell-common/arrayUtils\");\nvar browserUtils_1 = require(\"../../../youwell-common/browserUtils\");\nvar RegisterSleepMenu_1 = __importDefault(require(\"./components/RegisterSleepMenu\"));\nvar InfoBox_1 = __importDefault(require(\"./components/InfoBox\"));\nvar utils_1 = require(\"./utils\");\nvar WeekAverageDetails_1 = __importDefault(require(\"./components/WeekAverageDetails\"));\nvar EditBedtimePlan_1 = __importDefault(require(\"./components/EditBedtimePlan\"));\nvar constants_1 = require(\"../../../youwell-common/constants\");\nvar constants_2 = require(\"./constants\");\nvar SleepDetailsTable_1 = __importDefault(require(\"./components/SleepDetailsTable\"));\nvar WeekSelector_1 = __importDefault(require(\"../../../common/components/WeekSelector\"));\nvar SleepDataStore_1 = require(\"../../../app/store/SleepDataStore\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c;\n return (0, core_1.createStyles)({\n top: (_a = {\n marginBottom: theme.spacing(4)\n },\n _a[theme.breakpoints.down('xs')] = {\n marginBottom: theme.spacing(4),\n },\n _a),\n mainHeading: {\n textTransform: 'uppercase',\n marginBottom: theme.spacing(2),\n },\n content: {\n marginBottom: theme.spacing(8),\n '&:last-child': {\n marginBottom: theme.spacing(12),\n },\n },\n infoBoxes: (_b = {\n display: 'flex',\n margin: theme.spacing(4, 0, 8)\n },\n _b[theme.breakpoints.down('xs')] = {\n flexWrap: 'wrap',\n },\n _b),\n chartContent: (_c = {\n boxShadow: theme.shadows[2],\n background: theme.palette.common.white,\n paddingTop: theme.spacing(2)\n },\n _c[theme.breakpoints.down('xs')] = {\n overflowX: 'auto',\n overflowY: 'hidden',\n width: '100%',\n },\n _c),\n chartScrollContainer: {},\n chartTitle: {\n margin: theme.spacing(2),\n },\n chartDetails: {\n marginTop: theme.spacing(2),\n },\n weekSelection: {\n margin: theme.spacing(2, 0),\n display: 'flex',\n justifyContent: 'center',\n },\n infoLine: {\n display: 'flex',\n alignItems: 'center',\n },\n infoIcon: {\n width: 40,\n height: 40,\n marginRight: theme.spacing(2),\n color: theme.palette.secondary.main,\n },\n bedPlanLine: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: theme.spacing(2),\n },\n bedPlanIcon: {\n width: 30,\n height: 30,\n marginRight: theme.spacing(2),\n },\n ratingDescription: {\n marginTop: theme.spacing(4),\n },\n noRegistrations: {\n background: theme.youwell.colors.secondaryBackground,\n padding: theme.spacing(2),\n },\n customTooltip: {\n backgroundColor: theme.youwell.colors.secondaryBackground,\n padding: theme.spacing(2),\n borderRadius: theme.youwell.shapes.borderRadius,\n },\n });\n}, { name: 'SleepDiary' });\nvar SleepDiary = function () {\n var _a;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var translate = (0, translate_1.default)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var sleepEntries = (0, store_1.useYouwellSelector)(function (state) { return (0, arrayUtils_1.sortByDateAscending)(state.sleepDataStore.entries, 'date') || []; });\n var sleepEntriesLoadedFrom = (0, store_1.useYouwellSelector)(function (state) { return state.sleepDataStore.sleepEntriesLoadedFrom; });\n var selectedWeek = (0, store_1.useYouwellSelector)(function (state) { return state.sleepDataStore.selectedWeek; });\n var userData = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.auth.profileData) === null || _a === void 0 ? void 0 : _a.extendedProperties; });\n var theme = (0, core_1.useTheme)();\n var isMobile = (0, core_1.useMediaQuery)(theme.breakpoints.down('xs'));\n var sleepLookup = React.useMemo(function () { return (0, utils_1.getSleepLookup)(sleepEntries); }, [sleepEntries]);\n var selectedWeekEntries = (0, utils_1.getRegistrationsForWeek)(sleepLookup, selectedWeek);\n var weekAverage = React.useMemo(function () { return (0, utils_1.getWeekAverage)(selectedWeekEntries); }, [selectedWeekEntries]);\n var hasRegistrationsForWeek = weekAverage.count > 0;\n var onWeekSelectionChange = function (week) {\n dispatch((0, SleepDataStore_1.setSelectedWeek)(week));\n var localDate = (0, dateUtils_1.getLocalDate)(sleepEntriesLoadedFrom);\n if (sleepEntriesLoadedFrom && localDate && week.start < localDate) {\n localDate.setMonth(localDate.getMonth() - 1);\n (0, sleepService_1.fetchEntriesData)(dispatch, { startDate: localDate, endDate: sleepEntriesLoadedFrom });\n }\n };\n var _b = (0, browserUtils_1.useElementSize)(), contentRef = _b.elementRef, contentSize = _b.elementSize;\n var chartWidth = isMobile ? selectedWeekEntries.length * 80 : contentSize.width;\n var bedtimePlan = {\n bedTime: (userData === null || userData === void 0 ? void 0 : userData[constants_1.userDataProperties.bedtimePlan.bedTime]) || '',\n wakeTime: (userData === null || userData === void 0 ? void 0 : userData[constants_1.userDataProperties.bedtimePlan.wakeTime]) || '',\n };\n var hasBedtimePlan = Boolean(bedtimePlan.bedTime && bedtimePlan.wakeTime);\n var HistoryGraphTooltip = function (_a) {\n var _b, _c, _d, _e, _f, _g, _h, _j, _k;\n var active = _a.active, payload = _a.payload;\n if (active && payload && payload.length) {\n return (React.createElement(\"div\", { className: classes.customTooltip },\n React.createElement(core_1.Typography, { variant: \"subtitle2\" }, (0, dateUtils_1.shortDate)((_c = (_b = payload[0]) === null || _b === void 0 ? void 0 : _b.payload) === null || _c === void 0 ? void 0 : _c.x, translate, false, false, true)),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"primary\" }, \"\".concat(translate('sleepDiary.totalSleep'), \": \").concat((0, dateUtils_1.hourCount)((_d = payload[0].payload) === null || _d === void 0 ? void 0 : _d.totalSleepMinutes, translate))),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"primary\" }, \"\".concat(translate('sleepDiary.sleepOnset'), \": \").concat((0, dateUtils_1.hourCount)((0, dateUtils_1.getNumberOfMinutes)((_f = (_e = payload[0]) === null || _e === void 0 ? void 0 : _e.payload) === null || _f === void 0 ? void 0 : _f.sleepTime, (_h = (_g = payload[0]) === null || _g === void 0 ? void 0 : _g.payload) === null || _h === void 0 ? void 0 : _h.sleepAtemptTime), translate))),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"primary\" }, \"\".concat(translate('sleepDiary.sleepEfficiency'), \": \").concat((_k = (_j = payload[0]) === null || _j === void 0 ? void 0 : _j.payload) === null || _k === void 0 ? void 0 : _k.y, \"%\"))));\n }\n return null;\n };\n return (React.createElement(React.Fragment, null,\n React.createElement(components_1.PageLayout, { breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(translate('sleepDiary.header'), translate, clientConfig) },\n React.createElement(\"div\", { className: classes.top },\n React.createElement(core_1.Typography, { variant: \"h4\", className: classes.mainHeading }, translate('sleepDiary.header')),\n React.createElement(RegisterSleepMenu_1.default, { isModal: true, numberOfNightCards: 4 })),\n React.createElement(\"div\", { className: classes.weekSelection, ref: contentRef },\n React.createElement(WeekSelector_1.default, { onChange: onWeekSelectionChange, selectedWeek: selectedWeek })),\n React.createElement(\"div\", { className: classes.infoBoxes },\n React.createElement(InfoBox_1.default, { heading: translate('sleepDiary.sleepEfficiency'), subHeading: translate('sleepDiary.average'), Icon: icons_1.AnalyticsIcon, ActionPopup: hasRegistrationsForWeek ? WeekAverageDetails_1.default : null, ActionPopupProps: { weekAverage: weekAverage }, actionText: translate('sleepDiary.moreInformation'), actionPopupHeading: translate('sleepDiary.weekAverage') },\n React.createElement(\"div\", { className: classes.infoLine }, hasRegistrationsForWeek ? (React.createElement(React.Fragment, null,\n React.createElement(icons_1.DotIcon, { className: classes.infoIcon }),\n React.createElement(core_1.Typography, { variant: \"h6\" }, \"\".concat(Math.round(weekAverage.sleepQuality / weekAverage.count), \" %\")))) : (React.createElement(core_1.Typography, { variant: \"caption\" }, translate('sleepDiary.noEntriesForThisWeek'))))),\n React.createElement(InfoBox_1.default, { heading: translate('sleepDiary.qualityOfSleep'), subHeading: translate('sleepDiary.average'), Icon: icons_1.AnalyticsIcon },\n React.createElement(\"div\", { className: classes.infoLine }, hasRegistrationsForWeek ? (React.createElement(\"div\", null,\n React.createElement(core_1.Typography, { variant: \"h6\", align: \"center\" }, translate(((_a = constants_2.sleepRatings.find(function (d) { return Math.round(weekAverage.sleepRating / weekAverage.count) === d.id; })) === null || _a === void 0 ? void 0 : _a.label) || '', undefined, { onMissingTranslation: function () { return ''; } })),\n React.createElement(core_1.Typography, { variant: \"body1\", align: \"center\" }, \"\".concat((weekAverage.sleepRating / weekAverage.count).toFixed(1))),\n React.createElement(core_1.Typography, { variant: \"caption\", display: \"block\", className: classes.ratingDescription }, translate('sleepDiary.sleepRatingDescription')))) : (React.createElement(core_1.Typography, { variant: \"caption\" }, translate('sleepDiary.noEntriesForThisWeek'))))),\n React.createElement(InfoBox_1.default, { heading: translate('sleepDiary.bedtimePlan'), Icon: icons_1.AlarmIcon, ActionPopup: EditBedtimePlan_1.default, ActionPopupProps: { bedtimePlan: bedtimePlan }, actionText: translate('sleepDiary.editSleepPlan'), actionPopupHeading: translate('sleepDiary.bedtimePlan') }, hasBedtimePlan ? (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classes.bedPlanLine },\n React.createElement(image_1.MoonIcon, { className: classes.bedPlanIcon }),\n React.createElement(core_1.Typography, null, bedtimePlan.bedTime)),\n React.createElement(\"div\", { className: classes.bedPlanLine },\n React.createElement(icons_1.SunIcon, { className: classes.bedPlanIcon }),\n React.createElement(core_1.Typography, null, bedtimePlan.wakeTime)))) : (React.createElement(core_1.Typography, { variant: \"caption\" }, translate('sleepDiary.noSleepPlanCreated'))))),\n React.createElement(\"div\", { className: (0, classnames_1.default)(classes.content, classes.chartContent) },\n React.createElement(core_1.Typography, { variant: \"h5\", className: classes.chartTitle, gutterBottom: true }, translate('sleepDiary.history')),\n React.createElement(\"div\", { className: classes.chartScrollContainer, style: { width: chartWidth } },\n hasRegistrationsForWeek ? (React.createElement(recharts_1.LineChart, { width: chartWidth, height: 300, data: selectedWeekEntries.map(function (d) {\n var _a, _b, _c, _d;\n return ({\n x: d.isoDateString, y: (_a = d.entry) === null || _a === void 0 ? void 0 : _a.sleepQuality, sleepAtemptTime: (_b = d.entry) === null || _b === void 0 ? void 0 : _b.sleepAtemptTime, sleepTime: (_c = d.entry) === null || _c === void 0 ? void 0 : _c.sleepTime, totalSleepMinutes: (_d = d.entry) === null || _d === void 0 ? void 0 : _d.totalSleepMinutes,\n });\n }), margin: { top: 0, right: 16, bottom: 0, left: 160 } },\n React.createElement(recharts_1.YAxis, { domain: [50, 100], ticks: [50, 60, 70, 80, 90, 100], tickFormatter: function (t) { return \"\".concat(t, \" %\"); } }),\n React.createElement(recharts_1.Line, { dataKey: \"y\", strokeWidth: 4, stroke: theme.palette.secondary.main, dot: { stroke: theme.palette.primary.main, fill: theme.palette.primary.main, r: 8 } }),\n React.createElement(recharts_1.CartesianGrid, { vertical: false }),\n React.createElement(recharts_1.Tooltip, { content: React.createElement(HistoryGraphTooltip, null) }))) : (React.createElement(core_1.Typography, { variant: \"body2\", align: \"center\", className: classes.noRegistrations }, \"\".concat(translate('sleepDiary.noEntriesForThisWeek'), \". \").concat(translate('sleepDiary.clickDateToRegister')))),\n React.createElement(SleepDetailsTable_1.default, { data: selectedWeekEntries, hasRegistrations: hasRegistrationsForWeek }))))));\n};\nexports.default = SleepDiary;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar constants_1 = require(\"../constants\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar image_1 = require(\"../../../../common/image\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return ({\n root: {\n boxShadow: theme.shadows[2],\n background: theme.palette.common.white,\n },\n labelSection: {\n borderRight: theme.youwell.borders.dim,\n textAlign: 'right',\n fontWeight: 500,\n minWidth: 200,\n },\n valueSection: (_a = {\n textAlign: 'center',\n minWidth: 200\n },\n _a[theme.breakpoints.down('xs')] = {\n minWidth: 100,\n },\n _a),\n labelWrapper: {\n display: 'flex',\n justifyContent: 'end',\n alignItems: 'center',\n },\n sleepEfficiency: {\n borderRadius: theme.youwell.shapes.borderRadiusFlatter,\n color: theme.palette.common.white,\n padding: theme.spacing(2, 4),\n },\n goodSleep: {\n backgroundColor: theme.palette.secondary.main,\n },\n badSleep: {\n backgroundColor: theme.palette.error.main,\n },\n divider: {\n borderBottom: theme.youwell.borders.normal,\n },\n icons: {\n marginLeft: theme.spacing(2),\n verticalAlign: 'middle',\n },\n });\n}, { name: 'DaySummaryTable' });\nvar DaySummaryTable = function (_a) {\n var _b, _c, _d, _e, _f, _g, _h, _j;\n var day = _a.day;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var sleepEfficiency = (day.totalSleepMinutes && day.totalBedMinutes) ? Number(((day.totalSleepMinutes / day.totalBedMinutes)) * 100).toFixed(0) : 0;\n return (React.createElement(core_1.Table, { className: classes.root },\n React.createElement(core_1.TableBody, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.sleepQuality')),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.totalSleepMinutes && day.totalBedMinutes ? (React.createElement(\"span\", { className: (0, classnames_1.default)(classes.sleepEfficiency, sleepEfficiency < 70 ? classes.badSleep : classes.goodSleep) }, \"\".concat(sleepEfficiency, \"%\"))) : translate('sleepDiary.registrationMissing'))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.totalSleepMinutes')),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.totalSleepMinutes ? ((0, dateUtils_1.hourCount)(day.totalSleepMinutes, translate)) : translate('sleepDiary.registrationMissing'))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.labelSection, classes.divider) },\n React.createElement(\"div\", { className: classes.labelWrapper },\n translate('sleepDiary.totalBedMinutes'),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(icons_1.SleepIcon, { className: classes.icons })))),\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.valueSection, classes.divider) }, day.totalBedMinutes ? (0, dateUtils_1.hourCount)(day.totalBedMinutes, translate) : (translate('sleepDiary.registrationMissing')))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.dayView.daytimeActivityRatings')),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, constants_1.daytimeActivityRatings.find(function (d) { return d.id === day.daytimeActivityRating; }) ? (translate(\"\".concat((_b = constants_1.daytimeActivityRatings.find(function (d) { return d.id === day.daytimeActivityRating; })) === null || _b === void 0 ? void 0 : _b.label))) : (translate('sleepDiary.registrationMissing')))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.dayTimeNaps')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.SleepSmileyIcon, null)))),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.daytimeNaps && day.daytimeNaps.length > 0 ? day.daytimeNaps.map(function (nap) {\n var _a;\n return (React.createElement(\"div\", { key: (_a = nap.sleepTime) === null || _a === void 0 ? void 0 : _a.toString() }, nap.wakeTime && nap.sleepTime\n ? (React.createElement(React.Fragment, null,\n React.createElement(\"span\", null, \"\".concat((0, dateUtils_1.hourCount)((0, dateUtils_1.getNumberOfMinutes)(nap.sleepTime, nap.wakeTime), translate), \" \")),\n React.createElement(\"span\", null, \"\".concat(translate('sleepDiary.dayView.at'), \" \").concat((0, dateUtils_1.getTimePartForInput)(nap.sleepTime))))) : (React.createElement(\"span\", null, \" - \".concat(translate('sleepDiary.dayView.at'), \" \").concat((0, dateUtils_1.getTimePartForInput)(nap.sleepTime))))));\n }) : ((_c = day.sleepProperties) === null || _c === void 0 ? void 0 : _c.hasDaytimeNaps) === false ? translate('sleepDiary.none') : translate('sleepDiary.registrationMissing'))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.labelSection, classes.divider) },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null,\n React.createElement(\"div\", null, translate('sleepDiary.dayView.sleepMedication')),\n React.createElement(\"div\", null, translate('sleepDiary.dayView.alcohol'))),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.MedicineIcon, null)))),\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.valueSection, classes.divider) }, ((_d = day.sleepProperties) === null || _d === void 0 ? void 0 : _d.sleepMedication) ? (day.sleepProperties.sleepMedication) : translate('sleepDiary.none'))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.gotToBed')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.MoonIcon, null)))),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.bedTime ? (0, dateUtils_1.getTimePartForInput)(day.bedTime) : (translate('sleepDiary.registrationMissing')))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.tiredToSleep')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.SleepSmileyIcon, null)))),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.sleepAtemptTime ? (0, dateUtils_1.getTimePartForInput)(day.sleepAtemptTime) : (translate('sleepDiary.registrationMissing')))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.fellAsleep')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.SleepSmileyIcon, null)))),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.sleepTime ? (0, dateUtils_1.getTimePartForInput)(day.sleepTime) : translate('sleepDiary.registrationMissing'))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.awake')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.AwakeSmileyIcon, null)))),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, ((_e = day.sleepProperties) === null || _e === void 0 ? void 0 : _e.numberOfNightWakeups) ? (\"\".concat((_f = day.sleepProperties) === null || _f === void 0 ? void 0 : _f.numberOfNightWakeups, \" \").concat(translate('sleepDiary.dayView.times'))) : ((_g = day.sleepProperties) === null || _g === void 0 ? void 0 : _g.numberOfNightWakeups) === 0 ? '-' : translate('sleepDiary.registrationMissing'))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.labelSection, classes.divider) },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.nightWakeupsTotalMinutes')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.AwakeSmileyIcon, null)))),\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.valueSection, classes.divider) }, ((_h = day.sleepProperties) === null || _h === void 0 ? void 0 : _h.nightWakeupsTotalMinutes) ? (\"\".concat(day.sleepProperties.nightWakeupsTotalMinutes, \" \").concat(translate('sleepDiary.dayView.min'))) : ('-'))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.youWokeUp')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(icons_1.SunIcon, null)))),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.wakeTime ? ((0, dateUtils_1.getTimePartForInput)(day.wakeTime)) : (translate('sleepDiary.registrationMissing')))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { align: \"center\", className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.youGotOutOfBed')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.WakeUpIcon, null)))),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.outOfBedTime ? ((0, dateUtils_1.getTimePartForInput)(day.outOfBedTime)) : (translate('sleepDiary.registrationMissing')))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.yourSleepRating')),\n React.createElement(core_1.TableCell, { className: classes.valueSection }, day.sleepRating ? (translate(((_j = constants_1.sleepRatings.find(function (d) { return day.sleepRating === d.id; })) === null || _j === void 0 ? void 0 : _j.label) || '', undefined, { onMissingTranslation: function () { var _a; return ((_a = day.sleepRating) === null || _a === void 0 ? void 0 : _a.toString()) || ''; } })) : (translate('sleepDiary.registrationMissing')))))));\n};\nexports.default = DaySummaryTable;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar connected_react_router_1 = require(\"connected-react-router\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar store_1 = require(\"../../../../app/store\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar urls_1 = __importDefault(require(\"../../../../app/urls\"));\nvar icons_1 = require(\"../../../../common/icons\");\nvar arrayUtils_1 = require(\"../../../../youwell-common/arrayUtils\");\nvar utils_1 = require(\"../utils\");\nvar RegisterSleepMenu_1 = __importDefault(require(\"./RegisterSleepMenu\"));\nvar components_1 = require(\"../../../../common/components\");\nvar sleepService_1 = require(\"../../../../app/services/sleepService\");\nvar DaySummaryTable_1 = __importDefault(require(\"./DaySummaryTable\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d, _e;\n return ({\n modalContentAndActionsWrapper: (_a = {\n display: 'flex',\n alignItems: 'center'\n },\n _a[theme.breakpoints.down('sm')] = {\n flexDirection: 'column',\n },\n _a),\n modalContent: {\n display: 'flex',\n flexDirection: 'column',\n margin: theme.spacing(1),\n '&:focus': {\n outline: 'none',\n },\n },\n top: (_b = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n margin: theme.spacing(12, 0, 2, 0)\n },\n _b[theme.breakpoints.down('md')] = {\n margin: theme.spacing(2, 0, 2, 0),\n },\n _b),\n modalActions: (_c = {\n margin: theme.spacing(2)\n },\n _c[theme.breakpoints.down('sm')] = {\n margin: theme.spacing(0, 2, 2, 2),\n width: '75%',\n },\n _c[theme.breakpoints.down('xs')] = {\n width: '100%',\n },\n _c),\n modalActionText: {\n margin: theme.spacing(2, 0, 3, 2),\n },\n modalActionButton: (_d = {\n padding: theme.spacing(1, 4),\n marginLeft: theme.spacing(2)\n },\n _d[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1, 2),\n },\n _d),\n registerItems: (_e = {\n display: 'inline-block'\n },\n _e[theme.breakpoints.down('xs')] = {\n display: 'block',\n paddingBottom: theme.spacing(5),\n },\n _e),\n btnSection: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: theme.spacing(2, 1),\n },\n wellDoneTextAndIconWrapper: {\n display: 'flex',\n },\n thumbsUpIcon: {\n color: theme.palette.secondary.main,\n marginRight: theme.spacing(1),\n },\n wellDoneText: {\n fontWeight: 500,\n },\n fillOutMissingNightsText: {\n fontWeight: 500,\n },\n reminderInfo: {\n margin: theme.spacing(2),\n },\n });\n}, { name: 'DayView' });\nvar DayView = function (_a) {\n var dateString = _a.date, open = _a.open, onClose = _a.onClose;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var translate = (0, translate_1.default)();\n var _b = React.useState(false), showReminderText = _b[0], setShowReminderText = _b[1];\n var sleepEntries = (0, store_1.useYouwellSelector)(function (state) { return (0, arrayUtils_1.sortByDateAscending)(state.sleepDataStore.entries, 'date') || []; });\n var date = React.useMemo(function () { return (0, dateUtils_1.getLocalDate)(dateString); }, [dateString]);\n var day = sleepEntries.find(function (d) { return (0, dateUtils_1.isSameDate)(d.date, date); }) || { date: date };\n var sleepLookup = (0, utils_1.getSleepLookup)(sleepEntries);\n var missingNights = (0, utils_1.missingRegistrationsLastWeek)(sleepLookup);\n var skipAllMissingNights = function () {\n missingNights.forEach(function (missingNight) {\n var sleepData = {\n entry: {\n date: missingNight,\n sleepProperties: {\n userSkippedRegistering: true,\n },\n },\n };\n (0, sleepService_1.updateSleepEntry)(dispatch, sleepData);\n });\n dispatch((0, connected_react_router_1.push)(urls_1.default.inside.pages.sleepDiary));\n };\n var edit = function () {\n onClose();\n dispatch((0, connected_react_router_1.push)(\"\".concat(urls_1.default.inside.pages.sleepDiary, \"/log/\").concat((0, dateUtils_1.isoDate)(date))));\n };\n var notNow = function () {\n setShowReminderText(false);\n dispatch((0, connected_react_router_1.push)(urls_1.default.inside.pages.sleepDiary));\n };\n return (React.createElement(components_1.OverlayModal, { open: open, \n // onClose={close} // should not be closed by clicking outside\n wide: true },\n React.createElement(\"div\", { className: classes.modalContentAndActionsWrapper },\n React.createElement(\"div\", { className: classes.modalContent },\n React.createElement(\"div\", { className: classes.top },\n React.createElement(\"div\", null,\n React.createElement(core_1.Typography, { variant: \"h6\" }, translate('sleepDiary.registration')),\n React.createElement(core_1.Typography, { variant: \"h6\" }, (0, dateUtils_1.isToday)(date) ? \"\".concat(translate('sleepDiary.lastNight'), \" \").concat((0, dateUtils_1.longDate)(date, translate)) : (0, dateUtils_1.longDate)(date, translate))),\n React.createElement(core_1.Button, { onClick: edit }, translate('sleepDiary.change'))),\n React.createElement(DaySummaryTable_1.default, { day: day })),\n React.createElement(\"div\", { className: classes.modalActions }, (missingNights === null || missingNights === void 0 ? void 0 : missingNights.length) > 0 ? (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classes.modalActionText }, day.totalSleepMinutes ? (React.createElement(\"div\", { className: classes.wellDoneTextAndIconWrapper },\n React.createElement(icons_1.ThumbUpIcon, { className: classes.thumbsUpIcon }),\n React.createElement(core_1.Typography, { className: classes.wellDoneText }, missingNights.length === 1 ? translate('sleepDiary.dayView.wellDoneOneNightMissing') : translate('sleepDiary.dayView.wellDoneMultipleNightsMissing')))) : (React.createElement(core_1.Typography, { className: classes.fillOutMissingNightsText }, translate('sleepDiary.dayView.fillOutMissingNights')))),\n React.createElement(\"div\", { className: classes.registerItems },\n React.createElement(RegisterSleepMenu_1.default, { onClick: onClose, numberOfNightCards: 3 }),\n showReminderText ? (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classes.reminderInfo },\n React.createElement(core_1.Typography, null, translate('sleepDiary.easyToForgetDetails'))),\n React.createElement(\"div\", { className: classes.btnSection },\n React.createElement(core_1.Button, { className: classes.modalActionButton, variant: \"outlined\", color: \"secondary\", onClick: skipAllMissingNights }, translate('sleepDiary.dayView.dontAskMeAgain')),\n React.createElement(core_1.Button, { className: classes.modalActionButton, variant: \"contained\", color: \"secondary\", onClick: notNow }, translate('sleepDiary.dayView.registerLater'))))) : (React.createElement(\"div\", { className: classes.btnSection },\n React.createElement(core_1.Button, { className: classes.modalActionButton, variant: \"outlined\", color: \"secondary\", onClick: function () { return setShowReminderText(true); } }, translate('sleepDiary.dayView.notNow'))))))) : (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classes.modalActionText },\n React.createElement(icons_1.ThumbUpIcon, { className: classes.thumbsUpIcon }),\n React.createElement(core_1.Typography, null, translate('sleepDiary.dayView.wellDone'))),\n React.createElement(core_1.Button, { className: classes.modalActionButton, variant: \"contained\", color: \"primary\", component: react_router_dom_1.Link, to: urls_1.default.inside.pages.sleepDiary }, translate('sleepDiary.dayView.close'))))))));\n};\nexports.default = DayView;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar components_1 = require(\"../../../../common/components\");\nvar utils_1 = require(\"../utils\");\nvar constants_1 = require(\"../constants\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c;\n return ({\n root: (_a = {\n background: theme.palette.common.white,\n color: theme.palette.common.black,\n borderRadius: theme.youwell.shapes.borderRadiusFlatter,\n marginTop: theme.spacing(1),\n padding: theme.spacing(1.5),\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n _a[theme.breakpoints.down('xs')] = {\n flexDirection: 'column',\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n },\n _a),\n entry: (_b = {\n marginRight: theme.spacing(8),\n display: 'flex',\n alignItems: 'center'\n },\n _b[theme.breakpoints.down('xs')] = {\n width: '100%',\n marginRight: theme.spacing(0),\n marginBottom: theme.spacing(1),\n },\n _b),\n entryLabel: (_c = {\n marginRight: theme.spacing(2)\n },\n _c[theme.breakpoints.down('xs')] = {\n flex: '1 1 auto',\n },\n _c),\n flex: {\n flex: '1 1 auto',\n },\n deleteIcon: {\n color: theme.palette.secondary.main,\n },\n notValidInput: {\n color: theme.palette.error.main,\n marginTop: theme.spacing(1),\n },\n });\n}, { name: 'DaytimeNaps' });\nvar DaytimeNap = function (_a) {\n var value = _a.value, onChange = _a.onChange, onDelete = _a.onDelete, date = _a.date, daytimeNaps = _a.daytimeNaps, listIndex = _a.listIndex, validationItem = _a.validationItem;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var validateInput = function (name, changedValue) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n if (!daytimeNaps)\n return true;\n var currWakeTime = (_b = (_a = daytimeNaps[listIndex]) === null || _a === void 0 ? void 0 : _a.wakeTime) !== null && _b !== void 0 ? _b : null;\n var prevWakeTime = (_d = (_c = daytimeNaps[listIndex - 1]) === null || _c === void 0 ? void 0 : _c.wakeTime) !== null && _d !== void 0 ? _d : null;\n var currSleepTime = (_f = (_e = daytimeNaps[listIndex]) === null || _e === void 0 ? void 0 : _e.sleepTime) !== null && _f !== void 0 ? _f : null;\n var nextSleepTime = (_h = (_g = daytimeNaps[listIndex + 1]) === null || _g === void 0 ? void 0 : _g.sleepTime) !== null && _h !== void 0 ? _h : null;\n var prevSleepTime = (_k = (_j = daytimeNaps[listIndex - 1]) === null || _j === void 0 ? void 0 : _j.sleepTime) !== null && _k !== void 0 ? _k : null;\n var validation = true;\n if (name === utils_1.sleepLoggingItemNames.sleepTime) {\n if (currSleepTime) {\n var isLaterThanPrevWakeTimeOrPrevSleepTime = prevWakeTime ? (0, utils_1.validateTimeLaterThanWithActualDate)(prevWakeTime, date, utils_1.SleepLoggingType.dayLogging)(changedValue) : prevSleepTime ? (0, utils_1.validateTimeLaterThanWithActualDate)(prevSleepTime, date, utils_1.SleepLoggingType.dayLogging)(changedValue) : true;\n var isLaterThanCurrWakeTimeOrNextSleepTime = currWakeTime ? (0, utils_1.validateTimeLaterThanWithActualDate)(currWakeTime, date, utils_1.SleepLoggingType.dayLogging)(changedValue) : nextSleepTime ? (0, utils_1.validateTimeLaterThanWithActualDate)(nextSleepTime, date, utils_1.SleepLoggingType.dayLogging)(changedValue) : false;\n validation = isLaterThanPrevWakeTimeOrPrevSleepTime && !isLaterThanCurrWakeTimeOrNextSleepTime;\n }\n }\n if (name === utils_1.sleepLoggingItemNames.wakeTime) {\n if (currWakeTime) {\n var isLaterThanNextSleepTime = nextSleepTime ? (0, utils_1.validateTimeLaterThanWithActualDate)(nextSleepTime, date, utils_1.SleepLoggingType.dayLogging)(changedValue) : false;\n var isLaterThanCurrSleepTime = currSleepTime ? (0, utils_1.validateTimeLaterThanWithActualDate)(currSleepTime, date, utils_1.SleepLoggingType.dayLogging)(changedValue) : true;\n validation = isLaterThanCurrSleepTime && !isLaterThanNextSleepTime;\n }\n }\n return validation;\n };\n var handleChange = function (name) { return function (changedValue) {\n var _a;\n onChange(__assign(__assign({}, value), (_a = {}, _a[name] = (0, utils_1.getTimeWithActualDate)(changedValue, date), _a)));\n }; };\n var validation = function (name, newValue) {\n var _a, _b;\n if ((validationItem === null || validationItem === void 0 ? void 0 : validationItem.length) > 0) {\n if (name === utils_1.sleepLoggingItemNames.sleepTime && ((_a = validationItem[0]) === null || _a === void 0 ? void 0 : _a.validation.sleep) === false) {\n return validateInput(utils_1.sleepLoggingItemNames.sleepTime, value.sleepTime);\n }\n if (name === utils_1.sleepLoggingItemNames.wakeTime && ((_b = validationItem[0]) === null || _b === void 0 ? void 0 : _b.validation.wake) === false) {\n return validateInput(utils_1.sleepLoggingItemNames.wakeTime, value.wakeTime);\n }\n }\n return validateInput(name, newValue);\n };\n return (React.createElement(React.Fragment, null,\n value.wakeTime && !value.sleepTime && (React.createElement(core_1.Typography, { className: classes.notValidInput }, translate('sleepDiary.mustApplySleepTime'))),\n React.createElement(\"div\", { className: classes.root },\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", className: classes.entryLabel }, translate('sleepDiary.fellAsleep')),\n React.createElement(components_1.TimePicker, { value: value.sleepTime, onChange: handleChange(utils_1.sleepLoggingItemNames.sleepTime), validation: function (d) { return validation(utils_1.sleepLoggingItemNames.sleepTime, d); }, defaultValue: constants_1.defaultDaytimeSleepTime, validateWithoutValueChange: true })),\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", className: classes.entryLabel }, translate('sleepDiary.wokeUp')),\n React.createElement(components_1.TimePicker, { value: value.wakeTime, onChange: handleChange(utils_1.sleepLoggingItemNames.wakeTime), validation: function (d) { return validation(utils_1.sleepLoggingItemNames.wakeTime, d); }, defaultValue: constants_1.defaultDaytimeWakeTime, validateWithoutValueChange: true })),\n React.createElement(\"div\", { className: classes.flex }),\n React.createElement(core_1.IconButton, { onClick: onDelete, size: \"small\" },\n React.createElement(icons_1.DeleteIcon, { className: classes.deleteIcon })))));\n};\nDaytimeNap.defaultProps = {\n daytimeNaps: null,\n};\nexports.default = DaytimeNap;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar store_1 = require(\"../../../../app/store\");\nvar AuthStore = __importStar(require(\"../../../../app/store/AuthStore\"));\nvar constants_1 = require(\"../../../../youwell-common/constants\");\nvar components_1 = require(\"../../../../common/components\");\nvar constants_2 = require(\"../constants\");\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return (0, core_1.createStyles)({\n root: {},\n table: {\n margin: theme.spacing(8, 0),\n },\n timePicker: {\n marginBottom: -38, // removes unused space for validation-message..\n },\n actions: {\n marginTop: theme.spacing(15),\n display: 'flex',\n justifyContent: 'flex-end',\n },\n}); }, { name: 'EditBedtimePlan' });\nvar EditBedtimePlan = function (_a) {\n var bedtimePlan = _a.bedtimePlan, onClose = _a.onClose;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var profileData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var _b = React.useState({ bedTime: null, wakeTime: null }), planDetails = _b[0], setPlanDetails = _b[1];\n var _c = React.useState(false), hasChanged = _c[0], setHasChanged = _c[1];\n var handleChange = function (name) { return function (date) {\n setPlanDetails(function (prev) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[name] = date, _a)));\n });\n setHasChanged(true);\n }; };\n React.useEffect(function () {\n if (bedtimePlan) {\n setPlanDetails({\n bedTime: (0, dateUtils_1.getLocalDate)(bedtimePlan.bedTime, false),\n wakeTime: (0, dateUtils_1.getLocalDate)(bedtimePlan.wakeTime, false),\n });\n }\n }, [bedtimePlan]);\n var save = function () {\n var _a;\n var userData = __assign(__assign({}, profileData === null || profileData === void 0 ? void 0 : profileData.extendedProperties), (_a = {}, _a[constants_1.userDataProperties.bedtimePlan.bedTime] = (0, dateUtils_1.timeOnly)(planDetails.bedTime), _a[constants_1.userDataProperties.bedtimePlan.wakeTime] = (0, dateUtils_1.timeOnly)(planDetails.wakeTime), _a));\n dispatch(AuthStore.actionCreators.updateUserData(userData, { callback: onClose }));\n };\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.Table, { className: classes.table },\n React.createElement(core_1.TableBody, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, null, translate('sleepDiary.plannedBedTime')),\n React.createElement(core_1.TableCell, { align: \"right\" },\n React.createElement(components_1.TimePicker, { className: classes.timePicker, value: planDetails.bedTime, onChange: handleChange('bedTime'), defaultValue: constants_2.defaultSleepTime, disableUnderline: true, inputAdornmentBeforeInput: true }))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, null, translate('sleepDiary.plannedWakeTime')),\n React.createElement(core_1.TableCell, { align: \"right\" },\n React.createElement(components_1.TimePicker, { className: classes.timePicker, value: planDetails.wakeTime, onChange: handleChange('wakeTime'), defaultValue: constants_2.defaultWakeTime, disableUnderline: true, inputAdornmentBeforeInput: true }))))),\n React.createElement(\"div\", { className: classes.actions },\n React.createElement(core_1.Button, { onClick: save, disabled: !hasChanged }, translate('common.save')))));\n};\nEditBedtimePlan.defaultProps = {\n onClose: null,\n};\nexports.default = EditBedtimePlan;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar components_1 = require(\"../../../../common/components\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return (0, core_1.createStyles)({\n root: (_a = {\n flex: '1 1 30%',\n background: theme.youwell.colors.defaultBackground,\n borderRadius: theme.youwell.shapes.borderRadius,\n boxShadow: theme.shadows[3],\n padding: theme.spacing(2, 4),\n display: 'flex',\n flexDirection: 'column',\n '&:nth-child(2)': {\n margin: theme.spacing(0, 2),\n }\n },\n _a[theme.breakpoints.down('xs')] = {\n flexBasis: '80%',\n margin: theme.spacing(2),\n },\n _a),\n icon: {\n margin: theme.spacing(1, 0),\n },\n heading: {},\n subHeading: {},\n content: {\n flex: '1 1 auto',\n marginTop: theme.spacing(2),\n },\n actionButton: {\n marginTop: theme.spacing(2),\n },\n });\n}, { name: 'InfoBox' });\nvar InfoBox = function (_a) {\n var heading = _a.heading, subHeading = _a.subHeading, Icon = _a.Icon, children = _a.children, ActionPopup = _a.ActionPopup, ActionPopupProps = _a.ActionPopupProps, actionText = _a.actionText, actionPopupHeading = _a.actionPopupHeading, backgroundColor = _a.backgroundColor;\n var classes = useStyles();\n return (React.createElement(\"div\", { className: classes.root, style: { background: backgroundColor } },\n Icon && React.createElement(Icon, { className: classes.icon }),\n React.createElement(core_1.Typography, { variant: \"h6\", className: classes.heading }, heading),\n subHeading && (React.createElement(core_1.Typography, { className: classes.subHeading }, subHeading)),\n React.createElement(\"div\", { className: classes.content }, children),\n ActionPopup && (React.createElement(components_1.ModalAction, { modalHeading: actionPopupHeading || '', buttonProps: { className: classes.actionButton, variant: 'contained', color: 'secondary' }, buttonText: actionText, Modal: ActionPopup, ModalProps: ActionPopupProps }))));\n};\nInfoBox.defaultProps = {\n Icon: null,\n subHeading: null,\n ActionPopup: null,\n ActionPopupProps: null,\n actionText: null,\n actionPopupHeading: null,\n backgroundColor: null,\n};\nexports.default = InfoBox;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@material-ui/core\");\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar DaytimeNap_1 = __importDefault(require(\"./DaytimeNap\"));\nvar utils_1 = require(\"../utils\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar styles = function (theme) {\n var _a, _b, _c;\n return (0, core_1.createStyles)({\n root: {\n backgroundColor: theme.palette.background.default,\n },\n box: (_a = {\n backgroundColor: theme.palette.background.default,\n marginBottom: theme.spacing(4),\n boxShadow: theme.shadows[2],\n borderRadius: theme.youwell.shapes.borderRadius\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2),\n },\n _a),\n entry: {\n '&+&': {\n marginTop: theme.spacing(6),\n },\n },\n entryTitle: {},\n dayTimeNapWrapper: (_b = {},\n _b[theme.breakpoints.down('xs')] = {\n display: 'flex',\n flexDirection: 'column',\n },\n _b),\n yesNoRadioBtns: {\n border: theme.youwell.borders.secondary,\n margin: theme.spacing(2, 2, 2, 0),\n padding: theme.spacing(1, 16, 1, 1),\n },\n input: {\n backgroundColor: theme.palette.common.white,\n },\n alwaysPresentContent: {\n padding: theme.spacing(4),\n borderRadius: theme.youwell.shapes.borderRadius,\n },\n toggleableContent: (_c = {\n backgroundColor: \"\".concat(theme.palette.secondary.main, \"20\"),\n padding: theme.spacing(5),\n margin: '0 auto'\n },\n _c[theme.breakpoints.down('xs')] = {\n maxWidth: '100%',\n padding: theme.spacing(2, 1),\n },\n _c),\n radioGroup: {\n display: 'flex',\n flexDirection: 'row',\n padding: theme.spacing(1, 0, 3, 0),\n },\n addDayTimeNapsBtnSection: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: theme.spacing(2),\n },\n notValidTimeInputOrder: {\n color: theme.palette.error.main,\n marginTop: theme.spacing(1),\n },\n });\n};\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return styles(theme); }, { name: 'LogNaps' });\nvar LogNaps = function (_a) {\n var _b, _c, _d;\n var values = _a.values, date = _a.date, disabled = _a.disabled, handleValueChange = _a.handleValueChange;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var addDaytimeNap = function () {\n var updated = __spreadArray(__spreadArray([], values.daytimeNaps || [], true), [{\n wakeTime: undefined,\n sleepTime: undefined,\n }], false);\n handleValueChange('daytimeNaps')(updated);\n };\n var removeDaytimeNap = function (indexToRemove) { return function () {\n var _a;\n var updated = (_a = values.daytimeNaps) === null || _a === void 0 ? void 0 : _a.filter(function (d, i) { return i !== indexToRemove; });\n handleValueChange('daytimeNaps')(updated);\n }; };\n var handleWakeupValueChange = function (wakeUpIndex) { return function (updatedValue) {\n var updated = values.daytimeNaps && values.daytimeNaps.map(function (d, i) { return (i === wakeUpIndex ? updatedValue : d); });\n handleValueChange('daytimeNaps')(updated);\n }; };\n var handleDayTimeNapChange = function (event) {\n var hasDaytimeNaps = event.target.value === 'true';\n var updated = __assign(__assign({}, values.sleepProperties), { hasDaytimeNaps: hasDaytimeNaps });\n handleValueChange('sleepProperties')(updated);\n if (hasDaytimeNaps) {\n addDaytimeNap();\n }\n else {\n handleValueChange('daytimeNaps')([]);\n }\n };\n var unValidDaytimeNaps = (0, utils_1.dayTimeNapsUnValidItems)(date, values.daytimeNaps);\n var hasDaytimeNaps = !!((_b = values.sleepProperties) === null || _b === void 0 ? void 0 : _b.hasDaytimeNaps);\n var hasNoDaytimeNaps = ((_c = values.sleepProperties) === null || _c === void 0 ? void 0 : _c.hasDaytimeNaps) !== undefined && !values.sleepProperties.hasDaytimeNaps;\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(\"div\", { className: classes.alwaysPresentContent },\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryTitle }, translate('sleepDiary.dayTimeNaps')),\n React.createElement(core_1.RadioGroup, { className: classes.radioGroup, onChange: handleDayTimeNapChange },\n React.createElement(core_1.FormControlLabel, { disabled: disabled, className: (0, classnames_1.default)(classes.yesNoRadioBtns, classes.input), value: \"false\", control: React.createElement(core_1.Radio, { checked: hasNoDaytimeNaps }), label: translate('sleepDiary.no') }),\n React.createElement(core_1.FormControlLabel, { disabled: disabled, className: (0, classnames_1.default)(classes.yesNoRadioBtns, classes.input), value: \"true\", control: React.createElement(core_1.Radio, { checked: hasDaytimeNaps }), label: translate('sleepDiary.yes') })))),\n hasDaytimeNaps && (React.createElement(\"div\", { className: classes.toggleableContent },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryTitle }, translate('sleepDiary.dayTimeNapsDescription')),\n unValidDaytimeNaps.length > 0 && (React.createElement(core_1.Typography, { className: classes.notValidTimeInputOrder }, translate('sleepDiary.inCorrectSleepDataInputOrder'))),\n React.createElement(\"div\", { className: classes.dayTimeNapWrapper }, (_d = values.daytimeNaps) === null || _d === void 0 ? void 0 :\n _d.map(function (item, i) { return (React.createElement(DaytimeNap_1.default\n // eslint-disable-next-line react/no-array-index-key\n , { \n // eslint-disable-next-line react/no-array-index-key\n key: i, value: item, date: date, onChange: handleWakeupValueChange(i), onDelete: removeDaytimeNap(i), daytimeNaps: values.daytimeNaps, listIndex: i, validationItem: unValidDaytimeNaps === null || unValidDaytimeNaps === void 0 ? void 0 : unValidDaytimeNaps.filter(function (d) { return d.index === i; }) })); }),\n React.createElement(\"div\", { className: classes.addDayTimeNapsBtnSection },\n React.createElement(core_1.Button, { variant: \"contained\", color: \"secondary\", onClick: addDaytimeNap, startIcon: React.createElement(icons_1.AddIcon, null), disabled: disabled }, translate('sleepDiary.addSleepTime'))))))));\n};\nexports.default = LogNaps;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@material-ui/core\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar React = __importStar(require(\"react\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar image_1 = require(\"../../../../common/image\");\nvar styles = function (theme) {\n var _a, _b, _c;\n return (0, core_1.createStyles)({\n box: (_a = {\n marginBottom: theme.spacing(4),\n boxShadow: theme.shadows[2],\n backgroundColor: theme.palette.background.default,\n borderRadius: theme.youwell.shapes.borderRadius\n },\n _a[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(2),\n },\n _a),\n entry: {\n '&+&': {\n marginTop: theme.spacing(6),\n },\n },\n entryLabelFlexWrapper: (_b = {\n marginBottom: theme.spacing(1),\n display: 'flex'\n },\n _b[theme.breakpoints.down('xs')] = {\n flexDirection: 'column',\n },\n _b),\n textAndIconWrapper: {\n display: 'flex',\n },\n entryLabel: {\n marginRight: theme.spacing(2),\n },\n entryTitle: {},\n input: {\n backgroundColor: theme.palette.common.white,\n },\n selectInput: {\n border: theme.youwell.borders.dim,\n width: 200,\n height: 50,\n textAlign: 'center',\n margin: theme.spacing(1, 2, 1, 0),\n '& .MuiSelect-selectMenu': {\n display: 'flex',\n justifyContent: 'center',\n },\n },\n selectInputMenuItem: {\n display: 'flex',\n justifyContent: 'center',\n },\n yesNoRadioBtns: {\n border: theme.youwell.borders.secondary,\n margin: theme.spacing(2, 2, 2, 0),\n padding: theme.spacing(1, 16, 1, 1),\n },\n alwaysPresentContent: {\n padding: theme.spacing(4),\n borderRadius: theme.youwell.shapes.borderRadius,\n },\n toggleableContent: (_c = {\n backgroundColor: \"\".concat(theme.palette.secondary.main, \"20\"),\n padding: theme.spacing(5),\n margin: '0 auto'\n },\n _c[theme.breakpoints.down('xs')] = {\n maxWidth: '100%',\n padding: theme.spacing(2, 1),\n },\n _c),\n radioGroup: {\n display: 'flex',\n padding: theme.spacing(1, 0, 3, 0),\n },\n rowContainer: {\n flexDirection: 'row',\n },\n hoursAndMinutesInput: {\n display: 'flex',\n alignItems: 'center',\n },\n hoursAndMinutesInputHelperText: {\n padding: theme.spacing(0, 2, 0, 1),\n },\n numberOfWakeups: {\n backgroundColor: theme.palette.common.white,\n marginLeft: theme.spacing(1),\n },\n });\n};\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return styles(theme); }, { name: 'LogWakeups' });\nvar numberOfWakeups = [1, 2, 3, 4, 5];\nvar hours = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar minutes = [0, 10, 20, 30, 40, 50];\nvar LogWakeups = function (_a) {\n var _b, _c, _d, _e;\n var values = _a.values, handleValueChange = _a.handleValueChange, disabled = _a.disabled;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var timeValues = (0, dateUtils_1.getTimeValues)((_c = (_b = values.sleepProperties) === null || _b === void 0 ? void 0 : _b.nightWakeupsTotalMinutes) !== null && _c !== void 0 ? _c : 0);\n var handleNumberOfWakeupsChange = function (event) {\n var _a;\n var val = Number(event.target.value) || 0;\n var updated = __assign(__assign({}, values.sleepProperties), { numberOfNightWakeups: val, nightWakeupsTotalMinutes: val === 0 ? 0 : (_a = values.sleepProperties) === null || _a === void 0 ? void 0 : _a.nightWakeupsTotalMinutes });\n handleValueChange('sleepProperties')(updated);\n };\n var handleHoursChange = function (event) {\n var val = Number(event.target.value) || 0;\n var updated = __assign(__assign({}, values.sleepProperties), { nightWakeupsTotalMinutes: val * 60 + timeValues.minutes });\n handleValueChange('sleepProperties')(updated);\n };\n var handleMinutesChange = function (event) {\n var val = Number(event.target.value) || 0;\n var updated = __assign(__assign({}, values.sleepProperties), { nightWakeupsTotalMinutes: timeValues.hours * 60 + val });\n handleValueChange('sleepProperties')(updated);\n };\n var hasNighWakeups = ((_d = values.sleepProperties) === null || _d === void 0 ? void 0 : _d.numberOfNightWakeups) !== undefined && values.sleepProperties.numberOfNightWakeups > 0;\n var hasNoNighWakeups = ((_e = values.sleepProperties) === null || _e === void 0 ? void 0 : _e.numberOfNightWakeups) !== undefined && values.sleepProperties.numberOfNightWakeups === 0;\n return (React.createElement(\"div\", { className: classes.box },\n React.createElement(\"div\", { className: classes.alwaysPresentContent },\n React.createElement(\"div\", { className: classes.entry },\n React.createElement(\"div\", { className: classes.entryLabelFlexWrapper },\n React.createElement(\"div\", { className: classes.textAndIconWrapper },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryLabel }, translate('sleepDiary.nightWakeups')),\n React.createElement(image_1.AwakeSmileyIcon, null))),\n React.createElement(core_1.RadioGroup, { className: (0, classnames_1.default)(classes.radioGroup, classes.rowContainer), onChange: handleNumberOfWakeupsChange },\n React.createElement(core_1.FormControlLabel, { className: (0, classnames_1.default)(classes.yesNoRadioBtns, classes.input), value: 0, control: React.createElement(core_1.Radio, { checked: hasNoNighWakeups }), label: translate('sleepDiary.no'), disabled: disabled }),\n React.createElement(core_1.FormControlLabel, { className: (0, classnames_1.default)(classes.yesNoRadioBtns, classes.input), value: 1, control: React.createElement(core_1.Radio, { checked: hasNighWakeups }), label: translate('sleepDiary.yes'), disabled: disabled })))),\n hasNighWakeups && (React.createElement(\"div\", { className: classes.toggleableContent },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryTitle }, translate('sleepDiary.howManyTimesAwakeAtNight')),\n React.createElement(core_1.RadioGroup, { className: classes.radioGroup, onChange: handleNumberOfWakeupsChange }, numberOfWakeups.map(function (value) {\n var _a;\n return (React.createElement(core_1.FormControlLabel, { className: classes.numberOfWakeups, disabled: disabled, key: value, value: value, control: React.createElement(core_1.Radio, { checked: ((_a = values.sleepProperties) === null || _a === void 0 ? void 0 : _a.numberOfNightWakeups) === value }), label: translate(\"sleepDiary.howOftenAwake.\".concat(value)) }));\n })),\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.entryTitle }, translate('sleepDiary.howLongAwakeAtNight')),\n React.createElement(\"div\", { className: classes.hoursAndMinutesInput },\n React.createElement(core_1.Select, { type: \"number\", className: (0, classnames_1.default)(classes.selectInput, classes.input), value: timeValues.hours, onChange: handleHoursChange, disabled: disabled, disableUnderline: true, MenuProps: {\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'left',\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'left',\n },\n getContentAnchorEl: null,\n } }, hours === null || hours === void 0 ? void 0 : hours.map(function (item) { return (React.createElement(core_1.MenuItem, { className: classes.selectInputMenuItem, key: item, value: item },\n item,\n item === 1 ? (React.createElement(core_1.Typography, { className: classes.hoursAndMinutesInputHelperText, variant: \"body2\" }, translate('time.hour')))\n : (React.createElement(core_1.Typography, { className: classes.hoursAndMinutesInputHelperText, variant: \"body2\" }, translate('time.hours'))))); })),\n React.createElement(core_1.Select, { type: \"number\", className: (0, classnames_1.default)(classes.selectInput, classes.input), value: timeValues.minutes, onChange: handleMinutesChange, disabled: disabled, disableUnderline: true, MenuProps: {\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'left',\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'left',\n },\n getContentAnchorEl: null,\n } }, minutes === null || minutes === void 0 ? void 0 : minutes.map(function (item) { return (React.createElement(core_1.MenuItem, { className: classes.selectInputMenuItem, key: item, value: item },\n item,\n item === 1 ? (React.createElement(core_1.Typography, { className: classes.hoursAndMinutesInputHelperText, variant: \"body2\" }, translate('time.minute')))\n : (React.createElement(core_1.Typography, { className: classes.hoursAndMinutesInputHelperText, variant: \"body2\" }, translate('time.minutes'))))); })))))));\n};\nexports.default = LogWakeups;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar connected_react_router_1 = require(\"connected-react-router\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar icons_1 = require(\"../../../../common/icons\");\nvar urls_1 = __importDefault(require(\"../../../../app/urls\"));\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar store_1 = require(\"../../../../app/store\");\nvar arrayUtils_1 = require(\"../../../../youwell-common/arrayUtils\");\nvar utils_1 = require(\"../utils\");\nvar components_1 = require(\"../../../../common/components\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d, _e, _f;\n return ({\n modalContent: (_a = {},\n _a[theme.breakpoints.down('xs')] = {\n margin: theme.spacing(2, 1),\n },\n _a),\n header: {\n borderLeft: theme.youwell.borders.secondary,\n borderLeftWidth: 4,\n paddingLeft: theme.spacing(2),\n },\n headerTitle: {\n fontWeight: 500,\n },\n infoSection: (_b = {\n marginBottom: theme.spacing(2)\n },\n _b[theme.breakpoints.down('xs')] = {\n marginBottom: theme.spacing(0),\n },\n _b),\n infoSectionText: {\n margin: theme.spacing(0, 0, 2, 2),\n },\n infoSectionTextCaption: {\n fontWeight: 500,\n },\n importanceOfRegistrationInfoText: {\n marginTop: theme.spacing(2),\n },\n standaloneButtons: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n registerButtons: (_c = {\n display: 'inline-block',\n marginTop: theme.spacing(2)\n },\n _c[theme.breakpoints.down('xs')] = {\n width: '100%',\n },\n _c),\n registerButtonsWrapper: (_d = {\n display: 'flex',\n flexWrap: 'wrap'\n },\n _d[theme.breakpoints.down('xs')] = {\n justifyContent: 'center',\n },\n _d),\n missingNightCard: (_e = {\n padding: theme.spacing(3, 2),\n margin: theme.spacing(1),\n width: 200,\n borderRadius: theme.youwell.shapes.borderRadiusFlatter\n },\n _e[theme.breakpoints.down('sm')] = {\n width: 180,\n },\n _e[theme.breakpoints.down('xs')] = {\n width: 260,\n },\n _e),\n lastCard: {\n WebkitMaskImage: '-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,1)), to(rgba(0,0,0,0.3)))',\n },\n missingCardFlexWrapper: {\n display: 'flex',\n },\n missingCardTextFlexWrapper: {\n display: 'flex',\n flexDirection: 'column',\n textTransform: 'capitalize',\n },\n nightText: {\n textTransform: 'capitalize',\n },\n btnSection: (_f = {\n display: 'flex',\n justifyContent: 'flex-end',\n marginTop: theme.spacing(1),\n padding: theme.spacing(1)\n },\n _f[theme.breakpoints.down('xs')] = {\n justifyContent: 'center',\n },\n _f),\n notNowBtn: {\n padding: theme.spacing(2, 6),\n minWidth: 196,\n borderRadius: 40,\n background: theme.palette.common.white,\n '&:hover': {\n background: theme.palette.common.white,\n },\n },\n addIcons: {\n fontSize: 40,\n marginRight: theme.spacing(2),\n },\n registerSleep: {\n width: '100%',\n padding: theme.spacing(6),\n },\n registerSleepFlexWrapper: {\n display: 'flex',\n },\n registerSleepBtnText: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n marginLeft: theme.spacing(2),\n },\n registerSleepBtnCaption: {\n textTransform: 'initial',\n textAlign: 'left',\n },\n });\n}, { name: 'RegisterSleepMenu' });\nvar RegisterSleepMenu = function (_a) {\n var isModal = _a.isModal, onClick = _a.onClick, numberOfNightCards = _a.numberOfNightCards;\n var translate = (0, translate_1.default)();\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var _b = React.useState(false), showSleepMenu = _b[0], setShowSleepMenu = _b[1];\n var sleepEntries = (0, store_1.useYouwellSelector)(function (state) { return (0, arrayUtils_1.sortByDateAscending)(state.sleepDataStore.entries, 'date') || []; });\n var sleepLookup = (0, utils_1.getSleepLookup)(sleepEntries);\n var missingNights = (0, utils_1.missingRegistrationsLastWeek)(sleepLookup);\n var goToLogDay = function (night) {\n if (onClick) {\n onClick();\n }\n dispatch((0, connected_react_router_1.push)(\"\".concat(urls_1.default.inside.pages.sleepDiary, \"/log/\").concat(night)));\n };\n var closeMenu = function () {\n setShowSleepMenu(false);\n };\n return (React.createElement(React.Fragment, null, isModal ? (React.createElement(React.Fragment, null,\n (missingNights === null || missingNights === void 0 ? void 0 : missingNights.length) > 0 && (React.createElement(core_1.Button, { className: classes.registerSleep, variant: \"contained\", color: \"primary\", onClick: function () { return setShowSleepMenu(true); } },\n React.createElement(\"div\", { className: classes.registerSleepFlexWrapper },\n React.createElement(icons_1.AddIcon, { className: classes.addIcons }),\n React.createElement(\"div\", { className: classes.registerSleepBtnText },\n React.createElement(core_1.Typography, { variant: \"h6\" }, translate('sleepDiary.registerSleep')),\n React.createElement(core_1.Typography, { className: classes.registerSleepBtnCaption, variant: \"body2\" }, (missingNights === null || missingNights === void 0 ? void 0 : missingNights.length) > 1\n ? \"\".concat(missingNights === null || missingNights === void 0 ? void 0 : missingNights.length, \" \").concat(translate('sleepDiary.missingRegistrations'), \" \")\n : \"\".concat(translate('sleepDiary.missingRegistration'))))))),\n React.createElement(components_1.OverlayModal, { open: showSleepMenu && (missingNights === null || missingNights === void 0 ? void 0 : missingNights.length) > 0, onClose: closeMenu },\n React.createElement(\"div\", { className: classes.modalContent },\n React.createElement(\"div\", { className: classes.header },\n React.createElement(core_1.Typography, { variant: \"h5\", className: classes.headerTitle }, translate('sleepDiary.registerSleep')),\n React.createElement(core_1.Typography, { className: classes.infoSectionTextCaption, variant: \"body1\" }, (missingNights === null || missingNights === void 0 ? void 0 : missingNights.length) > 1\n ? \"\".concat(missingNights.length, \" \").concat(translate('sleepDiary.missingRegistrations'), \" \")\n : \"\".concat(translate('sleepDiary.missingRegistration'), \" \"))),\n React.createElement(\"div\", { className: classes.infoSection },\n React.createElement(\"div\", { className: classes.infoSectionText },\n React.createElement(core_1.Typography, { className: classes.importanceOfRegistrationInfoText }, translate('sleepDiary.yourRegistrationIsImportantToUs')),\n missingNights && missingNights.length === 1 ? (React.createElement(core_1.Typography, null, translate('sleepDiary.easyToForgetDetailsOneNight'))) : (React.createElement(core_1.Typography, null, translate('sleepDiary.easyToForgetDetails'))))),\n React.createElement(\"div\", { className: classes.registerButtons },\n React.createElement(\"div\", { className: classes.registerButtonsWrapper }, missingNights === null || missingNights === void 0 ? void 0 : missingNights.slice(0, numberOfNightCards).map(function (night, i) {\n var _a;\n var _b;\n return (React.createElement(core_1.Button, { key: night, className: (0, classnames_1.default)(classes.missingNightCard, (_a = {}, _a[classes.lastCard] = i === numberOfNightCards - 1, _a)), variant: \"contained\", color: i ? 'primary' : 'secondary', component: react_router_dom_1.Link, to: \"\".concat(urls_1.default.inside.pages.sleepDiary, \"/log/\").concat(night) },\n React.createElement(\"div\", { className: classes.missingCardFlexWrapper },\n React.createElement(icons_1.AddIcon, { className: classes.addIcons }),\n React.createElement(\"div\", { className: classes.missingCardTextFlexWrapper },\n React.createElement(core_1.Typography, { variant: \"h6\" }, (0, dateUtils_1.datestamp)(night)),\n React.createElement(core_1.Typography, { variant: \"body1\", color: i ? 'secondary' : 'primary', className: classes.nightText }, \"\".concat(translate(\"time.weekdays_short.\".concat((_b = (0, dateUtils_1.getLocalDate)(night)) === null || _b === void 0 ? void 0 : _b.getDay())), \".\"))))));\n })),\n React.createElement(\"div\", { className: classes.btnSection },\n React.createElement(core_1.Button, { className: classes.notNowBtn, variant: \"outlined\", color: \"secondary\", onClick: closeMenu }, translate('sleepDiary.notNow')))))))) : (React.createElement(\"div\", { className: classes.standaloneButtons }, missingNights === null || missingNights === void 0 ? void 0 : missingNights.slice(0, numberOfNightCards).map(function (night, i) {\n var _a;\n var _b;\n return (React.createElement(core_1.Button, { key: night, className: (0, classnames_1.default)(classes.missingNightCard, (_a = {}, _a[classes.lastCard] = i === numberOfNightCards - 1, _a)), variant: \"contained\", color: \"primary\", onClick: function () { return goToLogDay(night); } },\n React.createElement(\"div\", { className: classes.missingCardFlexWrapper },\n React.createElement(icons_1.AddIcon, { className: classes.addIcons }),\n React.createElement(\"div\", { className: classes.missingCardTextFlexWrapper },\n React.createElement(core_1.Typography, { variant: \"h6\" }, (0, dateUtils_1.datestamp)(night)),\n React.createElement(core_1.Typography, { variant: \"body1\", color: i ? 'secondary' : 'primary', className: classes.nightText }, \"\".concat(translate(\"time.weekdays_short.\".concat((_b = (0, dateUtils_1.getLocalDate)(night)) === null || _b === void 0 ? void 0 : _b.getDay())), \".\"))))));\n })))));\n};\nRegisterSleepMenu.defaultProps = {\n isModal: false,\n onClick: null,\n};\nexports.default = RegisterSleepMenu;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar constants_1 = require(\"../constants\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar image_1 = require(\"../../../../common/image\");\nvar urls_1 = __importDefault(require(\"../../../../app/urls\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n marginTop: theme.spacing(2),\n },\n headerCell: {\n color: theme.palette.primary.main,\n padding: 0,\n },\n padCell: {\n minWidth: 30,\n height: theme.spacing(3),\n },\n noRegistrationsHeader: {\n border: 'none',\n },\n dateLink: {\n display: 'inline-block',\n textAlign: 'left',\n padding: theme.spacing(0.5, 1),\n width: '100%',\n borderRadius: theme.youwell.shapes.borderRadiusFlatter,\n '&:hover': {\n background: theme.youwell.colors.secondaryBackground,\n boxShadow: theme.shadows[2],\n },\n },\n headerDay: {\n textTransform: 'capitalize',\n },\n labelSection: {\n textAlign: 'center',\n fontWeight: 500,\n width: 200,\n },\n valueSection: {\n textAlign: 'center',\n borderLeft: theme.youwell.borders.dim,\n },\n noPadding: {\n padding: 0,\n },\n labelWrapper: {\n display: 'flex',\n justifyContent: 'end',\n alignItems: 'center',\n },\n sleepEfficiency: {\n width: 'calc(100% - 16px)',\n display: 'inline-block',\n borderRadius: theme.youwell.shapes.borderRadiusFlatter,\n color: theme.palette.common.white,\n margin: theme.spacing(1),\n padding: theme.spacing(1, 0),\n '&$high': {\n background: theme.youwell.colors.highScore,\n },\n '&$mid': {\n background: theme.youwell.colors.midScore,\n },\n '&$low': {\n background: theme.youwell.colors.lowScore,\n },\n },\n high: {},\n mid: {},\n low: {},\n divider: {\n borderBottom: theme.youwell.borders.normal,\n },\n icons: {\n marginLeft: theme.spacing(2),\n verticalAlign: 'middle',\n },\n actionRow: {\n cursor: 'pointer',\n background: theme.youwell.colors.defaultBackground,\n '&:hover': {\n background: theme.youwell.colors.secondaryBackground,\n },\n },\n}); }, { name: 'SleepDetailsTable' });\nvar SleepDetailsTable = function (_a) {\n var data = _a.data, hasRegistrations = _a.hasRegistrations;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var _b = React.useState(false), showFullDetails = _b[0], setShowFullDetails = _b[1];\n var getQualityScore = function (day) {\n var score = Number((day.totalSleepMinutes || 0) / (day.totalBedMinutes || 1));\n if (score >= 0.85)\n return classes.high;\n if (score >= 0.80)\n return classes.mid;\n return classes.low;\n };\n return (React.createElement(core_1.Table, { className: classes.root },\n React.createElement(core_1.TableHead, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.headerCell }),\n data.map(function (day) {\n var _a;\n var _b;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.labelSection, classes.headerCell, (_a = {}, _a[classes.noRegistrationsHeader] = !hasRegistrations, _a)) },\n React.createElement(core_1.ButtonBase, { className: classes.dateLink, component: react_router_dom_1.Link, to: \"\".concat(urls_1.default.inside.pages.sleepDiary, \"/log/\").concat(day.isoDateString), title: translate('sleepDiary.editDetailsFor', { date: (0, dateUtils_1.longDate)(day.isoDateString, translate) }) },\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"inherit\", className: classes.headerDay }, translate(\"time.weekdays_short.\".concat((_b = (0, dateUtils_1.getLocalDate)(day.isoDateString)) === null || _b === void 0 ? void 0 : _b.getDay()))),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"inherit\" }, (0, dateUtils_1.shortDate)(day.isoDateString, translate, false, false, true)))));\n }))),\n React.createElement(core_1.TableBody, null, !hasRegistrations ? (React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.padCell }),\n React.createElement(core_1.TableCell, { colSpan: data.length }),\n React.createElement(core_1.TableCell, { className: classes.padCell }))) : (React.createElement(React.Fragment, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.sleepQuality')),\n data.map(function (day) {\n var _a, _b;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection, classes.noPadding) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.totalSleepMinutes) && ((_b = day.entry) === null || _b === void 0 ? void 0 : _b.totalBedMinutes) ? (React.createElement(\"span\", { className: (0, classnames_1.default)(classes.sleepEfficiency, getQualityScore(day.entry)) }, \"\".concat(Number(((day.entry.totalSleepMinutes / day.entry.totalBedMinutes)) * 100).toFixed(0), \"%\"))) : '-'));\n })),\n showFullDetails ? (React.createElement(React.Fragment, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.totalSleepMinutes')),\n data.map(function (day) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: classes.valueSection }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.totalSleepMinutes) ? ((0, dateUtils_1.hourCount)(day.entry.totalSleepMinutes, translate)) : '-'));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.labelSection, classes.divider) },\n React.createElement(\"div\", { className: classes.labelWrapper },\n translate('sleepDiary.totalBedMinutes'),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(icons_1.SleepIcon, { className: classes.icons })))),\n data.map(function (day) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection, classes.divider) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.totalBedMinutes) ? (0, dateUtils_1.hourCount)(day.entry.totalBedMinutes, translate) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.dayView.daytimeActivityRatings')),\n data.map(function (day) {\n var _a, _b;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: classes.valueSection }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.daytimeActivityRating) ? (translate(\"\".concat((_b = constants_1.daytimeActivityRatings.find(function (d) { var _a; return d.id === ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.daytimeActivityRating); })) === null || _b === void 0 ? void 0 : _b.label))) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.dayTimeNaps')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.SleepSmileyIcon, null)))),\n data.map(function (day) {\n var _a, _b, _c;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: classes.valueSection }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.daytimeNaps) && day.entry.daytimeNaps.length > 0 ? day.entry.daytimeNaps.map(function (nap) {\n var _a;\n return (React.createElement(\"div\", { key: (_a = nap.sleepTime) === null || _a === void 0 ? void 0 : _a.toString() }, nap.wakeTime && nap.sleepTime\n ? (React.createElement(React.Fragment, null,\n React.createElement(\"span\", null, \"\".concat((0, dateUtils_1.hourCount)((0, dateUtils_1.getNumberOfMinutes)(nap.sleepTime, nap.wakeTime), translate), \" \")),\n React.createElement(\"span\", null, \"\".concat(translate('sleepDiary.dayView.at'), \" \").concat((0, dateUtils_1.getTimePartForInput)(nap.sleepTime))))) : (React.createElement(\"span\", null, \" - \".concat(translate('sleepDiary.dayView.at'), \" \").concat((0, dateUtils_1.getTimePartForInput)(nap.sleepTime))))));\n }) : ((_c = (_b = day.entry) === null || _b === void 0 ? void 0 : _b.sleepProperties) === null || _c === void 0 ? void 0 : _c.hasDaytimeNaps) === false ? translate('sleepDiary.none') : '-'));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.labelSection, classes.divider) },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null,\n React.createElement(\"div\", null, translate('sleepDiary.dayView.sleepMedication')),\n React.createElement(\"div\", null, translate('sleepDiary.dayView.alcohol'))),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.MedicineIcon, null)))),\n data.map(function (day) {\n var _a, _b;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection, classes.divider) }, ((_b = (_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepProperties) === null || _b === void 0 ? void 0 : _b.sleepMedication) ? (day.entry.sleepProperties.sleepMedication) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.gotToBed')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.MoonIcon, null)))),\n data.map(function (day) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.bedTime) ? (0, dateUtils_1.getTimePartForInput)(day.entry.bedTime) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.tiredToSleep')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.SleepSmileyIcon, null)))),\n data.map(function (day) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepAtemptTime) ? (0, dateUtils_1.getTimePartForInput)(day.entry.sleepAtemptTime) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.fellAsleep')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.SleepSmileyIcon, null)))),\n data.map(function (day) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepTime) ? (0, dateUtils_1.getTimePartForInput)(day.entry.sleepTime) : '-'));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.awake')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.AwakeSmileyIcon, null)))),\n data.map(function (day) {\n var _a, _b, _c;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection) }, ((_b = (_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepProperties) === null || _b === void 0 ? void 0 : _b.numberOfNightWakeups) ? (\"\".concat((_c = day.entry.sleepProperties) === null || _c === void 0 ? void 0 : _c.numberOfNightWakeups, \" \").concat(translate('sleepDiary.dayView.times'))) : '-'));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: (0, classnames_1.default)(classes.labelSection, classes.divider) },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.nightWakeupsTotalMinutes')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.AwakeSmileyIcon, null)))),\n data.map(function (day) {\n var _a, _b;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection, classes.divider) }, ((_b = (_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepProperties) === null || _b === void 0 ? void 0 : _b.nightWakeupsTotalMinutes) ? (\"\".concat(day.entry.sleepProperties.nightWakeupsTotalMinutes, \" \").concat(translate('sleepDiary.dayView.min'))) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.youWokeUp')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(icons_1.SunIcon, null)))),\n data.map(function (day) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.wakeTime) ? ((0, dateUtils_1.getTimePartForInput)(day.entry.wakeTime)) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { align: \"center\", className: classes.labelSection },\n React.createElement(\"div\", { className: classes.labelWrapper },\n React.createElement(\"div\", null, translate('sleepDiary.dayView.youGotOutOfBed')),\n React.createElement(\"span\", { className: classes.icons },\n React.createElement(image_1.WakeUpIcon, null)))),\n data.map(function (day) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.outOfBedTime) ? ((0, dateUtils_1.getTimePartForInput)(day.entry.outOfBedTime)) : ('-')));\n })),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.labelSection }, translate('sleepDiary.yourSleepRating')),\n data.map(function (day) {\n var _a, _b;\n return (React.createElement(core_1.TableCell, { key: day.isoDateString, className: (0, classnames_1.default)(classes.valueSection) }, ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepRating) ? (translate(((_b = constants_1.sleepRatings.find(function (d) { var _a; return ((_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepRating) === d.id; })) === null || _b === void 0 ? void 0 : _b.label) || '', undefined, { onMissingTranslation: function () { var _a, _b; return ((_b = (_a = day.entry) === null || _a === void 0 ? void 0 : _a.sleepRating) === null || _b === void 0 ? void 0 : _b.toString()) || ''; } })) : ('-')));\n })),\n React.createElement(core_1.TableRow, { className: classes.actionRow },\n React.createElement(core_1.TableCell, { colSpan: data.length + 1, onClick: function () { return setShowFullDetails(false); }, align: \"center\" },\n React.createElement(core_1.Typography, { variant: \"button\" }, translate('sleepDiary.hideDetails')))))) : (React.createElement(core_1.TableRow, { className: classes.actionRow },\n React.createElement(core_1.TableCell, { colSpan: data.length + 1, onClick: function () { return setShowFullDetails(true); }, align: \"center\" },\n React.createElement(core_1.Typography, { variant: \"button\" }, translate('sleepDiary.showFullDetails'))))))))));\n};\nexports.default = SleepDetailsTable;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar recharts_1 = require(\"recharts\");\nvar date_fns_1 = require(\"date-fns\");\nvar lodash_1 = require(\"lodash\");\nvar browserUtils_1 = require(\"../../../../youwell-common/browserUtils\");\nvar arrayUtils_1 = require(\"../../../../youwell-common/arrayUtils\");\nvar store_1 = require(\"../../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar dateUtils_1 = require(\"../../../../youwell-common/dateUtils\");\nvar utils_1 = require(\"../utils\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a;\n return (0, core_1.createStyles)({\n detailTable: {\n marginBottom: theme.spacing(4),\n },\n detailTableHeaderCell: {},\n chartTitle: {\n marginBottom: theme.spacing(2),\n },\n chart: (_a = {\n margin: theme.spacing(4)\n },\n _a[theme.breakpoints.down('xs')] = {\n margin: theme.spacing(2, 0),\n },\n _a),\n customTooltip: {\n backgroundColor: theme.youwell.colors.secondaryBackground,\n padding: theme.spacing(2),\n borderRadius: theme.youwell.shapes.borderRadius,\n },\n tooltipHeader: {\n textTransform: 'capitalize',\n },\n chartDescription: {\n margin: theme.spacing(2, 2, 4),\n },\n });\n}, { name: 'WeekAverageDetails' });\nvar generateWeeklySummaryGraphData = function (sleepEntries) {\n var sleepLookup = (0, utils_1.getSleepLookup)(sleepEntries);\n var summary = sleepEntries === null || sleepEntries === void 0 ? void 0 : sleepEntries.reduce(function (prev, sleepEntry) {\n var _a;\n var weekNumber = (0, dateUtils_1.getWeekNumberFromDate)(new Date(sleepEntry.date));\n var yearWeek = \"\".concat(weekNumber, \" - \").concat((0, date_fns_1.getYear)(new Date(sleepEntry.date)));\n var selectedWeek = { weekNo: weekNumber, start: (0, date_fns_1.startOfISOWeek)(new Date(sleepEntry.date)), end: (0, date_fns_1.endOfISOWeek)(new Date(sleepEntry.date)) };\n var selectedWeekEntries = (0, utils_1.getRegistrationsForWeek)(sleepLookup, selectedWeek);\n var currentWeekAverage = (0, utils_1.getWeekAverage)(selectedWeekEntries);\n if (currentWeekAverage.totalSleepMinutes && currentWeekAverage.sleepQuality && currentWeekAverage.sleepRating) {\n currentWeekAverage.tick = new Date(sleepEntry.date).getTime();\n currentWeekAverage.week = weekNumber;\n return __assign(__assign({}, prev), (_a = {}, _a[yearWeek] = currentWeekAverage, _a));\n }\n return prev;\n }, {});\n var sortedSummary = (0, lodash_1.sortBy)(Object.values(summary || []), 'tick');\n var graphData = sortedSummary.map(function (d) { return ({\n week: d.week,\n totalSleepMinutes: (d.totalSleepMinutes / d.count) / 60,\n sleepQuality: ((d.sleepRating / d.count) / 5) * 100,\n sleepEfficiency: d.sleepQuality / d.count,\n }); });\n return graphData;\n};\nvar WeekAverageDetails = function (_a) {\n var weekAverage = _a.weekAverage;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var theme = (0, core_1.useTheme)();\n var sleepEntries = (0, store_1.useYouwellSelector)(function (state) { return (0, arrayUtils_1.sortByDateAscending)(state.sleepDataStore.entries, 'date') || []; });\n var width = (0, browserUtils_1.useWindowSize)().width;\n var weeklySleepSummary = generateWeeklySummaryGraphData(sleepEntries);\n var WeekAverageGraphTooltip = function (_a) {\n var _b, _c, _d, _e, _f, _g;\n var active = _a.active, payload = _a.payload;\n if (active && payload && payload.length) {\n return (React.createElement(\"div\", { className: classes.customTooltip },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.tooltipHeader }, \"\".concat(translate('time.week'), \" \").concat((_c = (_b = payload[0]) === null || _b === void 0 ? void 0 : _b.payload) === null || _c === void 0 ? void 0 : _c.week)),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"primary\" }, \"\".concat(translate('sleepDiary.totalSleepMinutes'), \": \").concat((0, dateUtils_1.hourCount)(((_d = payload[0].payload) === null || _d === void 0 ? void 0 : _d.totalSleepMinutes) * 60, translate, true))),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"primary\" }, \"\".concat(translate('sleepDiary.yourSleepRating'), \": \").concat(Math.round(5 * ((_e = payload[0].payload) === null || _e === void 0 ? void 0 : _e.sleepQuality) / 10) / 10)),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"primary\" }, \"\".concat(translate('sleepDiary.sleepEfficiency'), \": \").concat(Math.round((_g = (_f = payload[0]) === null || _f === void 0 ? void 0 : _f.payload) === null || _g === void 0 ? void 0 : _g.sleepEfficiency), \"%\"))));\n }\n return null;\n };\n return (React.createElement(\"div\", null,\n React.createElement(core_1.Table, { className: classes.detailTable },\n React.createElement(core_1.TableBody, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.detailTableHeaderCell }, translate('sleepDiary.totalSleepMinutes')),\n React.createElement(core_1.TableCell, { align: \"right\" }, (0, dateUtils_1.hourCount)(weekAverage.totalSleepMinutes / weekAverage.count, translate))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.detailTableHeaderCell }, translate('sleepDiary.awakeBedMinutes')),\n React.createElement(core_1.TableCell, { align: \"right\" }, (0, dateUtils_1.hourCount)(weekAverage.awakeBedMinutes / weekAverage.count, translate))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.detailTableHeaderCell }, translate('sleepDiary.totalBedMinutes')),\n React.createElement(core_1.TableCell, { align: \"right\" }, (0, dateUtils_1.hourCount)(weekAverage.totalBedMinutes / weekAverage.count, translate))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.detailTableHeaderCell }, translate('sleepDiary.sleepQuality')),\n React.createElement(core_1.TableCell, { align: \"right\" }, \"\".concat(Math.round(weekAverage.sleepQuality / weekAverage.count), \" %\"))),\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.detailTableHeaderCell },\n translate('sleepDiary.yourSleepRating'),\n React.createElement(\"br\", null),\n React.createElement(core_1.Typography, { variant: \"caption\" }, translate('sleepDiary.sleepRatingDescription'))),\n React.createElement(core_1.TableCell, { align: \"right\" }, \"\".concat((weekAverage.sleepRating / weekAverage.count).toFixed(1)))))),\n React.createElement(core_1.Typography, { variant: \"h6\", className: classes.chartTitle }, translate('sleepDiary.weeklyProgression')),\n React.createElement(\"div\", { className: classes.chart },\n React.createElement(recharts_1.ComposedChart, { width: (width && width * 0.7) || 600, height: 300, data: weeklySleepSummary, margin: {\n top: 5,\n bottom: 5,\n } },\n React.createElement(recharts_1.CartesianGrid, { vertical: false }),\n React.createElement(recharts_1.XAxis, { dataKey: \"week\", tickFormatter: function (weekNumber) { return \"\".concat(translate('time.week'), \" \").concat(weekNumber); }, tickMargin: 8 }),\n React.createElement(recharts_1.YAxis, { yAxisId: \"left\", orientation: \"left\", tickFormatter: function (decimal) { return \"\".concat(Math.round(decimal), \"%\"); } }),\n React.createElement(recharts_1.Tooltip, { content: React.createElement(WeekAverageGraphTooltip, null) }),\n React.createElement(recharts_1.Line, { strokeWidth: 4, stroke: theme.youwell.colors.primary, dot: { fill: theme.youwell.colors.primary, r: 5 }, yAxisId: \"left\", type: \"monotone\", dataKey: \"sleepEfficiency\", name: translate('sleepDiary.sleepQuality') }),\n React.createElement(recharts_1.Legend, { verticalAlign: \"top\", wrapperStyle: { top: -20 } }))),\n React.createElement(core_1.Typography, { variant: \"body2\", color: \"textSecondary\", className: classes.chartDescription }, translate('sleepDiary.hooverToSeeDetails'))));\n};\nexports.default = WeekAverageDetails;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultDaytimeWakeTime = exports.defaultDaytimeSleepTime = exports.defaultWakeTime = exports.defaultSleepTime = exports.daytimeActivityRatings = exports.sleepRatings = void 0;\nexports.sleepRatings = [\n { id: 1, label: 'sleepDiary.rating.1' },\n { id: 2, label: 'sleepDiary.rating.2' },\n { id: 3, label: 'sleepDiary.rating.3' },\n { id: 4, label: 'sleepDiary.rating.4' },\n { id: 5, label: 'sleepDiary.rating.5' },\n];\nexports.daytimeActivityRatings = [\n { id: 1, label: 'sleepDiary.activityRating.veryLow' },\n { id: 2, label: 'sleepDiary.activityRating.low' },\n { id: 3, label: 'sleepDiary.activityRating.medium' },\n { id: 4, label: 'sleepDiary.activityRating.some' },\n { id: 5, label: 'sleepDiary.activityRating.very' },\n];\nexports.defaultSleepTime = '22:00';\nexports.defaultWakeTime = '07:00';\nexports.defaultDaytimeSleepTime = '13:00';\nexports.defaultDaytimeWakeTime = '13:30';\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getWeekAverage = exports.getSleepLookup = exports.getRegistrationsForWeek = exports.missingRegistrationsLastWeek = exports.dayTimeNapsUnValidItems = exports.validateDayTimeNapInputs = exports.validateTimeLaterThanWithActualDate = exports.getTimeWithActualDate = exports.validateTimeBeforeThan = exports.validateTimeLaterThan = exports.getTimeWithCorrectDate = exports.sleepLoggingItemNames = exports.SleepLoggingType = void 0;\nvar objectUtils_1 = require(\"../../../youwell-common/objectUtils\");\nvar arrayUtils_1 = require(\"../../../youwell-common/arrayUtils\");\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar SleepLoggingType;\n(function (SleepLoggingType) {\n SleepLoggingType[SleepLoggingType[\"dayLogging\"] = 0] = \"dayLogging\";\n SleepLoggingType[SleepLoggingType[\"nightLogging\"] = 1] = \"nightLogging\";\n})(SleepLoggingType = exports.SleepLoggingType || (exports.SleepLoggingType = {}));\nexports.sleepLoggingItemNames = {\n sleepTime: 'sleepTime',\n wakeTime: 'wakeTime',\n};\nvar getTimeWithCorrectDate = function (time, date, loggingType) {\n var timeString = (0, dateUtils_1.getTimePartForInput)(time);\n if (!timeString) {\n return timeString;\n }\n if (!date) {\n return timeString;\n }\n var isoDateString = (0, dateUtils_1.isoDate)(date);\n if (Number(timeString.substring(0, 2)) >= 17) { // Evening (day before) for hours after 17:00\n isoDateString = (0, dateUtils_1.isoDate)((0, dateUtils_1.addDays)(date, -1));\n }\n if (loggingType === SleepLoggingType.nightLogging && Number(timeString.substring(0, 2)) >= 15) { // Hours from 15:00-23:00 set to be the day before\n isoDateString = (0, dateUtils_1.isoDate)((0, dateUtils_1.addDays)(date, -1));\n }\n return \"\".concat(isoDateString, \"T\").concat(timeString);\n};\nexports.getTimeWithCorrectDate = getTimeWithCorrectDate;\nvar validateTimeLaterThan = function (valueToCompare, date, loggingType) { return function (value) {\n if (valueToCompare) {\n return new Date((0, exports.getTimeWithCorrectDate)(value, date, loggingType)) >= new Date((0, exports.getTimeWithCorrectDate)(valueToCompare, date, loggingType));\n }\n return true;\n}; };\nexports.validateTimeLaterThan = validateTimeLaterThan;\nvar validateTimeBeforeThan = function (valueToCompare, date, loggingType) { return function (value) {\n if (valueToCompare) {\n return new Date((0, exports.getTimeWithCorrectDate)(value, date, loggingType)) <= new Date((0, exports.getTimeWithCorrectDate)(valueToCompare, date, loggingType));\n }\n return true;\n}; };\nexports.validateTimeBeforeThan = validateTimeBeforeThan;\nvar getTimeWithActualDate = function (time, date) {\n var timeString = (0, dateUtils_1.getTimePartForInput)(time);\n if (!timeString) {\n return '';\n }\n if (!date) {\n return timeString;\n }\n return \"\".concat((0, dateUtils_1.isoDate)(date), \"T\").concat(timeString);\n};\nexports.getTimeWithActualDate = getTimeWithActualDate;\n// eslint-disable-next-line arrow-body-style\nvar validateTimeLaterThanWithActualDate = function (valueToCompare, date, loggingType) { return function (value) {\n return new Date((0, exports.getTimeWithActualDate)(value, date)) >= new Date((0, exports.getTimeWithCorrectDate)(valueToCompare, date, loggingType));\n}; };\nexports.validateTimeLaterThanWithActualDate = validateTimeLaterThanWithActualDate;\nvar validateDayTimeNapInputs = function (i, date, daytimeNaps) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n var validation = { sleep: true, wake: true };\n if (!daytimeNaps) {\n return validation;\n }\n var sleepTime = (_b = (_a = daytimeNaps[i]) === null || _a === void 0 ? void 0 : _a.sleepTime) !== null && _b !== void 0 ? _b : null;\n var nextSleepTime = (_d = (_c = daytimeNaps[i + 1]) === null || _c === void 0 ? void 0 : _c.sleepTime) !== null && _d !== void 0 ? _d : null;\n var wakeTime = (_f = (_e = daytimeNaps[i]) === null || _e === void 0 ? void 0 : _e.wakeTime) !== null && _f !== void 0 ? _f : null;\n var prevWakeTime = (_h = (_g = daytimeNaps[i - 1]) === null || _g === void 0 ? void 0 : _g.wakeTime) !== null && _h !== void 0 ? _h : null;\n if (sleepTime) {\n var isLaterThanPrevDaytimeNapWakeTime = prevWakeTime ? (0, exports.validateTimeLaterThan)(prevWakeTime, date, SleepLoggingType.dayLogging)(sleepTime) : true;\n var isLaterThanCurrWakeTime = wakeTime ? (0, exports.validateTimeLaterThan)(wakeTime, date, SleepLoggingType.dayLogging)(sleepTime) : false;\n validation.sleep = isLaterThanPrevDaytimeNapWakeTime && !isLaterThanCurrWakeTime;\n }\n if (wakeTime) {\n var isLaterThanNextDaytimeNapSleepTime = nextSleepTime ? (0, exports.validateTimeLaterThan)(nextSleepTime, date, SleepLoggingType.dayLogging)(wakeTime) : false;\n var isLaterThanCurrDaytimeNapSleepTime = sleepTime ? (0, exports.validateTimeLaterThan)(sleepTime, date, SleepLoggingType.dayLogging)(wakeTime) : true;\n validation.wake = isLaterThanCurrDaytimeNapSleepTime && !isLaterThanNextDaytimeNapSleepTime;\n }\n return validation;\n};\nexports.validateDayTimeNapInputs = validateDayTimeNapInputs;\nvar dayTimeNapsUnValidItems = function (date, daytimeNaps) {\n var _a;\n var validationList = daytimeNaps === null || daytimeNaps === void 0 ? void 0 : daytimeNaps.map(function (dayTimeNap, index) { return ({ index: index, validation: (0, exports.validateDayTimeNapInputs)(index, date, daytimeNaps) }); });\n return (_a = validationList === null || validationList === void 0 ? void 0 : validationList.filter(function (d) { return !d.validation.sleep || !d.validation.wake; })) !== null && _a !== void 0 ? _a : [];\n};\nexports.dayTimeNapsUnValidItems = dayTimeNapsUnValidItems;\nvar missingRegistrationsLastWeek = function (sleepLookup) {\n var currentDate = (0, dateUtils_1.addDays)(null, -6);\n var missingEntries = [];\n while (currentDate <= (0, dateUtils_1.tomorrow)()) {\n var d = (0, dateUtils_1.isoDate)(currentDate);\n if (!sleepLookup[d] || !(sleepLookup[d].skipped || sleepLookup[d].completed)) {\n missingEntries.push(d);\n }\n currentDate = (0, dateUtils_1.addDays)(currentDate, 1);\n }\n return (0, arrayUtils_1.reverse)(missingEntries);\n};\nexports.missingRegistrationsLastWeek = missingRegistrationsLastWeek;\nvar getRegistrationsForWeek = function (sleepLookup, week) {\n var currentDate = week.start;\n var entries = [];\n while (currentDate < week.end) {\n var d = (0, dateUtils_1.isoDateWithoutTimezone)(currentDate);\n if (sleepLookup[d]) {\n entries.push(sleepLookup[d]);\n }\n else {\n entries.push({\n isoDateString: d,\n completed: false,\n partial: false,\n skipped: false,\n evening: false,\n night: false,\n });\n }\n currentDate = (0, dateUtils_1.addDays)(currentDate, 1);\n }\n return entries;\n};\nexports.getRegistrationsForWeek = getRegistrationsForWeek;\nvar getSleepLookup = function (sleepEntries) { return sleepEntries.reduce(function (prev, curr) {\n var _a;\n var _b, _c, _d;\n return (__assign(__assign({}, prev), (_a = {}, _a[(0, dateUtils_1.isoDate)(curr.date)] = {\n isoDateString: (0, dateUtils_1.isoDate)(curr.date),\n entry: curr,\n completed: curr.totalBedMinutes && curr.totalSleepMinutes,\n partial: !(curr.daytimeActivityRating && (0, objectUtils_1.hasValue)((_b = curr.sleepProperties) === null || _b === void 0 ? void 0 : _b.hasDaytimeNaps) && curr.bedTime && curr.sleepAtemptTime && curr.sleepTime && (0, objectUtils_1.hasValue)((_c = curr.sleepProperties) === null || _c === void 0 ? void 0 : _c.numberOfNightWakeups) && curr.outOfBedTime && curr.wakeTime && curr.sleepRating),\n skipped: !!((_d = curr.sleepProperties) === null || _d === void 0 ? void 0 : _d.userSkippedRegistering),\n evening: curr.bedTime || curr.sleepAtemptTime || curr.sleepTime,\n night: curr.outOfBedTime || curr.wakeTime,\n }, _a)));\n}, {}) || {}; };\nexports.getSleepLookup = getSleepLookup;\nvar getWeekAverage = function (sleepEntries) { return sleepEntries.reduce(function (prev, curr) {\n var _a, _b, _c, _d, _e;\n if (curr.entry && curr.completed) {\n return {\n start: prev.start || curr.isoDateString,\n end: curr.isoDateString,\n count: prev.count + 1,\n totalSleepMinutes: prev.totalSleepMinutes + ((_a = curr.entry.totalSleepMinutes) !== null && _a !== void 0 ? _a : 0),\n totalBedMinutes: prev.totalBedMinutes + ((_b = curr.entry.totalBedMinutes) !== null && _b !== void 0 ? _b : 0),\n awakeBedMinutes: prev.awakeBedMinutes + ((_c = curr.entry.awakeBedMinutes) !== null && _c !== void 0 ? _c : 0),\n sleepQuality: prev.sleepQuality + ((_d = curr.entry.sleepQuality) !== null && _d !== void 0 ? _d : 0),\n sleepRating: prev.sleepRating + ((_e = curr.entry.sleepRating) !== null && _e !== void 0 ? _e : 0),\n };\n }\n return __assign(__assign({}, prev), { start: prev.start || curr.isoDateString, end: curr.isoDateString });\n}, {\n count: 0,\n totalSleepMinutes: 0,\n totalBedMinutes: 0,\n awakeBedMinutes: 0,\n sleepQuality: 0,\n sleepRating: 0,\n}); };\nexports.getWeekAverage = getWeekAverage;\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { getTranslate } from 'react-localize-redux';\r\nimport {\r\n Route, Switch,\r\n} from 'react-router-dom';\r\n\r\nimport urls from '../../app/urls';\r\nimport { PageNotFound } from '../../youwell-common/components';\r\n\r\nimport PreviewTask from './PreviewTask';\r\nimport LoadPreviewTask from './components/LoadPreviewTask';\r\nimport { InternalLinkLoader, Layout } from '../../common/components';\r\nimport { parseInternalLink } from '../../common/taskContentUtils';\r\n\r\nclass Index extends React.Component {\r\n getLinkUrl = (link) => {\r\n const { taskOrModuleId, hash } = parseInternalLink(link);\r\n return `${urls.preview.home}/${taskOrModuleId}${hash}`;\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nIndex.propTypes = {\r\n translate: PropTypes.func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n translate: getTranslate(state.localize),\r\n});\r\n\r\nexport default connect(mapStateToProps)(Index);\r\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { connect } from 'react-redux';\r\nimport { getTranslate } from 'react-localize-redux';\r\nimport { bindActionCreators } from 'redux';\r\nimport { Visibility } from '@material-ui/icons';\r\n\r\nimport { Fab } from '@material-ui/core';\r\n\r\nimport ContentCommenting from '../../common/components/ContentCommenting';\r\nimport * as PreviewStore from '../../app/store/PreviewStore';\r\nimport { InfoMessage, PageLayout } from '../../common/components';\r\nimport PreviewTaskContent from './components/PreviewTaskContent';\r\nimport { PREVIEW_TASK_RECEIVED } from '../../app/store/actions';\r\nimport { CommentIcon, PrintIcon } from '../../common/icons';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n },\r\n actions: {\r\n display: 'flex',\r\n padding: theme.spacing(2),\r\n },\r\n fab: {\r\n marginRight: theme.spacing(2),\r\n },\r\n comments: {\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\n\r\nclass PreviewTask extends React.Component {\r\n state = {\r\n noHiddenStateValue: false,\r\n }\r\n\r\n showPrint = () => {\r\n window.print();\r\n }\r\n\r\n toggleHiddenStates = () => {\r\n this.setState(prevState => ({\r\n noHiddenStateValue: !prevState.noHiddenStateValue,\r\n }));\r\n };\r\n\r\n render() {\r\n const {\r\n classes, translate, taskDetails, hasLoaded, showComments, toggleComments,\r\n } = this.props;\r\n\r\n const task = taskDetails;\r\n\r\n if (!task) {\r\n return hasLoaded ? () : null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {task.contentElements?.some(e => e.elementStates) && (\r\n
\r\n \r\n \r\n )}\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\r\n {showComments && (\r\n \r\n\r\n )}\r\n >\r\n )}\r\n >\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nPreviewTask.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n translate: PropTypes.func.isRequired,\r\n hasLoaded: PropTypes.bool.isRequired,\r\n toggleComments: PropTypes.func.isRequired,\r\n showComments: PropTypes.bool.isRequired,\r\n taskDetails: PropTypes.object,\r\n};\r\n\r\nPreviewTask.defaultProps = {\r\n taskDetails: null,\r\n};\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const taskId = ownProps?.match?.params?.taskId;\r\n\r\n return {\r\n translate: getTranslate(state.localize),\r\n taskDetails: state.previewStore.details && state.previewStore.details[taskId],\r\n clientConfig: state.auth.clientConfig,\r\n hasLoaded: Boolean(state.previewStore.requests[`${PREVIEW_TASK_RECEIVED}/${taskId}`]\r\n && state.previewStore.requests[`${PREVIEW_TASK_RECEIVED}/${taskId}`].completed),\r\n showComments: state.previewStore.showComments,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n ...bindActionCreators(PreviewStore.actionCreators, dispatch),\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(PreviewTask));\r\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { bindActionCreators } from 'redux';\n\nimport { ButtonBase, Typography } from '@material-ui/core';\n\nimport * as PreviewStore from '../../../app/store/PreviewStore';\nimport { CommentIcon } from '../../../common/icons';\n\n\nconst styles = theme => ({\n root: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: '100%',\n zIndex: 101,\n background: `${theme.palette.grey[300]}aa`,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nfunction AddCommentOverlay({\n classes, translate, className, taskId, elementId, startComment, enableComments,\n}) {\n if (!enableComments) {\n return null;\n }\n const onClick = () => {\n startComment({ taskId, elementId });\n };\n\n return (\n \n \n \n {translate('taskCommenting.addComment')}\n \n \n );\n}\n\nAddCommentOverlay.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n taskId: PropTypes.string.isRequired,\n elementId: PropTypes.number.isRequired,\n className: PropTypes.string.isRequired,\n startComment: PropTypes.func.isRequired,\n enableComments: PropTypes.bool.isRequired,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n enableComments: state.previewStore.showComments,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(PreviewStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(AddCommentOverlay));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\n\nimport * as PreviewStore from '../../../app/store/PreviewStore';\n\nclass LoadPreviewTask extends React.Component {\n componentDidMount() {\n if (!this.props.taskDetails) {\n this.getElement();\n }\n }\n\n componentDidUpdate(prevProps) {\n const { taskId, taskDetails } = this.props;\n\n if (taskId !== prevProps.taskId && !taskDetails) {\n this.getElement();\n }\n }\n\n getElement = () => {\n this.props.getElement(this.props.taskId, {\n requestParams: { ver: this.props.version },\n });\n }\n\n render() {\n return null;\n }\n}\n\nLoadPreviewTask.propTypes = {\n getElement: PropTypes.func.isRequired,\n taskId: PropTypes.string.isRequired,\n version: PropTypes.string,\n taskDetails: PropTypes.object,\n};\n\nLoadPreviewTask.defaultProps = {\n taskDetails: null,\n version: null,\n};\n\nconst mapStateToProps = (state, ownProps) => {\n const taskId = ownProps?.match?.params?.taskId;\n\n return {\n taskId,\n version: ownProps?.match?.params?.version,\n taskDetails: state.previewStore.details && state.previewStore.details[taskId],\n clientConfig: state.auth.clientConfig,\n };\n};\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(PreviewStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(LoadPreviewTask);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useDispatch, useSelector } from 'react-redux';\nimport classnames from 'classnames';\n\nimport * as PreviewStore from '../../../app/store/PreviewStore';\n\nimport { TaskContent } from '../../../youwell-common/components';\nimport urls from '../../../app/urls';\nimport { parseInternalLink } from '../../../common/taskContentUtils';\nimport AddCommentOverlay from './AddCommentOverlay';\nimport { getGetResponseFunc } from '../../../youwell-common/responseUtils';\n\nconst styles = () => ({\n root: {\n // Flex-display with wrap needed for card-layout on page\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n\n '@media print': {\n display: 'block',\n },\n },\n});\n\nconst useStyles = makeStyles(theme => styles(theme), { name: 'PreviewTaskContent' });\n\n\nconst PreviewTaskContent = ({ forwardedRef, task, noHiddenStateValue }) => {\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const allTaskResponses = useSelector(state => state.previewStore.responses);\n const allTasksDetails = useSelector(state => state.previewStore.details);\n const commentElementId = useSelector(state => state.previewStore.commentElementId);\n\n // task.patientProgramElementId is \"undefined\" but this works.. Should maybe make more robust?\n const responsesForCurrentTask = allTaskResponses && allTaskResponses[task.patientProgramElementId]\n && allTaskResponses[task.patientProgramElementId][task.id];\n\n const updateResponse = (responses) => {\n const responseData = {\n taskId: task.id,\n taskVersion: task.version,\n responses,\n };\n\n dispatch(PreviewStore.actionCreators.updateResponse(responseData));\n };\n\n const saveChanges = (callback) => {\n if (callback) {\n callback();\n }\n };\n\n const getLinkUrl = (link) => {\n const { taskOrModuleId, hash } = parseInternalLink(link);\n return `${urls.preview.home}/${taskOrModuleId}${hash}`;\n };\n\n const getProgramItem = id => (allTasksDetails ? allTasksDetails[id] : null);\n\n return (\n \n );\n};\n\nPreviewTaskContent.propTypes = {\n forwardedRef: PropTypes.object,\n task: PropTypes.object.isRequired,\n noHiddenStateValue: PropTypes.bool,\n};\n\nPreviewTaskContent.defaultProps = {\n forwardedRef: null,\n noHiddenStateValue: false,\n};\n\nconst WithRef = React.forwardRef((props, ref) => );\nexport default WithRef;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar store_1 = require(\"../../app/store\");\nvar components_1 = require(\"../../youwell-common/components\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar ProgramError_1 = __importDefault(require(\"./components/ProgramError\"));\nvar TaskGroup_1 = __importDefault(require(\"./TaskGroup\"));\nvar TaskPage_1 = __importStar(require(\"./TaskPage\"));\nvar Index = function () {\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n if (!currentProgram) {\n return React.createElement(ProgramError_1.default, null);\n }\n return (React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { exact: true, path: \"\".concat(urls_1.default.inside.program, \"/:elementGroup\"), component: TaskGroup_1.default }),\n React.createElement(react_router_dom_1.Route, { exact: true, path: \"\".concat(urls_1.default.inside.program, \"/:elementGroup/:elementIndex/\").concat(urls_1.default.inside.parts.resumeLatest), component: TaskPage_1.TaskPageRedirect }),\n React.createElement(react_router_dom_1.Route, { exact: true, path: \"\".concat(urls_1.default.inside.program, \"/:elementGroup/:elementIndex/:subIndex?\"), component: TaskPage_1.default }),\n React.createElement(react_router_dom_1.Route, { component: components_1.PageNotFound })));\n};\nexports.default = Index;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar prop_types_1 = __importDefault(require(\"prop-types\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar dateUtils_1 = require(\"../../youwell-common/dateUtils\");\nvar icons_1 = require(\"../../common/icons\");\nvar components_1 = require(\"../../common/components\");\nvar breadcrumbUtil_1 = require(\"../../common/breadcrumbUtil\");\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return ({\n root: {\n boxShadow: theme.shadows[1],\n },\n modules: {\n display: 'flex',\n flexDirection: 'column',\n borderTop: theme.youwell.borders.normal,\n borderTopColor: theme.palette.secondary.main,\n borderTopWidth: 4,\n },\n task: {\n padding: theme.spacing(2, 2),\n display: 'flex',\n alignItems: 'center',\n borderBottom: theme.youwell.borders.normal,\n },\n completed: {},\n unavailable: {},\n name: {\n flex: '1 1 auto',\n '$unavailable &': {\n color: theme.palette.text.secondary,\n },\n },\n moduleDate: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n preIcon: {\n width: 40,\n },\n done: {\n color: theme.youwell.colors.green,\n },\n notDone: {\n color: theme.youwell.colors.red,\n },\n noTasksAssigned: {\n padding: theme.spacing(4),\n margin: theme.spacing(2),\n },\n disabled: {\n pointerEvents: 'none',\n cursor: 'default',\n opacity: 0.7,\n },\n}); });\nvar TaskGroup = function () {\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var elementGroup = (0, react_router_dom_1.useParams)().elementGroup;\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n var _a = React.useState(false), modalOpen = _a[0], setModalOpen = _a[1];\n var clickElement = function (element) { return function (e) {\n if (element.disabled) {\n e.preventDefault();\n setModalOpen(true);\n }\n }; };\n var closeModal = function () {\n setModalOpen(false);\n };\n return (React.createElement(components_1.PageLayout, { breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(translate(\"patientProgramElementGroups.\".concat(elementGroup)), translate, clientConfig) },\n React.createElement(\"div\", { className: classes.root }, currentProgram && currentProgram.groupedElements[elementGroup].length > 0 ? (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { className: classes.modules }, currentProgram.groupedElements[elementGroup].map(function (element) {\n var _a;\n return (React.createElement(react_router_dom_1.Link, { key: element.id, className: (0, classnames_1.default)(classes.task, (_a = {}, _a[classes.completed] = element.completed, _a[classes.unavailable] = element.disabled, _a)), to: (0, breadcrumbUtil_1.getElementLink)(element), onClick: clickElement(element) },\n React.createElement(\"div\", { className: classes.preIcon },\n React.createElement(React.Fragment, null,\n element.completed && React.createElement(icons_1.CompletedIcon, { className: classes.done }),\n !element.completed && new Date(element.startTime) <= new Date() && React.createElement(icons_1.NotDoneIcon, { className: classes.notDone }))),\n React.createElement(core_1.Typography, { className: classes.name }, element.name),\n element.isNotStarted && (React.createElement(core_1.Typography, { variant: \"caption\", color: \"textSecondary\", className: classes.moduleDate }, (0, dateUtils_1.dateWithOptionalTime)(element.startTime)))));\n })))) : (React.createElement(core_1.Typography, { align: \"center\", color: \"textSecondary\", className: classes.noTasksAssigned, display: \"block\" }, translate('noTasksAssigned')))),\n React.createElement(core_1.Modal, { \"aria-labelledby\": \"modal-title\", \"aria-describedby\": \"modal-description\", open: modalOpen, onClose: closeModal },\n React.createElement(\"div\", null,\n React.createElement(core_1.IconButton, { onClick: closeModal, title: translate('close') },\n React.createElement(icons_1.CloseIcon, null)),\n React.createElement(core_1.Typography, { variant: \"subtitle1\", id: \"modal-title\", gutterBottom: true }, translate('scheduledTasks.elementNotAvailable')),\n React.createElement(core_1.Typography, { id: \"modal-description\" }, translate('scheduledTasks.elementNotAvailableDescription'))))));\n};\nTaskGroup.propTypes = {\n match: prop_types_1.default.shape({\n params: prop_types_1.default.shape({\n elementGroup: prop_types_1.default.string.isRequired,\n }).isRequired,\n }).isRequired,\n};\nexports.default = TaskGroup;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TaskPageRedirect = void 0;\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar ProgramStore = __importStar(require(\"../../app/store/ProgramStore\"));\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar components_1 = require(\"../../common/components\");\nvar components_2 = require(\"../../youwell-common/components\");\nvar MyTaskContent_1 = __importDefault(require(\"./components/MyTaskContent\"));\nvar TaskNavigation_1 = __importDefault(require(\"./components/TaskNavigation\"));\nvar breadcrumbUtil_1 = require(\"../../common/breadcrumbUtil\");\nvar taskUtils_1 = require(\"../../common/taskUtils\");\nvar store_1 = require(\"../../app/store\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar constants_1 = require(\"../../youwell-common/constants\");\nvar TaskPageRedirect = function () {\n var _a, _b;\n var _c = (0, react_router_dom_1.useParams)(), elementGroup = _c.elementGroup, elementIndex = _c.elementIndex;\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n if (!currentProgram) {\n return null;\n }\n var task = (0, taskUtils_1.getTask)(currentProgram, elementGroup, elementIndex);\n if (!task) {\n return React.createElement(components_1.InfoMessage, { messageKey: \"noTask\" });\n }\n if (currentProgram.isActiveProgram && task.module) {\n var firstNotVisited = (_a = task.module.tasks) === null || _a === void 0 ? void 0 : _a.findIndex(function (d) { return !d.visited; });\n var firstNotCompleted = (_b = task.module.tasks) === null || _b === void 0 ? void 0 : _b.findIndex(function (d) { return !d.completed; });\n var latestIndex = 0;\n if (firstNotCompleted < 0) { // All tasks completed (and then also visited), go to first task\n latestIndex = 0;\n }\n else if (firstNotVisited === firstNotCompleted) { // Last visited page is also completed. Go to that page (visited - 1)\n latestIndex = firstNotVisited - 1;\n }\n else if (firstNotVisited > firstNotCompleted) { // visited many but not completed all along the way, go to first not completed\n latestIndex = firstNotCompleted;\n }\n else if (firstNotVisited < 0) { // all tasks visited, but not all completed, go to first not completed\n latestIndex = firstNotCompleted;\n }\n if (latestIndex < 0) {\n latestIndex = 0;\n }\n return (React.createElement(react_router_dom_1.Redirect, { to: \"\".concat(urls_1.default.inside.program, \"/\").concat(elementGroup, \"/\").concat(elementIndex, \"/\").concat(latestIndex) }));\n }\n return (React.createElement(react_router_dom_1.Redirect, { to: \"\".concat(urls_1.default.inside.program, \"/\").concat(elementGroup, \"/\").concat(elementIndex) }));\n};\nexports.TaskPageRedirect = TaskPageRedirect;\nvar TaskPage = function () {\n var _a, _b;\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var _c = (0, react_router_dom_1.useParams)(), elementGroup = _c.elementGroup, elementIndex = _c.elementIndex, subIndex = _c.subIndex;\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n var taskContentRef = React.createRef();\n if (!currentProgram) {\n return null;\n }\n var task = (0, taskUtils_1.getTask)(currentProgram, elementGroup, elementIndex, subIndex);\n if (!task) {\n return React.createElement(components_1.InfoMessage, { messageKey: \"noTask\" });\n }\n var visitTask = function () {\n if (currentProgram.isActiveProgram && !task.visited) {\n dispatch(ProgramStore.actionCreators.visitTask({\n ppeId: task.patientProgramElementId,\n id: task.id,\n }, { reducerParams: { patientProgramId: currentProgram.id, taskId: task.id } }));\n }\n };\n var sidemenu = task.showSideMenu ? {\n currentIndex: task.currentTaskNr,\n title: task.moduleName,\n menuItems: (_b = (_a = task.module) === null || _a === void 0 ? void 0 : _a.tasks.map(function (t, i) { return ({\n text: t.name,\n settings: t.settings,\n url: \"\".concat(urls_1.default.inside.program, \"/\").concat(task.elementGroup, \"/\").concat(task.elementIndex, \"/\").concat(i),\n notify: !task.isSeparateItemsInModule && t.visited && !t.completed && t.hasQuestions,\n visited: t.visited,\n }); })) !== null && _b !== void 0 ? _b : [],\n } : undefined;\n var canAnswer = currentProgram.isActiveProgram\n || (currentProgram.status === constants_1.patientProgramStatus.inactive && task.elementGroup === constants_1.systemElementGroups.scheduled);\n return (React.createElement(components_1.PageLayout, { title: task.taskName, breadcrumb: (0, breadcrumbUtil_1.getBreadCrumb)(task.taskName, translate, clientConfig, task), progress: task.showProgress ? task.progress : null, task: task, sideMenu: sidemenu, key: task.id },\n React.createElement(components_1.PageTitle, { title: \"\".concat(translate('header.title'), \" - \").concat(task.moduleName) }),\n React.createElement(components_1.TrackActivity, { label: \"\".concat(task.elementGroup, \"/task\"), patientProgramId: currentProgram.id, patientProgramElementId: task.patientProgramElementId, taskId: task.id }),\n React.createElement(components_2.DelayedFetch, { dataCall: visitTask, delaySeconds: clientConfig.appSetup.visitTaskDelay }),\n React.createElement(MyTaskContent_1.default, { patientProgramElementId: task.patientProgramElementId, task: task, readOnly: !canAnswer, ref: taskContentRef }),\n React.createElement(TaskNavigation_1.default, { task: task, taskContentRef: taskContentRef, readOnly: !canAnswer })));\n};\nexports.default = TaskPage;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AUTOSAVE_TIMEOUT_INTERVAL = void 0;\nvar React = __importStar(require(\"react\"));\nvar prop_types_1 = __importDefault(require(\"prop-types\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar react_redux_1 = require(\"react-redux\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar react_router_1 = require(\"react-router\");\nvar ProgramStore = __importStar(require(\"../../../app/store/ProgramStore\"));\nvar components_1 = require(\"../../../youwell-common/components\");\nvar taskContentUtils_1 = require(\"../../../common/taskContentUtils\");\nvar taskUtils_1 = require(\"../../../common/taskUtils\");\nvar responseUtils_1 = require(\"../../../youwell-common/responseUtils\");\nvar WorkSheet_1 = __importDefault(require(\"./WorkSheet\"));\nvar store_1 = require(\"../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar useStyles = (0, styles_1.makeStyles)(({\n root: {\n // Flex-display with wrap needed for card-layout on page\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n '@media print': {\n display: 'block',\n },\n },\n}), { name: 'MyTaskContent' });\nexports.AUTOSAVE_TIMEOUT_INTERVAL = 1000; // miliseconds\nvar MyTaskContent = function (_a) {\n var _b;\n var task = _a.task, patientProgramElementId = _a.patientProgramElementId, className = _a.className, forwardedRef = _a.forwardedRef, readOnly = _a.readOnly;\n var classes = useStyles();\n var dispatch = (0, react_redux_1.useDispatch)();\n var saveTimer = React.useRef();\n var translate = (0, translate_1.default)();\n var clientConfig = (0, store_1.useYouwellSelector)(function (state) { return state.auth.clientConfig; });\n var currentProgram = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgram; });\n var allTaskResponses = (0, store_1.useYouwellSelector)(function (state) { return state.programStore.currentProgramTaskResponses; });\n var _c = React.useState(null), changeId = _c[0], setChangeId = _c[1];\n var responsesForCurrentTask = task.patientProgramElementId ? (_b = allTaskResponses === null || allTaskResponses === void 0 ? void 0 : allTaskResponses[task.patientProgramElementId]) === null || _b === void 0 ? void 0 : _b[task.id] : null;\n var formId = responsesForCurrentTask === null || responsesForCurrentTask === void 0 ? void 0 : responsesForCurrentTask.formId;\n var updateResponse = function (responses) {\n var responseData = {\n taskId: task.id,\n taskVersion: task.version,\n patientProgramElementId: patientProgramElementId,\n formId: formId,\n responses: responses,\n };\n setChangeId(Date.now());\n dispatch(ProgramStore.actionCreators.updateResponse(responseData));\n };\n var saveResponses = React.useCallback(function (taskResponses, callback, background, submitForm) {\n var responseData = (changeId || submitForm) && (0, responseUtils_1.getUpdatedResponsesForTask)(taskResponses, patientProgramElementId, task.id, task.version, formId, submitForm);\n if (responseData) {\n dispatch(ProgramStore.actionCreators.saveResponse(responseData, {\n background: background,\n callback: function () {\n setChangeId(function (prevId) { return (prevId === changeId ? null : prevId); });\n if (callback) {\n callback();\n }\n },\n }));\n }\n else if (callback) {\n callback();\n }\n }, [changeId, patientProgramElementId, task.id, task.version, formId, dispatch]);\n var saveChanges = function (callback, submitForm) {\n if (responsesForCurrentTask || submitForm) {\n clearTimeout(saveTimer.current);\n saveResponses(responsesForCurrentTask, callback, false, (submitForm && !(responsesForCurrentTask === null || responsesForCurrentTask === void 0 ? void 0 : responsesForCurrentTask.submitted)));\n }\n else if (callback) {\n callback();\n }\n };\n React.useEffect(function () {\n if (responsesForCurrentTask && changeId) {\n if (saveTimer.current) {\n clearTimeout(saveTimer.current);\n }\n saveTimer.current = setTimeout(function () {\n saveResponses(responsesForCurrentTask, null, true);\n }, exports.AUTOSAVE_TIMEOUT_INTERVAL);\n }\n }, [changeId, responsesForCurrentTask, saveResponses, task.id]);\n var getLinkUrl = function (link) { return (0, taskUtils_1.getProgramContentLink)(link, currentProgram); };\n var getProgramItem = function (id) { return (0, taskContentUtils_1.getItemFromPatientProgram)(currentProgram, id); };\n if (!currentProgram)\n return null;\n return (React.createElement(React.Fragment, null,\n React.createElement(react_router_1.Prompt, { when: !!changeId, message: translate('taskContent.unsavedChangesPrompt') }),\n React.createElement(components_1.TaskContent, { ref: forwardedRef, className: (0, classnames_1.default)(classes.root, className), TaskFormProps: {\n disabled: !!(responsesForCurrentTask === null || responsesForCurrentTask === void 0 ? void 0 : responsesForCurrentTask.submitted),\n readOnly: readOnly,\n }, LinkElementProps: {\n getLinkUrl: getLinkUrl,\n autoplayVideos: clientConfig.appSetup.features.autoplayVideos,\n }, task: task, taskResponses: responsesForCurrentTask, getProgramItem: getProgramItem, getResponses: (0, responseUtils_1.getGetResponseFunc)(allTaskResponses, responsesForCurrentTask, task.patientProgramElementId), onResponse: updateResponse, onSaveChanges: saveChanges, changeId: changeId }),\n task.isWorkSheet && (React.createElement(WorkSheet_1.default, { task: task, currentForm: responsesForCurrentTask, taskContentRef: forwardedRef }))));\n};\nMyTaskContent.propTypes = {\n task: prop_types_1.default.object.isRequired,\n patientProgramElementId: prop_types_1.default.string.isRequired,\n className: prop_types_1.default.string,\n forwardedRef: prop_types_1.default.object,\n readOnly: prop_types_1.default.bool,\n};\nMyTaskContent.defaultProps = {\n className: null,\n forwardedRef: null,\n readOnly: false,\n};\nvar WithRef = React.forwardRef(function (props, ref) { return React.createElement(MyTaskContent, __assign({}, props, { forwardedRef: ref })); });\nexports.default = WithRef;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar icons_1 = require(\"../../../common/icons\");\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar actions_1 = require(\"../../../app/store/actions\");\nvar store_1 = require(\"../../../app/store\");\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return ({\n root: {\n margin: theme.spacing(4),\n padding: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n title: {\n marginBottom: theme.spacing(2),\n },\n link: {\n display: 'flex',\n alignItems: 'center',\n },\n icon: {\n marginLeft: theme.spacing(1),\n },\n}); });\nvar ProgramError = function () {\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var hasLoaded = (0, store_1.useYouwellSelector)(function (state) { return Boolean(state.programStore.requests[actions_1.PROGRAM_CURRENTPROGRAM_RECEIVED]\n && state.programStore.requests[actions_1.PROGRAM_CURRENTPROGRAM_RECEIVED].completed); });\n if (!hasLoaded) {\n return null;\n }\n return (React.createElement(core_1.NoSsr, null,\n React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", color: \"error\", className: classes.title }, translate('program.couldNotFindProgram')),\n React.createElement(react_router_dom_1.Link, { to: urls_1.default.inside.home },\n React.createElement(core_1.Typography, { color: \"textSecondary\", className: classes.link },\n translate('program.goToStartPage'),\n React.createElement(icons_1.FowardIcon, { className: classes.icon }))))));\n};\nexports.default = ProgramError;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar core_1 = require(\"@material-ui/core\");\nvar ProgramStore = __importStar(require(\"../../../app/store/ProgramStore\"));\nvar urls_1 = __importDefault(require(\"../../../app/urls\"));\nvar components_1 = require(\"../../../common/components\");\nvar store_1 = require(\"../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n navActions: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n margin: theme.spacing(8, 0),\n '@media print': {\n display: 'none',\n },\n },\n appActions: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n margin: theme.spacing(4, 0),\n '@media print': {\n display: 'none',\n },\n },\n navButton: {\n margin: theme.spacing(0, 6),\n },\n navIconLeft: {\n marginRight: theme.spacing(1),\n },\n navIconRight: {\n marginLeft: theme.spacing(1),\n },\n}); });\nvar TaskNavigation = function (_a) {\n var task = _a.task, taskContentRef = _a.taskContentRef, readOnly = _a.readOnly;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var _b = React.useState(0), incompleteTaskIndex = _b[0], setIncompleteTaskIndex = _b[1];\n var _c = React.useState(false), showChoiceNavigateDialog = _c[0], setShowChoiceNavigateDialog = _c[1];\n var goBack = function () {\n window.history.back();\n };\n var clickNext = function (nextDirection) { return function () {\n var currentTaskNr = task.currentTaskNr, elementIndex = task.elementIndex, elementGroup = task.elementGroup;\n var isTaskInModule = !!task.module;\n var nextTaskNr = (currentTaskNr || 0) + nextDirection;\n var isLastTask = !task.listLength || nextTaskNr > task.listLength - 1;\n var isFirstTask = nextTaskNr < 0;\n var next = isTaskInModule ? \"\".concat(elementIndex, \"/\").concat(nextTaskNr) : \"\".concat(nextTaskNr);\n var redirect = '';\n if (task.redirectHomeAfterLastTask && isLastTask) {\n redirect = urls_1.default.inside.home;\n }\n else if (task.saveAndAbortNavigation && (!isTaskInModule || (isFirstTask || isLastTask))) {\n redirect = urls_1.default.inside.home;\n }\n else if (isFirstTask || isLastTask) {\n if (isTaskInModule) {\n redirect = urls_1.default.inside.home;\n }\n else {\n redirect = \"\".concat(urls_1.default.inside.program, \"/\").concat(elementGroup);\n }\n }\n else {\n redirect = \"\".concat(urls_1.default.inside.program, \"/\").concat(elementGroup, \"/\").concat(next);\n }\n var lastTaskCallback = function () {\n var newIincompleteTaskIndex = task.module ? task.module.tasks.findIndex(function (d) { return !d.completed; }) : -1;\n if (newIincompleteTaskIndex > -1) {\n setShowChoiceNavigateDialog(true);\n setIncompleteTaskIndex(newIincompleteTaskIndex);\n }\n else {\n dispatch(ProgramStore.actionCreators.redirect(urls_1.default.inside.home));\n }\n };\n var go = function () {\n if (isLastTask && task.showPopupAfterLastTask) {\n lastTaskCallback();\n }\n else {\n dispatch(ProgramStore.actionCreators.redirect(redirect));\n }\n };\n if (taskContentRef === null || taskContentRef === void 0 ? void 0 : taskContentRef.current) {\n if (readOnly) {\n dispatch(ProgramStore.actionCreators.redirect(redirect));\n }\n else if (nextDirection > 0) {\n taskContentRef.current.validateAndSave(go, task.isSubmitTask);\n }\n else {\n taskContentRef.current.saveWithoutValidation(go);\n }\n }\n }; };\n var cancelNavigate = function () {\n setShowChoiceNavigateDialog(false);\n };\n var elementIndex = task.elementIndex, elementGroup = task.elementGroup;\n var isTaskInModule = !!task.module;\n var isLastTask = !task.listLength || task.currentTaskNr === task.listLength - 1;\n var isFirstTask = task.currentTaskNr === 0;\n var prevText = task.saveAndAbortNavigation && (isFirstTask || !isTaskInModule) ? 'cancel' : 'task.goBack';\n var nextText = task.saveAndAbortNavigation && (isLastTask || !isTaskInModule) ? (task.hasQuestions ? 'send' : 'task.completeTask')\n : isLastTask ? 'task.completeTask' : 'task.goForward';\n var hideCompleteButton = isLastTask && !task.saveAndAbortNavigation && !task.showCompleteNavigation;\n return (React.createElement(React.Fragment, null,\n (task.saveAndAbortNavigation || task.showNextPrevNavigation) && (React.createElement(\"div\", { className: classes.navActions },\n React.createElement(core_1.Button, { variant: \"outlined\", color: \"primary\", style: { visibility: task.hidePrevNavigationIfFirstTask && isFirstTask ? 'hidden' : 'visible' }, onClick: clickNext(-1) }, translate(prevText)),\n !hideCompleteButton && (React.createElement(core_1.Button, { color: \"primary\", variant: \"contained\", onClick: clickNext(1) }, translate(nextText))))),\n React.createElement(\"div\", { className: classes.appActions },\n task.showBackNavigation && (React.createElement(core_1.Button, { onClick: goBack, className: classes.navButton }, translate('task.goBack'))),\n task.showHomeNavigation && !task.saveAndAbortNavigation && (React.createElement(core_1.Button, { component: react_router_dom_1.Link, to: urls_1.default.inside.home, className: classes.navButton }, translate('task.goToHomePage')))),\n React.createElement(components_1.ChoiceNavigationDialog, { open: showChoiceNavigateDialog, onCancel: cancelNavigate, title: translate('task.moduleIncompletedHeader'), description: translate('task.moduleIncompletedDescription'), primaryText: translate('task.goToLastUnfinished'), primaryLink: \"\".concat(urls_1.default.inside.program, \"/\").concat(elementGroup, \"/\").concat(elementIndex, \"/\").concat(incompleteTaskIndex), secondaryText: translate('task.goToOverview'), secondaryLink: urls_1.default.inside.home })));\n};\nTaskNavigation.defaultProps = {\n readOnly: false,\n};\nexports.default = TaskNavigation;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar core_1 = require(\"@material-ui/core\");\nvar ProgramStore = __importStar(require(\"../../../app/store/ProgramStore\"));\nvar dateUtils_1 = require(\"../../../youwell-common/dateUtils\");\nvar store_1 = require(\"../../../app/store\");\nvar translate_1 = __importDefault(require(\"../../../app/localization/translate\"));\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return ({\n root: {\n background: theme.palette.common.white,\n marginTop: theme.spacing(4),\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-start',\n },\n previous: {\n width: '50%',\n padding: theme.spacing(2),\n },\n list: {\n maxHeight: 300,\n overflow: 'auto',\n background: theme.palette.grey[50],\n },\n buttonContainer: {\n width: '50%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n button: {\n margin: theme.spacing(4, 2),\n minWidth: 120,\n },\n}); }, { name: 'WorkSheet' });\nvar WorkSheet = function (_a) {\n var task = _a.task, currentForm = _a.currentForm, taskContentRef = _a.taskContentRef;\n var classes = useStyles();\n var dispatch = (0, store_1.useYouwellDispatch)();\n var translate = (0, translate_1.default)();\n // const responsesForCurrentTask = useSelector(state => state.programStore.currentProgramTaskResponses?.[task.patientProgramElementId]?.[task.id]);\n var forms = (0, store_1.useYouwellSelector)(function (state) { var _a, _b; return ((_b = (_a = state.programStore.allForms) === null || _a === void 0 ? void 0 : _a[task.patientProgramElementId]) === null || _b === void 0 ? void 0 : _b[task.id]); });\n React.useEffect(function () {\n if (task.isWorkSheet && !forms) {\n dispatch(ProgramStore.actionCreators.getResponseForms({ requestParams: { patientProgramElementId: task.patientProgramElementId, taskId: task.id } }));\n }\n }, [dispatch, forms, task.id, task.isWorkSheet, task.patientProgramElementId]);\n var addNewForm = function () {\n var _a;\n if (currentForm === null || currentForm === void 0 ? void 0 : currentForm.submitted) {\n dispatch(ProgramStore.actionCreators.setCurrentForm(task.patientProgramElementId, task.id, null));\n }\n else {\n var currentSubmittedForm_1 = currentForm ? __assign(__assign({}, currentForm), { submitted: new Date() }) : null;\n (_a = taskContentRef === null || taskContentRef === void 0 ? void 0 : taskContentRef.current) === null || _a === void 0 ? void 0 : _a.submitForm(function () {\n dispatch(ProgramStore.actionCreators.updateAllFormsList(task.patientProgramElementId, task.id, currentSubmittedForm_1));\n dispatch(ProgramStore.actionCreators.setCurrentForm(task.patientProgramElementId, task.id, null));\n });\n }\n };\n var selectForm = function (form) { return function () {\n dispatch(ProgramStore.actionCreators.setCurrentForm(task.patientProgramElementId, task.id, form));\n }; };\n return (React.createElement(\"div\", { className: classes.root },\n forms && forms.length > 0 && (React.createElement(\"div\", { className: classes.previous },\n React.createElement(core_1.Typography, { variant: \"subtitle1\" }, translate('worksheet.previous')),\n React.createElement(core_1.List, { className: classes.list }, forms.map(function (r) { return (React.createElement(core_1.ListItem, { key: r.formId, button: true, onClick: selectForm(r), selected: r.formId === (currentForm === null || currentForm === void 0 ? void 0 : currentForm.formId) },\n React.createElement(core_1.ListItemText, { primary: r.submitted ? (0, dateUtils_1.timestamp)(r.submitted, translate) : translate('worksheet.current') }))); })))),\n React.createElement(\"div\", { className: classes.buttonContainer },\n React.createElement(core_1.Button, { className: classes.button, variant: \"contained\", color: \"primary\", onClick: addNewForm, disabled: !currentForm }, (currentForm === null || currentForm === void 0 ? void 0 : currentForm.submitted) ? translate('worksheet.newForm') : translate('worksheet.send')))));\n};\nWorkSheet.defaultProps = {\n currentForm: null,\n taskContentRef: null,\n};\nexports.default = WorkSheet;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport { getImageUrl } from '../../youwell-common/apiUrls';\nimport { DefaultProgramImage } from '../../common/image';\nimport { Image } from '../../youwell-common/components';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n image: {\n width: '50%',\n marginTop: '10%',\n },\n});\n\nclass Home extends React.Component {\n render() {\n const {\n classes, currentProgram,\n } = this.props;\n\n const programImageUrl = currentProgram && currentProgram.frontImageId ? getImageUrl(currentProgram.frontImageId) : null;\n\n return (\n \n {programImageUrl ? (\n \n ) : (\n \n )}\n
\n );\n }\n}\n\nHome.propTypes = {\n classes: PropTypes.object.isRequired,\n // translate: PropTypes.func.isRequired,\n currentProgram: PropTypes.object,\n};\n\nHome.defaultProps = {\n currentProgram: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n currentProgram: state.publicStore.currentProgramId && state.publicStore.details && state.publicStore.details[state.publicStore.currentProgramId],\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(Home));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Redirect,\n Route, Switch,\n} from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\n\nimport { IdleTimer } from '../../youwell-common/components';\nimport { logoutReasons } from '../../youwell-common/constants';\nimport Auth, { authTypes } from '../../youwell-common/Auth';\n\nimport * as AuthStore from '../../app/store/AuthStore';\n\nimport urls from '../../app/urls';\nimport { InternalLinkLoader, Layout } from '../../common/components';\nimport LoadPublicProgram from './components/LoadPublicProgram';\nimport Program from './Program';\nimport Module from './Module';\nimport Task from './Task';\nimport Home from './Home';\nimport { getPublicProgramContentLink } from '../../common/taskUtils';\nimport SessionFooter from './components/SessionFooter';\n\nconst USER_IDLE_TIMEOUT_IN_MINUTES = 30;\n\nclass Index extends React.Component {\n logoutOnIdle = () => {\n if (Auth.isUserAuthenticated(authTypes.public)) {\n this.props.logout(logoutReasons.idleTimeout, urls.public.home);\n }\n }\n\n render() {\n const { program } = this.props;\n\n return (\n <>\n \n\n getPublicProgramContentLink(link, program)} />\n\n \n\n \n \n \n \n \n } />\n \n \n\n \n \n >\n );\n }\n}\n\nIndex.propTypes = {\n logout: PropTypes.func.isRequired,\n program: PropTypes.object,\n};\n\nIndex.defaultProps = {\n program: null,\n};\n\nconst mapStateToProps = state => ({\n clientConfig: state.auth.clientConfig,\n program: state.publicStore.details && state.publicStore.currentProgramId && state.publicStore.details[state.publicStore.currentProgramId],\n});\n\nconst mapDispatchToProps = dispatch => ({\n logout: bindActionCreators(AuthStore.actionCreators, dispatch).logout,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Index);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\n\nimport { Link, Redirect } from 'react-router-dom';\nimport {\n Typography, Hidden,\n} from '@material-ui/core';\n\nimport urls from '../../app/urls';\nimport { getImageUrl } from '../../youwell-common/apiUrls';\nimport { Image, HtmlContent } from '../../youwell-common/components';\nimport { DefaultProgramImage } from '../../common/image';\nimport { elementInfoClasses, tableListClasses, iconClasses } from '../../app/style/sharedClasses';\nimport { InfoMessage, PageLayout } from '../../common/components';\nimport { PUBLIC_PROGRAM_RECEIVED } from '../../app/store/actions';\n\n\nconst styles = theme => ({\n ...elementInfoClasses(theme),\n ...tableListClasses(theme),\n ...iconClasses(theme),\n});\n\nclass Module extends React.Component {\n render() {\n const {\n classes, translate, program, match, hasLoaded,\n } = this.props;\n const { moduleIndex, programId } = match.params;\n\n const module = program && program.modules && program.modules[moduleIndex];\n\n if (!module) {\n return hasLoaded ? () : null;\n }\n\n const isSingleModule = program.modules && program.modules.length === 1;\n\n if (isSingleModule) {\n return (\n \n );\n }\n\n let moduleImage = module.moduleImageId ? getImageUrl(module.moduleImageId) : null;\n if (!moduleImage && !!program.frontImageId) {\n moduleImage = getImageUrl(program.frontImageId);\n }\n\n return (\n \n \n
\n {moduleImage ? : (\n \n )}\n
\n\n
\n
\n \n {module.name}\n \n
\n\n
\n
\n
\n\n \n
\n \n \n {translate('content')}\n \n \n {module.name}\n \n \n
\n\n
\n {module.tasks && module.tasks.map((task, i) => (\n
\n
\n \n {i + 1}\n \n
\n
\n \n {task.name}\n \n
\n \n ))}\n
\n
\n \n );\n }\n}\n\nModule.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n match: PropTypes.shape({\n params: PropTypes.shape({\n programId: PropTypes.string.isRequired,\n moduleIndex: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n hasLoaded: PropTypes.bool.isRequired,\n program: PropTypes.object,\n};\n\nModule.defaultProps = {\n program: null,\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n translate: getTranslate(state.localize),\n program: state.publicStore.details && state.publicStore.details[ownProps.match.params.programId],\n hasLoaded: Boolean(state.publicStore.requests[`${PUBLIC_PROGRAM_RECEIVED}/${ownProps.match.params.programId}`]\n && state.publicStore.requests[`${PUBLIC_PROGRAM_RECEIVED}/${ownProps.match.params.programId}`].completed),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(Module));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\n\nimport { Link, Redirect } from 'react-router-dom';\nimport {\n Typography,\n} from '@material-ui/core';\n\nimport urls from '../../app/urls';\nimport { getImageUrl } from '../../youwell-common/apiUrls';\nimport { Image, HtmlContent } from '../../youwell-common/components';\nimport { DefaultProgramImage } from '../../common/image';\nimport { elementInfoClasses, tableListClasses } from '../../app/style/sharedClasses';\nimport { InfoMessage, PageLayout } from '../../common/components';\nimport { PUBLIC_PROGRAM_RECEIVED } from '../../app/store/actions';\n\nconst styles = theme => ({\n ...tableListClasses(theme),\n ...elementInfoClasses(theme),\n main: {\n display: 'flex',\n flexDirection: 'column',\n\n [theme.breakpoints.down('xs')]: {\n paddingTop: theme.spacing(1),\n },\n },\n programHeader: {\n marginBottom: theme.spacing(8),\n },\n programImage: {\n float: 'left',\n width: '50%',\n marginRight: theme.spacing(2),\n },\n programDescription: {\n\n },\n});\n\nclass Program extends React.Component {\n render() {\n const {\n classes, translate, program, hasLoaded,\n } = this.props;\n\n\n if (!program) {\n return hasLoaded ? () : null;\n }\n\n if (program.keyValues?.publicRedirectModule) {\n const moduleIndex = program.modules?.findIndex(d => d.id === program.keyValues.publicRedirectModule)\n if (moduleIndex > -1) {\n return (\n \n );\n }\n }\n\n const isSingleModule = program.modules && program.modules.length === 1;\n\n if (isSingleModule) {\n return (\n \n );\n }\n\n const programImage = program.frontImageId ? getImageUrl(program.frontImageId) : null;\n\n return (\n \n \n
\n
\n {programImage ? : (\n \n )}\n
\n\n
\n
\n \n {program.name}\n \n
\n\n
\n
\n
\n\n
\n
\n \n {translate('modules')}\n \n
\n\n
\n {program.modules && program.modules.map((module, i) => (\n
\n
\n \n {i + 1}\n \n
\n
\n \n {module.name}\n \n
\n \n ))}\n
\n
\n
\n \n\n );\n }\n}\n\nProgram.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n program: PropTypes.object,\n hasLoaded: PropTypes.bool.isRequired,\n};\n\nProgram.defaultProps = {\n program: null,\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n translate: getTranslate(state.localize),\n program: state.publicStore.details && state.publicStore.details[ownProps.match.params.programId],\n hasLoaded: Boolean(state.publicStore.requests[`${PUBLIC_PROGRAM_RECEIVED}/${ownProps.match.params.programId}`]\n && state.publicStore.requests[`${PUBLIC_PROGRAM_RECEIVED}/${ownProps.match.params.programId}`].completed),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(Program));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { bindActionCreators } from 'redux';\nimport { Button } from '@material-ui/core';\nimport { Redirect } from 'react-router';\nimport { PrevIcon, NextIcon } from '../../common/icons';\n\nimport * as PublicStore from '../../app/store/PublicStore';\nimport urls from '../../app/urls';\nimport { InfoMessage, PageLayout } from '../../common/components';\nimport PublicTaskContent from './components/PublicTaskContent';\nimport { PUBLIC_PROGRAM_RECEIVED } from '../../app/store/actions';\nimport { DelayedFetch } from '../../youwell-common/components';\nimport { parseBoolString } from '../../youwell-common/stringUtils';\n\nconst styles = theme => ({\n content: {\n border: theme.youwell.borders.dim,\n },\n actions: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n margin: theme.spacing(4, 0),\n },\n singleactions: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n margin: theme.spacing(4, 0),\n },\n navIconLeft: {\n marginRight: theme.spacing(1),\n },\n navIconRight: {\n marginLeft: theme.spacing(1),\n },\n});\n\nclass Task extends React.Component {\n taskContentRef = React.createRef()\n\n clickNext = nextDirection => () => {\n const { program, match } = this.props;\n const { programId, moduleIndex, taskIndex } = match.params;\n\n const module = program && program.modules && program.modules[moduleIndex];\n const task = module && module.tasks && module.tasks[taskIndex];\n\n const currentStep = Number(taskIndex);\n const nextTaskNr = currentStep + nextDirection;\n const isLastTask = nextTaskNr > module.tasks.length - 1;\n const hasExitNodeElement = window.__youwellExitNode === true; // used to define that module should be exited early\n\n let redirect = '';\n if (isLastTask || nextTaskNr < 0) redirect = `${urls.public.home}/${programId}`;\n else redirect = `${urls.public.program}/${programId}/${moduleIndex}/${nextTaskNr}`;\n\n const go = () => {\n if (hasExitNodeElement && nextDirection > 0) {\n this.props.endSession(PublicStore.endSessionReasons.completed, `${urls.public.home}/${programId}`);\n } else {\n this.props.completeTask({ taskId: task.id, stepNr: currentStep }, redirect);\n }\n };\n\n if (this.taskContentRef.current) {\n if (nextDirection > 0) {\n this.taskContentRef.current.validateAndSave(go);\n } else {\n this.taskContentRef.current.saveWithoutValidation(go);\n }\n }\n }\n\n visitTask = () => {\n const { program, match, patientProgramElementId } = this.props;\n const { moduleIndex, taskIndex } = match.params;\n\n const module = program && program.modules && program.modules[moduleIndex];\n const task = module && module.tasks && module.tasks[taskIndex];\n\n if (patientProgramElementId && task) {\n this.props.visitTask({\n ppeId: patientProgramElementId,\n id: task.id,\n });\n }\n }\n\n endSession = () => {\n this.props.endSession(PublicStore.endSessionReasons.completed);\n }\n\n render() {\n const {\n classes, translate, program, match, hasLoaded, latestCompletedStep, clientConfig,\n } = this.props;\n const { programId, moduleIndex, taskIndex } = match.params;\n\n const module = program && program.modules && program.modules[moduleIndex];\n const task = module && module.tasks && module.tasks[taskIndex];\n\n if (!task) {\n return hasLoaded ? () : null;\n }\n\n const isSingleModule = program.modules && program.modules.length === 1;\n\n const taskIndexNr = Number(taskIndex || 0);\n\n const isFirstTask = !taskIndex || taskIndex === '0';\n const moreElementsInGroup = module.tasks.length > 1;\n const isLastTask = !moreElementsInGroup || taskIndexNr === module.tasks.length - 1;\n\n if (taskIndexNr > (latestCompletedStep + 1) && !isLastTask) {\n return (\n \n );\n }\n\n return (\n \n \n {isLastTask && }\n\n \n\n {!isLastTask && (\n \n {!isFirstTask && (\n
\n )}\n
\n
\n
\n )}\n \n );\n }\n}\n\nTask.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n clientConfig: PropTypes.object.isRequired,\n match: PropTypes.shape({\n params: PropTypes.shape({\n programId: PropTypes.string.isRequired,\n moduleIndex: PropTypes.string.isRequired,\n taskIndex: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n completeTask: PropTypes.func.isRequired,\n visitTask: PropTypes.func.isRequired,\n hasLoaded: PropTypes.bool.isRequired,\n latestCompletedStep: PropTypes.number.isRequired,\n program: PropTypes.object,\n patientProgramElementId: PropTypes.string,\n endSession: PropTypes.func.isRequired,\n};\n\nTask.defaultProps = {\n program: null,\n patientProgramElementId: null,\n};\n\nconst mapStateToProps = (state, ownProps) => ({\n translate: getTranslate(state.localize),\n clientConfig: state.auth.clientConfig,\n program: state.publicStore.details && state.publicStore.details[ownProps.match.params.programId],\n patientProgramElementId: state.publicStore.patientProgramElementId,\n hasLoaded: Boolean(state.publicStore.requests[`${PUBLIC_PROGRAM_RECEIVED}/${ownProps.match.params.programId}`]\n && state.publicStore.requests[`${PUBLIC_PROGRAM_RECEIVED}/${ownProps.match.params.programId}`].completed),\n latestCompletedStep: state.publicStore.latestCompletedStep,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(PublicStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(Task));\n","import * as React from 'react';\nimport { useParams } from 'react-router';\n\nimport * as PublicStore from '../../../app/store/PublicStore';\nimport Auth, { authTypes } from '../../../youwell-common/Auth';\nimport { useYouwellDispatch, useYouwellSelector } from '../../../app/store';\nimport { LoadOrgConfig } from '../../../common/components';\n\nconst LoadPublicProgram = () => {\n const { programId } = useParams();\n const dispatch = useYouwellDispatch();\n const currentProgram = useYouwellSelector(state => state.publicStore.details?.[programId]);\n const currentOrgId = useYouwellSelector(state => state.publicStore.currentOrgId);\n const hasSessionData = useYouwellSelector(state => Boolean(state.publicStore.patientId && state.publicStore.progress));\n\n React.useEffect(() => {\n if (!currentProgram) {\n dispatch(PublicStore.actionCreators.getPublicProgram(programId, { isPage: true }));\n }\n }, [currentProgram, dispatch, programId]);\n\n React.useEffect(() => {\n if (Auth.isUserAuthenticated(authTypes.public) && currentProgram && !hasSessionData) {\n dispatch(PublicStore.actionCreators.getSession(programId));\n }\n }, [currentProgram, dispatch, hasSessionData, programId]);\n\n if (currentOrgId) {\n return (\n \n );\n }\n\n return null;\n}\n\nexport default LoadPublicProgram;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useDispatch, useSelector } from 'react-redux';\nimport classnames from 'classnames';\n\nimport * as PublicStore from '../../../app/store/PublicStore';\n\nimport { Loading, TaskContent } from '../../../youwell-common/components';\nimport { AUTOSAVE_TIMEOUT_INTERVAL } from '../../program/components/MyTaskContent';\nimport Auth, { authTypes } from '../../../youwell-common/Auth';\nimport { getItemFromProgram } from '../../../common/taskContentUtils';\nimport { getPublicProgramContentLink } from '../../../common/taskUtils';\nimport { getGetResponseFunc, getUpdatedResponsesForTask } from '../../../youwell-common/responseUtils';\n\nconst styles = () => ({\n root: {\n // Flex-display with wrap needed for card-layout on page\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n\n '@media print': {\n display: 'block',\n },\n },\n});\n\nconst useStyles = makeStyles(theme => styles(theme), { name: 'PublicTaskContent' });\n\nconst PublicTaskContent = ({\n forwardedRef, program, task, moduleId,\n}) => {\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const saveTimer = React.useRef();\n\n const allTaskResponses = useSelector(state => state.publicStore.responses);\n const patientProgramElementId = useSelector(state => state.publicStore.patientProgramElementId);\n const completedTasks = useSelector(state => state.publicStore.completedTasks);\n const [changeId, setChangeId] = React.useState(null);\n const [showSavingId, setShowSavingId] = React.useState(false);\n\n const responsesForCurrentTask = allTaskResponses && allTaskResponses[patientProgramElementId]\n && allTaskResponses[patientProgramElementId][task.id];\n const formId = responsesForCurrentTask?.formId;\n\n const updateResponse = (responses) => {\n const responseData = {\n programId: program.id,\n moduleId,\n taskId: task.id,\n taskVersion: task.version,\n patientProgramElementId,\n formId,\n responses,\n };\n\n setChangeId(Date.now());\n dispatch(PublicStore.actionCreators.updateResponse(responseData));\n };\n\n const saveResponses = React.useCallback((taskResponses, callback, showIsSaving) => {\n const responseData = changeId && getUpdatedResponsesForTask(taskResponses, patientProgramElementId, task.id, task.version, formId);\n\n if (responseData) {\n if (showIsSaving) {\n setShowSavingId(changeId);\n }\n dispatch(PublicStore.actionCreators.saveResponse(responseData, {\n background: true,\n callback: () => {\n setChangeId(prevId => (prevId === changeId ? null : prevId));\n setShowSavingId(prevId => (prevId === changeId ? null : prevId));\n\n if (callback) {\n callback();\n }\n },\n }));\n } else if (callback) {\n callback();\n }\n }, [changeId, dispatch, formId, patientProgramElementId, task.id, task.version]);\n\n const saveChanges = (callback) => {\n if (responsesForCurrentTask) {\n if (Auth.isUserAuthenticated(authTypes.public)) {\n clearTimeout(saveTimer.current);\n saveResponses(responsesForCurrentTask, callback, true);\n } else {\n const responseData = {\n ...getUpdatedResponsesForTask(responsesForCurrentTask, null, task.id, task.version, null),\n programId: program.id,\n moduleId,\n completedTasks: completedTasks ? Object.keys(completedTasks) : null,\n };\n\n dispatch(PublicStore.actionCreators.sendFirstResponse(responseData, { callback }));\n }\n } else if (callback) {\n callback();\n }\n };\n\n React.useEffect(() => {\n if (responsesForCurrentTask && changeId && Auth.isUserAuthenticated(authTypes.public)) {\n if (saveTimer.current) {\n clearTimeout(saveTimer.current);\n }\n saveTimer.current = setTimeout(() => {\n saveResponses(responsesForCurrentTask);\n }, AUTOSAVE_TIMEOUT_INTERVAL);\n }\n }, [changeId, responsesForCurrentTask, saveResponses, task.id]);\n\n const getLinkUrl = link => getPublicProgramContentLink(link, program);\n\n const getProgramItem = id => getItemFromProgram(program, id);\n\n return (\n <>\n \n\n \n >\n );\n};\n\nPublicTaskContent.propTypes = {\n forwardedRef: PropTypes.object,\n task: PropTypes.object.isRequired,\n program: PropTypes.object.isRequired,\n moduleId: PropTypes.string.isRequired,\n};\n\nPublicTaskContent.defaultProps = {\n forwardedRef: null,\n};\n\nconst WithRef = React.forwardRef((props, ref) => );\nexport default WithRef;\n","import * as React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { Button } from '@material-ui/core';\n\nimport * as PublicStore from '../../../app/store/PublicStore';\nimport urls from '../../../app/urls';\n\nconst styles = theme => ({\n root: {\n margin: theme.spacing(4, 0, 2),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n button: {\n textTransform: 'none',\n },\n});\n\nconst useStyles = makeStyles(theme => styles(theme), { name: 'SessionFooter' });\n\nconst SessionFooter = () => {\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const translate = useSelector(state => getTranslate(state.localize));\n const currentProgramId = useSelector(state => state.publicStore.currentProgramId);\n const patientProgramElementId = useSelector(state => state.publicStore.patientProgramElementId);\n\n if (!patientProgramElementId) {\n return null;\n }\n\n const endSession = () => {\n const redirect = `${urls.public.program}/${currentProgramId}`;\n dispatch(PublicStore.actionCreators.endSession(PublicStore.endSessionReasons.manualEnd, redirect));\n };\n\n return (\n \n \n
\n );\n};\n\nexport default SessionFooter;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_router_dom_1 = require(\"react-router-dom\");\nvar urls_1 = __importDefault(require(\"../../app/urls\"));\nvar components_1 = require(\"../../youwell-common/components\");\nvar components_2 = require(\"../../common/components\");\nvar SingleTaskPage_1 = __importDefault(require(\"./SingleTaskPage\"));\nvar taskContentUtils_1 = require(\"../../common/taskContentUtils\");\nvar Index = /** @class */ (function (_super) {\n __extends(Index, _super);\n function Index() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.getLinkUrl = function (link) {\n var _a = (0, taskContentUtils_1.parseInternalLink)(link), taskOrModuleId = _a.taskOrModuleId, hash = _a.hash;\n return \"\".concat(urls_1.default.singlepage, \"/\").concat(taskOrModuleId).concat(hash);\n };\n return _this;\n }\n Index.prototype.render = function () {\n return (React.createElement(components_2.Layout, { hideHeaderLinks: true, hideMenu: true },\n React.createElement(components_2.InternalLinkLoader, { linkUrlFunction: this.getLinkUrl }),\n React.createElement(react_router_dom_1.Switch, null,\n React.createElement(react_router_dom_1.Route, { path: \"\".concat(urls_1.default.singlepage, \"/:taskId\"), component: SingleTaskPage_1.default }),\n React.createElement(react_router_dom_1.Route, { component: components_1.PageNotFound }))));\n };\n return Index;\n}(React.Component));\nexports.default = Index;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_1 = require(\"react\");\nvar react_redux_1 = require(\"react-redux\");\nvar react_router_1 = require(\"react-router\");\nvar PreviewStore = __importStar(require(\"../../app/store/PreviewStore\"));\nvar components_1 = require(\"../../common/components\");\nvar PreviewTaskContent_1 = __importDefault(require(\"../preview/components/PreviewTaskContent\"));\nvar actions_1 = require(\"../../app/store/actions\");\nvar store_1 = require(\"../../app/store\");\nvar SingleTaskPage = function () {\n var taskId = (0, react_router_1.useParams)().taskId;\n var dispatch = (0, react_redux_1.useDispatch)();\n var task = (0, store_1.useYouwellSelector)(function (state) { var _a; return (_a = state.previewStore.details) === null || _a === void 0 ? void 0 : _a[taskId]; });\n var hasLoaded = (0, store_1.useYouwellSelector)(function (state) { return Boolean(state.previewStore.requests[\"\".concat(actions_1.PREVIEW_TASK_RECEIVED, \"/\").concat(taskId)]\n && state.previewStore.requests[\"\".concat(actions_1.PREVIEW_TASK_RECEIVED, \"/\").concat(taskId)].completed); });\n (0, react_1.useEffect)(function () {\n if (taskId && !hasLoaded && !task) {\n dispatch(PreviewStore.actionCreators.getElement(taskId));\n }\n }, [dispatch, hasLoaded, task, taskId]);\n if (!task) {\n return hasLoaded ? (React.createElement(components_1.InfoMessage, { messageKey: \"noContent\" })) : null;\n }\n return (React.createElement(components_1.PageLayout, { title: task.name, task: task },\n React.createElement(\"div\", null,\n React.createElement(PreviewTaskContent_1.default\n // @ts-ignore -- must update PreviewTaskContent to typescript\n , { \n // @ts-ignore -- must update PreviewTaskContent to typescript\n task: task }))));\n};\nexports.default = SingleTaskPage;\n","\nimport { sendError } from '../../youwell-common/errorUtils';\n\nlet myPeerConnection;\nlet negotiationStarted = false;\n\nconst videoPeerConnections = {\n\n endPeerConnection: () => {\n if (myPeerConnection) {\n myPeerConnection.onIceCandidate = null;\n myPeerConnection.ontrack = null;\n myPeerConnection.onnegotiationneeded = null;\n myPeerConnection.onremovetrack = null;\n myPeerConnection.oniceconnectionstatechange = null;\n myPeerConnection.onicegatheringstatechange = null;\n myPeerConnection.onicecandidateerror = null;\n myPeerConnection.onsignalingstatechange = null;\n myPeerConnection.close();\n myPeerConnection = null;\n negotiationStarted = false;\n }\n },\n\n startPeerConnection: (id, sendCandidateCallback, remoteTrackCallback, trackRemovedCallback, disconnectedCallback) => {\n myPeerConnection = new RTCPeerConnection({\n iceServers: [\n ],\n });\n\n myPeerConnection.onicecandidate = (evt) => {\n if (evt.candidate) {\n sendCandidateCallback({\n target: id,\n type: 'new-ice-candidate',\n data: evt.candidate,\n });\n }\n };\n myPeerConnection.ontrack = (evt) => { remoteTrackCallback(evt.streams[0]); };\n myPeerConnection.onnegotiationneeded = () => {\n if (!negotiationStarted) {\n negotiationStarted = true;\n }\n };\n myPeerConnection.onremovetrack = () => trackRemovedCallback();\n myPeerConnection.oniceconnectionstatechange = () => {\n switch (myPeerConnection.iceConnectionState) {\n case 'closed':\n case 'failed':\n case 'disconnected':\n disconnectedCallback();\n break;\n default:\n break;\n }\n };\n // myPeerConnection.onicegatheringstatechange = (evt) => { console.log(`Ice connection state change: ${myPeerConnection.iceConnectionState}`); };\n myPeerConnection.onicecandidateerror = error => sendError({ sender: 'VideoPeerConnection', error: error && error.toString() });\n myPeerConnection.onsignalingstatechange = () => {\n switch (myPeerConnection.signalingState) {\n case 'closed':\n disconnectedCallback();\n break;\n default:\n break;\n }\n };\n },\n\n setupPeerConnectionStream: (localStream) => {\n localStream.getTracks().forEach(track => myPeerConnection.addTrack(track, localStream));\n },\n\n answerPeerConnection: (myId, offerSDP, createAnswerCallback) => {\n const remoteSDP = new RTCSessionDescription({\n type: 'offer',\n sdp: offerSDP,\n });\n\n myPeerConnection.setRemoteDescription(remoteSDP)\n .then(() => {\n myPeerConnection.createAnswer()\n .then((answer) => { myPeerConnection.setLocalDescription(answer); return answer; })\n .then((answer) => {\n createAnswerCallback({\n target: myId,\n type: 'videochat-answer',\n data: answer.sdp,\n });\n })\n .catch(error => sendError({ sender: 'VideoPeerConnection', error: error && error.toString() }));\n }).catch(error => sendError({ sender: 'VideoPeerConnection', error: error && error.toString() }));\n },\n\n receiveIceCandidate: (candidateData) => {\n myPeerConnection.addIceCandidate(candidateData);\n },\n};\n\nexport default videoPeerConnections;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar constants_1 = require(\"../../youwell-common/constants\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar store_1 = require(\"../../app/store\");\nvar dateUtils_1 = require(\"../../youwell-common/dateUtils\");\nvar YouwellVideoChat_1 = __importDefault(require(\"./YouwellVideoChat\"));\nvar arrayUtils_1 = require(\"../../youwell-common/arrayUtils\");\nvar components_1 = require(\"../../common/components\");\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return (0, core_1.createStyles)({\n root: {\n paddingTop: theme.spacing(2),\n },\n heading: {\n marginBottom: theme.spacing(2),\n },\n appointmentListItem: {\n marginBottom: theme.spacing(1),\n background: theme.palette.common.white,\n },\n alertMessage: {\n padding: theme.spacing(3),\n },\n noAppointments: {\n padding: theme.spacing(3),\n },\n}); });\nvar Videochat = function () {\n var _a;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var patientData = (0, store_1.useYouwellSelector)(function (state) { return state.auth.profileData; });\n var _b = React.useState(null), selectedAppointment = _b[0], setSelectedAppointment = _b[1];\n var _c = React.useState(''), alertMessage = _c[0], setAlertMessage = _c[1];\n var startCall = function (appointment) { return function () {\n switch (appointment.provider) {\n case constants_1.ChatVideoProviders.Join: {\n var start = new Date(\"\".concat(appointment.start, \"Z\"));\n var end = (0, dateUtils_1.addHours)(start, 1);\n if (start > new Date()) {\n setAlertMessage(translate('videoChat.notStarted'));\n }\n else if (end < new Date()) {\n setAlertMessage(translate('videoChat.ended'));\n }\n else if (appointment.connectionUrl) {\n var joinUrl = \"\".concat(appointment.connectionUrl\n // replaced due to bug in HnH Join. To be removed..\n .replace('https://join.test.video.nhn.no/conference?', 'https://delta.test.video.nhn.no/webapp3/#/?conference='), \"&name=\").concat(patientData === null || patientData === void 0 ? void 0 : patientData.name);\n window.open(joinUrl, '_blank', 'noreferrer');\n }\n break;\n }\n default: {\n setSelectedAppointment(appointment.id);\n break;\n }\n }\n }; };\n if (!patientData) {\n return null;\n }\n var isInFuture = function (appointment) {\n switch (appointment.provider) {\n case constants_1.ChatVideoProviders.Join: {\n var start = new Date(\"\".concat(appointment.start, \"Z\"));\n return start >= new Date()\n || (0, dateUtils_1.addHours)(start, 1) > new Date();\n }\n default: {\n return (0, dateUtils_1.isFuture)(appointment.start, true);\n }\n }\n };\n var orderedAppointments = ((_a = (0, arrayUtils_1.sortByDateAscending)(patientData.appointments, 'start')) !== null && _a !== void 0 ? _a : [])\n .filter(function (d) { return (0, dateUtils_1.compareDates)(d.start, -1); }) // Dont show older than 1 day\n .map(function (d) { return (__assign(__assign({}, d), { isFuture: isInFuture(d) })); });\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(components_1.PortalModal, { heading: translate('videoChat.unavailable'), open: !!alertMessage, onClose: function () { return setAlertMessage(''); } },\n React.createElement(\"div\", { className: classes.alertMessage },\n React.createElement(core_1.Typography, { variant: \"body1\" }, alertMessage))),\n selectedAppointment ? (React.createElement(YouwellVideoChat_1.default, { onCancel: function () { return setSelectedAppointment(null); } })) : (React.createElement(React.Fragment, null,\n React.createElement(core_1.Typography, { variant: \"h6\", className: classes.heading }, translate('videoChat.appointmentListTitle')),\n React.createElement(core_1.List, null, orderedAppointments.map(function (appointment) { return (React.createElement(core_1.ListItem, { className: classes.appointmentListItem, key: appointment.id },\n React.createElement(core_1.ListItemText, { primary: (0, dateUtils_1.timestamp)(appointment.start, translate) }),\n appointment.isFuture ? (React.createElement(core_1.Button, { onClick: startCall(appointment), variant: \"contained\", color: \"primary\" }, translate('videoChat.joinCall'))) : (React.createElement(core_1.Typography, { variant: \"subtitle1\" }, translate('videoChat.ended'))))); })),\n orderedAppointments.length === 0 && (React.createElement(core_1.Typography, { variant: \"subtitle1\", className: classes.noAppointments }, translate('videoChat.noAppointments')))))));\n};\nexports.default = Videochat;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { bindActionCreators } from 'redux';\n\nimport {\n Button,\n} from '@material-ui/core';\n\nimport {\n HubConnectionBuilder, LogLevel, HttpTransportType,\n} from '@microsoft/signalr';\n\nimport videoPeerConnections from './VideoPeerConnection';\n\nimport apiUrls from '../../youwell-common/apiUrls';\nimport { sendError } from '../../youwell-common/errorUtils';\n\nimport * as UserStore from '../../app/store/UserStore';\n\n\nconst styles = theme => ({\n root: {\n },\n startActions: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n videos: {\n padding: theme.spacing(1),\n display: 'flex',\n justifyContent: 'center',\n flexWrap: 'wrap',\n },\n video: {\n margin: theme.spacing(2),\n },\n inCallActions: {\n margin: theme.spacing(4),\n display: 'flex',\n justifyContent: 'center',\n },\n cancelButton: {\n margin: theme.spacing(0, 2),\n },\n});\n\n\nclass YouwellVideochat extends React.Component {\n state = {\n isInTheCall: false,\n isBeingCalled: false,\n isReady: false,\n infoText: '',\n }\n\n componentWillUnmount() {\n if (this.signalRConnection) {\n this.signalRConnection.stop().catch(this.onError);\n }\n }\n\n onError = (error) => {\n sendError({ sender: 'Videochat', error: error && error.toString() });\n }\n\n onCreateAnswer = (answer) => {\n if (this.signalRConnection) {\n this.signalRConnection.send('FinalizeJoinVideoCallRoom', answer)\n .catch(this.onError);\n }\n }\n\n onSendCandidate = (candidate) => {\n this.signalRConnection.send('SendIceCandidate', candidate)\n .catch(this.onError);\n }\n\n onReceiveCandidate = (id, type, candidate) => {\n if (id === this.props.profile.id) {\n videoPeerConnections.receiveIceCandidate(candidate);\n }\n }\n\n onRemoteStream = (remoteStream) => {\n if (this.remoteVideo && this.remoteVideo.srcObject !== remoteStream) {\n this.remoteVideo.srcObject = remoteStream;\n }\n }\n\n onTrackRemoved = () => {\n if (this.remoteVideo && this.remoteVideo.srcObject) {\n const stream = this.remoteVideo.srcObject;\n const trackList = stream.getTracks();\n if (trackList.length === 0) {\n this.endCall();\n }\n }\n }\n\n onPeerDisconnected = () => {\n this.endCall();\n }\n\n onSignalrCloseVideocall = () => {\n this.endCall();\n }\n\n onSignalrReceiveSDP = (sdp) => {\n if (this.hasVideoStreamStarted === false) {\n this.hasVideoStreamStarted = true;\n if (videoPeerConnections) {\n this.getUserMedia(\n { min: 160, ideal: 320, max: 320 },\n { min: 120, ideal: 240, max: 240 },\n ).then((video) => {\n videoPeerConnections.startPeerConnection(this.props.profile.id,\n this.onSendCandidate,\n this.onRemoteStream,\n this.onTrackRemoved,\n this.onPeerDisconnected);\n videoPeerConnections.setupPeerConnectionStream(video);\n videoPeerConnections.answerPeerConnection(this.props.profile.id, sdp, this.onCreateAnswer);\n })\n .catch(this.onError);\n }\n }\n }\n\n onSignalrJoinVideocallFailed = () => {\n this.setState({ isInTheCall: false, isBeingCalled: false });\n }\n\n onSignalRStart = () => {\n this.hasVideoStreamStarted = false;\n if (this.signalRConnection) {\n const data = {\n target: this.props.profile.id,\n type: 'join-videocall',\n };\n this.signalRConnection.send('JoinVideoCallRoom', data)\n .catch(this.onError);\n }\n }\n\n getUserMedia = (width, height) => new Promise((resolve, reject) => {\n navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;\n const op = {\n video: {\n width,\n height,\n },\n audio: true,\n };\n\n if (navigator.getUserMedia) {\n navigator.getUserMedia(op, (stream) => {\n if (this.localVideo) {\n this.localVideo.srcObject = stream;\n }\n resolve(stream);\n }, (err) => {\n reject(err);\n });\n }\n })\n\n call = () => {\n this.setState({ isInTheCall: true }, this.onSignalRStart);\n }\n\n beReadyForCall = () => {\n this.setState({ isReady: true, infoText: this.props.translate('videoChat.notBeingCalled') }, () => {\n if (this.signalRConnection) {\n const data = {\n target: this.props.profile.id,\n type: 'ready-videocall',\n data: '',\n };\n this.signalRConnection.send('PatientIsWaiting', data)\n .catch(this.onError);\n }\n });\n }\n\n cancelCall = () => {\n this.setState({ isReady: false, infoText: '' }, () => {\n this.props.onCancel();\n });\n }\n\n endCall = () => {\n if (this.localVideo && this.localVideo.srcObject) {\n this.localVideo.srcObject.getTracks().forEach(track => track.stop());\n }\n if (this.remoteVideo && this.remoteVideo.srcObject) {\n this.remoteVideo.srcObject.getTracks().forEach(track => track.stop());\n }\n this.setState({ isInTheCall: false,\n isBeingCalled: false,\n isReady: false,\n infoText: this.props.translate('videoChat.callInterrupted') }, () => {\n if (this.signalRConnection) {\n const data = {\n target: this.props.profile.id,\n type: 'leave-videocall',\n data: '',\n };\n this.signalRConnection.send('LeaveVideoCallRoom', data)\n .catch(this.onError);\n }\n videoPeerConnections.endPeerConnection();\n });\n }\n\n onSignalrAllowVideocall = (id) => {\n if (id === this.props.profile.id) {\n this.setState({ isBeingCalled: true });\n }\n }\n\n onCallInterrupted = () => {\n if (this.state.isInTheCall) {\n this.endCall();\n } else if (this.state.isBeingCalled) {\n this.setState({ isBeingCalled: false, isReady: true, infoText: this.props.translate('videoChat.notBeingCalled') }, () => {});\n }\n }\n\n onPingPatient = () => {\n if (this.state.isReady && this.signalRConnection) {\n const data = {\n target: this.props.profile.id,\n type: 'ready-videocall',\n data: '',\n };\n this.signalRConnection.send('PatientIsWaiting', data)\n .catch(this.onError);\n }\n }\n\n createConnection = () => {\n if (!this.signalRConnection) {\n const options = {\n transport: HttpTransportType.WebSockets,\n };\n this.signalRConnection = new HubConnectionBuilder()\n .configureLogging(LogLevel.Warning)\n .withUrl(`${apiUrls.baseUrl}/${apiUrls.socket.videoChat}`, options)\n .withAutomaticReconnect()\n .build();\n this.signalRConnection.on('CallerIsWaiting', this.onSignalrAllowVideocall);\n this.signalRConnection.on('CloseVideocall', this.onSignalrCloseVideocall);\n this.signalRConnection.on('ReceiveVideocallSDP', this.onSignalrReceiveSDP);\n this.signalRConnection.on('ReceiveIceCandidate', this.onReceiveCandidate); // this never fires?!\n this.signalRConnection.on('JoinVideoCallRoomFailed', this.onSignalrJoinVideocallFailed);\n this.signalRConnection.on('CallInterrupted', this.onCallInterrupted);\n this.signalRConnection.on('PingPatient', this.onPingPatient);\n\n this.signalRConnection.onclose(() => {\n\n });\n\n this.signalRConnection.start().then(() => {}).catch(this.onError);\n }\n }\n\n render() {\n const {\n classes, translate, profile,\n } = this.props;\n\n if (!profile) {\n return null;\n }\n\n if (this.state.infoText === '') {\n this.setState({ infoText: this.props.translate('videoChat.notReadyYet') });\n }\n\n this.createConnection();\n\n return (\n \n {this.state.isInTheCall ? (\n
\n \n
\n \n \n
\n \n ) : (\n
\n {this.state.isBeingCalled ? (\n
\n \n
\n ) : (\n
\n\n \n
{this.state.infoText}
\n
\n\n {this.state.isReady ? (\n <>\n \n \n
\n >\n ) : (\n <>\n \n \n \n
\n >\n )}\n \n )}\n
\n )}\n
\n );\n }\n}\n\nYouwellVideochat.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n profile: PropTypes.object,\n};\n\nYouwellVideochat.defaultProps = {\n profile: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n profile: state.auth.profileData,\n});\n\nconst mapDispatchToProps = dispatch => ({\n ...bindActionCreators(UserStore.actionCreators, dispatch),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(YouwellVideochat));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar _a, _b, _c, _d, _e, _f;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"core-js/stable\");\nrequire(\"regenerator-runtime/runtime\");\nvar React = __importStar(require(\"react\"));\nvar ReactDOM = __importStar(require(\"react-dom\"));\nvar react_redux_1 = require(\"react-redux\");\nvar connected_react_router_1 = require(\"connected-react-router\");\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar react_localize_redux_1 = require(\"react-localize-redux\");\nvar date_fns_1 = __importDefault(require(\"@date-io/date-fns\"));\n// import enLocale from \"date-fns/locale/en-US\";\nvar nb_1 = __importDefault(require(\"date-fns/locale/nb\"));\nvar pickers_1 = require(\"@material-ui/pickers\");\nvar core_1 = require(\"@material-ui/core\");\nrequire(\"./app/style/styles.less\");\nvar theme_1 = __importDefault(require(\"./app/style/theme\"));\nvar App_1 = __importDefault(require(\"./app/App\"));\nvar PageSettingStore_1 = require(\"./app/store/PageSettingStore\");\nvar apiUrls_1 = require(\"./youwell-common/apiUrls\");\nvar reduxUtils_1 = require(\"./youwell-common/reduxUtils\");\nvar store_1 = __importStar(require(\"./app/store\"));\nvar localization_1 = require(\"./app/localization\");\nvar youwell_common_1 = require(\"./youwell-common\");\nvar constants_1 = require(\"./youwell-common/constants\");\nvar apiUrl = (_a = document.getElementById('react-app')) === null || _a === void 0 ? void 0 : _a.getAttribute('data-api-url');\nvar appVersion = (_b = document.getElementById('react-app')) === null || _b === void 0 ? void 0 : _b.getAttribute('data-app-version');\nvar appConfig = JSON.parse(((_c = document.getElementById('react-app')) === null || _c === void 0 ? void 0 : _c.getAttribute('data-app-config')) || '');\nvar userLanguage = (_d = document.getElementById('react-app')) === null || _d === void 0 ? void 0 : _d.getAttribute('data-user-language');\nif (!apiUrl) {\n throw new Error('Missing asp-prerender parameter: data-apiUrl');\n}\n(0, apiUrls_1.setApiRoot)(apiUrl, appConfig.contentBaseUrl, appConfig.imageContentBaseUrl);\nyouwell_common_1.Auth.setStorageProviderByLoginType((_f = (_e = appConfig.allowedLogins) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : constants_1.loginTypes.password);\nPageSettingStore_1.actionCreators.setVersion(appVersion)(store_1.default.dispatch);\nPageSettingStore_1.actionCreators.setAppConfig(appConfig)(store_1.default.dispatch);\nvar localizationInitialization = (0, localization_1.translateInitialization)(appConfig.language || userLanguage);\nvar MainApp = function () {\n var prefersDarkMode = (0, core_1.useMediaQuery)('(prefers-color-scheme: dark)');\n var theme = React.useMemo(function () { return (0, theme_1.default)(appConfig, prefersDarkMode); }, [prefersDarkMode]);\n return (React.createElement(styles_1.MuiThemeProvider, { theme: theme },\n React.createElement(pickers_1.MuiPickersUtilsProvider, { utils: date_fns_1.default, locale: nb_1.default },\n React.createElement(react_localize_redux_1.LocalizeProvider, { store: store_1.default, initialize: localizationInitialization },\n React.createElement(react_redux_1.Provider, { store: store_1.default },\n React.createElement(connected_react_router_1.ConnectedRouter, { history: store_1.history },\n React.createElement(App_1.default, null)))))));\n};\nvar renderApp = function () {\n ReactDOM.render(React.createElement(MainApp, null), document.getElementById('react-app'));\n};\nif (module.hot) {\n module.hot.accept('./app/store', function () {\n (0, reduxUtils_1.updateStore)(store_1.default, store_1.reducers, store_1.history);\n });\n}\nrenderApp();\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PostAppMessage = exports.APPMessages = void 0;\nexports.APPMessages = {\n LoggedInLevel: 'LoggedInLevel',\n CurrentLanguage: 'CurrentLanguage',\n};\nvar PostAppMessage = function (key, value) {\n var _a, _b;\n if ((_a = window.ywAppMessage) === null || _a === void 0 ? void 0 : _a.postMessage) {\n window.ywAppMessage.postMessage(\"\".concat(key, \":\").concat(value));\n }\n if ((_b = window.ReactNativeWebView) === null || _b === void 0 ? void 0 : _b.postMessage) {\n window.ReactNativeWebView.postMessage(\"\".concat(key, \":\").concat(value));\n }\n};\nexports.PostAppMessage = PostAppMessage;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.authTypes = void 0;\nvar AppUtil_1 = require(\"./AppUtil\");\nvar constants_1 = require(\"./constants\");\nvar LOGINLEVEL_KEY = 'yw_ll';\nvar SESSION_LIFETIME_KEY = 'yw_sl';\nvar LOGINTYPE_KEY = 'yw_lt';\nexports.authTypes = {\n user: 'usr',\n orgSelect: 'org',\n external: 'ext',\n public: 'pub',\n};\nvar storageProvider = window.localStorage;\nvar Auth = /** @class */ (function () {\n function Auth() {\n }\n Auth.setStorageProviderByLoginType = function (loginType) {\n switch (loginType) {\n case constants_1.loginTypes.idPorten:\n storageProvider = window.sessionStorage;\n break;\n case constants_1.loginTypes.selfStart:\n case constants_1.loginTypes.password:\n case constants_1.loginTypes.twoFactor:\n default:\n storageProvider = window.localStorage;\n break;\n }\n };\n Auth.isUserAuthenticated = function () {\n var acceptedTypes = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n acceptedTypes[_i] = arguments[_i];\n }\n var hasLoginLevel = this.getLoginLevel() > 0;\n if (!hasLoginLevel)\n return false;\n if ((acceptedTypes === null || acceptedTypes === void 0 ? void 0 : acceptedTypes.length) > 0) {\n var loggedInType = this.getLoginType();\n return acceptedTypes.indexOf(loggedInType) > -1;\n }\n return true;\n };\n Auth.deauthenticateUser = function () {\n storageProvider.setItem(LOGINLEVEL_KEY, '');\n storageProvider.setItem(SESSION_LIFETIME_KEY, '');\n storageProvider.setItem(LOGINTYPE_KEY, '');\n (0, AppUtil_1.PostAppMessage)(AppUtil_1.APPMessages.LoggedInLevel, 0);\n };\n Auth.getLoginLevel = function () {\n return Number(storageProvider.getItem(LOGINLEVEL_KEY)) || 0;\n };\n Auth.getSessionLifetime = function () {\n return Number(storageProvider.getItem(SESSION_LIFETIME_KEY)) || 0;\n };\n Auth.getLoginType = function () {\n return storageProvider.getItem(LOGINTYPE_KEY);\n };\n Auth.setLoginInfo = function (level, sessionLifetime, authType) {\n storageProvider.setItem(LOGINLEVEL_KEY, (level === null || level === void 0 ? void 0 : level.toString()) || '');\n storageProvider.setItem(SESSION_LIFETIME_KEY, (sessionLifetime === null || sessionLifetime === void 0 ? void 0 : sessionLifetime.toString()) || '');\n storageProvider.setItem(LOGINTYPE_KEY, authType || '');\n (0, AppUtil_1.PostAppMessage)(AppUtil_1.APPMessages.LoggedInLevel, level);\n };\n return Auth;\n}());\nexports.default = Auth;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CookieNames = void 0;\nvar inMemoryCookies = {};\nexports.CookieNames = {\n csrf: '__Secure-yw_rf',\n};\nvar Cookie = /** @class */ (function () {\n function Cookie() {\n }\n /**\n * Gets the value of the given cookie.\n *\n * @param {string} cname Name of a cookie\n */\n Cookie.getValue = function (cname) {\n var _a;\n if (typeof document === 'undefined') {\n return (_a = inMemoryCookies[cname]) !== null && _a !== void 0 ? _a : '';\n }\n var name = \"\".concat(cname, \"=\");\n var decodedCookie = decodeURIComponent(document.cookie);\n var ca = decodedCookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n };\n /**\n * Deletes the given cookie.\n *\n * @param {string} cname Name of a cookie\n */\n Cookie.delete = function (cname) {\n if (typeof document === 'undefined') {\n delete inMemoryCookies[cname];\n }\n else {\n document.cookie = \"\".concat(cname, \"=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/\");\n }\n };\n return Cookie;\n}());\nexports.default = Cookie;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.handleOptions = exports.PATCHED = exports.UPDATED = exports.DELETED = exports.INSERTED = exports.DETAILS_RECIEVED = exports.LIST_RECIEVED = exports.REQUEST_COMPLETE = exports.REQUEST_FAILED = exports.REQUEST_START = exports.LOGOUT = exports.CLEAR_ERROR = void 0;\nvar connected_react_router_1 = require(\"connected-react-router\");\nvar apiUrls_1 = __importDefault(require(\"./apiUrls\"));\nvar fetchUtils_1 = require(\"./fetchUtils\");\nvar objectUtils_1 = require(\"./objectUtils\");\nexports.CLEAR_ERROR = 'APP/CLEAR_ERROR';\nexports.LOGOUT = 'APP/LOGOUT';\nexports.REQUEST_START = 'REQUEST_START';\nexports.REQUEST_FAILED = 'REQUEST_FAILED';\nexports.REQUEST_COMPLETE = 'REQUEST_COMPLETE';\nexports.LIST_RECIEVED = 'LIST_RECIEVED';\nexports.DETAILS_RECIEVED = 'DETAILS_RECIEVED';\nexports.INSERTED = 'INSERTED';\nexports.DELETED = 'DELETED';\nexports.UPDATED = 'UPDATED';\nexports.PATCHED = 'PATCHED';\nvar handleOptions = function (options, data, dispatch) {\n if (!options) {\n return;\n }\n if (options.callback) {\n options.callback(data);\n }\n if (options.redirectWithElementId) {\n dispatch((0, connected_react_router_1.push)(\"\".concat(options.redirectWithElementId, \"/\").concat(data.id)));\n }\n else if (options.redirect) {\n dispatch((0, connected_react_router_1.push)(options.redirect));\n }\n else if (options.redirectExternal) {\n window.location.href = options.redirectExternal;\n }\n};\nexports.handleOptions = handleOptions;\nvar handleCatch = function (params, dispatch, storePrefix) { return function (error) {\n if (params.onError) {\n params.onError(error);\n }\n (0, fetchUtils_1.dispatchError)(dispatch, \"\".concat(storePrefix, \"/\").concat(exports.REQUEST_FAILED), params.options, params.requestId || params.completeAction, error, params.onUnauthorized);\n if (params.options && params.options.errorCallback) {\n params.options.errorCallback();\n }\n}; };\nvar handleData = function (params, dispatch, storePrefix) { return function (responseData) {\n var _a, _b;\n if (params.completeAction) {\n dispatch({\n type: params.completeAction,\n data: responseData,\n reducerParams: (_a = params.options) === null || _a === void 0 ? void 0 : _a.reducerParams,\n requestParams: (_b = params.options) === null || _b === void 0 ? void 0 : _b.requestParams,\n inputData: params.body,\n });\n }\n if (params.onData) {\n params.onData(responseData);\n }\n dispatch({ type: \"\".concat(storePrefix, \"/\").concat(exports.REQUEST_COMPLETE), requestId: params.requestId || params.completeAction });\n (0, exports.handleOptions)(params.options, responseData, dispatch);\n}; };\nvar appendUrlData = function (options) {\n if (!options || !options.urlData) {\n return '';\n }\n return \"/\".concat(options.urlData);\n};\nvar setRequests = function (state, requestId, options, current) {\n var _a;\n if (!requestId) {\n return __assign({}, state);\n }\n var requests = __assign(__assign({}, state.requests), (_a = {}, _a[requestId] = __assign(__assign({}, current), { background: options && options.background }), _a));\n var errors = Object.values(requests).reduce(function (prev, curr) { return (curr.error && !curr.background ? __spreadArray(__spreadArray([], prev, true), [curr.error], false) : prev); }, []);\n return __assign(__assign({}, state), { requests: requests, errors: errors.length > 0 ? errors : null, loading: Object.values(requests).reduce(function (prev, curr) { return prev || (curr.loading && !curr.background); }, false) });\n};\nvar clearErrors = function (state) { return (__assign(__assign({}, state), { requests: state.requests ? Object.keys(state.requests).reduce(function (prev, curr) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[curr] = __assign(__assign({}, state.requests[curr]), { error: null }), _a)));\n }, {}) : {}, errors: null })); };\nvar ReduxStoreHelper = /** @class */ (function () {\n function ReduxStoreHelper(store_prefix) {\n var _this = this;\n this.STORE_PREFIX = '';\n this.fetch = function (dispatch, params) {\n var _a;\n (0, fetchUtils_1.youwellFetch)(\"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(params.url).concat(appendUrlData(params.options)).concat((0, fetchUtils_1.createRequestParams)((_a = params.options) === null || _a === void 0 ? void 0 : _a.requestParams)), {\n headers: __assign({}, fetchUtils_1.jsonHeader),\n method: params.method || 'GET',\n body: params.body ? JSON.stringify(params.body) : undefined,\n })\n .then((0, fetchUtils_1.handleErrors)(dispatch))\n .then(fetchUtils_1.json)\n .then(handleData(params, dispatch, _this.STORE_PREFIX))\n .catch(handleCatch(params, dispatch, _this.STORE_PREFIX));\n dispatch({\n type: \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.REQUEST_START), requestId: params.requestId || params.completeAction, options: params.options,\n });\n };\n this.fetchFile = function (dispatch, params) {\n var _a;\n if (!params.file)\n return;\n var formData = new FormData();\n formData.append('file', params.file);\n (0, fetchUtils_1.youwellFetch)(\"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(params.url).concat(appendUrlData(params.options)).concat((0, fetchUtils_1.createRequestParams)((_a = params.options) === null || _a === void 0 ? void 0 : _a.requestParams)), {\n headers: {},\n method: 'POST',\n body: formData,\n })\n .then((0, fetchUtils_1.handleErrors)(dispatch))\n .then(fetchUtils_1.json)\n .then(handleData(params, dispatch, _this.STORE_PREFIX))\n .catch(handleCatch(params, dispatch, _this.STORE_PREFIX));\n dispatch({\n type: \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.REQUEST_START), requestId: params.requestId || params.completeAction, options: params.options,\n });\n };\n this.fetchBlob = function (dispatch, params) {\n var _a;\n (0, fetchUtils_1.youwellFetch)(\"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(params.url).concat(appendUrlData(params.options)).concat((0, fetchUtils_1.createRequestParams)((_a = params.options) === null || _a === void 0 ? void 0 : _a.requestParams)), {\n headers: __assign({}, fetchUtils_1.jsonHeader),\n method: params.method || 'GET',\n body: params.body ? JSON.stringify(params.body) : undefined,\n })\n .then((0, fetchUtils_1.handleErrors)(dispatch))\n .then(fetchUtils_1.blob)\n .then(handleData(params, dispatch, _this.STORE_PREFIX))\n .catch(handleCatch(params, dispatch, _this.STORE_PREFIX));\n dispatch({\n type: \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.REQUEST_START), requestId: params.requestId || params.completeAction, options: params.options,\n });\n };\n this.createGetListActionCreator = function (urlPart, COMPLETE_ACTION, requestParameters) { return function (options) { return function (dispatch) {\n _this.fetch(dispatch, {\n url: urlPart,\n options: __assign(__assign({}, options), { requestParams: __assign(__assign({}, requestParameters), options ? options.requestParams : {}) }),\n completeAction: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION),\n requestId: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION),\n });\n }; }; };\n this.createGetElementActionCreator = function (urlPart, COMPLETE_ACTION, requestParameters) { return function (elementId, options) { return function (dispatch) {\n _this.fetch(dispatch, {\n url: \"\".concat(urlPart, \"/\").concat(elementId),\n options: __assign(__assign({}, options), { requestParams: __assign(__assign({}, requestParameters), options ? options.requestParams : {}) }),\n completeAction: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION),\n requestId: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION, \"/\").concat(elementId),\n });\n }; }; };\n this.createPatchActionCreator = function (urlPart, COMPLETE_ACTION, requestParameters) { return function (body, options) { return function (dispatch) {\n _this.fetch(dispatch, {\n url: urlPart,\n options: __assign(__assign({}, options), { requestParams: __assign(__assign({}, requestParameters), options ? options.requestParams : {}), reducerParams: __assign({ id: body.id, changes: body.changes }, options ? options.reducerParams : {}) }),\n completeAction: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION),\n method: 'PATCH',\n body: body,\n });\n }; }; };\n this.createInsertActionCreator = function (urlPart, COMPLETE_ACTION, requestParameters) { return _this.createActionCreator(urlPart, COMPLETE_ACTION, 'POST', requestParameters); };\n this.createUpdateActionCreator = function (urlPart, COMPLETE_ACTION, requestParameters) { return _this.createActionCreator(urlPart, COMPLETE_ACTION, 'PUT', requestParameters); };\n this.createDeleteActionCreator = function (urlPart, COMPLETE_ACTION, requestParameters) { return function (elementToDelete, options) { return function (dispatch) {\n _this.fetch(dispatch, {\n url: \"\".concat(urlPart, \"/\").concat(elementToDelete.id),\n options: __assign(__assign({}, options), { requestParams: __assign(__assign({}, requestParameters), options ? options.requestParams : {}) }),\n method: 'DELETE',\n requestId: (options && options.requestId) || COMPLETE_ACTION,\n onData: function (dataFromServer) {\n dispatch({ type: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION), data: dataFromServer || elementToDelete, reducerParams: options === null || options === void 0 ? void 0 : options.reducerParams, requestParams: options === null || options === void 0 ? void 0 : options.requestParams });\n },\n });\n }; }; };\n this.createFileUploadActionCreator = function (urlPart, COMPLETE_ACTION) { return function (file, options) { return function (dispatch) {\n _this.fetchFile(dispatch, {\n url: urlPart,\n options: options,\n completeAction: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION),\n file: file,\n });\n }; }; };\n this.createFileDownloadActionCreator = function (urlPart, COMPLETE_ACTION, fileName) { return function (options) { return function (dispatch) {\n _this.fetchBlob(dispatch, {\n url: urlPart,\n completeAction: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION),\n onData: function (data) {\n (0, fetchUtils_1.downloadBlobAsFile)(fileName || data.filename || 'Unnamed export.zip_or_csv', data.contentType, data.blobData);\n },\n options: options,\n });\n }; }; };\n this.createActionCreator = function (urlPart, COMPLETE_ACTION, method, requestParameters) { return function (body, options) { return function (dispatch) {\n _this.fetch(dispatch, {\n url: urlPart,\n options: __assign(__assign({}, options), { requestParams: __assign(__assign({}, requestParameters), options ? options.requestParams : {}) }),\n completeAction: \"\".concat(_this.STORE_PREFIX, \"/\").concat(COMPLETE_ACTION),\n method: method || 'POST',\n body: body,\n });\n }; }; };\n this.defaultActionCreators = function (urlPart) { return ({\n redirect: function (url, replaceHistory) { return function (dispatch) {\n if (replaceHistory) {\n dispatch((0, connected_react_router_1.replace)(url));\n }\n else {\n dispatch((0, connected_react_router_1.push)(url));\n }\n }; },\n goBack: function () { return function (dispatch) {\n dispatch((0, connected_react_router_1.goBack)());\n }; },\n getList: _this.createGetListActionCreator(urlPart, exports.LIST_RECIEVED),\n getElement: _this.createGetElementActionCreator(urlPart, exports.DETAILS_RECIEVED),\n insertElement: _this.createActionCreator(urlPart, exports.INSERTED),\n deleteElement: _this.createDeleteActionCreator(urlPart, exports.DELETED),\n updateElement: _this.createUpdateActionCreator(urlPart, exports.UPDATED),\n patchElement: _this.createPatchActionCreator(urlPart, exports.PATCHED),\n }); };\n this.defaultInitialState = {\n errors: [],\n loading: false,\n list: null,\n details: null,\n requests: {},\n };\n this.defaultReducer = function (state, action, initialState) {\n var _a, _b, _c, _d, _e;\n switch (action.type) {\n case connected_react_router_1.LOCATION_CHANGE: {\n return clearErrors(state);\n }\n case exports.CLEAR_ERROR: {\n return clearErrors(state);\n }\n case exports.LOGOUT: {\n return initialState;\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.REQUEST_START): {\n var _f = action, requestId = _f.requestId, options = _f.options;\n return setRequests(state, requestId, options, {\n loading: true,\n completed: false,\n error: null,\n });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.REQUEST_COMPLETE): {\n var _g = action, requestId = _g.requestId, options = _g.options;\n return setRequests(state, requestId, options, {\n loading: false,\n completed: true,\n error: null,\n });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.REQUEST_FAILED): {\n var _h = action, requestId = _h.requestId, options = _h.options, error = _h.error;\n /* eslint-disable no-console */\n if ((console === null || console === void 0 ? void 0 : console.error) && error) {\n console.error(requestId, error);\n }\n /* eslint-enable no-console */\n return setRequests(state, requestId, options, {\n loading: false,\n completed: true,\n error: error,\n });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.LIST_RECIEVED): {\n var data = action.data;\n return __assign(__assign({}, state), { list: data });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.DETAILS_RECIEVED): {\n var data = action.data;\n return __assign(__assign({}, state), { details: __assign(__assign({}, state.details || {}), (_a = {}, _a[data.id] = data, _a)) });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.INSERTED): {\n var data = action.data;\n return __assign(__assign({}, state), { list: state.list ? __spreadArray(__spreadArray([], state.list, true), [data], false) : null, details: __assign(__assign({}, state.details || {}), (_b = {}, _b[data.id] = data, _b)) });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.DELETED): {\n var data_1 = action.data;\n return __assign(__assign({}, state), { list: state.list ? state.list.filter(function (e) { return e.id !== data_1.id; }) : null, details: __assign(__assign({}, state.details || {}), (_c = {}, _c[data_1.id] = undefined, _c)) });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.UPDATED): {\n var data_2 = action.data;\n return __assign(__assign({}, state), { details: __assign(__assign({}, state.details || {}), (_d = {}, _d[data_2.id] = data_2, _d)), list: state.list ? state.list.map(function (e) { return (e.id === data_2.id ? data_2 : e); }) : null });\n }\n case \"\".concat(_this.STORE_PREFIX, \"/\").concat(exports.PATCHED): {\n var _j = action, data = _j.data, reducerParams_1 = _j.reducerParams;\n if (!reducerParams_1 || !state.details || !state.details[reducerParams_1.id]) {\n return state || initialState;\n }\n var newData_1 = (0, objectUtils_1.mergePatchChangesInStore)(state.details[reducerParams_1.id], reducerParams_1.changes, data);\n return __assign(__assign({}, state), { details: __assign(__assign({}, state.details || {}), (_e = {}, _e[reducerParams_1.id] = __assign(__assign({}, newData_1), { __changes: {}, __hasChanges: false }), _e)), list: state.list ? state.list.map(function (e) { return (e.id === reducerParams_1.id ? newData_1 : e); }) : null });\n }\n default: {\n return null;\n }\n }\n };\n this.STORE_PREFIX = store_prefix;\n }\n return ReduxStoreHelper;\n}());\nexports.default = ReduxStoreHelper;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.currentRoot = exports.getImageUrl = exports.setApiRoot = void 0;\nvar urlvalues = {\n baseUrl: '',\n contentBaseUrl: '',\n imageContentBaseUrl: '',\n admin: {\n admin: 'api/admin/admin',\n log: 'api/admin/log',\n organization: 'api/admin/organization',\n stats: 'api/admin/stats',\n taskEngine: 'api/admin/taskEngine',\n },\n app: {\n auth: 'api/app/auth',\n message: 'api/app/message',\n program: 'api/app/program',\n public: 'api/app/public',\n preview: 'api/app/preview',\n user: 'api/app/user',\n sensor: 'api/app/sensor',\n sleep: 'api/app/sleep',\n activity: 'api/app/activity',\n media: 'api/app/media',\n external: 'api/app/external/user',\n healthRegistration: 'api/app/healthregistration',\n medication: 'api/app/medication',\n },\n fihr: {\n observation: 'api/fihr/observation',\n },\n portal: {\n patient: 'api/portal/patient',\n patientSensor: 'api/portal/patient/sensor',\n patientExport: 'api/portal/patient/export',\n patientFitbit: 'api/portal/patient/fitbit',\n patientGarmin: 'api/portal/patient/garmin',\n patientMessage: 'api/portal/patient/message',\n patientGroupMessage: 'api/portal/patient/message/group',\n patientEvent: 'api/portal/patient/event',\n patientNotification: 'api/portal/patient/notifications',\n patientMedia: 'api/portal/patient/media',\n patientAdmin: 'api/portal/patient/admin',\n module: 'api/portal/program/module',\n program: 'api/portal/program/program',\n task: 'api/portal/program/task',\n import: 'api/portal/program/import',\n programExport: 'api/portal/program/export',\n auth: 'api/portal/auth',\n media: 'api/portal/media',\n registration: 'api/portal/registration',\n user: 'api/portal/user',\n users: 'api/portal/users',\n content: 'api/portal/content',\n analytics: 'api/portal/analytics',\n organization: 'api/portal/organization',\n },\n public: {\n program: 'api/public/program',\n },\n media: {\n file: 'media/file',\n video: 'media/video',\n },\n route: {\n callback: 'route/callback',\n oauth: 'route/oauth',\n },\n socket: {\n videoChat: 'socket/videochat/hub',\n },\n};\nvar apiUrls = __assign({}, urlvalues);\nvar setApiRoot = function (baseUrl, contentBaseUrl, imageContentBaseUrl) {\n apiUrls.baseUrl = baseUrl;\n apiUrls.contentBaseUrl = contentBaseUrl || baseUrl;\n apiUrls.imageContentBaseUrl = imageContentBaseUrl || \"\".concat(apiUrls.contentBaseUrl, \"/\").concat(apiUrls.media.file);\n};\nexports.setApiRoot = setApiRoot;\nvar getImageUrl = function (imageId) { return \"\".concat(apiUrls.imageContentBaseUrl, \"/\").concat(imageId); };\nexports.getImageUrl = getImageUrl;\nvar currentRoot = function () { return \"\".concat(window.location.protocol, \"//\").concat(window.location.host); };\nexports.currentRoot = currentRoot;\nexports.default = apiUrls;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isSortedByString = exports.fillArrayToLength = exports.reverse = exports.mergeWithFilter = exports.distinct = exports.sortByManyAdvanced = exports.sortByMany = exports.sortByString = exports.sortByDateAscending = exports.sortByDate = exports.insertManyAtIndex = exports.insertAtIndex = exports.reorderElements = exports.findMaxDate = exports.findMax = exports.toCommaList = exports.GUID_LENGTH = exports.toBoolLookup = exports.toLookup = void 0;\nvar dateUtils_1 = require(\"./dateUtils\");\nvar objectUtils_1 = require(\"./objectUtils\");\nvar toLookup = function (array, keyName) {\n if (keyName === void 0) { keyName = 'id'; }\n return (array\n ? array.reduce(function (prev, curr) {\n var _a;\n return (curr ? __assign(__assign({}, prev), (_a = {}, _a[(0, objectUtils_1.getValueByDotNotation)(curr, keyName)] = curr, _a)) : prev);\n }, {}) : {});\n};\nexports.toLookup = toLookup;\nvar toBoolLookup = function (array, keyName) { return (array\n ? array.reduce(function (prev, curr) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[(keyName ? curr[keyName] : curr)] = true, _a)));\n }, {}) : {}); };\nexports.toBoolLookup = toBoolLookup;\nexports.GUID_LENGTH = 36;\nvar toCommaList = function (array, keyName) {\n if (keyName === void 0) { keyName = 'name'; }\n return (array\n ? array.reduce(function (prev, curr) { return (curr ? \"\".concat(prev ? \"\".concat(prev, \", \") : '').concat(curr[keyName]) : prev); }, '') : null);\n};\nexports.toCommaList = toCommaList;\nvar findMax = function (array, keyName, startValue) {\n if (startValue === void 0) { startValue = 0; }\n return (array\n ? array.reduce(function (prev, curr) { return (curr && curr[keyName] ? Math.max(prev, Number(curr[keyName]) || startValue) : prev); }, startValue) : startValue);\n};\nexports.findMax = findMax;\nvar findMaxDate = function (array, keyName, startValue) {\n if (keyName === void 0) { keyName = 'created'; }\n if (startValue === void 0) { startValue = 0; }\n return (array\n ? array.reduce(function (prev, curr) { var _a; return (curr && curr[keyName] ? Math.max(prev, ((_a = (0, dateUtils_1.getLocalDate)(curr[keyName])) === null || _a === void 0 ? void 0 : _a.getTime()) || startValue) : prev); }, startValue !== null && startValue !== void 0 ? startValue : 0) : startValue);\n};\nexports.findMaxDate = findMaxDate;\nvar reorderElements = function (array, fromIndex, toIndex) {\n var reordered = __spreadArray([], array, true);\n var removed = reordered.splice(fromIndex, 1)[0];\n reordered.splice(toIndex, 0, removed);\n return reordered;\n};\nexports.reorderElements = reorderElements;\nvar insertAtIndex = function (array, index, elementToInsert) {\n var reordered = __spreadArray([], array, true);\n reordered.splice(index, 0, elementToInsert);\n return reordered;\n};\nexports.insertAtIndex = insertAtIndex;\nvar insertManyAtIndex = function (array, elementsToInsert) {\n var reordered = __spreadArray([], array, true);\n elementsToInsert.forEach(function (el) {\n reordered = (0, exports.insertAtIndex)(reordered, el.index, el.elementToInsert);\n });\n return reordered;\n};\nexports.insertManyAtIndex = insertManyAtIndex;\nvar sortByDate = function (array, propName) {\n if (propName === void 0) { propName = 'created'; }\n return (array ? __spreadArray([], array, true).sort(function (a, b) { return new Date(b[propName]).getTime() - new Date(a[propName]).getTime(); }) : null);\n};\nexports.sortByDate = sortByDate;\nvar sortByDateAscending = function (array, propName) {\n if (propName === void 0) { propName = 'created'; }\n return (array ? __spreadArray([], array, true).sort(function (a, b) { return new Date(a[propName]).getTime() - new Date(b[propName]).getTime(); }) : null);\n};\nexports.sortByDateAscending = sortByDateAscending;\nvar sortByString = function (array, propName) {\n if (propName === void 0) { propName = 'name'; }\n return (array ? __spreadArray([], array, true).sort(function (a, b) { return \"\".concat(a[propName] || '').localeCompare(b[propName]); }) : null);\n};\nexports.sortByString = sortByString;\n// @ts-ignore\nvar sortComp = function (a, b) { return (a > b) - (a < b); };\nvar sortCompDate = function (a, b) { return new Date(a).getTime() - new Date(b).getTime(); };\nvar sortByMany = function (array) {\n var sortProps = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sortProps[_i - 1] = arguments[_i];\n }\n return (array ? array.sort(function (a, b) { return sortProps.reduce(function (prev, curr) { return prev || sortComp(a[curr], b[curr]); }, 0); }) : null);\n};\nexports.sortByMany = sortByMany;\nvar sortByManyAdvanced = function (array) {\n var sortProps = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sortProps[_i - 1] = arguments[_i];\n }\n return (array ? __spreadArray([], array, true).sort(function (a, b) { return sortProps.reduce(function (prev, curr) { return prev || (function (p) {\n switch (p.type) {\n case 'date':\n if (!p.name)\n return 0;\n return p.desc ? sortCompDate(b[p.name], a[p.name]) : sortCompDate(a[p.name], b[p.name]);\n case 'func':\n if (!p.sortFunc)\n return 0;\n return p.desc ? p.sortFunc(b, a) : p.sortFunc(a, b);\n default:\n if (!p.name)\n return 0;\n return p.desc ? sortComp(b[p.name], a[p.name]) : sortComp(a[p.name], b[p.name]);\n }\n })(curr); }, 0); }) : null);\n};\nexports.sortByManyAdvanced = sortByManyAdvanced;\nvar distinct = function (array, distinctBy) {\n var _a;\n if (distinctBy === void 0) { distinctBy = function (d) { return d['id']; }; }\n var set = {};\n return (_a = array === null || array === void 0 ? void 0 : array.filter(function (d) { if (set[distinctBy(d)])\n return false; set[distinctBy(d)] = true; return true; })) !== null && _a !== void 0 ? _a : null;\n};\nexports.distinct = distinct;\n// Merge two arrays and filter out duplicates by key (item from B is preserved)\nvar mergeWithFilter = function (a, b, key) {\n if (key === void 0) { key = 'id'; }\n var bDict = (0, exports.toBoolLookup)(b, key);\n return (a || []).filter(function (elem) { return !bDict[elem[key]]; })\n .concat(b || []);\n};\nexports.mergeWithFilter = mergeWithFilter;\nvar reverse = function (array) {\n var clone = __spreadArray([], array || [], true);\n clone.reverse();\n return clone;\n};\nexports.reverse = reverse;\nvar fillArrayToLength = function (inputDataArray, fillLength, fillElement) { return __spreadArray(__spreadArray([], inputDataArray || [], true), Array(Math.max(fillLength - ((inputDataArray === null || inputDataArray === void 0 ? void 0 : inputDataArray.length) || 0), 0)).fill(fillElement), true); };\nexports.fillArrayToLength = fillArrayToLength;\nvar isSortedByString = function (array, key) {\n if (key === void 0) { key = 'name'; }\n return array === null || array === void 0 ? void 0 : array.every(function (current, index, all) { var _a; return !index || ((_a = all[index - 1][key]) === null || _a === void 0 ? void 0 : _a.localeCompare(current[key])) <= 0; });\n};\nexports.isSortedByString = isSortedByString;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.useIsVisibleInView = exports.stopPropagation = exports.preventDefault = exports.useIsScrolled = exports.useScrollEffect = exports.useElementSize = exports.useWindowSize = exports.isTouchDevice = exports.isInStandaloneMode = exports.isChromeOnIos = exports.isIos = exports.isEdge = exports.isIe = exports.isBrowser = exports.heightBreakUp = exports.heightBreakDown = exports.laptopHeight = void 0;\nvar react_1 = require(\"react\");\nexports.laptopHeight = 820;\nexports.heightBreakDown = \"@media screen and (max-height: \".concat(exports.laptopHeight, \"px)\");\nexports.heightBreakUp = \"@media screen and (min-height: \".concat(exports.laptopHeight, \"px)\");\nexports.isBrowser = typeof window === 'object';\n// @ts-ignore documentMode not in default types, it is only used by IE\nexports.isIe = exports.isBrowser && !!document.documentMode;\nexports.isEdge = exports.isBrowser && window.navigator.userAgent.indexOf('Edge') > -1;\nvar isIos = function () { return exports.isBrowser && (/iphone|ipad|ipod/.test(window.navigator.userAgent.toLowerCase())\n // iPad on iOS 13 detection\n || (navigator.userAgent.includes('Mac') && 'ontouchend' in document)); };\nexports.isIos = isIos;\nvar isChromeOnIos = function () { return (0, exports.isIos)() && /CriOS/i.test(navigator.userAgent); };\nexports.isChromeOnIos = isChromeOnIos;\nvar isInStandaloneMode = function () {\n var isStandalone = window.matchMedia('(display-mode: standalone)').matches;\n // @ts-ignore navigator.standalone is only available on iOs Safari\n if (navigator.standalone || isStandalone) {\n return true; // 'standalone';\n }\n if (document.referrer.startsWith('android-app://')) {\n return true; // 'twa';\n }\n return false; // 'browser';\n};\nexports.isInStandaloneMode = isInStandaloneMode;\nexports.isTouchDevice = exports.isBrowser && (('ontouchstart' in window)\n || (navigator.maxTouchPoints > 0)\n // @ts-ignore msMaxTouchPoints not in default types, it is only used by IE\n || (navigator.msMaxTouchPoints > 0));\nvar useWindowSize = function () {\n var _a = (0, react_1.useState)({\n width: undefined,\n height: undefined,\n }), windowSize = _a[0], setWindowSize = _a[1];\n (0, react_1.useEffect)(function () {\n function handleResize() {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n }\n window.addEventListener('resize', handleResize);\n handleResize();\n return function () { return window.removeEventListener('resize', handleResize); };\n }, []);\n return windowSize;\n};\nexports.useWindowSize = useWindowSize;\nvar useElementSize = function () {\n var _a = (0, react_1.useState)({\n width: undefined,\n height: undefined,\n }), elementSize = _a[0], setElementSize = _a[1];\n var elementRef = (0, react_1.useCallback)(function (node) {\n function handleResize() {\n if (node !== null) {\n setElementSize({\n width: node.getBoundingClientRect().width,\n height: node.getBoundingClientRect().height,\n });\n }\n }\n // window.addEventListener('resize', handleResize);\n var observer = new ResizeObserver(handleResize);\n if (node)\n observer.observe(node);\n handleResize();\n return function () {\n // window.removeEventListener('resize', handleResize);\n if (node)\n observer.unobserve(node);\n };\n }, []);\n return { elementRef: elementRef, elementSize: elementSize };\n};\nexports.useElementSize = useElementSize;\nvar useScrollEffect = function (onScrollUp, onScrollDown) {\n var scrollY = (0, react_1.useRef)(0);\n (0, react_1.useEffect)(function () {\n scrollY.current = window.pageYOffset;\n var update = function () {\n var prevScrollY = scrollY.current;\n var currentScroll = window.pageYOffset;\n if (prevScrollY > currentScroll) {\n // console.log('scrolling up - show menu');\n onScrollUp();\n }\n else if (currentScroll > 0) {\n // Must check > 0 to account for \"scroll to refresh\" functionality (which sets Y-pos negative on iphone)\n // console.log('scrolling down - hide menu');\n onScrollDown();\n }\n scrollY.current = currentScroll;\n };\n window.addEventListener('scroll', update);\n return function () {\n window.removeEventListener('scroll', update);\n };\n }, [onScrollDown, onScrollUp]);\n};\nexports.useScrollEffect = useScrollEffect;\nvar useIsScrolled = function (scrollThreshold) {\n if (scrollThreshold === void 0) { scrollThreshold = 0; }\n var _a = (0, react_1.useState)(false), isScrolled = _a[0], setIsScrolled = _a[1];\n (0, react_1.useEffect)(function () {\n var update = function () {\n setIsScrolled(window.pageYOffset > scrollThreshold);\n };\n window.addEventListener('scroll', update);\n return function () {\n window.removeEventListener('scroll', update);\n };\n }, [isScrolled, scrollThreshold]);\n return isScrolled;\n};\nexports.useIsScrolled = useIsScrolled;\nvar preventDefault = function (event) {\n event.preventDefault();\n};\nexports.preventDefault = preventDefault;\nvar stopPropagation = function (event) {\n event.stopPropagation();\n};\nexports.stopPropagation = stopPropagation;\nvar useIsVisibleInView = function (ref) {\n var _a = (0, react_1.useState)(false), isIntersecting = _a[0], setIntersecting = _a[1];\n (0, react_1.useEffect)(function () {\n var observer = new IntersectionObserver(function (_a) {\n var entry = _a[0];\n return setIntersecting(entry.isIntersecting);\n });\n if (ref === null || ref === void 0 ? void 0 : ref.current) {\n observer.observe(ref.current);\n }\n return function () {\n observer.disconnect();\n };\n }, [ref]);\n return isIntersecting;\n};\nexports.useIsVisibleInView = useIsVisibleInView;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n makeStyles,\n TextField,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n disabledReadonlyInput: {\n color: theme.palette.text.primary,\n },\n}));\n\nconst AsyncTextField = ({\n label, value, onChange, delay, readOnly, shrink, ...props\n}) => {\n const classes = useStyles();\n const [inputValue, setInputValue] = React.useState(null);\n const updateAsyncTimer = React.useRef();\n\n const handleChange = (event) => {\n const updatedValue = event.target.value;\n setInputValue(updatedValue);\n\n if (updateAsyncTimer.current) clearTimeout(updateAsyncTimer.current);\n\n updateAsyncTimer.current = setTimeout(() => {\n onChange(updatedValue);\n }, delay);\n };\n\n return (\n \n )\n}\n\nAsyncTextField.propTypes = {\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n delay: PropTypes.number,\n readOnly: PropTypes.bool,\n shrink: PropTypes.bool,\n};\n\nAsyncTextField.defaultProps = {\n delay: 300,\n readOnly: false,\n shrink: false,\n};\n\nexport default AsyncTextField;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nclass DelayedFetch extends React.Component {\n componentDidMount() {\n this.setup();\n }\n\n componentDidUpdate() {\n this.setup();\n }\n\n componentWillUnmount() {\n this.clearTimeout();\n }\n\n clearTimeout = () => {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n setup = () => {\n if (!this.timer) {\n this.timer = setTimeout(() => {\n this.props.dataCall();\n }, this.props.delaySeconds * 1000);\n }\n }\n\n render() {\n return null;\n }\n}\n\nDelayedFetch.propTypes = {\n dataCall: PropTypes.func.isRequired,\n delaySeconds: PropTypes.number.isRequired,\n};\n\nexport default DelayedFetch;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport {\n Typography, Input, Button, Hidden,\n} from '@material-ui/core';\n\nexport const devbannerHeight = 50;\n\nconst styles = theme => ({\n root: {\n padding: theme.spacing(10),\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n banner: {\n width: '100%',\n height: devbannerHeight,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: theme.palette.warning.main,\n color: theme.palette.warning.contrastText,\n borderBottom: theme.youwell.borders.dim,\n\n '@media print': {\n display: 'none',\n },\n },\n login: {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: theme.palette.grey[100],\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 900, // Must be lower than \"loading\"\n\n [theme.breakpoints.down('xs')]: {\n height: '150%', // To account for special scrolling on mobile..\n justifyContent: 'flex-start',\n },\n },\n loginBox: {\n background: theme.palette.common.white,\n borderRadius: theme.youwell.shapes.borderRadius,\n padding: theme.spacing(4),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n\n [theme.breakpoints.down('xs')]: {\n marginTop: '50%',\n },\n },\n input: {\n margin: theme.spacing(2, 0),\n },\n});\n\n\nconst DEV_LOGIN_KEY = 'ywDL';\n\nclass DevelopmentBanner extends React.Component {\n state = {\n pw: '',\n }\n\n handleChange = name => (event) => {\n this.setState({ [name]: event.target.value });\n }\n\n login = () => {\n if (this.state.pw === this.props.password) {\n window.localStorage.setItem(DEV_LOGIN_KEY, Date.now());\n }\n\n this.setState({ pw: '' });\n }\n\n hasValidLogin = () => (window.localStorage.getItem(DEV_LOGIN_KEY) > (Date.now() - 7 * 24 * 60 * 60 * 1000))\n && (window.localStorage.getItem(DEV_LOGIN_KEY) > this.props.passwordDate)\n\n handleKeyPress = (e) => {\n if (e.key === 'Enter') {\n this.login();\n }\n };\n\n render() {\n const {\n classes, translate, password, disabled, showBanner,\n } = this.props;\n\n if (disabled) {\n return null;\n }\n const isOpen = !password || this.hasValidLogin();\n\n return (\n isOpen ? (\n <>\n {showBanner && (\n \n \n \n {translate('dev.underDevelopment')}\n \n \n \n \n {translate('dev.underDevelopmentShort')}\n \n \n
\n )}\n >\n ) : (\n \n
\n \n {translate('dev.underDevelopment')}\n \n \n {translate('dev.pleaseLogInToContinue')}\n \n\n \n\n \n
\n
\n )\n );\n }\n}\n\nDevelopmentBanner.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n password: PropTypes.string,\n passwordDate: PropTypes.number,\n disabled: PropTypes.bool,\n showBanner: PropTypes.bool,\n};\n\nDevelopmentBanner.defaultProps = {\n password: '',\n passwordDate: 0,\n disabled: false,\n showBanner: false,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(DevelopmentBanner));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogTitle,\n DialogActions,\n} from '@material-ui/core';\n\n\nclass DialogButton extends React.Component {\n state = {\n isDialogOpen: false,\n }\n\n openDialog = () => {\n this.setState({ isDialogOpen: true });\n }\n\n closeDialog = () => {\n this.setState({ isDialogOpen: false });\n }\n\n ok = () => {\n this.setState({ isDialogOpen: false }, this.props.dialogOkAction);\n }\n\n\n render() {\n const {\n buttonText, dialogTitle, dialogCancelText, buttonProps,\n } = this.props;\n\n return (\n <>\n \n\n \n >\n );\n }\n}\n\nDialogButton.propTypes = {\n dialogOkAction: PropTypes.func.isRequired,\n buttonText: PropTypes.string.isRequired,\n dialogTitle: PropTypes.string.isRequired,\n dialogCancelText: PropTypes.string.isRequired,\n buttonProps: PropTypes.object,\n};\n\nDialogButton.defaultProps = {\n buttonProps: null,\n};\n\nexport default DialogButton;\n","import * as React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { sendError } from '../errorUtils';\r\n\r\n\r\nconst style = {\r\n display: 'flex',\r\n background: 'white',\r\n padding: '16px',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'red',\r\n};\r\n\r\nclass ErrorBoundary extends React.Component {\r\n state = {\r\n hasError: false,\r\n };\r\n\r\n componentDidCatch = (error, info) => {\r\n this.setState({ hasError: true });\r\n sendError({ error: error?.message, info: info?.componentStack, sender: `ErrorBoundary: ${this.props.id}` });\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n // You can render any custom fallback UI\r\n return (\r\n \r\n
Something went wrong. Refresh page to try again..
\r\n \r\n );\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n\r\nErrorBoundary.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.arrayOf(PropTypes.node),\r\n PropTypes.node,\r\n ]),\r\n id: PropTypes.string.isRequired,\r\n};\r\n\r\nErrorBoundary.defaultProps = {\r\n children: null,\r\n};\r\n\r\nexport default ErrorBoundary;\r\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { Typography, IconButton } from '@material-ui/core';\nimport { ClearIcon } from '../icons';\nimport { isBrowser } from '../browserUtils';\n\nconst styles = theme => ({\n root: {\n padding: theme.spacing(2),\n marginBottom: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n text: {\n flex: '1 1 auto',\n },\n icon: {\n height: 'auto',\n width: 'auto',\n },\n});\n\nclass ErrorMessage extends React.Component {\n errorElement = React.createRef();\n\n componentDidUpdate(prevProps) {\n if (this.props.message && this.props.message !== prevProps.message) {\n const scrollEl = this.errorElement.current;\n\n if (scrollEl && isBrowser && window.scrollY > 10) {\n setTimeout(() => {\n scrollEl.scrollIntoView({ behavior: 'smooth' });\n }, 200);\n }\n }\n }\n\n render() {\n const {\n classes, translate, message, onClear, className, muteErrors, scrollMarginTop,\n } = this.props;\n\n if (!message) {\n return null;\n }\n\n const filteredMessages = [...new Set(message.split('
'))].filter(d => !muteErrors?.includes(d));\n\n if (!filteredMessages.length) {\n return null;\n }\n return (\n \n {filteredMessages.map(msg => (\n \n {translate(`errors.${msg}`, null, { onMissingTranslation: () => `System error (${msg})` })}\n \n ))}\n {onClear && (\n \n \n \n )}\n
\n );\n }\n}\n\nErrorMessage.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n className: PropTypes.string,\n message: PropTypes.string,\n onClear: PropTypes.func,\n muteErrors: PropTypes.array,\n scrollMarginTop: PropTypes.number,\n};\n\nErrorMessage.defaultProps = {\n message: null,\n className: null,\n onClear: null,\n muteErrors: null,\n scrollMarginTop: null,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(ErrorMessage));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n Button,\n} from '@material-ui/core';\n\n\nclass FormLink extends React.Component {\n render() {\n const {\n buttonText, buttonProps, params, to,\n } = this.props;\n\n return (\n \n );\n }\n}\n\nFormLink.propTypes = {\n buttonText: PropTypes.string.isRequired,\n buttonProps: PropTypes.object,\n to: PropTypes.string.isRequired,\n params: PropTypes.arrayOf(PropTypes.shape({\n key: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })),\n};\n\nFormLink.defaultProps = {\n buttonProps: null,\n params: null,\n};\n\nexport default FormLink;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.htmlContentClassName = void 0;\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar htmlUtils_1 = require(\"../htmlUtils\");\nvar utils_1 = require(\"../types/utils\");\nexports.htmlContentClassName = 'htmlcontent';\nvar HtmlContent = function (_a) {\n var html = _a.html, className = _a.className, style = _a.style, id = _a.id;\n var appConfig = (0, utils_1.useYouwellCommonSelector)(function (state) { return state.pageSettings.appConfig; });\n if ((0, htmlUtils_1.isEmptyHtml)(html)) {\n return null;\n }\n return (\n /* eslint-disable react/no-danger */\n React.createElement(\"div\", { dangerouslySetInnerHTML: { __html: (0, htmlUtils_1.replaceEmbedContent)(html, appConfig.addNoContextForImages, appConfig.appId) }, className: (0, classnames_1.default)(exports.htmlContentClassName, className), style: style, id: id })\n /* eslint-enable react/no-danger */\n );\n};\nHtmlContent.defaultProps = {\n html: null,\n className: null,\n style: null,\n id: null,\n};\nexports.default = HtmlContent;\n","// Stripped and adjusted from https://github.com/SupremeTechnopriest/react-idle-timer\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport InactivityAlert from './InactivityAlert';\n\nconst IS_BROWSER = (typeof window === 'undefined' ? 'undefined' : typeof window) === 'object';\nconst DEFAULT_ELEMENT = IS_BROWSER ? document : {};\nconst DEFAULT_EVENTS = [\n 'mousemove',\n 'keydown',\n 'wheel',\n 'DOMMouseScroll',\n 'mouseWheel',\n 'mousedown',\n 'touchstart',\n 'touchmove',\n 'MSPointerDown',\n 'MSPointerMove',\n];\n\nclass IdleTimer extends React.Component {\n tId = null\n\n state = {\n idle: false,\n oldDate: +new Date(),\n lastActive: +new Date(),\n pageX: null,\n pageY: null,\n }\n\n componentDidMount() {\n if (!IS_BROWSER) return;\n\n DEFAULT_EVENTS.forEach((e) => {\n DEFAULT_ELEMENT.addEventListener(e, this.handleEvent, {\n capture: true,\n passive: true,\n });\n });\n\n this.reset();\n }\n\n componentWillUnmount() {\n clearTimeout(this.tId);\n if (!IS_BROWSER) return;\n DEFAULT_EVENTS.forEach((e) => {\n DEFAULT_ELEMENT.removeEventListener(e, this.handleEvent, {\n capture: true,\n passive: true,\n });\n });\n }\n\n toggleIdleState = (e) => {\n const { idle } = this.state;\n this.setState({\n idle: !idle,\n });\n\n const { onActive, onIdle } = this.props;\n if (idle) {\n onActive(e);\n } else {\n onIdle(e);\n }\n }\n\n handleEvent = (e) => {\n const { pageX, pageY } = this.state;\n\n // Mousemove event\n if (e.type === 'mousemove') {\n // If coord are same, it didn't move\n if (e.pageX === pageX && e.pageY === pageY) {\n return;\n }\n // If coord don't exist how could it move\n if (typeof e.pageX === 'undefined' && typeof e.pageY === 'undefined') {\n return;\n }\n // Under 200 ms is hard to do\n // continuous activity will bypass this\n const elapsed = this.getElapsedTime();\n if (elapsed < 200) {\n return;\n }\n }\n\n // Clear any existing timeout\n clearTimeout(this.tId);\n\n // If the idle timer is enabled, flip\n if (this.state.idle) {\n this.toggleIdleState(e);\n }\n\n // Store when the user was last active\n // and update the mouse coordinates\n this.setState({\n lastActive: +new Date(), // store when user was last active\n pageX: e.pageX, // update mouse coord\n pageY: e.pageY,\n });\n\n // Set a new timeout\n const { timeoutInMinutes } = this.props;\n this.tId = setTimeout(this.toggleIdleState, timeoutInMinutes * 60 * 1000); // set a new timeout\n }\n\n reset = () => {\n // Clear timeout\n clearTimeout(this.tId);\n\n // Reset state\n this.setState(prevState => ({\n idle: false,\n oldDate: +new Date(),\n lastActive: prevState.oldDate,\n }));\n\n // Set new timeout\n const { timeoutInMinutes } = this.props;\n this.tId = setTimeout(this.toggleIdleState, timeoutInMinutes * 60 * 1000); // set a new timeout\n }\n\n getRemainingTime = () => {\n const { idle, lastActive } = this.state;\n // If idle there is no time remaining\n if (idle) {\n return 0;\n }\n\n // Determine remaining, if negative idle didn't finish flipping, just return 0\n const { timeoutInMinutes } = this.props;\n let timeLeft = (timeoutInMinutes * 60 * 1000) - (+new Date() - lastActive);\n if (timeLeft < 0) {\n timeLeft = 0;\n }\n return timeLeft;\n }\n\n getElapsedTime = () => {\n const { oldDate } = this.state;\n return +new Date() - oldDate;\n }\n\n getLastActiveTime = () => {\n const { lastActive } = this.state;\n return lastActive;\n }\n\n isIdle = () => this.state.idle\n\n render() {\n const { hasInactivityAlert, timeoutInMinutes } = this.props;\n\n return hasInactivityAlert ? : null;\n }\n}\n\nIdleTimer.propTypes = {\n timeoutInMinutes: PropTypes.number,\n onIdle: PropTypes.func,\n onActive: PropTypes.func,\n hasInactivityAlert: PropTypes.bool,\n};\n\nIdleTimer.defaultProps = {\n timeoutInMinutes: 60,\n onIdle: () => {},\n onActive: () => {},\n hasInactivityAlert: false,\n};\n\nexport default IdleTimer;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar react_1 = require(\"react\");\nvar translate_1 = __importDefault(require(\"../../app/localization/translate\"));\nvar store_1 = require(\"../../app/store\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n error: {\n padding: theme.spacing(2),\n border: theme.youwell.borders.dim,\n background: theme.palette.grey[50],\n color: theme.palette.grey[500],\n wordBreak: 'break-word',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n}); }, { name: 'Image' });\nvar Image = function (_a) {\n var src = _a.src, alt = _a.alt, className = _a.className, hideOnNotFound = _a.hideOnNotFound, imageStyle = _a.imageStyle, addAppId = _a.addAppId;\n var translate = (0, translate_1.default)();\n var classes = useStyles();\n var appConfig = (0, store_1.useYouwellSelector)(function (state) { return state.pageSettings.appConfig; });\n var _b = React.useState(false), fileNotFound = _b[0], setFileNotFound = _b[1];\n var _c = React.useState(false), loaded = _c[0], setLoaded = _c[1];\n (0, react_1.useEffect)(function () {\n if (!src || src === '') {\n setFileNotFound(false);\n setLoaded(false);\n }\n }, [src]);\n var onImageNotFound = function (e) {\n // eslint-disable-next-line no-param-reassign\n e.target.onerror = null;\n // e.target.src = placeHolderImage;\n setFileNotFound(true);\n };\n var onImageLoaded = function () {\n setLoaded(true);\n };\n if (fileNotFound) {\n return hideOnNotFound ? null : (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.error, className), \"aria-label\": translate('common.imageNotFound') },\n React.createElement(core_1.Typography, { align: \"center\", display: \"block\", \"aria-hidden\": true }, translate('common.imageNotFound'))));\n }\n var preparedUrl = src !== null && src !== void 0 ? src : '';\n if (addAppId && appConfig.appId && preparedUrl.startsWith('http') && preparedUrl.indexOf('xAppId=') < 0) {\n var prefix = preparedUrl.indexOf('?') < 0 ? '?' : '&';\n preparedUrl = \"\".concat(preparedUrl).concat(prefix, \"xAppId=\").concat(appConfig.appId);\n }\n var style = __assign({ opacity: loaded ? 1 : 0, transition: 'opacity 0.1s' }, imageStyle);\n return (React.createElement(\"img\", { src: preparedUrl, alt: alt && alt !== '' ? alt : translate('noImgDescription'), style: style, className: className, onError: onImageNotFound, onLoad: onImageLoaded }));\n};\nImage.defaultProps = {\n src: '',\n alt: '',\n className: null,\n hideOnNotFound: false,\n imageStyle: null,\n addAppId: false,\n};\nexports.default = Image;\n","import { useEffect, useState } from 'react';\nimport { Typography } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withRouter } from 'react-router';\nimport { withStyles } from '@material-ui/core/styles';\nimport { PortalModal } from '../../common/components';\n\nconst styles = theme => ({\n inactivityMessage: {\n padding: theme.spacing(3),\n },\n});\n\nconst InactivityAlert = ({\n classes, translate, timeoutInMinutes, idleTimer,\n}) => {\n const [showInactivityAlert, setShowInactivityAlert] = useState(false);\n\n useEffect(() => {\n let alertTimer = null;\n if (timeoutInMinutes && idleTimer) {\n alertTimer = setTimeout(() => setShowInactivityAlert(true), (timeoutInMinutes - 1) * (60 * 1000));\n }\n return () => {\n clearTimeout(alertTimer);\n };\n }, [timeoutInMinutes, idleTimer]);\n\n const closeAlert = () => {\n setShowInactivityAlert(false);\n };\n\n return (\n \n \n {translate('inactivityMessage')}\n
\n \n );\n};\n\nInactivityAlert.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n timeoutInMinutes: PropTypes.number.isRequired,\n idleTimer: PropTypes.number,\n};\n\nInactivityAlert.defaultProps = {\n idleTimer: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default withRouter(connect(mapStateToProps)(withStyles(styles)(InactivityAlert)));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { withLocalize } from 'react-localize-redux';\nimport classnames from 'classnames';\n\nimport {\n IconButton,\n} from '@material-ui/core';\n\nimport flags from '../flags';\n\nconst styles = () => ({\n root: {\n display: 'flex',\n justifyContent: 'center',\n opacity: '0.8',\n },\n flagIcon: {\n width: 20,\n },\n});\n\nconst LanguageToggle = ({\n languages, activeLanguage, setActiveLanguage, classes, className,\n}) => (\n \n {languages.map(lang => (\n
setActiveLanguage(lang.code)} disabled={activeLanguage && lang.code === activeLanguage.code}>\n
\n \n ))}\n
\n);\n\nLanguageToggle.propTypes = {\n classes: PropTypes.object.isRequired,\n languages: PropTypes.array.isRequired,\n activeLanguage: PropTypes.object,\n setActiveLanguage: PropTypes.func.isRequired,\n className: PropTypes.string,\n};\n\nLanguageToggle.defaultProps = {\n activeLanguage: {},\n className: null,\n};\n\nexport default withLocalize(withStyles(styles)(LanguageToggle));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withLocalize } from 'react-localize-redux';\nimport setObjectValue from 'lodash/set';\n\n\nclass LoadLanguageData extends React.Component {\n componentDidUpdate(prevProps) {\n if (!prevProps.clientConfig?.textTemplates && this.props.clientConfig?.textTemplates) {\n const parsedTemplates = {};\n this.props.clientConfig.textTemplates.forEach((d) => {\n setObjectValue(parsedTemplates, d.key, d.value);\n });\n\n if (parsedTemplates.client) {\n Object.keys(parsedTemplates.client).forEach((lang) => {\n this.props.addTranslationForLanguage(parsedTemplates.client[lang], lang);\n });\n }\n }\n }\n\n render() {\n return null;\n }\n}\n\nLoadLanguageData.propTypes = {\n addTranslationForLanguage: PropTypes.func.isRequired,\n clientConfig: PropTypes.object,\n};\n\nLoadLanguageData.defaultProps = {\n clientConfig: null,\n};\n\nconst mapStateToProps = state => ({\n clientConfig: state.auth.clientConfig,\n});\n\nexport default connect(mapStateToProps)(withLocalize(LoadLanguageData));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport classnames from 'classnames';\n\nimport { withStyles } from '@material-ui/core/styles';\nimport { Typography, CircularProgress, NoSsr } from '@material-ui/core';\n\nconst styles = theme => ({\n root: {\n position: 'fixed',\n zIndex: 1500,\n top: 0,\n left: 0,\n bottom: 0,\n width: '100%',\n textAlign: 'center',\n backgroundColor: '#f0fbff82',\n },\n rootInline: {\n position: 'relative',\n },\n content: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n progress: {\n color: '#05325a',\n display: 'block',\n margin: 'auto',\n },\n message: {\n color: '#05325a',\n marginTop: theme.spacing(1),\n },\n error: {\n marginTop: theme.spacing(1),\n },\n});\n\nclass Loading extends React.Component {\n state = {\n show: false,\n }\n\n componentDidMount() {\n this.timer = setTimeout(() => {\n this.setState({ show: true });\n }, 500);\n }\n\n componentWillUnmount() {\n clearTimeout(this.timer);\n }\n\n render() {\n const {\n classes, loadingMessage, loading, translate, className, inline, delayed,\n } = this.props;\n\n if (!loading || (delayed && !this.state.show)) {\n return null;\n }\n\n return (\n \n \n
\n \n {(loadingMessage || !inline) && (\n \n {loadingMessage || translate('common.loading')}\n \n )}\n
\n
\n \n );\n }\n}\n\nLoading.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n loading: PropTypes.bool,\n loadingMessage: PropTypes.string,\n className: PropTypes.string,\n inline: PropTypes.bool,\n delayed: PropTypes.bool,\n};\n\nLoading.defaultProps = {\n loading: true,\n loadingMessage: null,\n className: null,\n inline: false,\n delayed: false,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(Loading));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { Typography } from '@material-ui/core';\n\nconst styles = theme => ({\n root: {\n padding: theme.spacing(10),\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n text: {\n },\n});\n\nclass PageNotFound extends React.Component {\n render() {\n const {\n classes, translate,\n } = this.props;\n\n return (\n \n \n {translate('common.pageNotFound')}\n \n
\n );\n }\n}\n\nPageNotFound.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n};\n\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(PageNotFound));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nclass PollData extends React.Component {\n componentDidMount() {\n if (this.props.callImediately) {\n if (this.props.initialdataCall) {\n this.props.initialdataCall();\n } else {\n this.props.dataCall();\n }\n }\n\n this.pollState();\n }\n\n componentDidUpdate() {\n this.pollState();\n }\n\n componentWillUnmount() {\n this.clearTimeout();\n }\n\n clearTimeout = () => {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n pollState = () => {\n if (this.props.pollCondition && !this.timer) {\n this.timer = setTimeout(() => {\n this.clearTimeout();\n if (this.props.pollCondition) {\n this.props.dataCall();\n this.pollState();\n }\n }, this.props.pollingIntervalInMinutes * 60 * 1000);\n }\n }\n\n render() {\n return null;\n }\n}\n\nPollData.propTypes = {\n initialdataCall: PropTypes.func,\n dataCall: PropTypes.func.isRequired,\n pollCondition: PropTypes.bool,\n callImediately: PropTypes.bool,\n pollingIntervalInMinutes: PropTypes.number.isRequired,\n};\n\nPollData.defaultProps = {\n callImediately: true,\n initialdataCall: null,\n pollCondition: true,\n};\n\nexport default PollData;\n","import * as React from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Auth, { authTypes } from '../Auth';\n\nconst PrivateRoute = ({\n component: Component, loginUrl, selectOrgUrl, requiredAuthType, ...rest\n}) => (\n {\n if (Auth.isUserAuthenticated(requiredAuthType)) {\n return ;\n }\n if (selectOrgUrl && Auth.isUserAuthenticated(authTypes.orgSelect)) {\n return (\n \n )\n }\n return (\n \n );\n }}\n />\n)\n\nconst mapStateToProps = state => ({\n profileData: state.auth.profileData,\n});\n\n\nPrivateRoute.propTypes = {\n component: PropTypes.elementType.isRequired,\n location: PropTypes.object.isRequired,\n loginUrl: PropTypes.string.isRequired,\n requiredAuthType: PropTypes.string.isRequired,\n selectOrgUrl: PropTypes.string,\n};\n\nPrivateRoute.defaultProps = {\n selectOrgUrl: null,\n};\n\n\nexport default connect(mapStateToProps)(PrivateRoute);\n","import { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nconst ScrollToTop = ({ children, hardScroll }) => {\n const [locationKeys, setLocationKeys] = useState([]);\n const history = useHistory();\n\n useEffect(() => history.listen((loc) => {\n const scroll = () => {\n setTimeout(() => {\n const scrollEl = document.getElementById('scrollTop');\n if (scrollEl) {\n scrollEl.scrollIntoView({ behavior: hardScroll ? undefined : 'smooth' });\n } else {\n window.scrollTo({ top: 0, behavior: hardScroll ? undefined : 'smooth' }); // not supported by IE..\n }\n }, 0); // need timeout for iOs support\n };\n\n if (history.action === 'PUSH') {\n // Link event\n // console.log('link PUSH');\n scroll();\n setLocationKeys([loc.key]);\n } else if (history.action === 'REPLACE') {\n // Link event\n // console.log('link REPLACE');\n scroll();\n } else if (history.action === 'POP') {\n if (locationKeys[1] === loc.key) {\n // console.log('forward POP');\n // Forward event\n setLocationKeys(([_, ...keys]) => keys);\n } else {\n // console.log('backward POP');\n setLocationKeys(keys => [loc.key, ...keys]);\n // Back event\n }\n } else {\n // console.log('Unknown navigation', history.action);\n }\n }), [hardScroll, history, locationKeys]);\n\n return children;\n};\n\nScrollToTop.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]),\n hardScroll: PropTypes.bool,\n};\n\nScrollToTop.defaultProps = {\n children: null,\n hardScroll: false,\n};\n\nexport default ScrollToTop;\n","import React from 'react';\n\nexport const with1dArrowNavigation = Component => (props) => {\n let minX = Infinity;\n let maxX = -Infinity;\n const refs = {};\n\n const setRef = x => (ref) => {\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n refs[x] = ref;\n };\n\n const [currentId, setCurrentId] = React.useState(minX);\n\n const handleArrowLeft = () => setCurrentId(x => Math.max(minX, x - 1));\n const handleArrowUp = () => setCurrentId(x => Math.min(maxX, x + 1));\n const handleArrowRight = () => setCurrentId(x => Math.min(maxX, x + 1));\n const handleArrowDown = () => setCurrentId(x => Math.max(minX, x - 1));\n\n const handleKeyDown = (event) => {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return undefined;\n }\n\n if (event.keyCode >= 37 && event.keyCode <= 40) {\n event.preventDefault();\n }\n\n switch (event.keyCode) {\n case 37: return handleArrowLeft();\n case 38: return handleArrowUp();\n case 39: return handleArrowRight();\n case 40: return handleArrowDown();\n default: return undefined;\n }\n };\n\n const handleMouseDown = x => () => setCurrentId(x);\n\n React.useEffect(() => {\n if (refs[currentId]) refs[currentId].focus();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentId]);\n\n return (\n \n );\n};\n\nexport const with2dArrowNavigation = Component => (props) => {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n const refs = {};\n\n const setRef = (y, x) => (ref) => {\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n if (!refs[y]) refs[y] = {};\n refs[y][x] = ref;\n };\n\n const [currentId, setCurrentId] = React.useState([minX, minY]);\n\n const handleArrowLeft = () => setCurrentId(([y, x]) => [y, Math.max(minX, x - 1)]);\n const handleArrowUp = () => setCurrentId(([y, x]) => [Math.max(minY, y - 1), x]);\n const handleArrowRight = () => setCurrentId(([y, x]) => [y, Math.min(maxX, x + 1)]);\n const handleArrowDown = () => setCurrentId(([y, x]) => [Math.min(maxY, y + 1), x]);\n\n const handleKeyDown = (event) => {\n if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {\n return undefined;\n }\n\n if (event.keyCode >= 37 && event.keyCode <= 40) {\n event.preventDefault();\n }\n\n switch (event.keyCode) {\n case 37: return handleArrowLeft();\n case 38: return handleArrowUp();\n case 39: return handleArrowRight();\n case 40: return handleArrowDown();\n default: return undefined;\n }\n };\n\n const handleMouseDown = (y, x) => () => setCurrentId([y, x]);\n\n React.useEffect(() => {\n const [y, x] = currentId;\n const ref = refs[y]?.[x];\n if (ref) ref.focus();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentId]);\n\n return (\n \n );\n};\n\nexport default {\n with1dArrowNavigation,\n with2dArrowNavigation,\n};\n","export { default as ScrollToTop } from './ScrollToTop';\nexport { default as PrivateRoute } from './PrivateRoute';\nexport { default as LanguageToggle } from './LanguageToggle';\nexport { default as Loading } from './Loading';\nexport { default as ErrorMessage } from './ErrorMessage';\nexport { default as PageNotFound } from './PageNotFound';\nexport { default as IdleTimer } from './IdleTimer';\nexport { default as PollData } from './PollData';\nexport { default as DialogButton } from './DialogButton';\nexport { default as HtmlContent } from './HtmlContent';\nexport { default as DelayedFetch } from './DelayedFetch';\nexport { default as Image } from './Image';\nexport { default as FormLink } from './FormLink';\nexport { default as TaskContent } from './taskElements/TaskContent';\nexport { default as TaskContentDisplay } from './taskElements/TaskContentDisplay';\nexport { default as DevelopmentBanner } from './DevelopmentBanner';\nexport { default as ErrorBoundary } from './ErrorBoundary';\nexport { default as AsyncTextField } from './AsyncTextField';\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasValueForQuestionType = void 0;\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"@material-ui/icons\");\nvar objectUtils_1 = require(\"../../objectUtils\");\nvar constants_1 = require(\"../../constants\");\nvar HtmlContent_1 = __importDefault(require(\"../HtmlContent\"));\nvar TableResponse_1 = __importDefault(require(\"./formResponseTypes/TableResponse\"));\nvar ScaleResponse_1 = __importDefault(require(\"./formResponseTypes/ScaleResponse\"));\nvar FreetextResponse_1 = __importDefault(require(\"./formResponseTypes/FreetextResponse\"));\nvar SingleChoice_1 = __importDefault(require(\"./formResponseTypes/SingleChoice\"));\nvar MultipleChoice_1 = __importDefault(require(\"./formResponseTypes/MultipleChoice\"));\nvar ActionButton_1 = __importDefault(require(\"./formResponseTypes/ActionButton\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n '&+&': {\n marginTop: theme.spacing(5),\n },\n },\n top: {\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'flex-end',\n minHeight: 48,\n },\n questionText: {\n flex: '1 1 auto',\n marginBottom: theme.spacing(1),\n fontSize: theme.typography.body1.fontSize,\n '&:empty': {\n marginBottom: 0,\n },\n },\n required: {\n border: \"1px solid \".concat(theme.palette.error.main),\n padding: theme.spacing(1),\n },\n switchResponse: {\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n },\n checkedIcon: {\n color: theme.youwell.colors.green,\n marginBottom: theme.spacing(1),\n },\n blink: {\n animation: '$blink 2s ease-in-out',\n },\n '@keyframes blink': {\n '0%': {\n opacity: 0,\n transform: 'none',\n },\n '30%': {\n opacity: 1,\n },\n '50%': {\n transform: 'scale3d(1.5, 1.5, 1)',\n },\n '100%': {\n transform: 'none',\n },\n },\n}); });\nvar hasValueForQuestionType = function (questionType, response) {\n if (questionType === constants_1.formAnswerTypes.action) {\n return true;\n }\n if (!response || (0, objectUtils_1.isEmpty)(response)) {\n return false;\n }\n switch (questionType) {\n case constants_1.formAnswerTypes.freetext:\n return (0, objectUtils_1.hasValue)(response.freetextResponse);\n case constants_1.formAnswerTypes.singleChoice:\n case constants_1.formAnswerTypes.multipleChoice:\n return (0, objectUtils_1.hasValue)(response.choiceResponse);\n case constants_1.formAnswerTypes.scale:\n return (0, objectUtils_1.hasValue)(response.scaleResponse);\n case constants_1.formAnswerTypes.table:\n return (0, objectUtils_1.hasValue)(response.tableResponses);\n default:\n return true;\n }\n};\nexports.hasValueForQuestionType = hasValueForQuestionType;\nvar FormQuestion = function (_a) {\n var _b;\n var response = _a.response, handleResponseUpdate = _a.handleResponseUpdate, showScores = _a.showScores, question = _a.question, showRequired = _a.showRequired, disabled = _a.disabled, contentState = _a.contentState, readOnly = _a.readOnly, elementSettings = _a.elementSettings, showScoreValues = _a.showScoreValues;\n var classes = useStyles();\n var _c = React.useState(false), hasUpdated = _c[0], setHasUpdated = _c[1];\n var _d = React.useState(false), hasFinished = _d[0], setHasFinished = _d[1];\n var onResponseCompletedValid = function () {\n setHasFinished(true);\n };\n var handleValueChange = function (name, completeOnUpdate) { return function (value) {\n setHasUpdated(true);\n handleResponseUpdate(name, value);\n if (completeOnUpdate) {\n onResponseCompletedValid();\n }\n }; };\n var handleClickResponse = function (name, value) { return function () {\n if (readOnly)\n return;\n handleResponseUpdate(name, value);\n if (value) {\n onResponseCompletedValid();\n }\n }; };\n if (question === null) {\n return null;\n }\n var hasValueForQuestion = (0, exports.hasValueForQuestionType)(question.type, response);\n var showQuestionAndCheckIcon = question.type !== constants_1.formAnswerTypes.action && question.type !== constants_1.formAnswerTypes.switch;\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.root, (_b = {}, _b[classes.required] = question.required && showRequired && !hasValueForQuestion, _b)) },\n showQuestionAndCheckIcon && (React.createElement(\"div\", { className: classes.top },\n React.createElement(HtmlContent_1.default, { id: question.id.toString(), html: question.question, className: classes.questionText }),\n !readOnly && hasValueForQuestion && (React.createElement(React.Fragment, null,\n hasUpdated && hasFinished && (React.createElement(icons_1.CheckCircleRounded, { className: (0, classnames_1.default)(classes.checkedIcon, classes.blink) })),\n !hasUpdated && (React.createElement(icons_1.CheckCircleRounded, { className: (0, classnames_1.default)(classes.checkedIcon) })))))),\n question.type === constants_1.formAnswerTypes.freetext && (React.createElement(FreetextResponse_1.default, { handleResponseUpdate: handleValueChange('freetextResponse'), freetextConfig: question.freetextConfig, freetextResponse: response === null || response === void 0 ? void 0 : response.freetextResponse, disabled: disabled, readOnly: readOnly, onCompletedValid: onResponseCompletedValid })),\n (question.type === constants_1.formAnswerTypes.singleChoice || question.type === 'ActionChoice') && ( // ActionChoice is obsolete..\n React.createElement(SingleChoice_1.default, { handleResponseUpdate: handleValueChange('choiceResponse'), choiceConfig: question.choiceConfig, selectedChoice: (response === null || response === void 0 ? void 0 : response.choiceResponse) && response.choiceResponse[0], question: question, disabled: disabled, showScores: showScores, showScoreValues: showScoreValues, readOnly: readOnly, onCompletedValid: onResponseCompletedValid })),\n question.type === constants_1.formAnswerTypes.multipleChoice && (React.createElement(MultipleChoice_1.default, { handleResponseUpdate: handleValueChange('choiceResponse'), choiceConfig: question.choiceConfig, selectedChoices: response === null || response === void 0 ? void 0 : response.choiceResponse, question: question, disabled: disabled, readOnly: readOnly, showScores: showScores, showScoreValues: showScoreValues, onCompletedValid: onResponseCompletedValid, questionId: question.id.toString() })),\n (question.type === constants_1.formAnswerTypes.scale || question.type === 'ActionScale') && ( // ActionScale is obsolete..\n React.createElement(ScaleResponse_1.default, { scaleConfig: question.scaleConfig, response: response === null || response === void 0 ? void 0 : response.scaleResponse, disabled: disabled, readOnly: readOnly, handleResponseUpdate: handleValueChange('scaleResponse', true) })),\n question.type === constants_1.formAnswerTypes.table && (React.createElement(TableResponse_1.default, { tableConfig: question.tableConfig, response: response === null || response === void 0 ? void 0 : response.tableResponses, disabled: disabled, readOnly: readOnly, elementSettings: elementSettings, handleResponseUpdate: handleValueChange('tableResponses', true) })),\n question.type === constants_1.formAnswerTypes.action && (React.createElement(ActionButton_1.default, { handleResponseUpdate: handleValueChange('scaleResponse'), scaleResponse: response === null || response === void 0 ? void 0 : response.scaleResponse, contentState: contentState, question: question, disabled: disabled, readOnly: readOnly })),\n question.type === constants_1.formAnswerTypes.switch && (React.createElement(\"div\", { className: classes.switchResponse },\n React.createElement(core_1.FormGroup, null,\n React.createElement(core_1.FormControlLabel, { disabled: disabled, control: (React.createElement(core_1.Switch, { color: \"secondary\", checked: !!(response === null || response === void 0 ? void 0 : response.scaleResponse), onChange: handleClickResponse('scaleResponse', (response === null || response === void 0 ? void 0 : response.scaleResponse) ? 0 : 1) })), label: React.createElement(HtmlContent_1.default, { html: question.question }) }))))));\n};\nFormQuestion.defaultProps = {\n response: null,\n showRequired: false,\n disabled: false,\n contentState: null,\n showScores: false,\n readOnly: false,\n elementSettings: null,\n showScoreValues: false,\n};\nexports.default = FormQuestion;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar react_localize_redux_1 = require(\"react-localize-redux\");\nvar core_1 = require(\"@material-ui/core\");\nvar FormQuestion_1 = require(\"./FormQuestion\");\nvar elementStateUtils_1 = require(\"../../elementStateUtils\");\nvar constants_1 = require(\"../../constants\");\nvar styles = function (theme) { return ({\n validationText: {\n marginTop: theme.spacing(4),\n textAlign: 'center',\n width: '100%',\n outline: 'none',\n },\n}); };\nvar FormValidation = /** @class */ (function (_super) {\n __extends(FormValidation, _super);\n function FormValidation() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n missingRequiredQuestions: false,\n changeId: null,\n };\n _this.validationErrorRef = React.createRef();\n _this.validate = function () {\n var _a;\n var _b = _this.props, task = _b.task, responses = _b.responses, getProgramItem = _b.getProgramItem, getResponses = _b.getResponses, changeId = _b.changeId;\n if (!((_a = task.contentElements) === null || _a === void 0 ? void 0 : _a.length)) {\n return true;\n }\n var missingRequiredQuestions = task.contentElements.map(function (e) {\n var _a;\n var contentState = (0, elementStateUtils_1.getElementConditionState)(e, getResponses, task, getProgramItem);\n if ((contentState === null || contentState === void 0 ? void 0 : contentState.state) === constants_1.elementConditionStates.hidden) {\n return false;\n }\n return (_a = e.questions) === null || _a === void 0 ? void 0 : _a.reduce(function (prev, curr) {\n var _a;\n return prev\n || (curr.required && (!responses || !(0, FormQuestion_1.hasValueForQuestionType)(curr.type, (_a = responses[curr.id]) === null || _a === void 0 ? void 0 : _a.response)));\n }, false);\n }).some(function (d) { return d; });\n _this.setState({ missingRequiredQuestions: missingRequiredQuestions, changeId: changeId });\n return !missingRequiredQuestions;\n };\n return _this;\n }\n FormValidation.prototype.componentDidUpdate = function (prevProps, prevState) {\n // Focus on validation error when appearing\n if (!prevState.missingRequiredQuestions && this.state.missingRequiredQuestions) {\n if (this.validationErrorRef.current)\n this.validationErrorRef.current.focus();\n }\n if (prevState.missingRequiredQuestions && this.props.changeId && prevState.changeId !== this.props.changeId) {\n this.validate();\n }\n };\n FormValidation.prototype.render = function () {\n var _a = this.props, classes = _a.classes, task = _a.task, showValidations = _a.showValidations;\n if (!task) {\n return null;\n }\n if (!this.state.missingRequiredQuestions || !showValidations) {\n return null;\n }\n return (React.createElement(core_1.Typography, { color: \"error\", tabIndex: -1, ref: this.validationErrorRef, className: classes.validationText },\n React.createElement(react_localize_redux_1.Translate, { id: \"taskContent.pleaseAnswerRequiredQuestions\" })));\n };\n return FormValidation;\n}(React.Component));\n// @ts-ignore // Typescript doesn't recognise defaultProps for Class Components??\nFormValidation.defaultProps = {\n showValidations: false,\n responses: null,\n changeId: null,\n ref: null,\n};\nexports.default = (0, core_1.withStyles)(styles)(FormValidation);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { Translate } from 'react-localize-redux';\n\nimport { Link } from 'react-router-dom';\nimport OpenInNewWindowIcon from '@material-ui/icons/OpenInNew';\nimport { Typography } from '@material-ui/core';\n\nimport { linkTypes } from '../../constants';\nimport apiUrls, { getImageUrl } from '../../apiUrls';\nimport Image from '../Image';\n\nconst styles = theme => ({\n image: {\n width: '100%',\n },\n audio: {\n width: '100%',\n },\n link: {\n display: 'inline',\n borderBottom: `1px solid ${theme.palette.grey[200]}`,\n },\n fileLink: {\n },\n internalLink: {\n },\n externalLink: {\n\n },\n icon: {\n marginLeft: theme.spacing(1),\n },\n missingContent: {\n background: theme.palette.grey[100],\n padding: theme.spacing(2),\n },\n});\n\nclass LinkElement extends React.Component {\n state = {\n paddingBottom: null,\n };\n\n componentDidMount() {\n window.addEventListener('message', this.handlePostMessage);\n }\n\n componentWillUnmount() {\n window.removeEventListener('message', this.handlePostMessage);\n }\n\n handlePostMessage = (event) => {\n if (event.origin === apiUrls.contentBaseUrl && event.data?.source === 'yw@videoPlayer') {\n const aspectRatio = event.data.height / event.data.width;\n if (aspectRatio > 0) {\n this.setState({ paddingBottom: `${aspectRatio * 100}%` });\n }\n }\n }\n\n render() {\n const {\n classes, link, className, getLinkUrl, autoplayVideos,\n } = this.props;\n\n if (!link || !link.url) {\n return null;\n }\n\n const autoplay = autoplayVideos ? '&autoplaymuted=true' : '';\n\n return (\n \n {getLinkUrl && (link.linkType === linkTypes.task || link.linkType === linkTypes.module || link.linkType === linkTypes.internal) && (\n
\n
\n {link.name }\n \n \n )}\n\n {link.linkType === linkTypes.image && (\n
\n )}\n\n {link.linkType === linkTypes.audio && (\n
\n )}\n\n {link.linkType === linkTypes.file && (\n
\n \n {link.name || ()}\n \n \n )}\n\n {link.linkType === linkTypes.url && (\n
\n \n {link.name || ()}\n \n \n \n )}\n\n {link.linkType === linkTypes.video && (\n
\n \n
\n )}\n\n {link.linkType === linkTypes.vimeo && (\n
\n \n
\n )}\n\n {link.linkType === linkTypes.youtube && (\n
\n \n
\n )}\n
\n );\n }\n}\n\nLinkElement.propTypes = {\n classes: PropTypes.object.isRequired,\n link: PropTypes.object,\n className: PropTypes.string,\n getLinkUrl: PropTypes.func,\n autoplayVideos: PropTypes.bool,\n};\n\nLinkElement.defaultProps = {\n link: null,\n className: null,\n getLinkUrl: null,\n autoplayVideos: false,\n};\n\nexport default withStyles(styles)(LinkElement);\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar elementStateUtils_1 = require(\"../../elementStateUtils\");\n// eslint-disable-next-line import/no-cycle -- ok because ReadMore can display content via TaskContent\nvar TaskElement_1 = __importDefault(require(\"./TaskElement\"));\nvar FormValidation_1 = __importDefault(require(\"./FormValidation\"));\nvar styles = function (theme) { return (0, core_1.createStyles)({\n validationText: {\n marginTop: theme.spacing(4),\n textAlign: 'center',\n width: '100%',\n outline: 'none',\n },\n}); };\nvar TaskContent = /** @class */ (function (_super) {\n __extends(TaskContent, _super);\n function TaskContent() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n showValidationErrors: false,\n };\n _this.validationRef = React.createRef();\n _this.validate = function () {\n var _a;\n _this.setState({ showValidationErrors: true });\n return (_a = _this.validationRef.current) === null || _a === void 0 ? void 0 : _a.validate();\n };\n _this.validateAndSave = function (callback, submit) {\n if (_this.validate()) {\n if (_this.props.onSaveChanges) {\n _this.props.onSaveChanges(callback, submit);\n }\n }\n };\n _this.submitForm = function (callback) {\n if (_this.validate()) {\n if (_this.props.onSaveChanges) {\n _this.props.onSaveChanges(function () {\n _this.setState({ showValidationErrors: false });\n if (callback) {\n callback();\n }\n }, true);\n }\n }\n };\n _this.saveWithoutValidation = function (callback) {\n if (_this.props.onSaveChanges) {\n _this.props.onSaveChanges(callback);\n }\n };\n return _this;\n }\n TaskContent.prototype.render = function () {\n var _this = this;\n var _a = this.props, className = _a.className, classes = _a.classes, task = _a.task, taskResponses = _a.taskResponses, noContent = _a.noContent, TaskFormProps = _a.TaskFormProps, LinkElementProps = _a.LinkElementProps, showTitle = _a.showTitle, getProgramItem = _a.getProgramItem, getResponses = _a.getResponses, onResponse = _a.onResponse, TaskElementProps = _a.TaskElementProps, changeId = _a.changeId;\n if (!task) {\n return null;\n }\n var taskElements = task.contentElements || [];\n (0, elementStateUtils_1.updateAllOthersAreHiddenProperties)(task, getResponses, getProgramItem);\n return (React.createElement(\"div\", { className: className },\n React.createElement(React.Fragment, null,\n showTitle && (React.createElement(core_1.Typography, { variant: \"h4\", className: classes.title }, task.name)),\n taskElements.length === 0\n ? noContent\n : taskElements.map(function (item, index) { return (React.createElement(TaskElement_1.default, __assign({ key: \"\".concat(task.elementId, \"-\").concat(task.id, \"-\").concat(item.id), task: task, getProgramItem: getProgramItem, getResponses: getResponses, element: item, taskResponses: taskResponses, TaskFormProps: TaskFormProps, LinkElementProps: LinkElementProps, elementIndex: index, onResponse: onResponse, showValidationErrors: _this.state.showValidationErrors }, TaskElementProps))); })),\n React.createElement(FormValidation_1.default, { ref: this.validationRef, task: task, responses: taskResponses, changeId: changeId, showValidations: this.state.showValidationErrors, getProgramItem: getProgramItem, getResponses: getResponses })));\n };\n return TaskContent;\n}(React.Component));\n// @ts-ignore // Typescript doesn't recognise defaultProps for Class Components??\nTaskContent.defaultProps = {\n className: null,\n noContent: null,\n taskResponses: null,\n TaskFormProps: null,\n LinkElementProps: null,\n showTitle: false,\n elementPreContent: null,\n task: null,\n TaskElementProps: null,\n changeId: null,\n onSaveChanges: null,\n ref: null,\n};\nexports.default = (0, core_1.withStyles)(styles)(TaskContent);\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar prop_types_1 = __importDefault(require(\"prop-types\"));\nvar TaskContent_1 = __importDefault(require(\"./TaskContent\"));\nvar TaskContentDisplay = function (_a) {\n var task = _a.task, _b = _a.elementResponses, elementResponses = _b === void 0 ? null : _b, rest = __rest(_a, [\"task\", \"elementResponses\"]);\n return (task\n ? (React.createElement(TaskContent_1.default, __assign({ task: task, getProgramItem: function () { return null; }, getResponses: function () { return null; }, taskResponses: elementResponses, TaskFormProps: { readOnly: true }, onResponse: function () { }, onSaveChanges: function () { } }, rest))) : null);\n};\nTaskContentDisplay.propTypes = {\n task: prop_types_1.default.object,\n elementResponses: prop_types_1.default.object,\n};\nTaskContentDisplay.defaultProps = {\n task: null,\n elementResponses: null,\n};\nexports.default = TaskContentDisplay;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar HtmlContent_1 = __importDefault(require(\"../HtmlContent\"));\nvar constants_1 = require(\"../../constants\");\n// eslint-disable-next-line import/no-cycle -- ok because ReadMore can display content via TaskContent\nvar taskElementContent_1 = __importStar(require(\"./taskElementContent\"));\nvar LinkElement_1 = __importDefault(require(\"./LinkElement\"));\nvar elementStateUtils_1 = require(\"../../elementStateUtils\");\nvar utils_1 = require(\"./utils\");\nvar stringUtils_1 = require(\"../../stringUtils\");\nvar styles = function (theme) {\n var _a, _b, _c;\n return (0, core_1.createStyles)({\n root: (_a = {\n position: 'relative',\n clear: 'both',\n width: '100%',\n flex: '0 0 100%',\n '&:not(:first-child)': {\n marginTop: theme.spacing(8),\n }\n },\n _a[theme.breakpoints.down('sm')] = {\n wordBreak: 'break-word',\n '&+&': {\n marginTop: theme.spacing(6),\n },\n },\n _a['&$selected'] = {\n border: \"2px solid \".concat(theme.palette.primary.main),\n padding: theme.spacing(1),\n },\n _a[\"&.et_\".concat(constants_1.defaultContentElementTypes.box)] = {\n marginTop: theme.spacing(4),\n background: theme.youwell.colors.secondaryBackground,\n color: theme.palette.grey[900],\n boxShadow: theme.shadows[3],\n borderRadius: theme.youwell.shapes.borderRadiusFlatter,\n padding: theme.spacing(2),\n alignSelf: 'flex-start',\n '$root+&': (_b = {\n marginTop: theme.spacing(8)\n },\n _b[theme.breakpoints.down('sm')] = {\n marginTop: theme.spacing(6),\n },\n _b),\n '& figure.table': {\n margin: '1em -16px',\n width: 'calc(100% + 32px)',\n },\n '& .htmlcontent a': {\n color: 'var(--primary-color)',\n },\n },\n _a[\"&.et_\".concat(constants_1.defaultContentElementTypes.card)] = (_c = {\n flex: '0 0 auto',\n width: '31%',\n padding: theme.spacing(1),\n background: theme.youwell.colors.secondaryBackground,\n borderRadius: theme.youwell.shapes.borderRadiusFlatter\n },\n _c[theme.breakpoints.down('xs')] = {\n flex: '0 0 100%',\n },\n _c),\n _a),\n hoveredElement: {\n visibility: 'hidden',\n '$root:hover &': {\n visibility: 'visible',\n },\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: theme.spacing(2),\n },\n title: {\n fontSize: '1.25em',\n flex: '1 1 auto',\n },\n content: {\n '&+&': {\n marginTop: theme.spacing(4),\n },\n '&:empty': {\n display: 'none',\n },\n },\n htmlContent: {},\n linkContent: {},\n accepted: {},\n rejected: {},\n selected: {},\n });\n};\nvar TaskElement = /** @class */ (function (_super) {\n __extends(TaskElement, _super);\n function TaskElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.scrolled = false;\n _this.scrollIntoView = function () {\n var element = document.getElementById(\"\".concat(constants_1.contentElemenIdPrefix).concat(_this.props.element.id));\n if (element) {\n _this.scrolled = true;\n setTimeout(function () {\n var yOffset = -90; // (isDesktop ? -headerHeight : 0) - 10;\n var y = element.getBoundingClientRect().top + window.scrollY + yOffset;\n if (window.scrollTo) {\n window.scrollTo({ top: y });\n }\n else {\n document.documentElement.scrollTop = y;\n }\n // el.scrollIntoView();\n // el.scrollIntoView({ behavior: 'smooth' });\n }, 200);\n }\n };\n _this.checkScroll = function () {\n var _a, _b;\n if (_this.scrolled || !_this.props.element) {\n // no action\n }\n else if (((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.hash) && \"\".concat(_this.props.element.id) === window.location.hash.substring(1)) {\n _this.scrollIntoView();\n }\n else if ((0, stringUtils_1.parseBoolString)((_b = _this.props.element.settings) === null || _b === void 0 ? void 0 : _b.scrollOnVisibleContent)) {\n _this.scrollIntoView();\n }\n };\n return _this;\n }\n TaskElement.prototype.componentDidMount = function () {\n this.checkScroll();\n };\n TaskElement.prototype.componentDidUpdate = function () {\n this.checkScroll();\n };\n TaskElement.prototype.render = function () {\n var _a;\n var _b, _c;\n var _d = this.props, classes = _d.classes, task = _d.task, taskResponses = _d.taskResponses, element = _d.element, TaskFormProps = _d.TaskFormProps, customElementHandler = _d.customElementHandler, getResponses = _d.getResponses, showValidationErrors = _d.showValidationErrors, className = _d.className, onResponse = _d.onResponse, LinkElementProps = _d.LinkElementProps, getProgramItem = _d.getProgramItem, noHiddenStates = _d.noHiddenStates, HoveredElement = _d.HoveredElement, selectedElementId = _d.selectedElementId, elementPreContent = _d.elementPreContent, elementIndex = _d.elementIndex;\n var contentStateCondition = (0, elementStateUtils_1.getElementConditionState)(element, getResponses, task, getProgramItem);\n var contentState = contentStateCondition === null || contentStateCondition === void 0 ? void 0 : contentStateCondition.state;\n if (contentState === constants_1.elementConditionStates.hidden && !noHiddenStates) {\n return React.createElement(\"div\", { className: classes.hiddenByState, \"data-csid\": contentStateCondition === null || contentStateCondition === void 0 ? void 0 : contentStateCondition.id });\n }\n var htmlContentPosition = (0, taskElementContent_1.getHtmlContentPosition)(element.elementType, (_b = element.settings) === null || _b === void 0 ? void 0 : _b.contentPosition);\n var showContent = htmlContentPosition > -1;\n // Set as exitNode for early exit from module (used in i.e. public screening programs)\n window.__youwellExitNode = (0, stringUtils_1.parseBoolString)((_c = element.settings) === null || _c === void 0 ? void 0 : _c.exitNode);\n return (React.createElement(React.Fragment, null,\n elementPreContent && elementPreContent(element, elementIndex),\n React.createElement(\"div\", { id: \"\".concat(constants_1.contentElemenIdPrefix).concat(element.id), \"data-csid\": contentStateCondition === null || contentStateCondition === void 0 ? void 0 : contentStateCondition.id, className: (0, classnames_1.default)(classes.root, className, (_a = {},\n _a[classes.accepted] = contentState === constants_1.elementConditionStates.accepted,\n _a[classes.rejected] = contentState === constants_1.elementConditionStates.rejected,\n _a[classes.selected] = selectedElementId && element.id === selectedElementId,\n _a[\"et_\".concat(element.elementType)] = element.elementType && element.elementType !== constants_1.defaultContentElementTypes.default,\n _a)), style: (0, utils_1.getStylesFromSettings)((element === null || element === void 0 ? void 0 : element.settings) ? element.settings : {}) },\n HoveredElement && (React.createElement(HoveredElement, { taskId: task.id, elementId: element.id, className: classes.hoveredElement })),\n showContent && element.title && (React.createElement(\"div\", { className: classes.header },\n React.createElement(core_1.Typography, { variant: \"subtitle2\", className: classes.title }, element.title))),\n htmlContentPosition === 0 && (React.createElement(HtmlContent_1.default, { html: element.htmlContent, className: (0, classnames_1.default)(classes.content, classes.htmlContent) })),\n showContent && (React.createElement(LinkElement_1.default, __assign({ link: element.link, className: (0, classnames_1.default)(classes.content, classes.linkContent) }, LinkElementProps))),\n htmlContentPosition === 1 && (React.createElement(HtmlContent_1.default, { html: element.htmlContent, className: (0, classnames_1.default)(classes.content, classes.htmlContent) })),\n React.createElement(taskElementContent_1.default, { className: classes.content, task: task, element: element, getProgramItem: getProgramItem, getResponses: getResponses, contentState: contentState, customElementHandler: customElementHandler, taskResponses: taskResponses, showValidationErrors: showValidationErrors, onResponse: onResponse, TaskFormProps: TaskFormProps }),\n htmlContentPosition === 2 && (React.createElement(HtmlContent_1.default, { html: element.htmlContent, className: (0, classnames_1.default)(classes.content, classes.htmlContent) })))));\n };\n return TaskElement;\n}(React.Component));\n// @ts-ignore // Typescript doesn't recognise defaultProps for Class Components??\nTaskElement.defaultProps = {\n TaskFormProps: null,\n customElementHandler: null,\n LinkElementProps: null,\n taskResponses: null,\n noHiddenStates: false,\n HoveredElement: null,\n selectedElementId: null,\n elementPreContent: null,\n showValidationErrors: false,\n className: null,\n};\nexports.default = (0, styles_1.withStyles)(styles)(TaskElement);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport FormQuestion from './FormQuestion';\nimport { customContentElementTypes, questionContentElementTypes } from '../../constants';\nimport QuestionnaireTable from './formResponseTypes/customTypes/QuestionnaireTable';\nimport BullsEyeQuestions from './formResponseTypes/customTypes/BullsEyeQuestions';\nimport BubbleChoiceQuestions from './formResponseTypes/customTypes/BubbleChoiceQuestions';\nimport QuizResponse from './formResponseTypes/customTypes/QuizResponse';\nimport Quiz from './formResponseTypes/customTypes/Quiz';\nimport RouteSelection from './formResponseTypes/customTypes/RouteSelection';\nimport CollapsedTable from './formResponseTypes/customTypes/CollapsedTable';\n\nclass TaskForm extends React.Component {\n handleResponseUpdate = question => (responseName, value) => {\n if (this.props.readOnly) {\n return;\n }\n\n this.props.onResponse([{ questionId: question.id, questionKey: question.key, [responseName]: value }]);\n }\n\n render() {\n const {\n element, disabled, readOnly,\n FormQuestionProps, QuestionnaireTableProps, contentState, showValidationErrors,\n taskResponses, getProgramItem, getResponses, taskId, small, showScoreValues,\n } = this.props;\n\n const questions = element.questions || [];\n const responses = taskResponses || {};\n const elementSettings = element.settings || {};\n\n switch (element.elementType) {\n case questionContentElementTypes.bullseye:\n return (\n \n );\n case questionContentElementTypes.questionnaire:\n return (\n \n );\n case questionContentElementTypes.bubbleChoice:\n return questions.map(q => (\n \n ));\n case customContentElementTypes.quizResponse:\n return (\n \n );\n case questionContentElementTypes.quiz:\n return (\n \n );\n case customContentElementTypes.routeSelection:\n return (\n \n );\n case (questionContentElementTypes.collapsedTable):\n return questions.map(q => (\n \n ));\n default:\n return questions.map(q => (\n \n ));\n }\n }\n}\n\nTaskForm.propTypes = {\n element: PropTypes.object.isRequired,\n onResponse: PropTypes.func.isRequired,\n getProgramItem: PropTypes.func.isRequired,\n getResponses: PropTypes.func.isRequired,\n FormQuestionProps: PropTypes.object,\n QuestionnaireTableProps: PropTypes.object,\n taskResponses: PropTypes.object,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n contentState: PropTypes.string,\n taskId: PropTypes.string.isRequired,\n showValidationErrors: PropTypes.bool,\n small: PropTypes.bool,\n showScoreValues: PropTypes.bool,\n};\n\nTaskForm.defaultProps = {\n FormQuestionProps: {},\n QuestionnaireTableProps: {},\n taskResponses: null,\n disabled: false,\n contentState: null,\n readOnly: false,\n showValidationErrors: false,\n small: false,\n showScoreValues: false,\n};\n\nexport default TaskForm;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar HtmlContent_1 = __importDefault(require(\"../../HtmlContent\"));\nvar constants_1 = require(\"../../../constants\");\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n accepted: {},\n rejected: {},\n actionButtonContainer: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n actionButton: {\n width: '100%',\n padding: theme.spacing(2),\n boxShadow: theme.shadows[3],\n border: \"4px solid \".concat(theme.palette.primary.main),\n '$accepted &': {\n background: theme.palette.primary.main,\n borderColor: theme.palette.primary.main,\n color: theme.palette.common.white,\n },\n '$rejected &': {\n background: 'darkgrey',\n borderColor: 'transparent',\n color: 'whitesmoke',\n opacity: 1,\n },\n },\n actionButtonHtml: {\n width: '100%',\n color: 'inherit',\n '$rejected &': {\n color: 'whitesmoke',\n '& > h2, & > h3, & > h4': {\n fontWeight: theme.typography.fontWeightMedium,\n },\n },\n '$accepted &': {\n color: theme.palette.common.white,\n '& > h2, & > h3, & > h4': {\n fontWeight: theme.typography.fontWeightMedium,\n },\n },\n },\n}); });\nvar ActionButton = function (_a) {\n var _b;\n var scaleResponse = _a.scaleResponse, contentState = _a.contentState, handleResponseUpdate = _a.handleResponseUpdate, question = _a.question, disabled = _a.disabled, readOnly = _a.readOnly;\n var classes = useStyles();\n var handleClickResponse = function (value) { return function () {\n if (readOnly)\n return;\n if (handleResponseUpdate) {\n handleResponseUpdate(value);\n }\n }; };\n return (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.actionButtonContainer, (_b = {},\n _b[classes.accepted] = contentState === constants_1.elementConditionStates.accepted,\n _b[classes.rejected] = contentState === constants_1.elementConditionStates.rejected,\n _b)) },\n React.createElement(core_1.ButtonBase, { className: classes.actionButton, onClick: handleClickResponse(scaleResponse ? 0 : 1), disabled: disabled, focusRipple: true },\n React.createElement(HtmlContent_1.default, { html: question.question, className: classes.actionButtonHtml }))));\n};\nActionButton.defaultProps = {\n disabled: false,\n readOnly: false,\n handleResponseUpdate: null,\n scaleResponse: null,\n contentState: null,\n};\nexports.default = ActionButton;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport {\n TextField, Typography, makeStyles,\n} from '@material-ui/core';\n\nimport {\n KeyboardTimePicker, KeyboardDateTimePicker, KeyboardDatePicker,\n} from '@material-ui/pickers';\nimport { TimeIcon, CalendarIcon } from '../../../../common/icons';\nimport { validateEmail } from '../../../validationUtils';\nimport { freetextInputTypes } from '../../../constants';\nimport { getLocalDate, isDateObject, pad2 } from '../../../dateUtils';\nimport { TextEditor } from '../../../../common/components';\nimport HtmlContent from '../../HtmlContent';\n\nconst useStyles = makeStyles(theme => ({\n inputResponse: {\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n },\n disabledReadonlyInput: {\n color: theme.palette.text.primary,\n },\n htmlContent: {\n border: theme.youwell.borders.dim,\n padding: theme.spacing(1),\n },\n}));\n\nexport const getInputType = (inputType) => {\n switch (inputType) {\n case freetextInputTypes.email:\n return 'email';\n case freetextInputTypes.phone:\n return 'tel';\n case freetextInputTypes.number:\n return 'number';\n case freetextInputTypes.date:\n return 'date';\n case freetextInputTypes.dateAndTime:\n return 'datetime-local';\n case freetextInputTypes.time:\n return 'time';\n case freetextInputTypes.default:\n case freetextInputTypes.singleLineText:\n default:\n return 'text';\n }\n};\n\nconst validators = {\n [freetextInputTypes.email]: validateEmail,\n};\n\nconst FreetextResponse = ({\n freetextResponse, handleResponseUpdate, freetextConfig, disabled, readOnly, onCompletedValid,\n}) => {\n const classes = useStyles();\n const translate = useSelector(state => getTranslate(state.localize));\n const [validationError, setValidationError] = React.useState(null);\n const [freetextStateValue, setFreetextStateValue] = React.useState(null);\n const [showValidation, setShowValidation] = React.useState(false);\n const updateAsyncTimer = React.useRef();\n\n const freetextType = (freetextConfig && freetextConfig.inputType) || freetextInputTypes.default;\n\n const validate = (value) => {\n if (validators[freetextType]) {\n const validation = validators[freetextType](value);\n setValidationError(validation.valid ? null : validation.errorTextKey);\n return validation.valid;\n }\n return true;\n };\n\n const handleChange = (event) => {\n if (readOnly) {\n return;\n }\n const value = event.target.value;\n setFreetextStateValue(value);\n\n if (showValidation) {\n validate(value);\n }\n clearTimeout(updateAsyncTimer.current);\n updateAsyncTimer.current = setTimeout(() => {\n handleResponseUpdate(value);\n }, 200);\n };\n\n const handleDateTimeChange = (date) => {\n if (readOnly) {\n return;\n }\n\n setFreetextStateValue(date);\n\n if (showValidation) {\n validate(date);\n }\n if (date === null || isDateObject(date)) {\n let valueString;\n if (date === null) {\n valueString = null;\n } else {\n switch (freetextType) {\n case freetextInputTypes.time:\n valueString = `${pad2(date.getHours())}:${pad2(date.getMinutes())}`;\n break;\n case freetextInputTypes.dateAndTime:\n valueString = `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())} ${pad2(date.getHours())}:${pad2(date.getMinutes())}`;\n break;\n case freetextInputTypes.date:\n default:\n valueString = `${date.getFullYear()}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}`;\n break;\n }\n }\n\n handleResponseUpdate(valueString);\n }\n };\n\n React.useEffect(() => {\n if (readOnly) {\n // reset text if switching from editing to readonly\n setFreetextStateValue(null);\n }\n }, [readOnly]);\n\n React.useEffect(() => {\n if (!freetextResponse) {\n // reset text if response is cleared from \"outside\" of component\n setFreetextStateValue(null);\n }\n }, [freetextResponse]);\n\n const value = freetextStateValue !== null ? freetextStateValue : freetextResponse; // comparing with null to keep empty ('') value\n\n const onBlur = () => {\n if (value) {\n setShowValidation(true);\n const valid = validate(value);\n if (valid && onCompletedValid) {\n onCompletedValid();\n }\n }\n };\n\n const sharedPickerProps = {\n className: classes.inputResponse,\n onChange: handleDateTimeChange,\n fullWidth: true,\n autoOk: true,\n clearable: true,\n disableToolbar: true,\n ampm: false,\n minutesStep: 5,\n disabled,\n clearLabel: translate('clear'),\n cancelLabel: translate('cancel'),\n okLabel: translate('ok'),\n invalidDateMessage: translate('time.invalidFormat'),\n };\n\n switch (freetextType) {\n case freetextInputTypes.date:\n return (\n }\n KeyboardButtonProps={{\n 'aria-label': translate('time.setDate'),\n }}\n placeholder=\"dd.mm.yyyy\"\n format=\"dd.MM.yyyy\"\n disabled={disabled || readOnly}\n />\n );\n case freetextInputTypes.time:\n return (\n <>\n }\n KeyboardButtonProps={{\n 'aria-label': translate('time.setTime'),\n }}\n placeholder=\"00:00\"\n format=\"HH:mm\"\n disabled={disabled || readOnly}\n />\n >\n );\n case freetextInputTypes.dateAndTime:\n return (\n <>\n }\n KeyboardButtonProps={{\n 'aria-label': translate('time.setDateAndTime'),\n }}\n placeholder=\"dd.mm.yyyy hh:mm\"\n format=\"dd.MM.yyyy HH:mm\"\n disabled={disabled || readOnly}\n />\n >\n );\n case freetextInputTypes.richText:\n return (\n <>\n {disabled || readOnly ? : (\n \n )}\n >\n );\n default:\n return (\n <>\n \n {freetextConfig?.maxLength > 0 && (\n \n {translate('taskContent.maxLengthXofY', { x: value?.length || 0, y: freetextConfig?.maxLength })}\n \n )}\n >\n );\n }\n};\n\nFreetextResponse.propTypes = {\n handleResponseUpdate: PropTypes.func,\n freetextConfig: PropTypes.object,\n freetextResponse: PropTypes.string,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n onCompletedValid: PropTypes.func,\n};\n\nFreetextResponse.defaultProps = {\n freetextResponse: null,\n disabled: false,\n handleResponseUpdate: null,\n freetextConfig: null,\n readOnly: false,\n onCompletedValid: null,\n};\n\nexport default FreetextResponse;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n choiceResponse: {\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n },\n horizontal: {},\n choiceGroup: {\n flexDirection: 'column',\n '&$horizontal': {\n flexDirection: 'row',\n },\n },\n formControlRoot: {\n '$readOnly &': {\n cursor: 'text',\n },\n },\n formControlLabel: {\n margin: theme.spacing(1, 0),\n flex: '1 1 auto',\n '$correct &': {\n color: theme.youwell.colors.green,\n },\n '$inCorrect &': {\n color: theme.youwell.colors.red,\n },\n },\n freetextLabel: {\n display: 'flex',\n alignItems: 'center',\n },\n freetextLabelText: {\n marginRight: theme.spacing(1),\n minWidth: 80,\n },\n choiceFreetextInput: {\n border: \"1px solid \".concat(theme.palette.grey[200]),\n padding: theme.spacing(0, 1),\n backgroundColor: theme.youwell.colors.inputBackground,\n },\n correct: {\n color: theme.youwell.colors.green,\n },\n inCorrect: {\n color: theme.youwell.colors.red,\n },\n checkBox: {\n color: theme.palette.primary.main,\n '$correct &': {\n color: theme.youwell.colors.green,\n },\n '$inCorrect &': {\n color: theme.youwell.colors.red,\n },\n '$readOnly &': {\n cursor: 'default',\n },\n },\n readOnly: {},\n}); }, { name: 'MultipleChoice' });\nvar MultipleChoice = function (_a) {\n var _b;\n var _c;\n var choiceConfig = _a.choiceConfig, selectedChoices = _a.selectedChoices, handleResponseUpdate = _a.handleResponseUpdate, showScores = _a.showScores, question = _a.question, disabled = _a.disabled, onCompletedValid = _a.onCompletedValid, readOnly = _a.readOnly, questionId = _a.questionId, showScoreValues = _a.showScoreValues, elementSettings = _a.elementSettings;\n var classes = useStyles();\n var isDisabled = disabled || showScores;\n var translate = (0, translate_1.default)();\n var handleMultiSelectFreetextChange = function (freetextId) { return function (event) {\n var responses = __spreadArray([], selectedChoices || [], true);\n var ix = responses.findIndex(function (d) { return (d === null || d === void 0 ? void 0 : d.id) === freetextId; });\n var updatedValue = { id: freetextId, score: 0, value: event.target.value };\n if (ix > -1) {\n responses[ix] = updatedValue;\n }\n else {\n responses.push(updatedValue);\n }\n if (handleResponseUpdate)\n handleResponseUpdate(responses);\n }; };\n var handleMultiSelectChange = function (answer) { return function (event, checked) {\n var responses = (selectedChoices || []).filter(function (d) { return (d === null || d === void 0 ? void 0 : d.id) !== answer.id; });\n var values = checked ? __spreadArray(__spreadArray([], responses, true), [answer], false) : responses;\n if (handleResponseUpdate)\n handleResponseUpdate(values);\n if (onCompletedValid)\n onCompletedValid();\n }; };\n var checkedResponses = (selectedChoices && selectedChoices.reduce(function (prev, curr) {\n var _a;\n if (curr === null || curr === void 0 ? void 0 : curr.id)\n return (__assign(__assign({}, prev), (_a = {}, _a[curr.id] = curr.value, _a)));\n return (__assign({}, prev));\n }, {})) || {};\n var onFreetextBlur = function () {\n if (choiceConfig && choiceConfig.freetextChoiceId && (checkedResponses === null || checkedResponses === void 0 ? void 0 : checkedResponses[choiceConfig.freetextChoiceId])) {\n if (onCompletedValid)\n onCompletedValid();\n }\n };\n var getScoreClass = function (item) {\n if (!showScores) {\n return undefined;\n }\n if (item.score && item.score > 0) {\n return classes.correct;\n }\n if ((selectedChoices || []).some(function (d) { return (d === null || d === void 0 ? void 0 : d.id) === item.id; })) {\n return classes.inCorrect;\n }\n return undefined;\n };\n // Allow custom styling from config\n var backgroundColor = (elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings['form.background']) || (choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.background);\n // default to white if backgroundColor is set, but may be overridden by choiceConfig.foregroundColor\n var foreGroundColor = (elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings['form.foreground']) || (choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.foreground) || (backgroundColor ? 'white' : undefined);\n return (React.createElement(\"div\", { style: { backgroundColor: backgroundColor, color: foreGroundColor, borderColor: backgroundColor }, className: classes.choiceResponse, \"aria-labelledby\": questionId },\n React.createElement(core_1.FormGroup, { className: (0, classnames_1.default)(classes.choiceGroup, (_b = {}, _b[classes.horizontal] = choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.horizontal, _b[classes.readOnly] = readOnly, _b)) }, (_c = question.answers) === null || _c === void 0 ? void 0 :\n _c.map(function (item) { return (React.createElement(core_1.FormControlLabel, { key: item.id, disabled: isDisabled, control: (React.createElement(core_1.Checkbox, { disabled: isDisabled, checked: !!checkedResponses[item.id], onChange: handleMultiSelectChange(item), value: item.id, style: { color: foreGroundColor }, className: classes.checkBox })), className: getScoreClass(item), classes: { label: classes.formControlLabel, root: classes.formControlRoot }, label: showScoreValues ? \"\".concat(item.score, \" - \").concat(item.value) : item.value })); }),\n (choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.freetextChoiceId) && (React.createElement(core_1.FormControlLabel, { disabled: isDisabled, control: (React.createElement(core_1.Checkbox, { disabled: isDisabled, checked: choiceConfig.freetextChoiceId in checkedResponses, onChange: handleMultiSelectChange({ id: choiceConfig.freetextChoiceId }), value: checkedResponses[choiceConfig.freetextChoiceId] || '', style: { color: foreGroundColor }, className: classes.checkBox })), classes: { label: classes.formControlLabel, root: classes.formControlRoot }, label: (React.createElement(\"div\", { className: classes.freetextLabel },\n React.createElement(core_1.Typography, { className: classes.freetextLabelText }, choiceConfig.freetextChoiceLabel || translate('taskContent.freetextChoiceLabel')),\n React.createElement(core_1.Input, { placeholder: translate('taskContent.freetextChoice'), fullWidth: true, disabled: isDisabled, value: checkedResponses[choiceConfig.freetextChoiceId] || '', onChange: handleMultiSelectFreetextChange(choiceConfig.freetextChoiceId), onBlur: onFreetextBlur, className: classes.choiceFreetextInput, disableUnderline: true }))) })))));\n};\nMultipleChoice.defaultProps = {\n choiceConfig: null,\n selectedChoices: null,\n disabled: false,\n readOnly: false,\n handleResponseUpdate: null,\n showScores: false,\n onCompletedValid: null,\n showScoreValues: false,\n elementSettings: null,\n};\nexports.default = MultipleChoice;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport {\n Typography, Button, Slider,\n} from '@material-ui/core';\n\nimport { hasValue } from '../../../objectUtils';\nimport { with1dArrowNavigation } from '../../accessibility/ArrowNavigation';\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column-reverse', // labels are positioned first but displayed last. To help for screen readers\n flexWrap: 'wrap',\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n\n '&$vertical': {\n height: 400,\n flexDirection: 'column',\n },\n },\n vertical: {\n },\n scale: {\n width: '100%',\n padding: theme.spacing(3, 0, 2),\n\n '$vertical &': {\n width: '50%',\n height: '100%',\n },\n },\n divider: {\n flex: '1 1 auto',\n margin: theme.spacing(1),\n borderBottom: theme.youwell.borders.normal,\n\n [theme.breakpoints.down(700)]: {\n margin: 4,\n },\n [theme.breakpoints.down(650)]: {\n margin: 2,\n },\n [theme.breakpoints.down(620)]: {\n margin: 0,\n },\n [theme.breakpoints.down('xs')]: {\n border: 0,\n margin: 0,\n },\n },\n dividerSmall: {\n margin: theme.spacing(0.5),\n\n [theme.breakpoints.down('xs')]: {\n margin: 0,\n },\n },\n noLine: {\n borderBottom: 'none',\n },\n step: {\n width: '100%',\n minWidth: 0,\n maxWidth: 64,\n wordBreak: 'normal', // override setting from TaskElement\n\n [theme.breakpoints.down('xs')]: {\n maxWidth: 48,\n },\n },\n buttons: {\n width: '100%',\n padding: theme.spacing(3, 0, 2),\n display: 'flex',\n alignItems: 'center',\n\n '$vertical &': {\n width: '50%',\n height: '100%',\n },\n },\n smallButtons: {\n },\n scaleLabels: {\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n\n '$vertical &': {\n padding: theme.spacing(1, 0),\n textAlign: 'right',\n width: '50%',\n flexDirection: 'column-reverse',\n alignItems: 'flex-end',\n height: '100%',\n },\n },\n label: {\n flex: '1 1 30%',\n\n '$vertical &': {\n flex: '0 0 auto',\n },\n },\n lastLabel: {\n marginLeft: theme.spacing(1),\n textAlign: 'right',\n },\n slider: {\n margin: theme.spacing(0, 1, 2),\n width: 'calc(100% - 16px)',\n },\n showThumb: {\n display: 'block',\n },\n hideThumb: {\n display: 'none',\n },\n});\n\nclass ScaleResponse extends React.Component {\n state = {\n sliderValue: undefined,\n }\n\n handleChange = value => () => {\n if (this.props.readOnly) return;\n\n this.props.handleResponseUpdate(value);\n }\n\n handleSliderChange = (event, value) => {\n if (this.props.readOnly) return;\n\n this.setState({ sliderValue: value }, () => {\n if (this.updateTimeout) {\n clearTimeout(this.updateTimeout);\n }\n this.updateTimeout = setTimeout(this.updateSliderValue, 500);\n });\n };\n\n updateSliderValue = () => {\n this.props.handleResponseUpdate(this.state.sliderValue);\n }\n\n renderLabels = (scaleConfig, classes) => {\n if (scaleConfig.minLabel && scaleConfig.maxLabel) {\n return (\n \n \n {scaleConfig.minLabel}\n \n \n {scaleConfig.midLabel}\n \n \n {scaleConfig.maxLabel}\n \n
\n );\n }\n return null;\n }\n\n render() {\n const {\n classes, scaleConfig, response, disabled, navigation,\n } = this.props;\n\n const range = Math.abs(scaleConfig.max - scaleConfig.min);\n\n if (range >= 10) {\n const sliderValue = hasValue(this.state.sliderValue) ? this.state.sliderValue : response;\n const rangeStep = Math.ceil(range / 5);\n const marks = [];\n marks.push({ value: scaleConfig.min, label: scaleConfig.min });\n for (let value = rangeStep; value < scaleConfig.max; value += rangeStep) {\n marks.push({ value, label: value });\n }\n marks.push({ value: scaleConfig.max, label: scaleConfig.max });\n return (\n \n {this.renderLabels(scaleConfig, classes)}\n\n
\n \n
\n
\n );\n }\n\n const steps = [];\n for (let i = scaleConfig.min; i <= scaleConfig.max; i += scaleConfig.step) {\n steps.push(i);\n }\n\n const smallButtons = steps.length > 5;\n\n return (\n \n {this.renderLabels(scaleConfig, classes)}\n\n
\n {steps.map((step, index) => (\n
\n {index > 0 && }\n \n \n ))}\n
\n
\n );\n }\n}\n\nScaleResponse.propTypes = {\n navigation: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n handleResponseUpdate: PropTypes.func.isRequired,\n scaleConfig: PropTypes.object.isRequired,\n response: PropTypes.number,\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n};\n\nScaleResponse.defaultProps = {\n response: null,\n disabled: false,\n readOnly: false,\n};\n\nexport default withStyles(styles)(with1dArrowNavigation(ScaleResponse));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n choiceResponse: {\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n },\n horizontal: {},\n radioGroup: {\n flexDirection: 'column',\n '&$horizontal': {\n flexDirection: 'row',\n },\n },\n formControlRoot: {\n '$readOnly &': {\n cursor: 'text',\n },\n },\n formControlLabel: {\n margin: theme.spacing(1, 0),\n flex: '1 1 auto',\n '$correct &': {\n color: theme.youwell.colors.green,\n },\n '$inCorrect &': {\n color: theme.youwell.colors.red,\n },\n },\n choiceButtonContainer: {\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n '&$horizontal': {\n flexDirection: 'row',\n },\n },\n choiceButton: {\n margin: theme.spacing(1, 2),\n },\n choiceFreetextInput: {\n border: \"1px solid \".concat(theme.palette.grey[200]),\n padding: theme.spacing(0, 1),\n backgroundColor: theme.youwell.colors.inputBackground,\n },\n radio: {\n color: theme.palette.primary.main,\n '$correct &': {\n color: theme.youwell.colors.green,\n },\n '$inCorrect &': {\n color: theme.youwell.colors.red,\n },\n '$readOnly &': {\n cursor: 'default',\n },\n },\n correct: {\n color: theme.youwell.colors.green,\n },\n inCorrect: {\n color: theme.youwell.colors.red,\n },\n freetextLabel: {\n display: 'flex',\n alignItems: 'center',\n },\n freetextLabelText: {\n marginRight: theme.spacing(1),\n minWidth: 80,\n },\n readOnly: {},\n}); });\nvar SingleChoice = function (_a) {\n var _b, _c;\n var _d, _e;\n var choiceConfig = _a.choiceConfig, selectedChoice = _a.selectedChoice, handleResponseUpdate = _a.handleResponseUpdate, showScores = _a.showScores, question = _a.question, disabled = _a.disabled, onCompletedValid = _a.onCompletedValid, readOnly = _a.readOnly, showScoreValues = _a.showScoreValues, elementSettings = _a.elementSettings;\n var classes = useStyles();\n var isDisabled = disabled || showScores;\n var translate = (0, translate_1.default)();\n var handleSingleSelectChange = function (answers) { return function (event) {\n var id = Number(event.target.value);\n var answer = answers.find(function (d) { return d.id === id; }) || { id: id, value: '' };\n if (handleResponseUpdate && answer)\n handleResponseUpdate([answer]);\n if (onCompletedValid)\n onCompletedValid();\n }; };\n var handleSelectFreetextChange = function (freetextId) { return function (event) {\n if (handleResponseUpdate)\n handleResponseUpdate([{ id: Number(freetextId), score: 0, value: event.target.value }]);\n }; };\n var handleClickResponse = function (value) { return function () {\n if (handleResponseUpdate)\n handleResponseUpdate([value]);\n if (onCompletedValid)\n onCompletedValid();\n }; };\n var onFreetextBlur = function () {\n if (selectedChoice === null || selectedChoice === void 0 ? void 0 : selectedChoice.value) {\n if (onCompletedValid)\n onCompletedValid();\n }\n };\n var getScoreClass = function (item) {\n if (!showScores) {\n return undefined;\n }\n if (item.score !== 0) {\n return classes.correct;\n }\n if ((selectedChoice === null || selectedChoice === void 0 ? void 0 : selectedChoice.id) === item.id) {\n return classes.inCorrect;\n }\n return undefined;\n };\n // Allow custom styling from config\n var backgroundColor = (elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings['form.background']) || (choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.background);\n // default to white if backgroundColor is set, but may be overridden by choiceConfig.foregroundColor\n var foreGroundColor = (elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings['form.foreground']) || (choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.foreground) || (backgroundColor ? 'white' : undefined);\n return (React.createElement(React.Fragment, null, question.type === 'ActionChoice' || (choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.showAsButtons) ? (React.createElement(\"div\", { className: (0, classnames_1.default)(classes.choiceButtonContainer, (_b = {}, _b[classes.horizontal] = choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.horizontal, _b[classes.readOnly] = readOnly, _b)) }, (_d = question.answers) === null || _d === void 0 ? void 0 : _d.map(function (answer) { return (React.createElement(core_1.Button, { disabled: isDisabled, key: answer.id, color: (selectedChoice === null || selectedChoice === void 0 ? void 0 : selectedChoice.id) === answer.id ? 'secondary' : 'primary', variant: (selectedChoice === null || selectedChoice === void 0 ? void 0 : selectedChoice.id) === answer.id ? 'contained' : 'outlined', size: \"small\", className: classes.choiceButton, onClick: handleClickResponse(answer) }, answer.value)); }))) : (React.createElement(\"div\", { style: { backgroundColor: backgroundColor, color: foreGroundColor, borderColor: backgroundColor }, className: classes.choiceResponse },\n React.createElement(core_1.RadioGroup, { className: (0, classnames_1.default)(classes.radioGroup, (_c = {}, _c[classes.horizontal] = choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.horizontal, _c[classes.readOnly] = readOnly, _c)), value: (selectedChoice === null || selectedChoice === void 0 ? void 0 : selectedChoice.id) || '', onChange: handleSingleSelectChange(question.answers) }, (_e = question.answers) === null || _e === void 0 ? void 0 :\n _e.map(function (item) { return (React.createElement(core_1.FormControlLabel, { disabled: isDisabled, className: getScoreClass(item), key: item.id, value: item.id, control: React.createElement(core_1.Radio, { className: classes.radio, style: { color: foreGroundColor } }), classes: { label: classes.formControlLabel, root: classes.formControlRoot }, label: showScoreValues ? \"\".concat(item.score, \" - \").concat(item.value) : item.value })); }),\n (choiceConfig === null || choiceConfig === void 0 ? void 0 : choiceConfig.freetextChoiceId) && (React.createElement(core_1.FormControlLabel, { disabled: isDisabled, value: choiceConfig.freetextChoiceId, control: React.createElement(core_1.Radio, { className: classes.radio, style: { color: foreGroundColor } }), classes: { label: classes.formControlLabel, root: classes.formControlRoot }, label: (React.createElement(\"div\", { className: classes.freetextLabel },\n React.createElement(core_1.Typography, { className: classes.freetextLabelText }, choiceConfig.freetextChoiceLabel || translate('taskContent.freetextChoiceLabel')),\n React.createElement(core_1.Input, { placeholder: translate('taskContent.freetextChoice'), fullWidth: true, disabled: isDisabled, value: (selectedChoice === null || selectedChoice === void 0 ? void 0 : selectedChoice.id) === choiceConfig.freetextChoiceId ? selectedChoice.value : '', onChange: handleSelectFreetextChange(choiceConfig.freetextChoiceId), onBlur: onFreetextBlur, className: classes.choiceFreetextInput, disableUnderline: true }))) })))))));\n};\nSingleChoice.defaultProps = {\n choiceConfig: null,\n selectedChoice: null,\n disabled: false,\n handleResponseUpdate: null,\n showScores: false,\n onCompletedValid: null,\n readOnly: false,\n showScoreValues: false,\n elementSettings: null,\n};\nexports.default = SingleChoice;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar styles_1 = require(\"@material-ui/core/styles\");\nvar useMediaQuery_1 = __importDefault(require(\"@material-ui/core/useMediaQuery\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar icons_1 = require(\"../../../../common/icons\");\nvar translate_1 = __importDefault(require(\"../../../../app/localization/translate\"));\nvar useStyles = (0, styles_1.makeStyles)(function (theme) { return ({\n root: {\n backgroundColor: theme.youwell.colors.inputBackground,\n },\n desktopTable: {\n '&$fixedWidth': {\n overflowX: 'auto',\n paddingBottom: theme.spacing(4),\n },\n '&$fixedHeight': {\n overflowY: 'auto',\n height: 600,\n },\n },\n fixedWidth: {},\n fixedHeight: {},\n table: {\n tableLayout: 'fixed',\n '$fixedWidth &': {\n tableLayout: 'auto',\n width: 1200,\n },\n '$fixedHeight &': {\n tableLayout: 'auto',\n },\n },\n mobileTable: {},\n mobileRow: {\n marginBottom: theme.spacing(2),\n border: \"1px solid \".concat(theme.palette.grey[400]),\n backgroundColor: theme.palette.grey[200],\n },\n mobileRowHeader: {\n padding: theme.spacing(1),\n backgroundColor: theme.palette.primary.light,\n color: theme.palette.common.white,\n },\n mobileCell: {\n marginBottom: theme.spacing(2),\n padding: theme.spacing(1),\n },\n tableRow: {\n height: theme.spacing(4),\n },\n tableHeaderRow: {},\n tableHeaderCell: {\n backgroundColor: theme.youwell.colors.secondaryBackground,\n border: 0,\n borderRight: \"1px solid \".concat(theme.palette.grey[200]),\n fontSize: '1.1em',\n color: theme.palette.grey[900],\n padding: theme.spacing(1),\n overflowWrap: 'anywhere',\n '&:last-child': {\n borderRight: \"1px solid \".concat(theme.palette.grey[300]),\n padding: theme.spacing(0, 1),\n },\n '$fixedWidth &': {\n overflowWrap: 'normal',\n },\n '$fixedHeight &': {\n position: 'sticky',\n top: 0,\n zIndex: 50,\n },\n },\n rowHeaderCell: {\n backgroundColor: theme.youwell.colors.secondaryBackground,\n padding: theme.spacing(2, 1),\n },\n tableCell: {\n padding: theme.spacing(1, 1, 0, 1),\n verticalAlign: 'top',\n borderRight: \"1px solid \".concat(theme.palette.grey[300]),\n '&:first-child': {\n borderLeft: \"1px solid \".concat(theme.palette.grey[300]),\n },\n '&:last-child': {\n padding: theme.spacing(0, 1),\n paddingTop: theme.spacing(1),\n },\n },\n multiQuestionCell: {},\n multiInput: {\n marginBottom: theme.spacing(0.5),\n },\n addRowContainer: {\n display: 'flex',\n justifyContent: 'center',\n },\n addRowButton: {\n marginTop: theme.spacing(1),\n },\n disabledReadonlyInput: {\n color: theme.palette.text.primary,\n },\n}); });\nvar padRow = function (row, length) { return row.concat(Array(length).fill('')).slice(0, length); };\nfunction TableResponse(_a) {\n var _b;\n var _c, _d, _e;\n var tableConfig = _a.tableConfig, response = _a.response, disabled = _a.disabled, handleResponseUpdate = _a.handleResponseUpdate, elementSettings = _a.elementSettings, readOnly = _a.readOnly;\n var theme = (0, styles_1.useTheme)();\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var _f = React.useState(null), multiTableValues = _f[0], setMultiTableValues = _f[1];\n var _g = React.useState(null), updateIndex = _g[0], setUpdateIndex = _g[1];\n var _h = React.useState(null), responseState = _h[0], setResponseState = _h[1];\n var updateAsyncTimer = React.useRef();\n var isMobile = (0, useMediaQuery_1.default)(theme.breakpoints.down('xs'));\n var fixedNumberOfRows = (_c = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.rowHeaders) === null || _c === void 0 ? void 0 : _c.length;\n var fixedColumns = (_d = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.columnHeaders) === null || _d === void 0 ? void 0 : _d.length;\n var emptyColumns = function () {\n var _a, _b;\n if ((_a = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.columnHeaders) === null || _a === void 0 ? void 0 : _a.length) {\n return [];\n }\n if ((_b = response === null || response === void 0 ? void 0 : response[0]) === null || _b === void 0 ? void 0 : _b.length) {\n var count = response.reduce(function (prev, curr) {\n var max = Math.max(prev.max, curr.length);\n return {\n hasValueInLast: prev.hasValueInLast || !!(curr === null || curr === void 0 ? void 0 : curr[max - 1]),\n max: max,\n };\n }, { hasValueInLast: false, max: 0 });\n var headers = Array(count.max).fill('').map(function (_, i) { return \"\".concat(i + 1); });\n return count.hasValueInLast ? __spreadArray(__spreadArray([], headers, true), [\"\".concat(count.max + 1)], false) : headers;\n }\n return ['1'];\n };\n var tableColumns = __spreadArray(__spreadArray([], (tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.columnHeaders) || [], true), emptyColumns(), true);\n var emptyRows = function () {\n if (fixedNumberOfRows) {\n if (response && response.length >= fixedNumberOfRows) {\n return [];\n }\n return Array.from(Array(fixedNumberOfRows).keys()).map(function () { return tableColumns.map(function () { return ''; }); });\n }\n if (readOnly) {\n return [];\n }\n if (isMobile) {\n if (!response || response.length === 0) {\n return [tableColumns.map(function () { return ''; })];\n }\n return [];\n }\n return [tableColumns.map(function () { return ''; })];\n };\n var addRow = function () {\n var currResponse = __spreadArray(__spreadArray([], response || [], true), emptyRows(), true);\n var addedResponse = __spreadArray(__spreadArray([], currResponse, true), [tableColumns.map(function () { return ''; })], false);\n handleResponseUpdate(addedResponse);\n };\n var handleTableCellChange = function (rowIndex, cellIndex) { return function (event) {\n if (readOnly)\n return;\n var prevResponse = response || [];\n if (rowIndex >= prevResponse.length) {\n prevResponse = __spreadArray(__spreadArray([], prevResponse, true), emptyRows(), true);\n }\n handleResponseUpdate(prevResponse.map(function (row, ri) { return (ri === rowIndex ? padRow(row, tableColumns.length).map(function (cell, ci) { return (ci === cellIndex ? event.target.value : cell); }) : row); }));\n // Fix for text-fields. To avoid loosing marker-position value is copied to internal state on first change.\n setResponseState(function (prevState) {\n var _a;\n return (__assign(__assign({}, prevState), (_a = {}, _a[\"\".concat(rowIndex, \"-\").concat(cellIndex)] = event.target.value, _a)));\n });\n }; };\n var handleTableMultiCellChange = function (rowIndex, cellIndex, questionIndex, curr) { return function (event) {\n if (readOnly)\n return;\n var val = event.target.value;\n setMultiTableValues(function (prev) {\n var _a, _b;\n return (__assign(__assign({}, prev), (_a = {}, _a[\"\".concat(rowIndex, \"-\").concat(cellIndex)] = __assign(__assign(__assign({}, curr), prev && prev[\"\".concat(rowIndex, \"-\").concat(cellIndex)]), (_b = {}, _b[questionIndex] = val, _b)), _a)));\n });\n setUpdateIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n }; };\n React.useEffect(function () {\n if (updateIndex && multiTableValues) {\n clearTimeout(updateAsyncTimer.current);\n updateAsyncTimer.current = window.setTimeout(function () {\n handleTableCellChange(updateIndex.rowIndex, updateIndex.cellIndex)({\n target: { value: JSON.stringify(multiTableValues[\"\".concat(updateIndex.rowIndex, \"-\").concat(updateIndex.cellIndex)]) },\n });\n }, 200);\n }\n // Only fire on updateIndex-change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [updateIndex]);\n var getCellValue = function (rowIndex, cellIndex, questionIndex, cell) { return (multiTableValues && multiTableValues[\"\".concat(rowIndex, \"-\").concat(cellIndex)] && multiTableValues[\"\".concat(rowIndex, \"-\").concat(cellIndex)][questionIndex])\n || (cell && JSON.parse(cell)[questionIndex])\n || ''; };\n var renderCells = function (ri, ci, cell, mobile) { return ((tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.cellQuestions) ? (React.createElement(\"div\", { className: classes.multiQuestionCell }, tableConfig.cellQuestions.map(function (q, qi) { return (React.createElement(core_1.TextField\n // eslint-disable-next-line react/no-array-index-key\n , { \n // eslint-disable-next-line react/no-array-index-key\n key: qi, className: classes.multiInput, disabled: disabled || readOnly, label: q, value: getCellValue(ri, ci, qi, cell), onChange: handleTableMultiCellChange(ri, ci, qi, cell && JSON.parse(cell)), fullWidth: true, inputProps: { autoComplete: 'off' } })); }))) : (React.createElement(core_1.Input, { disabled: disabled || readOnly, value: (responseState === null || responseState === void 0 ? void 0 : responseState[\"\".concat(ri, \"-\").concat(ci)]) || cell, onChange: handleTableCellChange(ri, ci), classes: { disabled: readOnly ? classes.disabledReadonlyInput : undefined }, multiline: true, minRows: 1, maxRows: 10, fullWidth: true, disableUnderline: !mobile, inputProps: { autoComplete: 'off' } }))); };\n var tableResponses = __spreadArray(__spreadArray([], response || [], true), emptyRows(), true);\n var hasRowHeaders = ((_e = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.rowHeaders) === null || _e === void 0 ? void 0 : _e.length) !== 0;\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.Hidden, { implementation: \"js\", xsDown: true },\n React.createElement(\"div\", { className: (0, classnames_1.default)(classes.desktopTable, (_b = {}, _b[classes.fixedWidth] = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.wide, _b[classes.fixedHeight] = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.fixedHeight, _b)) },\n React.createElement(core_1.Table, { className: classes.table, role: \"table\" },\n React.createElement(core_1.TableHead, { className: classes.tableHeaderRow },\n React.createElement(core_1.TableRow, { role: \"row\" },\n hasRowHeaders && React.createElement(core_1.TableCell, { className: classes.tableHeaderCell, style: { width: Number(elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings.firstColWidth) || '' }, scope: \"col\", role: \"rowheader\" }),\n tableColumns.map(function (item, _ci) { return (React.createElement(core_1.TableCell, { key: item, padding: \"none\", className: classes.tableHeaderCell, scope: \"col\", role: \"columnheader\" }, fixedColumns ? item : '\\u00A0')); }))),\n React.createElement(core_1.TableBody, null, tableResponses.map(function (row, ri) {\n var _a, _b;\n return (\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(core_1.TableRow, { key: ri, className: classes.tableRow, role: \"row\", \"aria-rowindex\": ri },\n hasRowHeaders && (React.createElement(core_1.TableCell, { className: classes.rowHeaderCell, scope: \"row\" }, (_b = (_a = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.rowHeaders) === null || _a === void 0 ? void 0 : _a[ri]) !== null && _b !== void 0 ? _b : '')),\n padRow(row, tableColumns.length).map(function (cell, ci) { return (\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(core_1.TableCell, { key: ci, padding: \"none\", className: classes.tableCell }, renderCells(ri, ci, cell))); })));\n }))))),\n React.createElement(core_1.Hidden, { implementation: \"js\", smUp: true },\n React.createElement(\"div\", { className: classes.mobileTable },\n tableResponses.map(function (row, ri) {\n var _a;\n return (\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(\"div\", { className: classes.mobileRow, key: ri },\n React.createElement(\"div\", { className: classes.mobileRowHeader },\n React.createElement(core_1.Typography, { variant: \"subtitle1\", color: \"inherit\" }, hasRowHeaders ? (_a = tableConfig === null || tableConfig === void 0 ? void 0 : tableConfig.rowHeaders) === null || _a === void 0 ? void 0 : _a[ri] : \"\".concat(ri + 1, \".\"))),\n row.map(function (cell, ci) { return (\n // eslint-disable-next-line react/no-array-index-key\n React.createElement(\"div\", { className: classes.mobileCell, key: ci },\n React.createElement(\"div\", null,\n React.createElement(core_1.Typography, { variant: \"subtitle2\" }, \"\".concat(tableColumns[ci], \":\"))),\n renderCells(ri, ci, cell, true))); })));\n }),\n !fixedNumberOfRows && !readOnly && (React.createElement(\"div\", { className: classes.addRowContainer },\n React.createElement(core_1.IconButton, { onClick: addRow, color: \"primary\", className: classes.addRowButton, \"aria-label\": translate('add') },\n React.createElement(icons_1.AddIcon, null))))))));\n}\nTableResponse.defaultProps = {\n response: null,\n disabled: false,\n readOnly: false,\n tableConfig: {},\n elementSettings: null,\n};\nexports.default = TableResponse;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Button, createStyles } from '@material-ui/core';\nimport classnames from 'classnames';\nimport HtmlContent from '../../../HtmlContent';\n\nconst useStyles = makeStyles(theme => createStyles({\n question: {\n marginBottom: theme.spacing(1),\n },\n buttonStyle: {\n borderRadius: '100%',\n margin: theme.spacing(1),\n width: 'calc(33% - 16px)',\n minHeight: 150,\n fontWeight: 500,\n\n [theme.breakpoints.down('xs')]: {\n width: 'calc(50% - 16px)',\n },\n },\n unChecked: {\n background: theme.youwell.colors.secondaryBackground,\n '&:hover': {\n background: theme.youwell.colors.secondaryBackground,\n },\n },\n longText: {\n fontSize: '0.8rem',\n },\n}));\n\n\nconst BubbleChoiceQuestions = ({\n question, response, handleResponseUpdate,\n}) => {\n const classes = useStyles();\n\n const onBubbleClick = (answer, isChecked) => () => {\n const responses = (response?.choiceResponse || []).filter(d => d.id !== answer.id);\n handleResponseUpdate('choiceResponse', isChecked ? responses : [...responses, answer]);\n };\n\n const checkedResponses = response?.choiceResponse?.reduce((prev, curr) => (\n { ...prev, [curr.id]: curr.value }\n ), {}) || {};\n\n return (\n \n \n\n {question.answers?.map(item => (\n \n ))}\n
\n );\n};\n\nBubbleChoiceQuestions.propTypes = {\n question: PropTypes.object.isRequired,\n response: PropTypes.object,\n handleResponseUpdate: PropTypes.func.isRequired,\n};\n\nBubbleChoiceQuestions.defaultProps = {\n response: null,\n};\n\nexport default BubbleChoiceQuestions;\n","import { makeStyles, useTheme } from '@material-ui/core/styles';\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, createStyles, useMediaQuery } from '@material-ui/core';\nimport classnames from 'classnames';\nimport HtmlContent from '../../../HtmlContent';\n\nconst useStyles = makeStyles(theme => createStyles({\n root: {\n position: 'relative',\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n },\n bullsEyeContainer: {\n display: 'flex',\n height: 550,\n alignItems: 'center',\n justifyContent: 'center',\n margin: theme.spacing(1),\n\n [theme.breakpoints.down('xs')]: {\n height: 360,\n },\n\n '&$small': {\n height: 360,\n },\n },\n small: {},\n readOnly: {},\n bullsEye: {\n position: 'relative',\n padding: 0,\n width: 500,\n height: 500,\n borderRadius: '100%',\n cursor: 'crosshair',\n\n [theme.breakpoints.down('xs')]: {\n width: 300,\n height: 300,\n },\n\n '$small &': {\n width: 272,\n height: 272,\n },\n\n '$readOnly &': {\n cursor: 'default',\n },\n },\n questionLabel: {\n position: 'absolute',\n zIndex: 2,\n color: 'black',\n wordBreak: 'break-word',\n },\n scoreCircle: {\n position: 'absolute',\n background: theme.youwell.colors.secondaryBackground,\n border: theme.youwell.borders.primary,\n borderRadius: '100%',\n },\n line: {\n position: 'absolute',\n background: 'black',\n border: '1px solid black',\n height: '50%',\n },\n scorePoint: {\n height: 25,\n width: 25,\n backgroundColor: 'black',\n borderRadius: '100%',\n transform: 'translate(-50%, 50%)',\n position: 'absolute',\n\n [theme.breakpoints.down('xs')]: {\n width: 16,\n height: 16,\n },\n\n '$small &': {\n width: 16,\n height: 16,\n },\n },\n}), { name: 'BullsEyeQuestion' });\n\nconst calculateScore = (xPos, yPos, width, numberOfCircles) => {\n const circleSize = (100 / numberOfCircles) / 100;\n const diagonalFromSenter = Math.sqrt((xPos ** 2) + (yPos ** 2));\n const radius = width / 2;\n let i;\n for (i = 0; i < numberOfCircles; i++) {\n const circleScoreWidth = circleSize * (i + 1);\n if (diagonalFromSenter <= circleScoreWidth * radius) {\n return numberOfCircles - i;\n }\n }\n return -1;\n};\n\nconst questionSeparatorLineTopPositions = ['25%', '50%', '0%', '25%'];\nconst questionSeparatorLineLeftPositions = ['25%', '50%', '50%', '75%'];\nconst questionSeparatorLineTransform = ['rotate(90deg)', 'rotate(0deg)', 'rotate(0deg)', 'rotate(90deg)'];\n\nconst createLines = questions => questions.map((q, index) => ({\n style: {\n top: questionSeparatorLineTopPositions[index],\n left: questionSeparatorLineLeftPositions[index],\n transform: questionSeparatorLineTransform[index],\n },\n key: q.id,\n}));\n\nconst createCircles = (numberOfCircles) => {\n const circles = [];\n const circleSize = 100 / numberOfCircles;\n let number = numberOfCircles;\n let i;\n for (i = 0; i < numberOfCircles; i++) {\n circles.push({\n style: {\n width: `${number * circleSize}%`,\n height: `${number * circleSize}%`,\n },\n key: i,\n });\n number -= 1;\n }\n return circles;\n};\n\nconst labelPositionOffset = 24;\nconst labelPositionOffsetSmall = 12;\n\nconst getQuestionLabelPositionStyle = offset => ({\n 0: { top: offset, right: offset },\n 1: { top: offset, left: offset },\n 2: { bottom: offset, left: offset },\n 3: { bottom: offset, right: offset },\n});\n\nconst getQuadrantPosition = (mouseClickX, mouseClickY, circleDiameter) => {\n const center = circleDiameter / 2;\n\n let index; let fromPosX; let fromPosY;\n if (mouseClickX > center && mouseClickY < center) {\n index = 0;\n fromPosX = mouseClickX - center;\n fromPosY = center - mouseClickY;\n } else if (mouseClickX < center && mouseClickY < center) {\n index = 1;\n fromPosX = center - mouseClickX;\n fromPosY = center - mouseClickY;\n } else if (mouseClickX < center && mouseClickY > center) {\n index = 2;\n fromPosX = center - mouseClickX;\n fromPosY = mouseClickY - center;\n } else if (mouseClickX > center && mouseClickY > center) {\n index = 3;\n fromPosX = mouseClickX - center;\n fromPosY = mouseClickY - center;\n }\n return { index, fromPosX, fromPosY };\n};\n\nconst BullsEyeQuestions = ({\n questions, handleResponseUpdate, responses, readOnly, small,\n}) => {\n const classes = useStyles();\n const [pointPositions, setPointPositions] = useState({});\n\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('xs'));\n const useSmallLayout = small || isMobile;\n\n if (questions?.length !== 4) return null;\n\n const numberOfCircles = questions[0].scaleConfig.max;\n\n const onSetPoint = (event) => {\n if (readOnly) return;\n\n const currentTargetRect = event.currentTarget.getBoundingClientRect();\n const circleDiameter = event.currentTarget.clientHeight;\n const mouseClickX = parseFloat(event.pageX - window.pageXOffset - currentTargetRect.left);\n const mouseClickY = parseFloat(event.pageY - window.pageYOffset - currentTargetRect.top);\n\n const quadrantPosition = getQuadrantPosition(mouseClickX, mouseClickY, circleDiameter);\n const score = calculateScore(quadrantPosition.fromPosX, quadrantPosition.fromPosY, circleDiameter, numberOfCircles);\n const question = questions[quadrantPosition.index];\n\n setPointPositions(prevState => ({\n ...prevState,\n [question.id]: {\n left: (mouseClickX / circleDiameter) * 100,\n bottom: ((circleDiameter - mouseClickY) / circleDiameter) * 100,\n },\n }));\n\n handleResponseUpdate(question)('scaleResponse', score);\n };\n\n const getPointPosition = (questionResponse) => {\n const scaleResponse = questionResponse.response.scaleResponse;\n if (!scaleResponse) {\n return null;\n }\n\n // if presice position exists, use this\n if (pointPositions[questionResponse.questionId]) {\n return {\n left: `${pointPositions[questionResponse.questionId].left}%`,\n bottom: `${pointPositions[questionResponse.questionId].bottom}%`,\n };\n }\n\n // Otherwise calculate center position for score\n const circleRadius = numberOfCircles;\n const circleDiameter = circleRadius * 2;\n const pointRadius = numberOfCircles - scaleResponse + 0.5; // half way between lines -> scaleResponse should be minimum 1 (not 0)\n\n const questionIndex = questions.findIndex(d => d.id === questionResponse.questionId);\n const angleInDegrees = 45 - (questionIndex * 90);\n const xPos = pointRadius * Math.sin(angleInDegrees * Math.PI / 180) + circleRadius;\n const yPos = pointRadius * Math.cos(angleInDegrees * Math.PI / 180) + circleRadius;\n\n return {\n left: `${(xPos / circleDiameter) * 100}%`,\n bottom: `${(yPos / circleDiameter) * 100}%`,\n };\n };\n\n const circles = createCircles(numberOfCircles);\n const lines = createLines(questions);\n const questionResponses = questions.map(q => ({ questionId: q.id, response: responses[q.id]?.response }))\n .filter(d => d.response);\n\n return (\n \n {questions.map((question, i) => (\n
\n ))}\n\n
\n
\n
\n
\n );\n};\n\nBullsEyeQuestions.propTypes = {\n questions: PropTypes.array.isRequired,\n handleResponseUpdate: PropTypes.func.isRequired,\n responses: PropTypes.object,\n readOnly: PropTypes.bool,\n small: PropTypes.bool,\n};\n\nBullsEyeQuestions.defaultProps = {\n responses: null,\n readOnly: false,\n small: false,\n};\n\nexport default BullsEyeQuestions;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n makeStyles, Accordion, AccordionSummary, Typography, AccordionDetails,\n} from '@material-ui/core';\nimport { CheckCircleRounded } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport { fillArrayToLength } from '../../../../arrayUtils';\nimport AsyncTextField from '../../../AsyncTextField';\n\nconst useStyles = makeStyles(theme => ({\n accordionDetails: {\n padding: theme.spacing(3, 2),\n gap: theme.spacing(3, 2),\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(1),\n gap: theme.spacing(2, 1),\n },\n },\n rowHeader: {\n backgroundColor: theme.palette.grey[50],\n },\n rowFilledIcon: {\n position: 'absolute',\n right: theme.spacing(1.5),\n color: theme.youwell.colors.green,\n },\n cell: {\n width: 'calc((100% - (3 * 16px))/4)',\n padding: theme.spacing(0.5),\n\n [theme.breakpoints.down('xs')]: {\n width: 'calc((100% - (2 * 8px))/3)',\n },\n },\n cellHeader: {\n backgroundColor: theme.palette.grey[100],\n color: theme.palette.grey[700],\n marginBottom: theme.spacing(1),\n padding: theme.spacing(0.5),\n },\n cellTextField: {\n marginTop: theme.spacing(1),\n },\n}));\n\n\nconst ColumnQuestions = ({\n header, cellQuestions, onChange, responses, readOnly,\n}) => {\n const classes = useStyles();\n const cellData = responses ? JSON.parse(responses) : {};\n\n const handleQuestionChange = questionIndex => (updatedValue) => {\n if (readOnly) return;\n const updatedData = {\n ...cellData,\n [questionIndex]: updatedValue,\n };\n onChange(updatedData);\n };\n\n return (\n \n
\n {header}\n \n {cellQuestions.map((question, questionIndex) => (\n
\n ))}\n
\n );\n};\n\nColumnQuestions.propTypes = {\n header: PropTypes.string.isRequired,\n cellQuestions: PropTypes.array.isRequired,\n responses: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n readOnly: PropTypes.bool,\n};\n\nColumnQuestions.defaultProps = {\n readOnly: false,\n}\n\nconst TableRow = ({\n expanded, onChange, onClick, columnHeaders, cellQuestions, header, responses, readOnly,\n}) => {\n const classes = useStyles();\n const translate = useSelector(state => getTranslate(state.localize));\n const rowData = fillArrayToLength(responses, columnHeaders.length, '');\n\n const cellCheck = (cellData, compareLength) => {\n if (!cellData) return false;\n\n const cellDataValues = Object.values(JSON.parse(cellData));\n if (cellDataValues.length !== compareLength || cellDataValues.includes('')) return false;\n\n return true;\n }\n\n const rowIsFilled = rowData.every(cellData => cellCheck(cellData, cellQuestions.length));\n\n const handleCellChange = columnIndex => (data) => {\n const updatedRowData = rowData.map((row, i) => (\n i === columnIndex ? JSON.stringify(data) : row\n ));\n onChange(updatedRowData);\n }\n\n return (\n \n \n {header}\n {rowIsFilled && }\n \n\n \n {columnHeaders.map((columnHeader, columnIndex) => (\n \n ))}\n \n \n )\n}\n\nTableRow.propTypes = {\n expanded: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n header: PropTypes.string.isRequired,\n columnHeaders: PropTypes.array.isRequired,\n cellQuestions: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n responses: PropTypes.array.isRequired,\n readOnly: PropTypes.bool,\n}\n\nTableRow.defaultProps = {\n readOnly: false,\n}\n\nconst CollapsedTable = ({ question, handleResponseUpdate, responses, readOnly }) => {\n const classes = useStyles();\n const [expandedIndex, setExpandedIndex] = React.useState(-1);\n\n if (!question.tableConfig) return null;\n\n const rowHeaders = question.tableConfig.rowHeaders || [];\n const columnHeaders = question.tableConfig.columnHeaders || [];\n const cellQuestions = question.tableConfig.cellQuestions || [];\n const tableData = fillArrayToLength(responses?.tableResponses, rowHeaders.length, []);\n\n const handleRowChange = rowIndex => (rowData) => {\n const updatedTableData = tableData.map((row, ri) => (\n ri === rowIndex ? rowData : row\n ));\n\n handleResponseUpdate('tableResponses', updatedTableData);\n }\n\n return (\n \n {rowHeaders.map((rowHeader, rowIndex) => (\n
setExpandedIndex(expandedIndex === rowIndex ? -1 : rowIndex)}\n header={rowHeader}\n columnHeaders={columnHeaders}\n cellQuestions={cellQuestions}\n onChange={handleRowChange(rowIndex)}\n responses={tableData[rowIndex] || []}\n readOnly={readOnly}\n />\n ))}\n \n );\n};\n\nCollapsedTable.propTypes = {\n question: PropTypes.object.isRequired,\n handleResponseUpdate: PropTypes.func.isRequired,\n responses: PropTypes.object,\n readOnly: PropTypes.bool,\n};\n\nCollapsedTable.defaultProps = {\n responses: null,\n readOnly: false,\n};\n\nexport default CollapsedTable;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar classnames_1 = __importDefault(require(\"classnames\"));\nvar core_1 = require(\"@material-ui/core\");\nvar HtmlContent_1 = __importDefault(require(\"../../../HtmlContent\"));\nvar icons_1 = require(\"../../../../../common/icons\");\nvar objectUtils_1 = require(\"../../../../objectUtils\");\nvar browserUtils_1 = require(\"../../../../browserUtils\");\nvar ArrowNavigation_1 = require(\"../../../accessibility/ArrowNavigation\");\nvar constants_1 = require(\"../../../../constants\");\nvar FreetextResponse_1 = require(\"../FreetextResponse\");\nvar stringUtils_1 = require(\"../../../../stringUtils\");\nvar utils_1 = require(\"../../utils\");\nvar translate_1 = __importDefault(require(\"../../../../../app/localization/translate\"));\nvar cellWidth = 40;\nvar cellWidthSmall = 30;\nvar maxContentWidth = 1080;\nvar useStyles = (0, core_1.makeStyles)(function (theme) {\n var _a, _b, _c, _d, _e;\n return ({\n table: (_a = {\n width: '100%',\n height: '100%',\n border: \"1px solid \".concat(theme.palette.grey[100]),\n background: theme.palette.common.white\n },\n _a[theme.breakpoints.down('xs')] = {\n tableLayout: 'fixed',\n },\n _a),\n stickyHeaderCell: {\n position: 'sticky',\n top: 49,\n background: theme.palette.common.white,\n boxShadow: \"0 2px 2px -2px \".concat(theme.palette.grey[600]),\n zIndex: 50,\n },\n headerCell: {\n border: \"1px solid \".concat(theme.palette.grey[200]),\n borderBottom: '1px solid #e0e0e0',\n padding: theme.spacing(1),\n textAlign: 'center',\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.common.white,\n '$rotate &': (_b = {\n verticalAlign: 'bottom',\n width: cellWidth,\n minHeight: 140\n },\n _b[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1, 0),\n width: cellWidthSmall,\n },\n _b),\n },\n answerTextCell: (_c = {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.common.white\n },\n _c[theme.breakpoints.down('xs')] = {\n padding: theme.spacing(1, 0.5),\n },\n _c.overflowWrap = 'anywhere',\n _c),\n answerCell: {\n border: \"1px solid \".concat(theme.palette.grey[200]),\n borderBottom: '1px solid #e0e0e0',\n padding: theme.spacing(0.5),\n textAlign: 'center',\n height: '100%',\n '$rotate &': (_d = {\n width: cellWidth\n },\n _d[theme.breakpoints.down('xs')] = {\n padding: 1,\n width: cellWidthSmall,\n },\n _d),\n },\n scoreCell: {\n background: theme.palette.grey[300],\n },\n invalidRow: {\n borderLeft: \"2px solid \".concat(theme.palette.error.main),\n },\n answerOption: {\n '$rotate &': {\n display: 'inline-block',\n writingMode: 'vertical-lr',\n transform: 'rotate(180deg)',\n whiteSpace: 'nowrap',\n maxHeight: 300,\n overflow: 'hidden',\n },\n },\n // Needed as ref\n rotate: {},\n answerButton: {\n width: '100%',\n height: '100%',\n '&:focus': {\n background: theme.palette.grey[200],\n },\n '&:hover': {\n background: theme.palette.grey[300],\n },\n },\n cellMarker: (_e = {\n opacity: 0\n },\n _e[theme.breakpoints.down('xs')] = {\n opacity: 0.2,\n },\n _e),\n });\n});\nvar colStyle = function (elementSettings, colIndex) { return (0, utils_1.getStylesFromSettings)(elementSettings, \"col\".concat(colIndex + 1, \"style.\")); };\nvar QuestionnaireTable = function (_a) {\n var _b;\n var onChange = _a.onChange, questions = _a.questions, responses = _a.responses, disabled = _a.disabled, showScoreMarks = _a.showScoreMarks, validationError = _a.validationError, navigation = _a.navigation, elementSettings = _a.elementSettings, readOnly = _a.readOnly, showScoreValues = _a.showScoreValues;\n var classes = useStyles();\n var translate = (0, translate_1.default)();\n var selectAnswer = function (question, answer) { return function () {\n var _a, _b;\n var selectedChoices = ((_b = (_a = responses === null || responses === void 0 ? void 0 : responses[question.id]) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.choiceResponse) || [];\n var wasCheckedBefore = selectedChoices.findIndex(function (d) { return (d === null || d === void 0 ? void 0 : d.id) === answer.id; }) > -1;\n if (question.type === constants_1.formAnswerTypes.multipleChoice) {\n var values = wasCheckedBefore ? selectedChoices.filter(function (d) { return (d === null || d === void 0 ? void 0 : d.id) !== answer.id; }) : __spreadArray(__spreadArray([], selectedChoices, true), [answer], false);\n onChange(question)('choiceResponse', values);\n }\n else {\n var values = wasCheckedBefore ? null : [answer];\n onChange(question)('choiceResponse', values);\n }\n }; };\n var handleFreetextChange = function (question) { return function (event) {\n onChange(question)('freetextResponse', event.target.value);\n }; };\n if (!questions || questions.length < 1 || !questions[0].answers) {\n return null;\n }\n var respondedAnswers = questions.reduce(function (prev, curr) {\n var _a;\n var _b, _c, _d, _e, _f, _g, _h, _j;\n return (__assign(__assign({}, prev), (_a = {}, _a[curr === null || curr === void 0 ? void 0 : curr.id] = responses && (((_d = (_c = (_b = responses[curr.id]) === null || _b === void 0 ? void 0 : _b.response) === null || _c === void 0 ? void 0 : _c.choiceResponse) === null || _d === void 0 ? void 0 : _d.length) || 0) > 0\n ? (_g = (_f = (_e = responses[curr.id]) === null || _e === void 0 ? void 0 : _e.response) === null || _f === void 0 ? void 0 : _f.choiceResponse) === null || _g === void 0 ? void 0 : _g.map(function (d) { return d === null || d === void 0 ? void 0 : d.id; })\n : [(_j = (_h = responses === null || responses === void 0 ? void 0 : responses[curr.id]) === null || _h === void 0 ? void 0 : _h.response) === null || _j === void 0 ? void 0 : _j.freetextResponse], _a)));\n }, {});\n var verticalText = (0, stringUtils_1.parseBoolString)(elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings.flipLabels) || (document.documentElement.clientWidth < 930 && !(0, stringUtils_1.parseBoolString)(elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings.dontFlipLabels));\n var firstColWidth = verticalText ? document.documentElement.clientWidth - (questions[0].answers.length * cellWidthSmall) - 16 - 16\n : Number(elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings.firstColWidth) || '';\n // Writing mode fix for Edge - until https://github.com/cssinjs/css-vendor/issues/172 is merged into Material UI/Jss\n var ieFix = verticalText && browserUtils_1.isEdge ? { 'writing-mode': 'vertical-lr' } : undefined;\n var answerCellMinWidthDefault = Number(elementSettings === null || elementSettings === void 0 ? void 0 : elementSettings.answerCellMinWidth) || (firstColWidth ? 40 : 100);\n var answerCellMinWidth = verticalText\n ? undefined\n : Math.min(Math.min(document.documentElement.clientWidth, maxContentWidth) / (questions[0].answers.length * 2), answerCellMinWidthDefault);\n return (React.createElement(core_1.Table, { className: (0, classnames_1.default)(classes.table, (_b = {}, _b[classes.rotate] = verticalText, _b)) },\n React.createElement(core_1.TableHead, null,\n React.createElement(core_1.TableRow, null,\n React.createElement(core_1.TableCell, { className: classes.stickyHeaderCell, style: { width: firstColWidth } }),\n questions[0].answers.map(function (item) { return (React.createElement(core_1.TableCell, { key: item.id, className: (0, classnames_1.default)(classes.headerCell, classes.stickyHeaderCell), style: { minWidth: answerCellMinWidth } },\n React.createElement(core_1.Typography, { variant: \"body1\", component: \"span\", className: classes.answerOption, style: ieFix }, item.value))); }))),\n React.createElement(core_1.TableBody, null, questions.map(function (question, ri) {\n var _a, _b, _c, _d, _e;\n return (React.createElement(core_1.TableRow, { key: question.id, className: validationError && question.required && (0, objectUtils_1.isEmpty)(respondedAnswers[question.id]) ? classes.invalidRow : undefined },\n React.createElement(core_1.TableCell, { role: \"rowheader\", className: classes.answerTextCell },\n React.createElement(HtmlContent_1.default, { html: question.question })),\n question.type === constants_1.formAnswerTypes.singleChoice || question.type === constants_1.formAnswerTypes.multipleChoice ? (React.createElement(React.Fragment, null, (_a = question.answers) === null || _a === void 0 ? void 0 : _a.map(function (answer, ci) {\n var _a;\n return (React.createElement(core_1.TableCell, { key: answer.id, className: (0, classnames_1.default)(classes.answerCell, (_a = {}, _a[classes.scoreCell] = showScoreMarks && answer.score !== 0, _a)), style: elementSettings && colStyle(elementSettings, ci) }, showScoreValues ? (React.createElement(core_1.Typography, { color: \"textSecondary\" }, answer.score)) : (React.createElement(core_1.ButtonBase, __assign({ disabled: disabled || readOnly, onClick: selectAnswer(question, answer), className: classes.answerButton }, __assign({ ref: navigation.setRef(ri, ci), tabIndex: -1, onKeyDown: navigation.handleKeyDown, onMouseDown: navigation.handleMouseDown(ri, ci) }, ri === 0 && ci === 0 && {\n tabIndex: 0,\n onFocus: navigation.handleMouseDown(ri, ci),\n }), { \"aria-label\": respondedAnswers[question.id] && Array.prototype.findIndex.call(respondedAnswers[question.id], function (d) { return d === answer.id; }) > -1 ? translate('checked') : translate('unChecked') }), respondedAnswers[question.id] && Array.prototype.findIndex.call(respondedAnswers[question.id], function (d) { return d === answer.id; }) > -1 ? (React.createElement(icons_1.CheckedIcon, { color: \"primary\" })) : (React.createElement(icons_1.CheckedIcon, { color: \"disabled\", className: classes.cellMarker }))))));\n }))) : (React.createElement(core_1.TableCell, { colSpan: (_b = question.answers) === null || _b === void 0 ? void 0 : _b.length, className: (0, classnames_1.default)(classes.answerCell), style: elementSettings ? colStyle(elementSettings, 0) : undefined },\n React.createElement(core_1.TextField, { type: (0, FreetextResponse_1.getInputType)((_c = question.freetextConfig) === null || _c === void 0 ? void 0 : _c.inputType), fullWidth: true, disabled: disabled, value: ((_d = respondedAnswers[question.id]) === null || _d === void 0 ? void 0 : _d[0]) || '', onChange: handleFreetextChange(question), InputProps: {\n disableUnderline: true,\n inputProps: { maxLength: (_e = question.freetextConfig) === null || _e === void 0 ? void 0 : _e.maxLength },\n } })))));\n }))));\n};\nQuestionnaireTable.defaultProps = {\n disabled: false,\n showScoreMarks: false,\n responses: null,\n validationError: false,\n elementSettings: null,\n readOnly: false,\n showScoreValues: false,\n};\nexports.default = (((0, ArrowNavigation_1.with2dArrowNavigation)(QuestionnaireTable)));\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { EmojiEvents } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport { Button, ButtonBase, makeStyles, Typography } from '@material-ui/core';\nimport { contentElemenIdPrefix } from '../../../../constants';\nimport FormQuestion from '../../FormQuestion';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n\n },\n results: {\n margin: theme.spacing(4, 0),\n boxShadow: theme.shadows[4],\n padding: theme.spacing(4, 2),\n background: theme.palette.common.white,\n display: 'flex',\n alignItems: 'center',\n\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column',\n },\n },\n scoreHeading: {\n flex: '1 1 auto',\n color: theme.youwell.colors.green,\n },\n resetButton: {\n marginLeft: theme.spacing(1),\n\n [theme.breakpoints.down('xs')]: {\n marginTop: theme.spacing(2),\n },\n },\n actions: {\n margin: theme.spacing(4, 0),\n display: 'flex',\n justifyContent: 'center',\n },\n showScoreButton: {\n width: 400,\n padding: theme.spacing(2),\n },\n success: {\n marginRight: theme.spacing(2),\n fontSize: theme.typography.h6.fontSize,\n color: theme.youwell.colors.green,\n display: 'flex',\n alignItems: 'center',\n },\n successIcon: {\n marginLeft: theme.spacing(1),\n },\n resetButtonSmall: {\n position: 'absolute',\n padding: theme.spacing(1),\n right: 0,\n bottom: 32,\n '&:hover': {\n background: theme.palette.grey[50],\n },\n },\n}), { name: 'Quiz' });\n\nconst Quiz = ({\n element, contentState, responses, handleResponseUpdate, disabled, readOnly, FormQuestionProps,\n}) => {\n const classes = useStyles();\n const translate = useSelector(state => getTranslate(state.localize));\n\n if (!element) {\n return null;\n }\n\n const questions = element.questions || [];\n const elementSettings = element.settings || {};\n const resultQuestionId = Number(elementSettings.resultQuestionId) || 1000;\n\n const questionsWithAnswers = questions?.filter(d => d.answers?.length);\n const showScores = responses[resultQuestionId]?.response.scaleResponse === 1;\n\n const resetQuiz = () => {\n element?.questions?.forEach((q) => {\n handleResponseUpdate(q)('choiceResponse', null);\n });\n handleResponseUpdate({ id: resultQuestionId })('scaleResponse', 0);\n\n if (window.scrollTo) {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n document.documentElement.scrollTop = 0;\n }\n };\n\n const showResults = () => {\n handleResponseUpdate({ id: resultQuestionId })('scaleResponse', 1);\n };\n\n const scoring = questionsWithAnswers.reduce((prev, curr) => (\n {\n score: prev.score + Number(responses[curr.id]?.response?.choiceResponse?.reduce((pResp, cResp) => pResp + cResp.score || 0, 0) || 0),\n max: prev.max + Number(curr.answers.reduce((pAnswer, cAnswer) => pAnswer + cAnswer.score || 0, 0)),\n }\n ), { score: 0, max: 0 });\n\n return (\n \n {questions.map(q => (\n
\n ))}\n\n {showScores ? (\n
\n {scoring.score === scoring.max ? (\n <>\n \n {translate('taskContent.fullScore', scoring)}\n \n \n \n \n {translate('taskContent.retakeQuiz')}\n \n \n >\n ) : (\n <>\n \n {translate('taskContent.youGotxOfXScore', scoring)}\n \n \n >\n )}\n
\n ) : (\n
\n \n
\n )}\n\n
\n );\n};\n\n\nQuiz.propTypes = {\n element: PropTypes.object.isRequired,\n taskId: PropTypes.string.isRequired,\n getProgramItem: PropTypes.func.isRequired,\n handleResponseUpdate: PropTypes.func.isRequired,\n contentState: PropTypes.string,\n responses: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n FormQuestionProps: PropTypes.object,\n readOnly: PropTypes.bool,\n};\n\nQuiz.defaultProps = {\n contentState: null,\n FormQuestionProps: null,\n readOnly: false,\n disabled: false,\n};\n\nexport default Quiz;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { connect } from 'react-redux';\nimport { getTranslate } from 'react-localize-redux';\n\nimport { Button, Typography } from '@material-ui/core';\nimport { contentElemenIdPrefix } from '../../../../constants';\nimport FormQuestion from '../../FormQuestion';\nimport { isEmpty } from '../../../../objectUtils';\nimport { InfoMessage } from '../../../../../common/components';\n\nconst styles = theme => ({\n root: {\n\n },\n results: {\n margin: theme.spacing(4, 0),\n boxShadow: theme.shadows[4],\n padding: theme.spacing(4, 2),\n background: theme.palette.common.white,\n display: 'flex',\n alignItems: 'center',\n\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column',\n },\n },\n scoreHeading: {\n flex: '1 1 auto',\n color: theme.youwell.colors.green,\n },\n resetButton: {\n marginLeft: theme.spacing(1),\n\n [theme.breakpoints.down('xs')]: {\n marginTop: theme.spacing(2),\n },\n },\n});\n\n// How to use a Quiz\n// On the content-page:\n// 1. Add a default element with all the questions\n// 2. Add a default element with a Button-question. Text: \"Show answers\"\n// 3. Add a \"QuizResponse\"-element with no content\n// 4. Settings for element 3: elementId = id of element 1\n// 5. Set the following conditional states:\n// Element 1: Default visible, hidden when \"Show answers\" is activated\n// Element 2: same as above (or keep always visible..)\n// Element 3: Default hidden, visible when \"Show answers\" is activated\n\nclass QuizResponse extends React.Component {\n resetQuiz = () => {\n const quizElement = this.getQuizElement();\n\n quizElement?.questions?.forEach((q) => {\n this.props.handleResponseUpdate(q)('choiceResponse', null);\n });\n\n if (window.scrollTo) {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n document.documentElement.scrollTop = 0;\n }\n };\n\n getQuizElement = () => {\n const {\n element, taskId, getProgramItem,\n } = this.props;\n\n const elementSettings = element.settings || {};\n const quizTaskId = elementSettings.taskId || taskId;\n const quizTask = getProgramItem(quizTaskId);\n const elementId = elementSettings.elementId;\n\n if (!quizTask || !elementId) {\n return null;\n }\n\n return quizTask.contentElements?.find(e => e.id === Number(elementId));\n }\n\n render() {\n const {\n classes, element, taskId, translate, getResponses, contentState,\n } = this.props;\n\n if (!element) {\n return null;\n }\n\n const elementSettings = element.settings || {};\n const quizTaskId = elementSettings.taskId || taskId;\n const quizElement = this.getQuizElement();\n\n if (!quizElement) {\n return ;\n }\n\n const taskResponses = getResponses(quizTaskId);\n const questions = quizElement?.questions;\n\n const questionsWithAnswers = questions?.filter(d => d.answers?.length);\n\n if (!questionsWithAnswers?.length > 0) {\n return ;\n }\n\n if (!taskResponses || isEmpty(taskResponses)) {\n return ;\n }\n\n const scoring = questionsWithAnswers.reduce((prev, curr) => (\n {\n score: prev.score + Number(taskResponses[curr.id]?.response?.choiceResponse?.reduce((pResp, cResp) => pResp + cResp.score || 0, 0) || 0),\n max: prev.max + Number(curr.answers.reduce((pAnswer, cAnswer) => pAnswer + cAnswer.score || 0, 0)),\n }\n ), { score: 0, max: 0 });\n\n return (\n \n {questionsWithAnswers.map(q => (\n
{}}\n />\n ))}\n\n \n \n {translate('taskContent.youGotxOfXScore', scoring)}\n \n\n \n
\n\n \n );\n }\n}\n\n\nQuizResponse.propTypes = {\n classes: PropTypes.object.isRequired,\n translate: PropTypes.func.isRequired,\n element: PropTypes.object.isRequired,\n taskId: PropTypes.string.isRequired,\n getProgramItem: PropTypes.func.isRequired,\n getResponses: PropTypes.func.isRequired,\n handleResponseUpdate: PropTypes.func.isRequired,\n contentState: PropTypes.string,\n};\n\nQuizResponse.defaultProps = {\n contentState: null,\n};\n\nconst mapStateToProps = state => ({\n translate: getTranslate(state.localize),\n});\n\nexport default connect(mapStateToProps)(withStyles(styles)(QuizResponse));\n","import { makeStyles } from '@material-ui/core/styles';\nimport React, { useState } from 'react';\nimport { createStyles, Input, Typography } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { getTranslate } from 'react-localize-redux';\nimport { useSelector } from 'react-redux';\nimport { stripHtml } from '../../../../htmlUtils';\n\nimport Arrow from '../../../../../common/image/Arrow.png';\n\nconst useStyles = makeStyles(theme => createStyles({\n imageContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n column: {\n margin: theme.spacing(1),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n left: {\n backgroundColor: '#778689',\n },\n right: {\n backgroundColor: '#e94f11',\n },\n circle: {\n display: 'flex',\n justifyContent: 'center',\n borderRadius: '100%',\n alignItems: 'center',\n width: 190,\n height: 190,\n color: theme.palette.common.white,\n\n [theme.breakpoints.down('xs')]: {\n width: 155,\n height: 155,\n\n '& p': {\n fontSize: '1rem',\n },\n },\n },\n bottomContainer: {\n marginTop: theme.spacing(4),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n arrowImage: {\n margin: theme.spacing(4, 0, 0),\n },\n triangle: {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n position: 'relative',\n width: 200,\n height: 200,\n\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n borderLeft: '150px solid transparent',\n borderRight: '150px solid transparent',\n borderBottom: '200px solid #2b7b90',\n },\n\n [theme.breakpoints.down('xs')]: {\n '& p': {\n fontSize: '1rem',\n },\n },\n\n '& + $input': {\n width: 300,\n },\n },\n triangleText: {\n zIndex: 1,\n marginTop: 100,\n color: theme.palette.common.white,\n },\n input: {\n marginTop: theme.spacing(2),\n border: theme.youwell.borders.inputBox,\n backgroundColor: theme.youwell.colors.inputBackground,\n padding: theme.spacing(2),\n },\n}));\n\nconst RouteSelection = ({\n questions, handleResponseUpdate, responses, readOnly,\n}) => {\n const [leftValue, setLeftValue] = useState(null);\n const [rightValue, setRightValue] = useState(null);\n const [bottomValue, setBottomValue] = useState(null);\n const classes = useStyles();\n const updateAsyncTimer = React.useRef();\n const translate = useSelector(state => getTranslate(state.localize));\n\n if (questions?.length !== 3) return null;\n\n const handleChange = key => (event) => {\n if (readOnly) {\n return;\n }\n const value = event.target.value;\n switch (key) {\n case 0:\n setLeftValue(value);\n break;\n case 1:\n setRightValue(value);\n break;\n case 2:\n setBottomValue(value);\n break;\n default:\n return;\n }\n\n clearTimeout(updateAsyncTimer.current);\n updateAsyncTimer.current = setTimeout(() => {\n handleResponseUpdate(questions[key])('freetextResponse', value);\n }, 200);\n };\n\n const answerLeft = leftValue !== null ? leftValue : responses && responses[questions[0].id]?.response?.freetextResponse;\n const answerRight = rightValue !== null ? rightValue : responses && responses[questions[1].id]?.response?.freetextResponse;\n const answerBottom = bottomValue !== null ? bottomValue : responses && responses[questions[2].id]?.response?.freetextResponse;\n\n return (\n \n
\n
\n
{translate('routeSelection.awayValues')}
\n

\n
\n
\n
\n
{translate('routeSelection.towardsValues')}
\n

\n
\n
\n
\n\n
\n
\n
{translate('routeSelection.psychologicalFlex')}
\n
\n
\n
\n
\n );\n};\n\nRouteSelection.propTypes = {\n questions: PropTypes.array.isRequired,\n handleResponseUpdate: PropTypes.func.isRequired,\n responses: PropTypes.object,\n readOnly: PropTypes.bool,\n};\nRouteSelection.defaultProps = {\n responses: null,\n readOnly: false,\n};\n\nexport default RouteSelection;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport {\n Backdrop,\n Button,\n makeStyles,\n} from '@material-ui/core';\nimport HtmlContent from '../../HtmlContent';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n position: 'relative',\n },\n box: {\n width: 160,\n height: 80,\n background: theme.youwell.colors.secondaryBackground,\n\n [theme.breakpoints.down('xs')]: {\n width: 115,\n height: 60,\n },\n },\n inActive: {\n cursor: 'default',\n pointerEvents: 'none',\n },\n empty: {\n visibility: 'hidden',\n },\n boxRow: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n first: {\n marginBottom: theme.spacing(8),\n [theme.breakpoints.down('xs')]: {\n marginBottom: theme.spacing(4),\n },\n },\n last: {\n marginTop: theme.spacing(8),\n [theme.breakpoints.down('xs')]: {\n marginTop: theme.spacing(4),\n },\n },\n detailsBackdrop: {\n zIndex: 1,\n },\n detailsBox: {\n zIndex: 2,\n position: 'absolute',\n top: theme.spacing(4),\n right: theme.spacing(4),\n left: theme.spacing(4),\n minHeight: `calc(100% - ${2 * theme.spacing(4)}px)`,\n border: theme.youwell.borders.primary,\n borderRadius: theme.youwell.shapes.borderRadius,\n background: theme.palette.background.paper,\n padding: theme.spacing(3),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n [theme.breakpoints.down('xs')]: {\n top: theme.spacing(2),\n right: theme.spacing(2),\n left: theme.spacing(2),\n minHeight: `calc(100% - ${2 * theme.spacing(2)}px)`,\n padding: theme.spacing(2),\n },\n },\n lineWrapper: {\n position: 'fixed',\n top: 0,\n left: 0,\n height: '100vh',\n width: '100vw',\n pointerEvents: 'none',\n color: theme.palette.primary.main,\n },\n}), { name: 'ConnectedBoxes' });\n\nconst arrowDirections = {\n BottomToTop: 1,\n LeftToRight: 2,\n RightToLeft: 3,\n TopToBottom: 4,\n LeftToTop: 5,\n RightToTop: 6,\n BottomToRight: 7,\n BottomToLeft: 8,\n TopToRight: 9,\n Self: 10,\n};\n\nconst getDirection = (from, to) => {\n if (from === to) return arrowDirections.Self;\n\n switch (from) {\n case 0: {\n switch (to) {\n case 1: case 2:\n return arrowDirections.RightToLeft;\n default:\n return arrowDirections.BottomToTop;\n }\n }\n case 1: {\n switch (to) {\n case 2:\n return arrowDirections.RightToLeft;\n case 3:\n return arrowDirections.LeftToTop;\n case 4:\n return arrowDirections.BottomToTop;\n case 5:\n return arrowDirections.RightToTop;\n default:\n return arrowDirections.BottomToTop;\n }\n }\n case 3: {\n switch (to) {\n case 4: case 5:\n return arrowDirections.RightToLeft;\n case 6:\n return arrowDirections.BottomToTop;\n default:\n return arrowDirections.BottomToLeft;\n }\n }\n case 4: {\n switch (to) {\n case 5:\n return arrowDirections.RightToLeft;\n case 6:\n return arrowDirections.LeftToTop;\n case 7:\n return arrowDirections.BottomToTop;\n default:\n return arrowDirections.RightToTop;\n }\n }\n case 5: {\n switch (to) {\n case 6:\n return arrowDirections.LeftToTop;\n case 7:\n return arrowDirections.BottomToRight;\n default:\n return arrowDirections.BottomToTop;\n }\n }\n default:\n return arrowDirections.BottomToTop;\n }\n}\n\nconst calculate = (from, to, direction) => {\n const fromEl = document.getElementById(from);\n const toEl = document.getElementById(to);\n\n if (!fromEl || !toEl) {\n return '';\n }\n\n const fromPosRect = fromEl.getBoundingClientRect();\n const toPosRect = toEl.getBoundingClientRect();\n\n const spacing = 8;\n let fromPos;\n let toPos;\n switch (direction) {\n case arrowDirections.BottomToTop:\n fromPos = { x: fromPosRect.left + fromEl.offsetWidth / 2, y: fromPosRect.bottom + spacing };\n toPos = { x: toPosRect.left + fromEl.offsetWidth / 2, y: toPosRect.top - spacing * 1.5 };\n break;\n case arrowDirections.TopToBottom:\n fromPos = { x: fromPosRect.left + fromEl.offsetWidth / 2, y: fromPosRect.top + spacing };\n toPos = { x: toPosRect.left + fromEl.offsetWidth / 2, y: toPosRect.bottom + spacing };\n break;\n case arrowDirections.LeftToRight:\n fromPos = { x: fromPosRect.left - spacing, y: fromPosRect.top + fromEl.offsetHeight / 2 };\n toPos = { x: toPosRect.right + spacing * 1.5, y: toPosRect.top + toEl.offsetHeight / 2 };\n break;\n case arrowDirections.RightToLeft:\n fromPos = { x: fromPosRect.right + spacing, y: fromPosRect.top + fromEl.offsetHeight / 2 };\n toPos = { x: toPosRect.left - spacing, y: toPosRect.top + toEl.offsetHeight / 2 };\n break;\n case arrowDirections.LeftToTop:\n fromPos = { x: fromPosRect.left - spacing, y: fromPosRect.top + fromEl.offsetHeight / 2 };\n toPos = { x: toPosRect.left + fromEl.offsetWidth / 2, y: toPosRect.top - spacing };\n break;\n case arrowDirections.RightToTop:\n fromPos = { x: fromPosRect.right + spacing, y: fromPosRect.top + fromEl.offsetHeight / 2 };\n toPos = { x: toPosRect.left + fromEl.offsetWidth / 2, y: toPosRect.top - spacing };\n break;\n case arrowDirections.BottomToRight:\n fromPos = { x: fromPosRect.left + fromEl.offsetWidth / 2, y: fromPosRect.bottom + spacing };\n toPos = { x: toPosRect.right + spacing * 1.5, y: toPosRect.top + toEl.offsetHeight / 2 };\n break;\n case arrowDirections.BottomToLeft:\n fromPos = { x: fromPosRect.left + fromEl.offsetWidth / 2, y: fromPosRect.bottom + spacing };\n toPos = { x: toPosRect.left - spacing, y: toPosRect.top + toEl.offsetHeight / 2 };\n break;\n case arrowDirections.TopToRight:\n fromPos = { x: fromPosRect.left + fromEl.offsetWidth / 2, y: fromPosRect.top + spacing };\n toPos = { x: toPosRect.right + spacing * 1.5, y: toPosRect.top + toEl.offsetHeight / 2 };\n break;\n case arrowDirections.Self:\n fromPos = { x: fromPosRect.left + fromEl.offsetWidth / 2, y: fromPosRect.top + spacing };\n toPos = { x: toPosRect.right + spacing * 1.5, y: toPosRect.top + toEl.offsetHeight / 2 };\n break;\n default:\n fromPos = { x: fromPosRect.left - spacing, y: fromPosRect.top + fromEl.offsetHeight / 2 };\n toPos = { x: toPosRect.right + spacing, y: toPosRect.top + toEl.offsetHeight / 2 };\n break;\n }\n\n return `M${fromPos.x},${fromPos.y} Q${fromPos.x},${fromPos.y} ${toPos.x},${toPos.y}`;\n // return `M${fromPos.x},${fromPos.y} C${fromPos.x - 80},${fromPos.y} ${toPos.x + 80},${toPos.y} ${toPos.x},${toPos.y}`;\n};\n\nconst ConnectingLine = ({ line }) => {\n const classes = useStyles();\n const lineEl = React.useRef(null);\n const { from, to, direction, type } = line;\n\n const update = React.useCallback(() => {\n if (lineEl.current) {\n lineEl.current.setAttribute('d', calculate(from, to, direction));\n }\n }, [from, to, direction]);\n\n React.useEffect(() => {\n update();\n }, [update]);\n\n React.useEffect(() => {\n window.addEventListener('scroll', update);\n window.addEventListener('resize', update);\n\n return () => {\n window.removeEventListener('scroll', update);\n window.removeEventListener('resize', update);\n };\n }, [update]);\n\n\n const showLeftArrow = !type || type === 'left' || type === 'both';\n const showRightArrow = !type || type === 'right' || type === 'both';\n\n return (\n \n );\n};\n\nConnectingLine.propTypes = {\n line: PropTypes.object.isRequired,\n};\n\nconst ConnectedBoxes = ({\n task, element, className,\n}) => {\n const classes = useStyles();\n const [showDetailsBoxIx, setShowDetailsBoxIx] = React.useState(null)\n\n if (!element.settings) {\n return null;\n }\n\n const boxes = [];\n const connectingLines = [];\n Object.entries(element.settings).forEach(([key, value], i) => {\n if (key.startsWith('box-nr-') && value) { // box-nr-1 -> Box index = 0\n const boxNr = Number(key.substring(7)) - 1;\n const box = task.contentElements?.find(e => e.id === Number(value));\n if (!Number.isNaN(boxNr) && box) {\n boxes[boxNr] = {\n ...box,\n tagId: `connectedBox_${element.id}_box${box.id}`,\n };\n }\n }\n if (key.startsWith('line-')) { // line-X-Y -> From X to Y\n const from = Number(key.substring(5, 6)) - 1;\n const to = Number(key.substring(7, 8)) - 1;\n if (!Number.isNaN(from) && !Number.isNaN(to)) {\n connectingLines.push({\n id: i,\n from: boxes[from]?.tagId,\n to: boxes[to]?.tagId,\n direction: getDirection(from, to),\n type: value, // Direction for arrow or type: left, right, both, none, .. dotted?\n });\n }\n }\n });\n\n const renderBox = (index) => {\n const box = boxes[index];\n const hasContent = box?.htmlContent;\n\n if (box) {\n return (\n \n );\n }\n return \n }\n\n return (\n \n
\n
\n {renderBox(0)}\n {renderBox(1)}\n {renderBox(2)}\n
\n
\n {renderBox(3)}\n {renderBox(4)}\n {renderBox(5)}\n
\n
\n {renderBox(6)}\n {renderBox(7)}\n {renderBox(8)}\n
\n\n {connectingLines.map(line => (\n
\n ))}\n\n {boxes[showDetailsBoxIx] && (\n <>\n
setShowDetailsBoxIx(null)} className={classes.detailsBackdrop} />\n \n \n
\n >\n )}\n \n );\n}\n\nConnectedBoxes.propTypes = {\n element: PropTypes.object.isRequired,\n task: PropTypes.object.isRequired,\n className: PropTypes.string,\n};\n\nConnectedBoxes.defaultProps = {\n className: null,\n};\n\nexport default ConnectedBoxes;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport {\n makeStyles,\n} from '@material-ui/core';\n\nimport TaskForm from '../TaskForm';\n\nconst useStyles = makeStyles(() => ({\n taskForm: {\n },\n}), { name: 'DefaultElementContent' });\n\n\nconst DefaultElementContent = ({\n element, task, className, taskResponses, contentState, onResponse, getProgramItem, getResponses, showValidationErrors, TaskFormProps,\n}) => {\n const classes = useStyles();\n\n return (\n \n \n
\n );\n}\n\nDefaultElementContent.propTypes = {\n element: PropTypes.object.isRequired,\n task: PropTypes.object.isRequired,\n TaskFormProps: PropTypes.object,\n customElementHandler: PropTypes.func,\n onResponse: PropTypes.func.isRequired,\n LinkElementProps: PropTypes.object,\n taskResponses: PropTypes.object,\n getProgramItem: PropTypes.func.isRequired,\n getResponses: PropTypes.func.isRequired,\n noHiddenStates: PropTypes.bool,\n HoveredElement: PropTypes.object,\n selectedElementId: PropTypes.number,\n elementPreContent: PropTypes.func,\n showValidationErrors: PropTypes.bool,\n className: PropTypes.string,\n contentState: PropTypes.string,\n};\n\nDefaultElementContent.defaultProps = {\n contentState: null,\n TaskFormProps: null,\n customElementHandler: null,\n LinkElementProps: null,\n taskResponses: null,\n noHiddenStates: false,\n HoveredElement: null,\n selectedElementId: null,\n elementPreContent: null,\n showValidationErrors: false,\n className: null,\n};\n\nexport default DefaultElementContent;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar React = __importStar(require(\"react\"));\nvar core_1 = require(\"@material-ui/core\");\nvar TaskForm_1 = __importDefault(require(\"../TaskForm\"));\nvar htmlUtils_1 = require(\"../../../htmlUtils\");\nvar constants_1 = require(\"../../../constants\");\nvar HtmlContent_1 = __importDefault(require(\"../../HtmlContent\"));\nvar useStyles = (0, core_1.makeStyles)(function (theme) { return ({\n root: {\n background: theme.palette.background.paper,\n padding: theme.spacing(1),\n },\n list: {\n width: '100%',\n },\n question: {\n '&+&': {\n marginTop: theme.spacing(1),\n },\n },\n}); }, { name: 'LinkedResponse' });\nvar LinkedResponse = function (_a) {\n var _b, _c, _d, _e, _f, _g, _h, _j, _k;\n var task = _a.task, element = _a.element, getProgramItem = _a.getProgramItem, getResponses = _a.getResponses, contentState = _a.contentState;\n var classes = useStyles();\n if (!(element === null || element === void 0 ? void 0 : element.settings)) {\n return null;\n }\n var linkedTaskId = (element.settings.linkedPageId || element.settings.linkedElementTaskId); // linkedElementTaskId is obsolete (old setting used in emeistring Depresjon)\n var linkedElementId = (element.settings.linkedElementId || element.settings.linkedElementElementId); // linkedElementElementId is obsolete (old setting..)\n var refTask = getProgramItem(linkedTaskId);\n if (!refTask) {\n return null;\n }\n var refElement = (_b = refTask.contentElements) === null || _b === void 0 ? void 0 : _b.find(function (e) { return e.id === Number(linkedElementId); });\n var refTaskResponses = getResponses(linkedTaskId, undefined, true);\n if (!refElement) {\n return null;\n }\n if (element.settings.onlyShowRespondedAnswers) {\n refElement = __assign(__assign({}, refElement), { questions: refTaskResponses\n ? (_c = refElement.questions) === null || _c === void 0 ? void 0 : _c.map(function (q) {\n var _a, _b, _c, _d;\n var respondedAnswers = q.answers.filter(function (a) {\n var _a, _b, _c;\n var responded = (_c = (_b = (_a = refTaskResponses[q === null || q === void 0 ? void 0 : q.id]) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.choiceResponse) === null || _c === void 0 ? void 0 : _c.filter(function (r) { return (r === null || r === void 0 ? void 0 : r.id) === (a === null || a === void 0 ? void 0 : a.id); });\n return responded && (responded === null || responded === void 0 ? void 0 : responded.length) > 0;\n });\n var freeTextResponded = (_d = (_c = (_b = (_a = refTaskResponses[q === null || q === void 0 ? void 0 : q.id]) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.choiceResponse) === null || _c === void 0 ? void 0 : _c.filter(function (r) { var _a; return (r === null || r === void 0 ? void 0 : r.id) === ((_a = q === null || q === void 0 ? void 0 : q.choiceConfig) === null || _a === void 0 ? void 0 : _a.freetextChoiceId); })) === null || _d === void 0 ? void 0 : _d[0];\n return !freeTextResponded\n ? __assign(__assign({}, q), { answers: __spreadArray([], respondedAnswers, true), choiceConfig: __assign(__assign({}, q.choiceConfig), { freetextChoiceId: null }) }) : __assign(__assign({}, q), { answers: __spreadArray([], respondedAnswers, true) });\n })\n : undefined });\n }\n if (((_d = element.settings) === null || _d === void 0 ? void 0 : _d['form.background']) || ((_e = element.settings) === null || _e === void 0 ? void 0 : _e['form.foreground'])) {\n refElement = __assign(__assign({}, refElement), { questions: (_f = refElement.questions) === null || _f === void 0 ? void 0 : _f.map(function (q) {\n var _a, _b;\n return (__assign(__assign({}, q), { choiceConfig: __assign(__assign({}, q.choiceConfig), { background: (_a = element.settings) === null || _a === void 0 ? void 0 : _a['form.background'], foreground: (_b = element.settings) === null || _b === void 0 ? void 0 : _b['form.foreground'] }) }));\n }) });\n }\n if (((_g = element.settings.threshold) === null || _g === void 0 ? void 0 : _g.length) > 0) {\n var threshold_1 = Number(element.settings.threshold);\n refElement = __assign(__assign({}, refElement), { questions: refTaskResponses && !Number.isNaN(threshold_1) ? (_h = refElement.questions) === null || _h === void 0 ? void 0 : _h.filter(function (d) { var _a, _b, _c; return (_c = (_b = (_a = refTaskResponses[d.id]) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.choiceResponse) === null || _c === void 0 ? void 0 : _c.some(function (r) { return (r === null || r === void 0 ? void 0 : r.score) && r.score >= threshold_1; }); }) : undefined });\n }\n switch (element.settings.view) {\n case 'list':\n switch (refElement.elementType) {\n case constants_1.questionContentElementTypes.questionnaire:\n return (React.createElement(\"div\", { className: classes.root },\n React.createElement(core_1.List, { className: classes.list }, (_j = refElement.questions) === null || _j === void 0 ? void 0 : _j.map(function (d) { return (React.createElement(core_1.ListItem, { key: d.id },\n React.createElement(core_1.ListItemText, { primary: (0, htmlUtils_1.stripHtml)(d.question) }))); }))));\n default:\n return (React.createElement(\"div\", { className: classes.root }, (_k = refElement.questions) === null || _k === void 0 ? void 0 : _k.map(function (d) {\n var _a, _b, _c, _d;\n return (React.createElement(\"div\", { className: classes.question, key: d.id },\n (refElement === null || refElement === void 0 ? void 0 : refElement.questions) && ((_a = refElement.questions) === null || _a === void 0 ? void 0 : _a.length) > 1 && React.createElement(HtmlContent_1.default, { html: d.question }),\n React.createElement(core_1.List, { className: classes.list }, (_d = (_c = (_b = refTaskResponses === null || refTaskResponses === void 0 ? void 0 : refTaskResponses[d.id]) === null || _b === void 0 ? void 0 : _b.response) === null || _c === void 0 ? void 0 : _c.choiceResponse) === null || _d === void 0 ? void 0 : _d.map(function (r) { return (React.createElement(core_1.ListItem, { key: r === null || r === void 0 ? void 0 : r.id },\n React.createElement(core_1.ListItemText, { primary: r === null || r === void 0 ? void 0 : r.value }))); }))));\n })));\n }\n case 'default':\n default:\n return (React.createElement(TaskForm_1.default, { element: refElement, taskResponses: refTaskResponses, contentState: contentState, onResponse: function () { }, getProgramItem: getProgramItem, getResponses: getResponses, taskId: task.id, readOnly: true }));\n }\n};\nLinkedResponse.defaultProps = {\n contentState: null,\n};\nexports.default = LinkedResponse;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport {\n Button,\n ButtonBase,\n Collapse,\n IconButton,\n makeStyles,\n Modal,\n Typography,\n} from '@material-ui/core';\n\nimport HtmlContent from '../../HtmlContent';\nimport { getStylesFromSettings } from '../utils';\nimport { isIe } from '../../../browserUtils';\nimport { CloseIcon } from '../../../icons';\nimport { parseBoolString } from '../../../stringUtils';\n\n// eslint-disable-next-line import/no-cycle -- ok because ReadMore can display content via TaskContent\nimport TaskContent from '../TaskContent';\nimport Image from '../../Image';\n\nconst useStyles = makeStyles(theme => ({\n wrapper: {\n margin: theme.spacing(2, 0),\n },\n noMargins: {\n margin: 0,\n },\n modalContainer: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 600 - theme.spacing(4),\n maxWidth: '100%',\n minHeight: theme.spacing(50),\n maxHeight: '80%',\n background: theme.palette.background.paper,\n display: 'flex',\n flexDirection: 'column',\n height: isIe ? '100%' : undefined,\n\n [theme.breakpoints.down('xs')]: {\n minWidth: 0,\n width: `calc(100% - ${theme.spacing(4)}px)`,\n },\n },\n wide: {\n minWidth: '80%',\n },\n modalHeader: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1, 2),\n background: theme.youwell.colors.secondaryBackground,\n },\n modalHeaderText: {\n flex: '1 1 auto',\n fontWeight: theme.typography.fontWeightMedium,\n },\n modalContent: {\n flex: '1 1 auto',\n padding: theme.spacing(4),\n overflowY: 'auto',\n },\n inlineContainer: {\n margin: theme.spacing(0, 0, 2, 0),\n border: theme.youwell.borders.dim,\n background: theme.palette.background.paper,\n },\n inlineContent: {\n flex: '1 1 auto',\n padding: theme.spacing(2),\n overflowY: 'auto',\n },\n linkWrapper: {\n display: 'flex',\n alignItems: 'flex-end',\n },\n ingressImage: {\n marginRight: theme.spacing(2),\n width: 200,\n\n [theme.breakpoints.down('xs')]: {\n width: 150,\n },\n },\n button: {\n\n },\n link: {\n display: 'flex',\n alignItems: 'center',\n transition: 'padding 0.2s, background-color 0.5s',\n borderBottom: theme.youwell.borders.primary,\n paddingBottom: 1,\n\n '&$active': {\n background: theme.youwell.colors.secondaryBackground,\n padding: theme.spacing(1),\n width: '100%',\n borderBottom: theme.youwell.borders.primary,\n },\n },\n linkText: {\n flex: '1 1 auto',\n textAlign: 'left',\n },\n active: {},\n}), { name: 'ReadMore' });\n\nconst readMoreTypes = {\n inline: 'inline',\n popup: 'popup',\n};\n\nconst readMoreLinkTypes = {\n button: 'button',\n link: 'link',\n};\n\nconst ReadMore = ({ element, getProgramItem, ...props }) => {\n const classes = useStyles();\n const [showReadMore, setShowReadMore] = React.useState(false);\n\n const toggle = () => {\n setShowReadMore(prev => !prev);\n }\n\n if (!element) {\n return null;\n }\n\n const noMargins = parseBoolString(element.settings?.noMargins);\n const linkText = element.settings?.linkText || 'Les mer';\n const headerText = element.settings?.title || element.title || linkText;\n const ingressImage = element.settings?.ingressImage;\n const activeInline = showReadMore && element.settings?.type === readMoreTypes.inline;\n\n const renderLinkElement = () => {\n switch (element.settings?.linkType) {\n case readMoreLinkTypes.button:\n return (\n \n )\n case readMoreLinkTypes.link:\n default:\n return (\n \n \n {linkText}\n \n {activeInline && }\n \n )\n }\n }\n\n const renderContent = () => {\n if (element.settings?.contentTaskId) {\n const contentTask = getProgramItem(element.settings?.contentTaskId);\n // order of props is important! \"task={contentTask}\" must override {...props}\n return ();\n }\n return ();\n }\n\n const renderContainerElement = () => {\n switch (element.settings?.type) {\n case readMoreTypes.inline:\n return (\n \n \n
\n {renderContent()}\n
\n
\n \n );\n case readMoreTypes.popup:\n default:\n return (\n setShowReadMore(false)}\n >\n \n
\n \n {headerText}\n \n setShowReadMore(false)}>\n \n \n
\n
\n {renderContent()}\n
\n
\n \n );\n }\n }\n\n return (\n \n
\n {ingressImage && !activeInline && }\n {renderLinkElement()}\n
\n {renderContainerElement()}\n
\n );\n}\n\nReadMore.propTypes = {\n element: PropTypes.object.isRequired,\n getProgramItem: PropTypes.func.isRequired,\n};\n\nexport default ReadMore;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { defaultContentElementTypes, specialContentElementTypes } from '../../../constants';\n\n// eslint-disable-next-line import/no-cycle -- ok because ReadMore can display content via TaskContent\nimport ReadMore from './ReadMore';\nimport LinkedResponse from './LinkedResponse';\nimport DefaultElementContent from './DefaultElementContent';\nimport ConnectedBoxes from './ConnectedBoxes';\n\nexport const getHtmlContentPosition = (elementType, contentPositionFromSetting) => {\n switch (elementType) {\n case specialContentElementTypes.hidden:\n case defaultContentElementTypes.readMore:\n return -1;\n default:\n return Number(contentPositionFromSetting || 0);\n }\n}\n\n\nconst TaskElementContent = ({ element, customElementHandler, ...props }) => {\n switch (element.elementType) {\n case specialContentElementTypes.hidden:\n return null;\n case defaultContentElementTypes.readMore:\n return \n case defaultContentElementTypes.linkedResponse:\n return \n case specialContentElementTypes.connectedBoxes:\n return \n default:\n if (customElementHandler) {\n const customHandeled = customElementHandler({ element, ...props });\n if (customHandeled) {\n return customHandeled;\n }\n }\n return ;\n }\n};\n\nTaskElementContent.propTypes = {\n element: PropTypes.object.isRequired,\n customElementHandler: PropTypes.func,\n}\n\nTaskElementContent.defaultProps = {\n customElementHandler: null,\n}\n\nexport default TaskElementContent;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getStylesFromSettings = void 0;\n// eslint-disable-next-line import/prefer-default-export\nvar getStylesFromSettings = function (settings, prefix) {\n if (prefix === void 0) { prefix = 'style.'; }\n return Object.keys(settings || {}).reduce(function (prev, curr) {\n var _a;\n return (curr.startsWith(prefix) ? __assign(__assign({}, prev), (_a = {}, _a[curr.substring(prefix.length)] = settings[curr], _a)) : prev);\n }, {});\n};\nexports.getStylesFromSettings = getStylesFromSettings;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChatVideoProviders = exports.patientProgramStatus = exports.notificationUpdateAction = exports.notificationStatus = exports.userDataProperties = exports.programAccessStatus = exports.engineTaskTypes = exports.taskSettingKeys = exports.systemProgramProfiles = exports.orgLicence = exports.contentElemenIdPrefix = exports.workflowStatusLabels = exports.workflowStatuses = exports.subtotalCalculationTypes = exports.thresholdTypes = exports.customContentElementTypes = exports.specialContentElementTypes = exports.questionContentElementTypes = exports.defaultContentElementTypes = exports.contentPatchOperations = exports.patientPatchOperations = exports.patientDialogChannels = exports.freetextInputTypes = exports.loginTypes = exports.IdProviders = exports.sensorTypes = exports.patientFlagTypes = exports.sortDataType = exports.sortDirection = exports.elementConditionStates = exports.fileTypes = exports.logoutReasons = exports.accessRoles = exports.scheduleRepeatPeriod = exports.programProfileElementGroups = exports.systemElementGroups = exports.patientUserLevels = exports.loginLevels = exports.appRoleLevels = exports.appRoles = exports.formAnswerTypes = exports.linkTypes = exports.elementTypes = void 0;\nexports.elementTypes = {\n html: 'Html',\n text: 'Text',\n audio: 'Audio',\n video: 'Video',\n image: 'Image',\n file: 'File',\n link: 'Link',\n form: 'Form',\n script: 'Script',\n reference: 'Reference',\n};\nexports.linkTypes = {\n internal: 'Internal',\n task: 'Task',\n module: 'Module',\n program: 'Program',\n file: 'File',\n url: 'ExternalPage',\n youtube: 'Youtube',\n vimeo: 'Vimeo',\n audio: 'Audio',\n video: 'Video',\n image: 'Image',\n};\nexports.formAnswerTypes = {\n freetext: 'Freetext',\n singleChoice: 'SingleChoice',\n multipleChoice: 'MultipleChoice',\n scale: 'Scale',\n table: 'Table',\n switch: 'Switch',\n action: 'Action',\n};\nexports.appRoles = {\n portalAdmin: 'PortalAdmin',\n customerAdmin: 'CustomerAdmin',\n organizationAdmin: 'OrganizationAdmin',\n userAdmin: 'UserAdmin',\n systemsResponsible: 'SystemsResponsible',\n patientAdmin: 'PatientAdmin',\n manager: 'Manager',\n programAdmin: 'ProgramAdmin',\n therapist: 'Therapist',\n externalTherapist: 'ExternalTherapist',\n researcher: 'Researcher',\n user: 'User',\n contactPerson: 'ContactPerson',\n none: 'None',\n isTherapist: function (roles) { return roles === null || roles === void 0 ? void 0 : roles.reduce(function (prev, r) { return prev\n || r === 'Therapist' || r === 'PatientAdmin' || r === 'OrganizationAdmin' || r === 'PortalAdmin'; }, false); },\n isEditor: function (roles) { return roles === null || roles === void 0 ? void 0 : roles.reduce(function (prev, r) { return prev\n || r === 'ProgramAdmin' || r === 'OrganizationAdmin' || r === 'PortalAdmin'; }, false); },\n canReadOrgReports: function (roles) { return roles === null || roles === void 0 ? void 0 : roles.reduce(function (prev, r) { return prev\n || r === 'PortalAdmin' || r === 'OrganizationAdmin' || r === 'SystemsResponsible' || r === 'Manager'; }, false); },\n // eslint-disable-next-line no-use-before-define, @typescript-eslint/no-use-before-define\n isLimitedPatientAccess: function (role) { return !(exports.appRoleLevels[role] >= exports.appRoleLevels[exports.appRoles.therapist]); },\n // eslint-disable-next-line no-use-before-define, @typescript-eslint/no-use-before-define\n isAdminPatientAccess: function (role) { return role === 'PortalAdmin' || role === 'OrganizationAdmin' || role === 'SystemsResponsible' || role === 'PatientAdmin'; },\n};\nexports.appRoleLevels = (_a = {},\n _a[exports.appRoles.portalAdmin] = 100,\n _a[exports.appRoles.customerAdmin] = 95,\n _a[exports.appRoles.organizationAdmin] = 90,\n _a[exports.appRoles.userAdmin] = 85,\n _a[exports.appRoles.systemsResponsible] = 80,\n _a[exports.appRoles.patientAdmin] = 60,\n _a[exports.appRoles.manager] = 38,\n _a[exports.appRoles.programAdmin] = 35,\n _a[exports.appRoles.therapist] = 30,\n _a[exports.appRoles.externalTherapist] = 28,\n _a[exports.appRoles.researcher] = 22,\n _a[exports.appRoles.user] = 20,\n _a[exports.appRoles.contactPerson] = 10,\n _a);\nexports.loginLevels = {\n none: 0,\n key: 1,\n password: 2,\n twoFactor: 3,\n level4: 4,\n};\nexports.patientUserLevels = {\n none: 'None',\n anonymous: 'Anonymous',\n person: 'Person',\n patient: 'Patient',\n};\nexports.systemElementGroups = {\n main: 'Main',\n preContent: 'PreContent',\n scheduled: 'Scheduled',\n app: 'App',\n};\nexports.programProfileElementGroups = __assign(__assign({}, exports.systemElementGroups), { consent: 'Consent', guardianConsent: 'GuardianConsent', therapist: 'Therapist' });\nexports.scheduleRepeatPeriod = {\n day: 'Day',\n week: 'Week',\n month: 'Month',\n};\nexports.accessRoles = {\n none: 'None',\n limited: 'Limited',\n read: 'Read',\n write: 'Write',\n owner: 'Owner',\n admin: 'Admin',\n hasWriteAccess: function (role) { return role === 'Write' || role === 'Owner' || role === 'Admin'; },\n isLimitedAccess: function (role) { return !role || role === 'Limited'; },\n};\nexports.logoutReasons = {\n logout: '0',\n tokenExpired: '910',\n idleTimeout: '911',\n changeOrg: '1011',\n invalidState: '912',\n};\nexports.fileTypes = {\n file: 'File',\n image: 'Image',\n audio: 'Audio',\n video: 'Video',\n document: 'Document',\n};\nexports.elementConditionStates = {\n none: 'None',\n visible: 'Visible',\n hidden: 'Hidden',\n accepted: 'Accepted',\n rejected: 'Rejected',\n};\nexports.sortDirection = {\n asc: 'asc',\n desc: 'desc',\n};\nexports.sortDataType = {\n default: 'default',\n number: 'number',\n date: 'date',\n list: 'list',\n};\n// Duplicated in Enum: PatientFlagType\nexports.patientFlagTypes = {\n criticalScore: 'CriticalScore',\n inactivePatient: 'InactivePatient',\n messageFollowup: 'MessageFollowup',\n responseFollowup: 'ResponseFollowup',\n custom: 'Custom',\n customWarning: 'CustomWarning',\n customCritical: 'CustomCritical',\n warningScore: 'WarningScore',\n goodScore: 'GoodScore',\n checkForSurplusInformation: 'CheckForSurplusInformation',\n};\nexports.sensorTypes = {\n unknown: 'Unknown',\n fitbit: 'Fitbit',\n garmin: 'Garmin',\n};\nexports.IdProviders = {\n youwell: 'Youwell',\n idPorten: 'IdPorten',\n};\nexports.loginTypes = {\n none: 'None',\n password: 'Password',\n idPorten: 'IdPorten',\n twoFactor: 'TwoFactor',\n selfStart: 'SelfStart',\n};\nexports.freetextInputTypes = {\n default: 'Default',\n singleLineText: 'SingleLineText',\n email: 'Email',\n phone: 'Phone',\n number: 'Number',\n date: 'Date',\n dateAndTime: 'DateAndTime',\n time: 'Time',\n richText: 'RichText',\n};\nexports.patientDialogChannels = {\n chat: 'YouwellChat',\n sms: 'Sms',\n};\nexports.patientPatchOperations = {\n addGroupMembership: 'AddGroupMembership',\n removeGroupMembership: 'RemoveGroupMembership',\n};\nexports.contentPatchOperations = {\n changeOwner: 'ChangeOwner',\n};\nexports.defaultContentElementTypes = {\n default: 'Default',\n box: 'Box',\n card: 'Card',\n readMore: 'ReadMore',\n linkedResponse: 'LinkedResponse',\n};\nexports.questionContentElementTypes = {\n questionnaire: 'Questionnaire',\n quiz: 'Quiz',\n bubbleChoice: 'BubbleChoice',\n bullseye: 'BullsEye',\n collapsedTable: 'CollapsedTable',\n};\nexports.specialContentElementTypes = {\n hidden: 'Hidden',\n connectedBoxes: 'ConnectedBoxes',\n};\nexports.customContentElementTypes = {\n quizResponse: 'QuizResponse',\n routeSelection: 'RouteSelection', // Used by eMeistring Depresjon\n};\nexports.thresholdTypes = {\n lessThan: 'LessThan',\n moreThan: 'MoreThan',\n equals: 'Equals',\n none: 'None',\n};\nexports.subtotalCalculationTypes = {\n sum: 'Sum',\n average: 'Average',\n};\nexports.workflowStatuses = {\n newContent: 100,\n soonExpiring: 310,\n inReview: 320,\n inPeerReview: 330,\n readyForApproval: 380,\n expired: 410,\n approved: 500,\n};\nexports.workflowStatusLabels = ['ProofReading', 'Illustrating', 'Attention'];\nexports.contentElemenIdPrefix = 'ywE';\nexports.orgLicence = {\n None: 0,\n Trial: 5,\n Limited: 10,\n Unlimited: 100,\n};\nexports.systemProgramProfiles = {\n Default: 'Default',\n Empty: 'Empty',\n All: 'All',\n};\nexports.taskSettingKeys = {\n exportLabel: 'export-label',\n};\nexports.engineTaskTypes = {\n checkForNewFeedback: 'CheckForNewFeedback',\n setRandomizedReminders: 'SetRandomizedReminders',\n};\nexports.programAccessStatus = {\n default: 'Default',\n private: 'Private',\n clientLibrary: 'ClientLibrary',\n publicLibrary: 'PublicLibrary',\n public: 'Public',\n};\nexports.userDataProperties = {\n bedtimePlan: {\n bedTime: 'sleepPlan.bedTime',\n wakeTime: 'sleepPlan.wakeTime',\n },\n};\nexports.notificationStatus = {\n created: 'Created',\n sent: 'Sent',\n notSent: 'NotSent',\n Invalid: 'Invalid',\n canceled: 'Canceled',\n};\nexports.notificationUpdateAction = {\n resend: 'Resend',\n cancel: 'Cancel',\n sendNow: 'SendNow',\n};\nexports.patientProgramStatus = {\n notStarted: 'NotStarted',\n active: 'Active',\n inactive: 'Inactive',\n ended: 'Ended',\n deleted: 'Deleted',\n programDeleted: 'ProgramDeleted',\n};\nvar ChatVideoProviders;\n(function (ChatVideoProviders) {\n ChatVideoProviders[\"Youwell\"] = \"Youwell\";\n ChatVideoProviders[\"Join\"] = \"Join\";\n})(ChatVideoProviders = exports.ChatVideoProviders || (exports.ChatVideoProviders = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElementTitle = exports.findTask = exports.findModule = void 0;\nvar htmlUtils_1 = require(\"./htmlUtils\");\nvar findModule = function (program, moduleId) { return (program && moduleId ? program.modules.reduce(function (p, c) { return (c.id === moduleId ? c : p); }, null) : null); };\nexports.findModule = findModule;\nvar findTask = function (program, moduleId, taskId) { return (program && moduleId && taskId\n ? program.modules.reduce(function (p, module) { return (module.id === moduleId\n ? module.tasks.reduce(function (pt, task) { return (task.id === taskId ? task : pt); }, null)\n : p); }, null)\n : null); };\nexports.findTask = findTask;\nvar firstQuestionText = function (questions) { return (questions && questions.length > 0 ? (0, htmlUtils_1.textpart)(questions[0].question) : null); };\nvar firstHeaderOrText = function (htmlContent, length) {\n var _a;\n if (length === void 0) { length = 50; }\n var doc = new DOMParser().parseFromString(htmlContent, 'text/html');\n var t = ((_a = doc.body.children[0]) === null || _a === void 0 ? void 0 : _a.textContent) || '';\n return t.length > length ? \"\".concat(t.slice(0, length), \"...\") : t;\n};\nvar getElementTitle = function (element, defaultValue) {\n if (defaultValue === void 0) { defaultValue = '\\u00A0'; }\n return element.title\n || firstHeaderOrText(element.htmlContent)\n || firstQuestionText(element.questions)\n || defaultValue;\n};\nexports.getElementTitle = getElementTitle;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTimeValues = exports.hourCount = exports.getMillisecondsInADay = exports.getMinsToMidnight = exports.getDateFormatted = exports.compareDates = exports.getDatePart = exports.getNumberOfMinutes = exports.getNumberOfSeconds = exports.getWeekStartDate = exports.getNumberOfDays = exports.getNumberOfWeeksCeiled = exports.getNumberOfWeeks = exports.getWeekNumber = exports.getWeekNumberFromDate = exports.getDateTimeSaveString = exports.getTextfieldDateTimeString = exports.getTextfieldDateString = exports.dateWithTimeIfToday = exports.dateWithOptionalTime = exports.getTimeStringFromDayOfWeek = exports.mondayZeroIndex = exports.shortDate = exports.longDate = exports.datestamp = exports.timestamp = exports.longTimestamp = exports.hasTime = exports.getTimePartForInput = exports.timeOnly = exports.fullDateTime = exports.addMonths = exports.addDays = exports.addHours = exports.isFuture = exports.isYesterday = exports.isToday = exports.isSameDate = exports.yesterday = exports.tomorrow = exports.today = exports.isoDate = exports.isoDateWithoutTimezone = exports.getLocalDate = exports.isDateObject = exports.pad2 = exports.minutesInOneDay = exports.msInOneDay = exports.msInOneWeek = exports.timestampRegex = void 0;\nexports.generateWeekAndYearKey = exports.sortDatesByTimeInAscendingOrder = exports.getAge = exports.getWeek = void 0;\nvar objectUtils_1 = require(\"./objectUtils\");\nexports.timestampRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5]?[0-9])$/;\nexports.msInOneWeek = 1000 * 60 * 60 * 24 * 7;\nexports.msInOneDay = 1000 * 60 * 60 * 24;\nexports.minutesInOneDay = 60 * 24;\nvar pad2 = function (number) { return (number < 10 ? \"0\".concat(number) : number); };\nexports.pad2 = pad2;\n// Allow global isNaN to check for Invalid Date object type\n// eslint-disable-next-line no-restricted-globals\nvar isDateObject = function (input) { return (input === null || input === void 0 ? void 0 : input.getDate) && !input.slice && !isNaN(input); };\nexports.isDateObject = isDateObject;\n// Get local datetime object from UTC-datetime string\nvar getLocalDate = function (dateString, inputIsUtc) {\n if (inputIsUtc === void 0) { inputIsUtc = true; }\n if (!dateString) {\n return null;\n }\n if ((0, exports.isDateObject)(dateString)) {\n return new Date(dateString.getTime()); // dateString is actually Date -> Make copy\n }\n if (dateString.toString() === 'Invalid Date') {\n return null;\n }\n if (!dateString.slice) { // dateString is object or function..\n // eslint-disable-next-line no-console\n console.warn('Date-util: Invalid date object', dateString);\n return null;\n }\n var timeZonestring = inputIsUtc ? 'Z' : '';\n var date;\n if (dateString.slice(-1).toLowerCase() === 'z' || dateString.slice(-6, -5) === '+') {\n // datestring already contains Timezone-info -> create Date object\n date = new Date(dateString);\n }\n else if (dateString.includes('T')) {\n // full date and time string date. Set UTC timezone\n date = new Date(\"\".concat(dateString).concat(timeZonestring));\n }\n else if (dateString.length === 10) { // yyyy-mm-dd\n // only date - Add timestamp and set UTC timezone\n date = new Date(\"\".concat(dateString, \"T00:00:00\").concat(timeZonestring));\n }\n else if (dateString.length >= 3 && dateString.length <= 5 && dateString.includes(':')) { //\n // only time - Add date and set UTC timezone\n var colonIndex = dateString.indexOf(':');\n var hour = Number(dateString.substring(0, colonIndex));\n var minute = Number(dateString.substring(colonIndex + 1));\n // const timeMatch = dateString.match(timestampRegex); // HH:MM - optional leading zero\n date = new Date(\"1970-01-01T\".concat((0, exports.pad2)(hour), \":\").concat((0, exports.pad2)(minute)).concat(timeZonestring));\n }\n else {\n // unknown format - trying to parse directly\n date = new Date(\"\".concat(dateString).concat(timeZonestring));\n }\n if (date && !date.getTime()) { // parsing has failed. invalid date\n // eslint-disable-next-line no-console\n console.warn('Date-util: Parsing datestring failed', dateString);\n return null;\n }\n return date;\n};\nexports.getLocalDate = getLocalDate;\nvar isoDateWithoutTimezone = function (date) { return \"\".concat(date.getFullYear(), \"-\").concat((0, exports.pad2)(date.getMonth() + 1), \"-\").concat((0, exports.pad2)(date.getDate())); };\nexports.isoDateWithoutTimezone = isoDateWithoutTimezone;\nvar isoDate = function (date) { var _a; return ((_a = (0, exports.getLocalDate)(date)) === null || _a === void 0 ? void 0 : _a.toISOString().substring(0, 10)) || ''; };\nexports.isoDate = isoDate;\nvar today = function (hour, minute, second) {\n if (hour === void 0) { hour = 0; }\n if (minute === void 0) { minute = 0; }\n if (second === void 0) { second = 0; }\n var d = new Date();\n d.setHours(hour, minute, second, 0);\n return d;\n};\nexports.today = today;\nvar tomorrow = function (hour, minute, second) {\n if (hour === void 0) { hour = 0; }\n if (minute === void 0) { minute = 0; }\n if (second === void 0) { second = 0; }\n var d = new Date();\n d.setHours(hour, minute, second, 0);\n d.setDate(d.getDate() + 1);\n return d;\n};\nexports.tomorrow = tomorrow;\nvar yesterday = function (hour, minute, second) {\n if (hour === void 0) { hour = 0; }\n if (minute === void 0) { minute = 0; }\n if (second === void 0) { second = 0; }\n var d = new Date();\n d.setHours(hour, minute, second, 0);\n d.setDate(d.getDate() - 1);\n return d;\n};\nexports.yesterday = yesterday;\nvar isSameDate = function (datetime1, datetime2) {\n if (!datetime1 || !datetime2)\n return false;\n var d1 = (0, exports.getLocalDate)(datetime1);\n var d2 = (0, exports.getLocalDate)(datetime2);\n return (d1 === null || d1 === void 0 ? void 0 : d1.toLocaleDateString()) === (d2 === null || d2 === void 0 ? void 0 : d2.toLocaleDateString());\n};\nexports.isSameDate = isSameDate;\nvar isToday = function (dateString) { return (0, exports.isSameDate)(dateString, (0, exports.today)()); };\nexports.isToday = isToday;\nvar isYesterday = function (dateString) { return (0, exports.isSameDate)(dateString, (0, exports.yesterday)()); };\nexports.isYesterday = isYesterday;\nvar isFuture = function (dateString, includeToday) {\n var date = (0, exports.getLocalDate)(dateString);\n if (!date) {\n return false;\n }\n if (includeToday) {\n return date.getTime() >= (0, exports.today)().getTime();\n }\n return date.getTime() > Date.now();\n};\nexports.isFuture = isFuture;\nvar addHours = function (initialDate, hours) {\n var date = initialDate ? new Date(initialDate) : new Date();\n date.setHours(date.getHours() + hours);\n return date;\n};\nexports.addHours = addHours;\nvar addDays = function (initialDate, days) {\n var date = initialDate ? new Date(initialDate) : new Date();\n date.setDate(date.getDate() + days);\n return date;\n};\nexports.addDays = addDays;\nvar addMonths = function (initialDate, months) {\n var date = initialDate ? new Date(initialDate) : new Date();\n date.setMonth(date.getMonth() + months);\n return date;\n};\nexports.addMonths = addMonths;\nvar fullDateTime = function (dateString) { var _a; return (_a = (0, exports.getLocalDate)(dateString)) === null || _a === void 0 ? void 0 : _a.toString(); };\nexports.fullDateTime = fullDateTime;\nvar timeOnly = function (dateOrString, translate) {\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return null;\n }\n return \"\".concat(translate ? \"\".concat(translate('time.at'), \" \") : '').concat((0, exports.pad2)(date.getHours()), \":\").concat((0, exports.pad2)(date.getMinutes()));\n};\nexports.timeOnly = timeOnly;\nvar getTimePartForInput = function (datetime, inputIsUtc) {\n var _a;\n if (inputIsUtc === void 0) { inputIsUtc = false; }\n if (!datetime) {\n return '';\n }\n if (datetime.length === 5 && datetime[2] === ':') {\n return datetime;\n }\n var date = (_a = (0, exports.getLocalDate)(datetime, inputIsUtc)) !== null && _a !== void 0 ? _a : new Date();\n return \"\".concat((0, exports.pad2)(date.getHours()), \":\").concat((0, exports.pad2)(date.getMinutes()));\n};\nexports.getTimePartForInput = getTimePartForInput;\nvar hasTime = function (dateOrString) {\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return false;\n }\n return date.getHours() !== 0 || date.getMinutes() !== 0;\n};\nexports.hasTime = hasTime;\nvar longTimestamp = function (dateOrString) {\n var d = dateOrString ? (0, exports.getLocalDate)(dateOrString) : new Date();\n if (!d)\n return '';\n return \"\".concat(d.getFullYear(), \"-\").concat((0, exports.pad2)(d.getMonth() + 1), \"-\").concat((0, exports.pad2)(d.getDate()), \" \").concat((0, exports.pad2)(d.getHours()), \":\").concat((0, exports.pad2)(d.getMinutes()), \":\").concat((0, exports.pad2)(d.getSeconds()));\n};\nexports.longTimestamp = longTimestamp;\n// Get date or time-string from UTC-datetime string\nvar timestamp = function (dateOrString, translate) {\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return null;\n }\n if ((0, exports.isToday)(date)) {\n if (translate && date.getHours() === 0 && date.getMinutes() === 0) {\n return translate('time.today');\n }\n return \"\".concat(translate ? translate('time.todayAt') : '', \" \").concat((0, exports.pad2)(date.getHours()), \":\").concat((0, exports.pad2)(date.getMinutes()));\n }\n if ((0, exports.isYesterday)(date)) {\n if (translate && date.getHours() === 0 && date.getMinutes() === 0) {\n return translate('time.yesterday');\n }\n return \"\".concat(translate ? translate('time.yesterdayAt') : \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1)), \" \").concat((0, exports.pad2)(date.getHours()), \":\").concat((0, exports.pad2)(date.getMinutes()));\n }\n if (date.getFullYear() === new Date().getFullYear()) {\n if (date.getHours() === 0 && date.getMinutes() === 0) {\n return \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1));\n }\n return \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1), \" \").concat(translate ? translate('time.at') : '', \" \").concat((0, exports.pad2)(date.getHours()), \":\").concat((0, exports.pad2)(date.getMinutes()));\n }\n if (date.getHours() === 0 && date.getMinutes() === 0) {\n return \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1), \".\").concat(date.getFullYear());\n }\n return \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1), \".\").concat(date.getFullYear(), \" \").concat(translate ? translate('time.at') : '', \" \").concat((0, exports.pad2)(date.getHours()), \":\").concat((0, exports.pad2)(date.getMinutes()));\n};\nexports.timestamp = timestamp;\nvar datestamp = function (dateOrString) {\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return '';\n }\n return \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1), \".\").concat(date.getFullYear());\n};\nexports.datestamp = datestamp;\nvar longDate = function (dateOrString, translate, alwaysIncludeYear) {\n if (alwaysIncludeYear === void 0) { alwaysIncludeYear = false; }\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return null;\n }\n var year = alwaysIncludeYear || date.getFullYear() !== new Date().getFullYear() ? \" \".concat(date.getFullYear()) : '';\n return \"\".concat(date.getDate(), \". \").concat(translate(\"time.months.\".concat(date.getMonth()))).concat(year);\n};\nexports.longDate = longDate;\nvar shortDate = function (dateOrString, translate, includeYear, withDayName, alwaysDate) {\n if (includeYear === void 0) { includeYear = false; }\n if (withDayName === void 0) { withDayName = false; }\n if (alwaysDate === void 0) { alwaysDate = false; }\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return null;\n }\n var year = includeYear ? \" \".concat(date.getFullYear()) : '';\n if (translate) {\n if (!alwaysDate) {\n if ((0, exports.isToday)(date)) {\n return translate('time.today');\n }\n if ((0, exports.isToday)((0, exports.addDays)(date, 1))) {\n return translate('time.yesterday');\n }\n if ((0, exports.isToday)((0, exports.addDays)(date, -1))) {\n return translate('time.tomorrow');\n }\n }\n var dayName = withDayName ? \"\".concat(translate(\"time.weekdays_short.\".concat(date.getDay())), \" \") : '';\n return \"\".concat(dayName).concat(date.getDate(), \". \").concat(translate(\"time.months_short.\".concat(date.getMonth()))).concat(year);\n }\n return \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1)).concat(year);\n};\nexports.shortDate = shortDate;\nvar mondayZeroIndex = function (n) { return (((n - 1) % 7) + 7) % 7; };\nexports.mondayZeroIndex = mondayZeroIndex;\nvar getTimeStringFromDayOfWeek = function (day) {\n var a = new Date();\n var dayOffset = (a.getDay() - day) * 1000 * 60 * 60 * 24 * -1;\n var d = new Date(a.getTime() + dayOffset);\n d.setHours(0, 0, 0, 0);\n return d.toISOString();\n};\nexports.getTimeStringFromDayOfWeek = getTimeStringFromDayOfWeek;\nvar dateWithOptionalTime = function (dateOrString) {\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return null;\n }\n if (date.getHours() === 0 && date.getMinutes() === 0) {\n return date.toLocaleDateString();\n }\n return date.toLocaleString().slice(0, -3);\n};\nexports.dateWithOptionalTime = dateWithOptionalTime;\nvar dateWithTimeIfToday = function (dateOrString) {\n var date = (0, exports.getLocalDate)(dateOrString);\n if (!date) {\n return null;\n }\n if ((0, exports.isToday)(date)) {\n return \"\".concat((0, exports.pad2)(date.getHours()), \":\").concat((0, exports.pad2)(date.getMinutes()));\n }\n return \"\".concat((0, exports.pad2)(date.getDate()), \".\").concat((0, exports.pad2)(date.getMonth() + 1), \".\").concat(date.getFullYear());\n};\nexports.dateWithTimeIfToday = dateWithTimeIfToday;\n// returns string to set in input type=date\nvar getTextfieldDateString = function (dateOrString) {\n var d = dateOrString ? (0, exports.getLocalDate)(dateOrString) : new Date();\n if (!d)\n return '';\n return \"\".concat(d.getFullYear(), \"-\").concat((0, exports.pad2)(d.getMonth() + 1), \"-\").concat((0, exports.pad2)(d.getDate()));\n};\nexports.getTextfieldDateString = getTextfieldDateString;\n// returns string to set in input type=datetime-local\nvar getTextfieldDateTimeString = function (dateOrString, setNoon) {\n if (setNoon === void 0) { setNoon = false; }\n var d = dateOrString ? (0, exports.getLocalDate)(dateOrString) : new Date();\n if (!d)\n return '';\n if (setNoon) {\n d.setHours(12, 0, 0, 0);\n }\n return \"\".concat(d.getFullYear(), \"-\").concat((0, exports.pad2)(d.getMonth() + 1), \"-\").concat((0, exports.pad2)(d.getDate()), \"T\").concat((0, exports.pad2)(d.getHours()), \":\").concat((0, exports.pad2)(d.getMinutes()));\n};\nexports.getTextfieldDateTimeString = getTextfieldDateTimeString;\n// returns string to save in database\nvar getDateTimeSaveString = function (date) {\n var d;\n if (!date) {\n return null;\n }\n if (date.length === 10) {\n d = new Date(\"\".concat(date, \"T00:00\"));\n }\n else {\n d = new Date(date);\n }\n return d.toISOString();\n};\nexports.getDateTimeSaveString = getDateTimeSaveString;\nvar getWeekNumberFromDate = function (dateIn) {\n var date = dateIn ? new Date(Date.UTC(dateIn.getFullYear(), dateIn.getMonth(), dateIn.getDate())) : new Date();\n // Thursday in current week decides the year.\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n // January 4 is always in week 1.\n var week1 = new Date(date.getFullYear(), 0, 4);\n // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + ((week1.getDay() + 6) % 7)) / 7);\n};\nexports.getWeekNumberFromDate = getWeekNumberFromDate;\nvar getWeekNumber = function (dateString) {\n var date = (0, exports.getLocalDate)(dateString);\n return (0, exports.getWeekNumberFromDate)(date);\n};\nexports.getWeekNumber = getWeekNumber;\nvar getNumberOfWeeks = function (startTime, endTime) {\n if (!startTime || !endTime) {\n return 0;\n }\n return Math.floor(Math.abs(new Date(startTime).getTime() - new Date(endTime).getTime()) / exports.msInOneWeek) || 0;\n};\nexports.getNumberOfWeeks = getNumberOfWeeks;\nvar getNumberOfWeeksCeiled = function (startTime, endTime) {\n if (!startTime || !endTime) {\n return 0;\n }\n return Math.ceil(Math.abs(new Date(startTime).getTime() - new Date(endTime).getTime()) / exports.msInOneWeek) || 0;\n};\nexports.getNumberOfWeeksCeiled = getNumberOfWeeksCeiled;\nvar getNumberOfDays = function (startTime, endTime) {\n if (!startTime || !endTime) {\n return 0;\n }\n return Math.floor(Math.abs(new Date(startTime).getTime() - new Date(endTime).getTime()) / exports.msInOneDay);\n};\nexports.getNumberOfDays = getNumberOfDays;\nvar getWeekStartDate = function (weekNumber, year) {\n var weekYear = year || new Date().getFullYear();\n var simple = new Date(weekYear, 0, 1 + (weekNumber - 1) * 7);\n var dow = simple.getDay();\n var ISOweekStart = simple;\n if (dow <= 4)\n ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);\n else\n ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());\n return ISOweekStart;\n};\nexports.getWeekStartDate = getWeekStartDate;\nvar getNumberOfSeconds = function (startTime, endTime) {\n if (!startTime || !endTime) {\n return 0;\n }\n return Math.floor(Math.abs(new Date(startTime).getTime() - new Date(endTime).getTime()) / 1000);\n};\nexports.getNumberOfSeconds = getNumberOfSeconds;\nvar getNumberOfMinutes = function (startTime, endTime) { return (0, exports.getNumberOfSeconds)(startTime, endTime) / 60; };\nexports.getNumberOfMinutes = getNumberOfMinutes;\nvar getDatePart = function (dateOrString) {\n var d = (0, exports.getLocalDate)(dateOrString);\n d === null || d === void 0 ? void 0 : d.setHours(0, 0, 0, 0);\n return d;\n};\nexports.getDatePart = getDatePart;\nvar compareDates = function (date, daysToAddForCompare) {\n if (daysToAddForCompare === void 0) { daysToAddForCompare = 0; }\n var date1 = (0, exports.getLocalDate)(date) || { getTime: function () { return 0; } };\n return date1.getTime() > (0, exports.addDays)(new Date(), daysToAddForCompare).getTime();\n};\nexports.compareDates = compareDates;\nvar getDateFormatted = function (dateOrString, translate) {\n var d = (0, exports.getLocalDate)(dateOrString);\n if (!d)\n return '';\n return \"\".concat(translate(\"calendar.shortMonth\".concat(d.getMonth() + 1)), \". \").concat(d.getDate());\n};\nexports.getDateFormatted = getDateFormatted;\nvar getMinsToMidnight = function () {\n var d = new Date();\n return (-d + d.setHours(24, 0, 0, 0)) / 6e4;\n};\nexports.getMinsToMidnight = getMinsToMidnight;\nvar getMillisecondsInADay = function () { return 1000 * 60 * 60 * 24; };\nexports.getMillisecondsInADay = getMillisecondsInADay;\nvar hourCount = function (minutes, translate, longLabels) {\n if (longLabels === void 0) { longLabels = false; }\n if (!(0, objectUtils_1.hasValue)(minutes) || Number.isNaN(minutes) || (minutes === null || minutes === void 0 ? void 0 : minutes.toString()) === 'NaN' || minutes === undefined)\n return '';\n var minLabel = translate ? translate(longLabels ? 'time.minutes' : 'time.minutesShort') : 'm';\n if (minutes < 60)\n return \"\".concat(Math.round(minutes % 60), \" \").concat(minLabel);\n var hours = Math.floor(minutes / 60);\n var hourLabel = translate ? translate(longLabels ? hours > 1 ? 'time.hours' : 'time.hour' : 'time.hoursShort') : 'h';\n if (minutes % 60 === 0)\n return \"\".concat(hours, \" \").concat(hourLabel);\n return \"\".concat(hours, \" \").concat(hourLabel, \" \").concat(Math.round(minutes % 60), \" \").concat(minLabel);\n};\nexports.hourCount = hourCount;\nvar getTimeValues = function (minutes) { return ({\n minutes: (minutes % 60) || 0,\n hours: Math.floor(minutes / 60) || 0,\n}); };\nexports.getTimeValues = getTimeValues;\nvar getWeek = function (startDate) {\n var start = startDate !== null && startDate !== void 0 ? startDate : new Date();\n start.setHours(0, 0, 0, 0);\n start.setDate(start.getDate() + (-start.getDay() + 1));\n var end = (0, exports.addDays)(start, 6);\n end.setHours(23, 59, 59);\n return {\n start: start,\n // lastDate: addDays(end, -1), // end is date after..\n end: end,\n weekNo: (0, exports.getWeekNumberFromDate)(start),\n };\n};\nexports.getWeek = getWeek;\nvar getAge = function (dateString) {\n if (!dateString)\n return null;\n var todayDate = new Date();\n var birthDate = (0, exports.getLocalDate)(dateString);\n if (!birthDate)\n return null;\n var age = todayDate.getFullYear() - birthDate.getFullYear();\n var m = todayDate.getMonth() - birthDate.getMonth();\n if (m < 0 || (m === 0 && todayDate.getDate() < birthDate.getDate())) {\n age -= 1;\n }\n return age;\n};\nexports.getAge = getAge;\nvar sortDatesByTimeInAscendingOrder = function (last, curr) {\n var result;\n result = last.getHours() > curr.getHours() ? 1 : last.getHours() < curr.getHours() ? -1 : 0;\n // Compares minutes if hours are identical.\n if (result === 0)\n result = last.getMinutes() > curr.getMinutes() ? 1 : last.getMinutes() < curr.getMinutes() ? -1 : 0;\n // Compares seconds if minutes are identical.\n if (result === 0)\n result = last.getSeconds() > curr.getSeconds() ? 1 : last.getSeconds() < curr.getSeconds() ? -1 : 0;\n return result;\n};\nexports.sortDatesByTimeInAscendingOrder = sortDatesByTimeInAscendingOrder;\nvar generateWeekAndYearKey = function (date) { var _a; return (0, exports.getLocalDate)(date) && \"\".concat((0, exports.getWeekNumberFromDate)((0, exports.getLocalDate)(date)), \"-\").concat((_a = (0, exports.getLocalDate)(date)) === null || _a === void 0 ? void 0 : _a.getFullYear()); };\nexports.generateWeekAndYearKey = generateWeekAndYearKey;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateAllOthersAreHiddenProperties = exports.getElementConditionState = exports.ANY_ANSWER_CONDITION = void 0;\nvar constants_1 = require(\"./constants\");\nvar objectUtils_1 = require(\"./objectUtils\");\nvar responseUtils_1 = require(\"./responseUtils\");\n// Needed in IMMG? Set in app-config?\nvar dontUseConditionsFromHiddenElements = false;\nexports.ANY_ANSWER_CONDITION = 'ANY_ANSWER_CONDITION';\nvar getQuestionInCondition = function (condition, currentTask, getProgramItem, getGetResponseFunc, currentElementId, parentElementId) {\n // If question in condition is in a different task than currentTask we get this task here\n var taskInCondition = condition.taskId === currentTask.id || !condition.taskId // No taskId = current Task\n ? currentTask\n : getProgramItem ? getProgramItem(condition.taskId) : null;\n if (taskInCondition) {\n if (dontUseConditionsFromHiddenElements) {\n var elementInCondition = taskInCondition.contentElements\n .find(function (element) { var _a; return (_a = element.questions) === null || _a === void 0 ? void 0 : _a.find(function (question) { return question.id === condition.questionId; }); });\n if (elementInCondition && elementInCondition.id !== currentElementId && elementInCondition.id !== parentElementId) {\n // Dont include condition if elementInCondition is hidden\n // elementInCondition.id !== currentElementId\n // - don't check state if elementInCondition is same as currentElement -> Will get recursive loop..\n // elementInCondition.id !== parentElementId\n // - don't check state if elementInCondition is same as parentElement (looped conditions - exist in ADHD program..)\n // TODO - fix this.. Rewrite show/hide logic. Use separate label-logic for accepted/rejected/...\n // eslint-disable-next-line no-use-before-define\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n var conditionForElementInCondition = (0, exports.getElementConditionState)(elementInCondition, getGetResponseFunc, taskInCondition, getProgramItem, currentElementId);\n if ((conditionForElementInCondition === null || conditionForElementInCondition === void 0 ? void 0 : conditionForElementInCondition.state) === constants_1.elementConditionStates.hidden) {\n return null;\n }\n }\n }\n return taskInCondition.contentElements.reduce(function (prev, curr) {\n var _a;\n return (prev != null ? prev : ((_a = curr.questions) === null || _a === void 0 ? void 0 : _a.find(function (question) { return question.id === condition.questionId; })) || null);\n }, null);\n }\n return null;\n};\nvar meetsConditionForQuestion = function (condition, questionResponse, currentTask, getProgramItem, getGetResponseFunc, currentElementId, parentElementId) {\n var _a, _b, _c, _d, _e, _f;\n var questionInCondition = getQuestionInCondition(condition, currentTask, getProgramItem, getGetResponseFunc, currentElementId, parentElementId);\n // If condition is a multiple- action or single choice question with no expected answers,\n // return true if no answers has been chosen for the question in the condition\n if (condition.questionId && !condition.expectedAnswers) {\n if (!questionInCondition)\n return false;\n if (questionInCondition.type === constants_1.formAnswerTypes.multipleChoice\n || questionInCondition.type === constants_1.formAnswerTypes.singleChoice) {\n return !((_b = (_a = questionResponse === null || questionResponse === void 0 ? void 0 : questionResponse.response) === null || _a === void 0 ? void 0 : _a.choiceResponse) === null || _b === void 0 ? void 0 : _b.length);\n }\n }\n if (!questionResponse) {\n // If question in the condition is one of the following:\n // - A switch toggle question\n // - An action question with toggle\n // - A scale/action scale\n // and the condition is \"inactive\" (for toggle questions) and \"min = 0\" for scale questions,\n // and we don't have a response for the question we return true.\n // Toggle is false = condition is met.\n // Scale is 0 = condition is met.\n // User has to toggle question on and off for questionResponse to be set.\n // User has to explicitly set scale to 0 for questionResponse to be set.\n if (questionInCondition) {\n if (questionInCondition.type === constants_1.formAnswerTypes.switch) {\n return (condition === null || condition === void 0 ? void 0 : condition.scoreMin) === 0 && (condition === null || condition === void 0 ? void 0 : condition.scoreMax) === 0;\n }\n if (questionInCondition.type === constants_1.formAnswerTypes.action) {\n return (condition === null || condition === void 0 ? void 0 : condition.scoreMin) === 0 && (condition === null || condition === void 0 ? void 0 : condition.scoreMax) === 0;\n }\n if (questionInCondition.type === constants_1.formAnswerTypes.scale) {\n return (condition === null || condition === void 0 ? void 0 : condition.scoreMin) === 0;\n }\n }\n return false;\n }\n if (condition.expectedAnswers != null && condition.expectedAnswers.length > 0) {\n // If question in condition is hidden questionInCondition will be null and we return false.\n if (questionInCondition) {\n if (condition.expectedAnswers.length === 1 && condition.expectedAnswers[0] === exports.ANY_ANSWER_CONDITION) {\n return Boolean(((_d = (_c = questionResponse.response) === null || _c === void 0 ? void 0 : _c.choiceResponse) === null || _d === void 0 ? void 0 : _d.length) && questionResponse.response.choiceResponse.length > 0);\n }\n return ((_f = (_e = questionResponse.response) === null || _e === void 0 ? void 0 : _e.choiceResponse) === null || _f === void 0 ? void 0 : _f.some(function (c) { return condition.expectedAnswers.filter(function (d) { return d === (c === null || c === void 0 ? void 0 : c.value); }).length > 0; })) || false;\n }\n return false;\n }\n if ((0, objectUtils_1.hasValue)(condition.scoreMin) || (0, objectUtils_1.hasValue)(condition.scoreMax)) {\n var score = (0, responseUtils_1.calculateResponseScore)(questionResponse.response);\n return ((0, objectUtils_1.isEmpty)(condition.scoreMin) || (score >= (condition.scoreMin || 0)))\n && ((0, objectUtils_1.isEmpty)(condition.scoreMax) || (score <= (condition.scoreMax || 0)));\n }\n return true;\n};\nvar meetsCondition = function (condition, responsesForTaskInCondition, currentTask, getProgramItem, getResponses, currentElementId, parentElementId) {\n var _a;\n if (condition.questionId) {\n var responseForQuestion = responsesForTaskInCondition && responsesForTaskInCondition[condition.questionId];\n return meetsConditionForQuestion(condition, responseForQuestion, currentTask, getProgramItem, getResponses, currentElementId, parentElementId);\n }\n if (condition.subtotalId) {\n var responseForSubtotal = responsesForTaskInCondition && responsesForTaskInCondition[condition.subtotalId];\n return meetsConditionForQuestion(condition, responseForSubtotal, currentTask, getProgramItem, getResponses, currentElementId, parentElementId);\n }\n if (condition.moduleSubtotalId) {\n var responsesForModuleSubtotal = ((_a = getResponses(null, condition.moduleSubtotalId)) === null || _a === void 0 ? void 0 : _a[condition.moduleSubtotalId]) || null;\n return meetsConditionForQuestion(condition, responsesForModuleSubtotal, currentTask, getProgramItem, getResponses, currentElementId, parentElementId);\n }\n if (condition.ifAllOthersAreHidden) {\n return condition.allOthersAreHidden || false;\n }\n // Condition is met if any respons on task\n return (0, objectUtils_1.hasValue)(responsesForTaskInCondition);\n};\nvar checkConditions = function (elementState, getResponses, currentTask, getProgramItem, currentElementId, parentElementId) {\n var _a;\n if (!((_a = elementState.conditions) === null || _a === void 0 ? void 0 : _a.length)) {\n return true; // default true if no conditions\n }\n var check = elementState.conditions.reduce(function (prev, curr) {\n if (!prev) {\n // all conditions must be satisfied, no need to check the rest..\n return false;\n }\n // if no taskId is specified, assume current task\n // Note: value searchInAllResponses=true is needed in order to check conditions from other patientprogramelements.\n var responsesForTaskInCondition = getResponses(curr.taskId || currentTask.id, null, true);\n return meetsCondition(curr, responsesForTaskInCondition, currentTask, getProgramItem, getResponses, currentElementId, parentElementId);\n }, true);\n return check;\n};\nvar getElementConditionState = function (element, getGetResponseFunc, currentTask, getProgramItem, parentElementId) {\n var _a;\n var state = (_a = element === null || element === void 0 ? void 0 : element.elementStates) === null || _a === void 0 ? void 0 : _a.reduce(function (prev, curr) {\n if (prev) {\n return prev;\n } // returns first condition that matches\n var isMet = checkConditions(curr, getGetResponseFunc, currentTask, getProgramItem, element.id, parentElementId);\n return isMet ? curr : null;\n }, null);\n return state || null;\n};\nexports.getElementConditionState = getElementConditionState;\nvar updateAllOthersAreHiddenProperties = function (currentTask, getGetResponseFunc, getProgramItem) {\n var _a;\n if (!getGetResponseFunc) {\n return;\n }\n // Get elements with an element state which has a condition with ifAllOthersAreHidden === true\n var elementsWithAllOthersAreHiddenCondition = (_a = currentTask.contentElements) === null || _a === void 0 ? void 0 : _a.filter(function (e) { var _a; return (_a = e.elementStates) === null || _a === void 0 ? void 0 : _a.some(function (s) { var _a; return (_a = s === null || s === void 0 ? void 0 : s.conditions) === null || _a === void 0 ? void 0 : _a.some(function (c) { return c.ifAllOthersAreHidden; }); }); });\n if (elementsWithAllOthersAreHiddenCondition) {\n elementsWithAllOthersAreHiddenCondition.forEach(function (element) {\n var _a, _b, _c;\n // Get the elementState which contains a condition with ifAllOthersAreHidden === true\n var elementState = (_a = element.elementStates) === null || _a === void 0 ? void 0 : _a.find(function (state) { var _a; return (_a = state === null || state === void 0 ? void 0 : state.conditions) === null || _a === void 0 ? void 0 : _a.some(function (c) { return c.ifAllOthersAreHidden; }); });\n // Get the condition with ifAllOthersAreHidden === true\n var condition = (_b = elementState === null || elementState === void 0 ? void 0 : elementState.conditions) === null || _b === void 0 ? void 0 : _b.find(function (c) { return c.ifAllOthersAreHidden; });\n // The condition could be \"if all elements are hidden in another task than the current task\"\n // so we get the task in the condition\n var taskInCondition = (condition === null || condition === void 0 ? void 0 : condition.taskId) === currentTask.id\n ? currentTask\n : getProgramItem ? getProgramItem(condition === null || condition === void 0 ? void 0 : condition.taskId) : null;\n // Get all elements in the task in the condition wich do not have a ifAllOthersAreHidden condition\n var allOtherElements = (_c = taskInCondition === null || taskInCondition === void 0 ? void 0 : taskInCondition.contentElements) === null || _c === void 0 ? void 0 : _c.filter(function (e) { var _a; return !((_a = e.elementStates) === null || _a === void 0 ? void 0 : _a.some(function (s) { var _a; return (_a = s === null || s === void 0 ? void 0 : s.conditions) === null || _a === void 0 ? void 0 : _a.some(function (c) { return c.ifAllOthersAreHidden; }); })); });\n if (condition) {\n if (allOtherElements === null || allOtherElements === void 0 ? void 0 : allOtherElements.every(function (e) { var _a; return ((_a = (0, exports.getElementConditionState)(e, getGetResponseFunc, currentTask, getProgramItem)) === null || _a === void 0 ? void 0 : _a.state) === constants_1.elementConditionStates.hidden; })) {\n // All other elements are currently hidden\n condition.allOthersAreHidden = true;\n }\n else {\n // All other elements are currently not hidden\n condition.allOthersAreHidden = false;\n }\n }\n });\n }\n};\nexports.updateAllOthersAreHiddenProperties = updateAllOthersAreHiddenProperties;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerCatchAll = exports.sendError = void 0;\nvar apiUrls_1 = __importDefault(require(\"./apiUrls\"));\nvar Cookie_1 = __importStar(require(\"./Cookie\"));\nvar logToConsole = function (message) {\n /* eslint-disable no-console */\n if (console && console.warn) {\n console.warn(message);\n }\n /* eslint-enable no-console */\n};\nvar sendError = function (error) {\n var _a;\n if (window === null || window === void 0 ? void 0 : window.XMLHttpRequest) {\n var apiBaseUrl = (_a = document.getElementById('react-app')) === null || _a === void 0 ? void 0 : _a.getAttribute('data-api-url');\n try {\n var xhr = new XMLHttpRequest();\n xhr.open('POST', \"\".concat(apiBaseUrl, \"/\").concat(apiUrls_1.default.admin.log, \"/error\"));\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('X-CSRF-TOKEN', Cookie_1.default.getValue(Cookie_1.CookieNames.csrf));\n xhr.send(JSON.stringify(error));\n }\n catch (_b) {\n logToConsole('An error occured. Logging to server failed..');\n }\n }\n else {\n logToConsole('An error occured. Logging to server unavailable..');\n }\n};\nexports.sendError = sendError;\nvar registerCatchAll = function () {\n window.onerror = function (msg, url, line, col, error) {\n if (msg.toString().toLowerCase().indexOf('script error') > -1) {\n // console.log('script error..', [msg, url, line, col, error]);\n // no details available for script errors\n }\n else {\n // i.e. network errors\n (0, exports.sendError)({\n sender: 'CatchAll',\n error: msg.toString(),\n info: \"Url: \".concat(url, \", Line: \").concat(line, \", Col: \").concat(col, \", Error: \").concat(error),\n });\n }\n return false;\n };\n};\nexports.registerCatchAll = registerCatchAll;\n","import Cookie, { CookieNames } from './Cookie';\nimport apiUrls from './apiUrls';\nimport { hasValue } from './objectUtils';\nimport { isDateObject, longTimestamp } from './dateUtils';\nimport Auth from './Auth';\n\nconst HTTP_STATUS_CODES = {\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n TooManyRequests: 429,\n};\n\nconst YOUWELL_ERROR_CODES = {\n ElementNotFound: 1078,\n UnknownError: 901,\n NoInternetConnection: 920,\n};\n\nexport const VERSION_EXPIRED = 'APP/VERSION_EXPIRED';\nexport const PAGE_NOTFOUND = 'APP/PAGE_NOTFOUND';\n\nconst appSettings = {\n version: '',\n appId: '',\n};\n\nexport const setAppVersion = (version) => {\n appSettings.version = version;\n};\n\nexport const setAppId = (appId) => {\n appSettings.appId = appId;\n};\n\nclass FetchError extends Error {\n constructor(url, status, data) {\n super(data);\n this.url = url;\n this.status = status;\n\n if (!data) {\n this.errorCode = status;\n } else {\n try {\n const json = JSON.parse(data);\n this.errorCode = json.errorCode;\n } catch (e) {\n this.errorCode = status;\n }\n }\n }\n}\n\nexport const handleErrors = dispatch => (response) => {\n if (!response.ok) {\n return response.text().then(data => Promise.reject(new FetchError(response.url, response.status, data)));\n }\n\n if (dispatch) {\n const version = response && response.headers && response.headers.get('X-Portal-Version');\n if (version && version !== appSettings.version) {\n dispatch({ type: VERSION_EXPIRED, previous: appSettings.version, newAvailableVersion: version });\n }\n }\n return Promise.resolve(response);\n};\n\nexport const json = response => (response.status === 204 ? response.text() : response.json());\n\nexport const text = response => response.text();\n\nexport const blob = (response) => {\n const disposition = response.headers.get('content-disposition');\n const contentType = response.headers.get('content-type');\n const filenameValues = disposition && disposition.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/);\n const filename = filenameValues && filenameValues[1];\n\n return response.blob().then(blobData => Promise.resolve({ blobData, filename, contentType }));\n};\n\nexport const jsonHeader = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n};\n\nexport const createRequestParams = (requestParamsObject) => {\n if (!hasValue(requestParamsObject)) {\n return '';\n }\n\n return Object.keys(requestParamsObject).reduce((prev, key) => (hasValue(requestParamsObject[key]) ? `${prev || '?'}${key}=${requestParamsObject[key]}&` : prev), '');\n};\n\nexport const getErrorMessageOrKey = (error) => {\n if (!error) {\n return YOUWELL_ERROR_CODES.UnknownError;\n }\n if (error.message === 'Failed to fetch'\n || error.message?.includes('Physical connection is not usable')\n || error.message?.includes('The server was not found or was not accessible')) {\n return YOUWELL_ERROR_CODES.NoInternetConnection;\n }\n\n return error instanceof Error ? (error.errorCode && error.errorCode.toString()) || error.message || '903' : '902';\n};\n\nexport const dispatchError = (dispatch, type, options, requestId, error, onUnauthorized) => {\n const err = error?.error || error?.errorCode;\n // type is always `${storePrefix}/${REQUEST_FAILED}`\n\n if (err === HTTP_STATUS_CODES.Unauthorized) {\n dispatch({\n type, options, requestId, error: null,\n });\n if (onUnauthorized) {\n onUnauthorized();\n }\n } else if (err === HTTP_STATUS_CODES.TooManyRequests) {\n dispatch({\n type, options, requestId, error: '921',\n });\n } else if (options?.isPage && (err === YOUWELL_ERROR_CODES.ElementNotFound || err === HTTP_STATUS_CODES.NotFound)) {\n dispatch({\n type, options, requestId, error: null,\n });\n dispatch({ type: PAGE_NOTFOUND });\n } else {\n const errorMessageKey = getErrorMessageOrKey(error);\n\n dispatch({\n type, options, requestId, error: errorMessageKey,\n });\n }\n};\n\nexport const downloadBlobAsFile = (filename, contentType, blobData) => {\n // It is necessary to create a new blob object with mime-type explicitly set\n // otherwise only Chrome works like it should\n const newBlob = new Blob([blobData], { type: contentType });\n\n let downloadFileName = filename?.replace('{timestamp}', longTimestamp()) || 'donwloaded file.t';\n\n if (contentType?.toLowerCase().indexOf('application/zip') > -1) {\n downloadFileName += '.zip';\n }\n\n // IE doesn't allow using a blob object directly as link href\n // instead it is necessary to use msSaveOrOpenBlob\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(newBlob, downloadFileName);\n return;\n }\n\n // For other browsers:\n // Create a link pointing to the ObjectURL containing the blob.\n const data = window.URL.createObjectURL(newBlob);\n const link = document.createElement('a');\n link.href = data;\n link.download = downloadFileName;\n link.click();\n setTimeout(() => {\n // For Firefox it is necessary to delay revoking the ObjectURL\n window.URL.revokeObjectURL(data);\n }, 100);\n};\n\n// This prevents multiple simultaneous calls to `/refreshToken`\nlet refreshPromise = null;\nconst withRefreshToken = async (fetch, refreshUrl) => {\n if (refreshPromise == null) {\n refreshPromise = fetch(`${apiUrls.baseUrl}/${refreshUrl}`, {\n headers: jsonHeader,\n method: 'POST',\n });\n }\n const result = await refreshPromise;\n if (!result.ok) {\n Auth.deauthenticateUser();\n }\n refreshPromise = null;\n return result;\n};\n\nconst fetchWithDefaults = async (url, { headers, ...options }) => fetch(url, {\n headers: {\n // ...jsonHeader, // not applicable for file-downloads.. Must override in ReduxStoreHelper.fetchFile if set here!\n ...headers,\n 'X-APP-ID': appSettings.appId,\n 'X-CSRF-TOKEN': Cookie.getValue(CookieNames.csrf),\n },\n credentials: 'include',\n method: 'GET',\n ...options,\n});\n\n// Obsolete - used by old redux-stores (ReduxStoreHelper) - use youwellFetch for new code\nexport const fetchWithRefresh = async (dispatch, url, options) => {\n const response = await fetchWithDefaults(url, options);\n\n if (response.status === HTTP_STATUS_CODES.Unauthorized) {\n if (response.headers.has('X-REFRESH-TOKEN')) {\n const refresh = await withRefreshToken(fetchWithDefaults, response.headers.get('X-REFRESH-TOKEN'));\n\n if (refresh.ok) {\n return fetchWithDefaults(url, options);\n }\n }\n }\n return response;\n};\n\nexport const youwellFetch = async (url, options) => {\n const response = await fetchWithDefaults(url, options || {});\n\n if (response.status === HTTP_STATUS_CODES.Unauthorized) {\n if (response.headers.has('X-REFRESH-TOKEN')) {\n const refresh = await withRefreshToken(fetchWithDefaults, response.headers.get('X-REFRESH-TOKEN'));\n\n if (refresh.ok) {\n return fetchWithDefaults(url, options || {});\n }\n }\n }\n return response;\n};\n\n\nconst stringValue = (object) => {\n if (isDateObject(object)) {\n return object.toISOString();\n }\n return object;\n};\n\nexport const mapToQueryString = requestParams => (requestParams\n ? Object.keys(requestParams).reduce((prev, key) => (hasValue(requestParams[key]) ? `${prev || '?'}${key}=${stringValue(requestParams[key])}&` : prev), '')\n : '');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.en = exports.no = exports.us = void 0;\nexports.us = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAWCAYAAAChWZ5EAAABT0lEQVRIS2PMFlaJ3SwbPO8dqwgLAwgwM4Ephr//IDQRfCYONobqI7kQ9cSDl///M6QyyhmU/37LKAixnEzAyM7KUHummBzdLxl5TLv////zl2HnvBQGRkYGhpiGC2CDFtcbEM1nZmNhODXXgiQHTJm3FKwe7oBd81MYGBkYGKKhDljSYEA0n5mVheHUPHIdYNH7///P3wxi8iYk+xzmZVZudoZtpyJJCoG1959AQwDNAaT4HGYjGzc7w1ayHTCaBkbTwGgaQEsDJGVmqGKKygE+h8n///34xSAhZ8zA8J+BgYmNGVwC/v39l2g+Oy8Hw/q9gSS5HV4QNU2c+5+dnY0hNTqUJAMoVQyvCwbcAZ0soIBnYAhWlKHUUyTph0fBgDtgwKNgwB3QycLwgoGBQZykCKSe4meMHcwMvoyMDHMYGBjEqGcuUSY9+/+fIQMA7YEh8yRPGe0AAAAASUVORK5CYII=';\nexports.no = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAzUlEQVRIS2Ocyszg+5+RYTYDA4M4AxbwrncuWHTSitsosnkRqmC+UHEyNm3EiL1k/M+QyjiFheEFLstBptDQASDjX4Ic8B/ECmVjwepqtucfweIGaftR5C/McgTzf0nyE+NbDDWrf/0Bi406YDQEBj4EmibOBeeC3IQIvKkZVy4gKwswMDBMXrACkgsG3AEilhXgEOCWsyHXM2Tp+/roCCQERh0w4CEw4IlwwB0wWhuOhsBoCAxoo/Q/wzNGaLN8DgMDgxhdm+UgyxkYMgAjmNy/ZTS38QAAAABJRU5ErkJggg==';\nexports.en = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAG70lEQVRYR+2Xe1BU9R7AP2d32WV5LAihSOADUUADbjrKJavR0SvqVOggWr5Kr4boTXwNamVkTVpcGB9dKjVresxV6uarUpTCxuZGt7naFUUPig9YDJV4wy7LPs6d3zlbSFM3/KPrP31nds45u7/v9/c53+dvJe6wSHd4f34HEB7QAybv9f8ZETfgEAB9Gt77oLHP7HQknQ5Zvk5BQTFW600v161MQkdPcXE2l6c8hmQQ7KC43UQf3sPkydsAJ+DzkxdxEBkzgJULRhN+ZB/NZd8QMnsWIXMzQgTAoOops64EzssgcPJEDH2CsNudlJaeo6LiGqDzfoRNDSAnZxI3/1qIpBe/geJR6LtmKXl5xwAXYPACeNTriJGDeHCgGc+J4zi73FimTMI4KApJkgYLgFjrP7+VgyrLaa+qJnjGNMz3JqiKp07VcPDgKdrabUiKD4rkRkJPQUEG363OBYMBFAU8HiLyn2fVqg+RBIAkAJz4Bwcxbeo9DG+5SvPhY/iMGE6fGWnoAgNoaLRxV6h/nAqQMW+3nLvmT0Rf/pbGki/wu38swemPIBl9uFnfRtHefyHLtV5PGCgsnE3tX9Yh6bU3FSGI/Ntmli37uzcEEJs0hJljI/D/rJiWi1cISp9G4Pix6vrz5+vYsuUYu3Y9oQGMHbtJHp0czR8fiGNquAv73iJcgRZC58/GNDQaj6Jw6OB/OHTo34CRt956HOvCFd054HET9eZWFi58B3QuHp6eTGpQO21FH+IJ66faMQ6KxOn2sP+jk5SVVVFVVc8nn2RrAMnJm+WEhP60trYxLCmGrLQ4/PftpensefrMm0PQQ5NU8pMnr5KXV0JR0WKqH80EbxLidjNwzw5mzdrFyuzxJF78mvrDxQSmTiFk/qPquhs32igs/JzKSisWi4Xa2haRzBrAqFHPyzExfWlv7xSVgTkojCVPJPOH2tO0fLQf/5QUQhfNx9Av7MfsvvLQHPDxJpvLzeCP38f9fQMNm/LpqLYSlpVJwMQHcHkUTnxRyY4dx+noaFU9GBDgS319C6Wl6zWApKRcOSIimI6Orh7lk7NuKpNi/LBXVWEaGoNP5N3ofEXLgEvjpiN5ARS3iyGl+3FcuoLjUhV+947EEBaqrvv0yFnyXi7uYdff30hzcydlZWs1AEVR5NvtQBfGpCLpu/vAsG+O3q4JUYYawPnYFFnyM6N0OjQjkqSV1w/3t5oW30sSko+32XifFZerW+eXUH7QNRnB6SLu7AkvwLD7ZNFvFKfoYr0UAflTsN6qCni9nviKLzWAc0PGyJ72jtsD6OVmP7dMeE8fFEj8ha81gPLwOJl2O6obeyV6dL5G70rNEx41fKJV/7pIBgNSYAAJdRUagNvtlnU6ra/3VsrNA37MAwGeaKvuraoG7PGg1+s1gOCgp+QuJ3R19fTAzjfnsuDx+1QFxemi87woFh3mxOGUG+9GMmpeELmT6BCtGjwdNjWZHTXV+EZF8c6nlTy56P0ecEajAaNRorl5uwbg758pK4oOh0MAdGE0+rJ58wwyl4zD12Sg7bMvqV60DD+LH4OOHUAXHk65T4Q6K1DELHCR6BCTU5Ouy1exZq/HVnqcuzZu4IAlkbVP78PW3KiOeJPJgF6v0Nb2hgZgMmXKer0Bu72F2NiBvPvunxk9erBq7MamLdQ9u4EBs9I5PXMpE9LfxuN5g9P6/hqA8IDLRZLzO3S6JZSUZDNhQrw6Ies25nH9xReImp5GzdK1LHiuhDNl5ZjNFjweF52dOzUAg2GBbDTqSEsbw9Zts+kbFkDXVSvW5Tk4io8SuSmXPcGjWJWzF1uTE0XZwWldeE8AVx2SlInJ1EVe3lyWL5+gwrUcLMa6bCUBZh+Mefk8c7yFD3Z/jtPZhdP5tgZgsSyW8/Pnsnjxg6pS8z8+pubJpwgOD0H30is8XdLIe6+LdipC5Pc/AcAmOhkZGSls3z6H8HALrvoGrFmrsB04RNSLz7A/8n5Wry+i4dpWDeCrr87JKSnx0OnAumYDTYWvM2BFFifHzWTZC0epPCWSz+yd9cZfARDlKOaFjejoCF57bT6pqSPUF/u+cDfXVq0j4uGJnJuxgHGPpWoATU1NsslahzVrJbraGkJefolt1QFsLziCu9OuTjBveqn3ra3bOBMU0yMECU0XsViy1WmqAQhxIso7K2s8z+U+gtnXB/vpCmoyV9B2oYrRTVdVgJiLBYUXr2/cRED8UOxrnmX1zlOUlZz0bnxrf9AOnI2NWzgbGtsD4J56mZCQlWoVdQOrhalCjRwZw6uvziE+vj8em5263FdI2L19qADoB4hDYPew71G1v9lDPXBGAAh/Bf7MGfw329lrWMSq7fe/ZnfcA/8FQrvAmhBApt4AAAAASUVORK5CYII=';\nexports.default = { no: exports.no, us: exports.us, en: exports.en };\n","\"use strict\";\n// Logic adapted from CKEditor\n// https://github.com/ckeditor/ckeditor5-media-embed\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getVideos = exports.textpart = exports.stripHtml = exports.findImageUrls = exports.findImageUrl = exports.isEmptyHtml = exports.replaceEmbedContent = exports.changeUrlForImages = exports.detectPattern = void 0;\nvar apiUrls_1 = __importDefault(require(\"./apiUrls\"));\n// const oembedRegex = /<\\/oembed>/g;\nvar oembedRegex = /<\\/oembed>/g;\nvar urlRegex = /url=\"([^\"]*)\".*?/;\nvar figureRegex = /<\\/figure>/g;\nvar imgRegex = /
/g;\nvar srcRegex = /src=\"([^\"]*)\".*?/;\nvar internalLinkRegex = /]*>(.*?)<\\/a>/g;\nvar stringVariableRegex = /{{(.*?)}}/g;\nvar elementIdRegex = /data-elementid=\"([^\"]*)\".*?/;\nvar tableFigureRegex = /]+class=\"table.*?><\\/figure>/g;\nvar tableRegex = //g;\nvar firstStyleWidthRegex = /style=\"[^\"]*width:([^;]*);\"/;\nvar styleRegex = /style=\"([^\"]*)\"/;\nvar videoProviders = [\n {\n name: 'dailymotion',\n url: /^dailymotion\\.com\\/video\\/(\\w+)/,\n html: function (url) { return ''\n + \"'\n + '
'; },\n },\n {\n name: 'youtube',\n url: [\n /^youtube\\.com\\/watch\\?v=([\\w-]+)/,\n /^youtube\\.com\\/v\\/([\\w-]+)/,\n /^youtube\\.com\\/embed\\/([\\w-]+)/,\n /^youtu\\.be\\/([\\w-]+)/,\n ],\n html: function (url) { return ''\n + \"'\n + '
'; },\n },\n {\n name: 'vimeo',\n url: [\n /^vimeo\\.com\\/(\\d+)/,\n /^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,\n /^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,\n /^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,\n /^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,\n /^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,\n /^player\\.vimeo\\.com\\/video\\/(\\d+)/,\n ],\n html: function (url) { return ''\n + \"'\n + '
'; },\n },\n {\n name: 'matterport',\n url: /my\\.matterport\\.com\\/show\\/\\?m=(\\w+)/,\n html: function (url) { return ''\n + \"'\n + '
'; },\n },\n // {\n // name: 'spotify',\n // url: [\n // /^open\\.spotify\\.com\\/(artist\\/\\w+)/,\n // /^open\\.spotify\\.com\\/(album\\/\\w+)/,\n // /^open\\.spotify\\.com\\/(track\\/\\w+)/,\n // ],\n // html: url => ''\n // + `'\n // + '
'\n // ,\n // },\n // {\n // name: 'instagram',\n // url: /^instagram\\.com\\/p\\/(\\w+)/,\n // },\n // {\n // name: 'twitter',\n // url: /^twitter\\.com/,\n // },\n // {\n // name: 'googleMaps',\n // url: /^google\\.com\\/maps/,\n // },\n // {\n // name: 'flickr',\n // url: /^flickr\\.com/,\n // },\n // {\n // name: 'facebook',\n // url: /^facebook\\.com/,\n // },\n];\n/**\n * Tries to match `url` to `pattern`.\n *\n * @param {String} url The URL of the media.\n * @param {RegExp} pattern The pattern that should accept the media URL.\n * @returns {Array|null}\n */\nvar getUrlMatches = function (url, pattern) {\n // 1. Try to match without stripping the protocol and \"www\" subdomain.\n var match = url.match(pattern);\n if (match) {\n return match;\n }\n // 2. Try to match after stripping the protocol.\n var rawUrl = url.replace(/^https?:\\/\\//, '');\n match = rawUrl.match(pattern);\n if (match) {\n return match;\n }\n // 3. Try to match after stripping the \"www\" subdomain.\n rawUrl = rawUrl.replace(/^www\\./, '');\n match = rawUrl.match(pattern);\n if (match) {\n return match;\n }\n return null;\n};\nvar detectPattern = function (patterns, url) {\n for (var i = 0; i < patterns.length; i++) {\n var match = getUrlMatches(url, patterns[i]);\n if (match) {\n return match;\n }\n }\n return null;\n};\nexports.detectPattern = detectPattern;\nvar replaceVideo = function (html) {\n var match = html.match(oembedRegex);\n if (!match) {\n return html;\n }\n var replaced = html;\n for (var m = 0; m < match.length; m++) {\n var urlMatch = match[m].match(urlRegex);\n var url = urlMatch === null || urlMatch === void 0 ? void 0 : urlMatch[1].trim();\n if (url) {\n for (var i = 0; i < videoProviders.length; i++) {\n var pattern = videoProviders[i].url;\n if (!Array.isArray(pattern)) {\n pattern = [pattern];\n }\n var patternMatch = (0, exports.detectPattern)(pattern, url);\n if (patternMatch === null || patternMatch === void 0 ? void 0 : patternMatch[1]) {\n replaced = replaced.replace(match[m], videoProviders[i].html(patternMatch[1]));\n }\n }\n }\n }\n return replaced;\n};\nvar addNoContextMenu = function (html) {\n var match = html.match(imgRegex);\n if (!match) {\n return html;\n }\n var replaced = html;\n for (var m = 0; m < match.length; m++) {\n var withNoContext = match[m].replace('
-1 ? '&' : '?';\n var withAppId = match[m].replace(urlMatch[1], \"\".concat(urlMatch[1]).concat(ampOrQuestion, \"xAppId=\").concat(appId));\n replaced = replaced.replace(match[m], withAppId);\n }\n }\n return replaced;\n};\nvar changeUrlForImages = function (html) {\n var match = html.match(imgRegex);\n if (!match) {\n return html;\n }\n var replaced = html;\n for (var m = 0; m < match.length; m++) {\n var urlMatch = match[m].match(srcRegex);\n if (urlMatch === null || urlMatch === void 0 ? void 0 : urlMatch[1]) {\n var withImageDomain = match[m].replace(\"\".concat(apiUrls_1.default.contentBaseUrl, \"/\").concat(apiUrls_1.default.media.file, \"/\"), \"\".concat(apiUrls_1.default.imageContentBaseUrl, \"/\"));\n replaced = replaced.replace(match[m], withImageDomain);\n }\n }\n return replaced;\n};\nexports.changeUrlForImages = changeUrlForImages;\nvar fixTableWidthLayout = function (html) {\n var match = html.match(tableFigureRegex);\n if (!match) {\n return html;\n }\n var replaced = html;\n for (var m = 0; m < match.length; m++) {\n var figureStyleMatch = match[m].match(firstStyleWidthRegex);\n if (figureStyleMatch) {\n var width = figureStyleMatch[1];\n var tableMatch = match[m].match(tableRegex);\n if (tableMatch) {\n var existingTableStyle = tableMatch[0].match(styleRegex);\n var tableReplaced = match[m].replace(firstStyleWidthRegex, figureStyleMatch[0].replace(\"width:\".concat(width, \";\"), ''));\n if (existingTableStyle) {\n tableReplaced = tableReplaced.replace(existingTableStyle[1], \"\".concat(existingTableStyle[1], \";width:\").concat(width, \";\\\" \"));\n }\n else {\n // match both open and closed table-tag.. rewrite to 1 regex?\n tableReplaced = tableReplaced.replace('', \"\"));\n }\n replaced = replaced.replace(match[m], tableReplaced);\n }\n }\n }\n return replaced;\n};\nvar replaceInternalLinks = function (html) {\n var _a;\n var match = html.match(internalLinkRegex);\n if (!match) {\n return html;\n }\n var replaced = html;\n for (var m = 0; m < match.length; m++) {\n var idMatch = match[m].match(elementIdRegex);\n if (idMatch) {\n var elementId = (_a = idMatch[1]) === null || _a === void 0 ? void 0 : _a.trim();\n var withAction = match[m].replace(idMatch[0], \"onclick=\\\"__clickInternalLink('\".concat(elementId, \"')\\\"\"));\n replaced = replaced.replace(match[m], withAction);\n }\n }\n return replaced;\n};\nvar replaceStringVariables = function (html) {\n var match = html.match(stringVariableRegex);\n if (!match) {\n return html;\n }\n var replaced = html;\n for (var m = 0; m < match.length; m++) {\n if (window.__getYouwellVariable) {\n var variable = match[m].slice(2, -2);\n replaced = replaced.replace(match[m], \"\".concat(window.__getYouwellVariable(variable)));\n }\n }\n return replaced;\n};\nvar replaceEmbedContent = function (html, addNoContextForImages, xAppId) {\n if (addNoContextForImages === void 0) { addNoContextForImages = false; }\n if (!html)\n return '';\n var replaced = replaceVideo(html);\n if (addNoContextForImages) {\n replaced = addNoContextMenu(html);\n }\n replaced = addAppIdToImages(replaced, xAppId);\n replaced = fixTableWidthLayout(replaced);\n replaced = replaceInternalLinks(replaced);\n replaced = replaceStringVariables(replaced);\n return replaced;\n};\nexports.replaceEmbedContent = replaceEmbedContent;\nvar isEmptyHtml = function (html) { return !html || html.trim() === '
'; };\nexports.isEmptyHtml = isEmptyHtml;\nvar findImageUrl = function (html) {\n if (!html) {\n return null;\n }\n var match = html.match(figureRegex);\n if (!match) {\n return null;\n }\n for (var m = 0; m < match.length; m++) {\n var urlMatch = match[m].match(srcRegex);\n if (urlMatch === null || urlMatch === void 0 ? void 0 : urlMatch[1]) {\n return urlMatch[1].trim();\n }\n }\n return null;\n};\nexports.findImageUrl = findImageUrl;\nvar findImageUrls = function (html) {\n if (!html) {\n return null;\n }\n var match = html.match(figureRegex);\n if (!match) {\n return null;\n }\n var urls = [];\n for (var m = 0; m < match.length; m++) {\n var urlMatch = match[m].match(srcRegex);\n if (urlMatch === null || urlMatch === void 0 ? void 0 : urlMatch[1]) {\n urls.push(urlMatch[1].trim());\n }\n }\n return urls;\n};\nexports.findImageUrls = findImageUrls;\nvar stripHtml = function (html, defaultText) {\n if (!html) {\n return defaultText || '';\n }\n var doc = new DOMParser().parseFromString(html, 'text/html');\n return doc.body.textContent || defaultText || '';\n};\nexports.stripHtml = stripHtml;\nvar textpart = function (html, length) {\n var t = (0, exports.stripHtml)(html);\n return length && t.length > length ? \"\".concat(t.slice(0, length), \"...\") : t;\n};\nexports.textpart = textpart;\nvar getVideos = function (html) {\n var match = html && html.match(oembedRegex);\n var videoContent = [];\n if (match) {\n for (var m = 0; m < match.length; m++) {\n var urlMatch = match[m].match(urlRegex);\n var url = urlMatch === null || urlMatch === void 0 ? void 0 : urlMatch[1].trim();\n if (url) {\n for (var i = 0; i < videoProviders.length; i++) {\n var pattern = videoProviders[i].url;\n if (!Array.isArray(pattern)) {\n pattern = [pattern];\n }\n var patternMatch = (0, exports.detectPattern)(pattern, url);\n if (patternMatch === null || patternMatch === void 0 ? void 0 : patternMatch[1]) {\n videoContent.push(videoProviders[i].html(patternMatch[1]));\n }\n }\n }\n }\n }\n return videoContent;\n};\nexports.getVideos = getVideos;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileCopyIcon = exports.ReplayIcon = exports.SaveIcon = exports.CancelIcon = exports.EditIcon = exports.CloseIcon = exports.CompletedIcon = exports.NextIcon = exports.PrevIcon = exports.OpenInNewWindowIcon = exports.SeparatorIcon = exports.FowardIcon = exports.ClearIcon = exports.SearchIcon = exports.CheckedIcon = exports.UncheckedIcon = exports.CollapseIcon = exports.ExpandIcon = exports.BackIcon = exports.LogoutIcon = exports.MenuUpIcon = exports.MenuIcon = void 0;\nvar Menu_1 = require(\"@material-ui/icons/Menu\");\nObject.defineProperty(exports, \"MenuIcon\", { enumerable: true, get: function () { return __importDefault(Menu_1).default; } });\nvar KeyboardArrowUp_1 = require(\"@material-ui/icons/KeyboardArrowUp\");\nObject.defineProperty(exports, \"MenuUpIcon\", { enumerable: true, get: function () { return __importDefault(KeyboardArrowUp_1).default; } });\nvar LockOpen_1 = require(\"@material-ui/icons/LockOpen\");\nObject.defineProperty(exports, \"LogoutIcon\", { enumerable: true, get: function () { return __importDefault(LockOpen_1).default; } });\nvar ArrowBack_1 = require(\"@material-ui/icons/ArrowBack\");\nObject.defineProperty(exports, \"BackIcon\", { enumerable: true, get: function () { return __importDefault(ArrowBack_1).default; } });\nvar ExpandMore_1 = require(\"@material-ui/icons/ExpandMore\");\nObject.defineProperty(exports, \"ExpandIcon\", { enumerable: true, get: function () { return __importDefault(ExpandMore_1).default; } });\nvar ExpandLess_1 = require(\"@material-ui/icons/ExpandLess\");\nObject.defineProperty(exports, \"CollapseIcon\", { enumerable: true, get: function () { return __importDefault(ExpandLess_1).default; } });\nvar CheckBoxOutlineBlank_1 = require(\"@material-ui/icons/CheckBoxOutlineBlank\");\nObject.defineProperty(exports, \"UncheckedIcon\", { enumerable: true, get: function () { return __importDefault(CheckBoxOutlineBlank_1).default; } });\nvar CheckBox_1 = require(\"@material-ui/icons/CheckBox\");\nObject.defineProperty(exports, \"CheckedIcon\", { enumerable: true, get: function () { return __importDefault(CheckBox_1).default; } });\nvar Search_1 = require(\"@material-ui/icons/Search\");\nObject.defineProperty(exports, \"SearchIcon\", { enumerable: true, get: function () { return __importDefault(Search_1).default; } });\nvar Clear_1 = require(\"@material-ui/icons/Clear\");\nObject.defineProperty(exports, \"ClearIcon\", { enumerable: true, get: function () { return __importDefault(Clear_1).default; } });\nvar ArrowForward_1 = require(\"@material-ui/icons/ArrowForward\");\nObject.defineProperty(exports, \"FowardIcon\", { enumerable: true, get: function () { return __importDefault(ArrowForward_1).default; } });\nvar KeyboardArrowRight_1 = require(\"@material-ui/icons/KeyboardArrowRight\");\nObject.defineProperty(exports, \"SeparatorIcon\", { enumerable: true, get: function () { return __importDefault(KeyboardArrowRight_1).default; } });\nvar OpenInNew_1 = require(\"@material-ui/icons/OpenInNew\");\nObject.defineProperty(exports, \"OpenInNewWindowIcon\", { enumerable: true, get: function () { return __importDefault(OpenInNew_1).default; } });\nvar KeyboardArrowLeft_1 = require(\"@material-ui/icons/KeyboardArrowLeft\");\nObject.defineProperty(exports, \"PrevIcon\", { enumerable: true, get: function () { return __importDefault(KeyboardArrowLeft_1).default; } });\nvar KeyboardArrowRight_2 = require(\"@material-ui/icons/KeyboardArrowRight\");\nObject.defineProperty(exports, \"NextIcon\", { enumerable: true, get: function () { return __importDefault(KeyboardArrowRight_2).default; } });\nvar Done_1 = require(\"@material-ui/icons/Done\");\nObject.defineProperty(exports, \"CompletedIcon\", { enumerable: true, get: function () { return __importDefault(Done_1).default; } });\nvar Close_1 = require(\"@material-ui/icons/Close\");\nObject.defineProperty(exports, \"CloseIcon\", { enumerable: true, get: function () { return __importDefault(Close_1).default; } });\nvar Edit_1 = require(\"@material-ui/icons/Edit\");\nObject.defineProperty(exports, \"EditIcon\", { enumerable: true, get: function () { return __importDefault(Edit_1).default; } });\nvar Close_2 = require(\"@material-ui/icons/Close\");\nObject.defineProperty(exports, \"CancelIcon\", { enumerable: true, get: function () { return __importDefault(Close_2).default; } });\nvar Save_1 = require(\"@material-ui/icons/Save\");\nObject.defineProperty(exports, \"SaveIcon\", { enumerable: true, get: function () { return __importDefault(Save_1).default; } });\nvar Replay_1 = require(\"@material-ui/icons/Replay\");\nObject.defineProperty(exports, \"ReplayIcon\", { enumerable: true, get: function () { return __importDefault(Replay_1).default; } });\nvar FileCopy_1 = require(\"@material-ui/icons/FileCopy\");\nObject.defineProperty(exports, \"FileCopyIcon\", { enumerable: true, get: function () { return __importDefault(FileCopy_1).default; } });\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flags = exports.uuid = exports.Auth = exports.useSimpleOffline = exports.useAutosaveForm = exports.AppUtil = exports.useForm = exports.contentUtils = exports.elementStateUtils = exports.responseUtils = exports.numberUtils = exports.tableUtils = exports.reduxUtils = exports.arrayUtils = exports.stringUtils = exports.mediaUpload = exports.errorUtils = exports.ReduxStoreHelper = exports.validationUtils = exports.objectUtils = exports.fetchUtils = exports.dateUtils = exports.constants = void 0;\nvar constants = __importStar(require(\"./constants\"));\nexports.constants = constants;\nvar dateUtils = __importStar(require(\"./dateUtils\"));\nexports.dateUtils = dateUtils;\nvar errorUtils = __importStar(require(\"./errorUtils\"));\nexports.errorUtils = errorUtils;\nvar fetchUtils = __importStar(require(\"./fetchUtils\"));\nexports.fetchUtils = fetchUtils;\nvar objectUtils = __importStar(require(\"./objectUtils\"));\nexports.objectUtils = objectUtils;\nvar validationUtils = __importStar(require(\"./validationUtils\"));\nexports.validationUtils = validationUtils;\nvar ReduxStoreHelper = __importStar(require(\"./ReduxStoreHelper\"));\nexports.ReduxStoreHelper = ReduxStoreHelper;\nvar mediaUpload = __importStar(require(\"./mediaUpload\"));\nexports.mediaUpload = mediaUpload;\nvar stringUtils = __importStar(require(\"./stringUtils\"));\nexports.stringUtils = stringUtils;\nvar arrayUtils = __importStar(require(\"./arrayUtils\"));\nexports.arrayUtils = arrayUtils;\nvar reduxUtils = __importStar(require(\"./reduxUtils\"));\nexports.reduxUtils = reduxUtils;\nvar tableUtils = __importStar(require(\"./tableUtils\"));\nexports.tableUtils = tableUtils;\nvar numberUtils = __importStar(require(\"./numberUtils\"));\nexports.numberUtils = numberUtils;\nvar responseUtils = __importStar(require(\"./responseUtils\"));\nexports.responseUtils = responseUtils;\nvar elementStateUtils = __importStar(require(\"./elementStateUtils\"));\nexports.elementStateUtils = elementStateUtils;\nvar contentUtils = __importStar(require(\"./contentUtils\"));\nexports.contentUtils = contentUtils;\nvar useForm = __importStar(require(\"./useForm\"));\nexports.useForm = useForm;\nvar AppUtil = __importStar(require(\"./AppUtil\"));\nexports.AppUtil = AppUtil;\nvar useAutosaveForm = __importStar(require(\"./useAutosaveForm\"));\nexports.useAutosaveForm = useAutosaveForm;\nvar useSimpleOffline = __importStar(require(\"./useSimpleOffline\"));\nexports.useSimpleOffline = useSimpleOffline;\nvar Auth_1 = require(\"./Auth\");\nObject.defineProperty(exports, \"Auth\", { enumerable: true, get: function () { return __importDefault(Auth_1).default; } });\nvar uuid_1 = require(\"./uuid\");\nObject.defineProperty(exports, \"uuid\", { enumerable: true, get: function () { return __importDefault(uuid_1).default; } });\nvar flags_1 = require(\"./flags\");\nObject.defineProperty(exports, \"flags\", { enumerable: true, get: function () { return __importDefault(flags_1).default; } });\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uploadPatientFile = exports.uploadFile = exports.parseFileType = exports.getAccept = void 0;\nvar fetchUtils_1 = require(\"./fetchUtils\");\nvar apiUrls_1 = __importDefault(require(\"./apiUrls\"));\nvar constants_1 = require(\"./constants\");\nvar getAccept = function (type) {\n switch (type) {\n case constants_1.fileTypes.image:\n return 'image/jpg,image/jpeg,image/png,image/gif,image/webp';\n case constants_1.fileTypes.audio:\n return 'audio/mp3';\n case constants_1.fileTypes.video:\n return 'video/mp4';\n case constants_1.fileTypes.document:\n return 'application/pdf';\n case 'data':\n return 'application/json';\n default:\n return 'image/webp,image/jpg,image/jpeg,image/png,image/gif,audio/mp3,video/mp4,application/pdf';\n }\n};\nexports.getAccept = getAccept;\nvar parseFileType = function (fileType) {\n if (!fileType) {\n return constants_1.fileTypes.file;\n }\n if (fileType.indexOf('image') >= 0) {\n return constants_1.fileTypes.image;\n }\n if (fileType.indexOf('audio') >= 0) {\n return constants_1.fileTypes.audio;\n }\n if (fileType.indexOf('video') >= 0) {\n return constants_1.fileTypes.video;\n }\n if (fileType.indexOf('application') >= 0) {\n return constants_1.fileTypes.document;\n }\n return constants_1.fileTypes.file;\n};\nexports.parseFileType = parseFileType;\nvar uploadFile = function (file, fileType, config, programId) {\n var type = fileType || (0, exports.parseFileType)(file.type);\n var formData = new FormData();\n formData.append('file', file);\n formData.append('type', type);\n var url = \"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(apiUrls_1.default.portal.media, \"/\").concat(type);\n if (programId)\n url += \"?programId=\".concat(programId);\n var maxUploadSize = ((config === null || config === void 0 ? void 0 : config.maxUploadSizeMB) || 500) * 1024 * 1024; // default 500 MB if not set in config\n var maxNonStreamingSize = ((config === null || config === void 0 ? void 0 : config.maxNonStreamingUploadSizeMB) || 40) * 1024 * 1024; // default 40 MB if not set in config\n if (file.size > maxUploadSize) {\n return Promise.reject(new Error('930'));\n }\n if (file.size > maxNonStreamingSize) {\n // using streaming upload\n formData.append('fileName', file.name);\n formData.append('contentType', file.type);\n formData.append('programId', programId);\n url = \"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(apiUrls_1.default.portal.media);\n }\n return (0, fetchUtils_1.youwellFetch)(url, {\n method: 'POST',\n body: formData,\n })\n .then((0, fetchUtils_1.handleErrors)())\n .then(fetchUtils_1.json)\n .then(function (data) { return Promise.resolve(__assign({}, data)); })\n .catch(function (error) { return Promise.reject(new Error((0, fetchUtils_1.getErrorMessageOrKey)(error))); });\n};\nexports.uploadFile = uploadFile;\nvar uploadPatientFile = function (file, config) {\n var maxUploadSize = ((config === null || config === void 0 ? void 0 : config.maxUploadSizeMB) || 100) * 1024 * 1024; // default 100 MB if not set in config\n if (file.size > maxUploadSize) {\n return Promise.reject(new Error('930'));\n }\n var type = (0, exports.parseFileType)(file.type);\n var formData = new FormData();\n formData.append('file', file);\n formData.append('type', type);\n formData.append('fileName', file.name);\n formData.append('contentType', file.type);\n var url = \"\".concat(apiUrls_1.default.baseUrl, \"/\").concat(apiUrls_1.default.app.media);\n return (0, fetchUtils_1.youwellFetch)(url, {\n method: 'POST',\n body: formData,\n })\n .then((0, fetchUtils_1.handleErrors)())\n .then(fetchUtils_1.json)\n .then(function (data) { return Promise.resolve(data); })\n .catch(function (error) { return Promise.reject(new Error((0, fetchUtils_1.getErrorMessageOrKey)(error))); });\n};\nexports.uploadPatientFile = uploadPatientFile;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMode = exports.isInBetween = exports.moduloBase1 = void 0;\nvar moduloBase1 = function (number, modulo) {\n var nr = ((number - 1) % modulo) + 1;\n while (nr < 1) {\n nr += modulo;\n }\n return nr;\n};\nexports.moduloBase1 = moduloBase1;\nvar isInBetween = function (score, min, max) {\n if (min !== undefined) {\n if (score < min)\n return false;\n }\n if (max !== undefined) {\n if (score > max)\n return false;\n }\n return true;\n};\nexports.isInBetween = isInBetween;\n// Finds the number(s) in a list with the highest occurence.\n// If several modes are present (bimodal or multimodal) it returns the avg of the numbers.\nvar getMode = function (list) {\n var max = 0;\n var counts = {};\n list.forEach(function (num) {\n counts[num] = counts[num] ? counts[num] + 1 : 1;\n if (counts[num] > max) {\n max = counts[num];\n }\n });\n var modes = Object.keys(counts).filter(function (key) { return counts[key] === max; }).map(Number);\n return modes.length >= 2 ? Math.round(modes.reduce(function (acc, curr) { return acc + curr; }) / modes.length) : modes[0];\n};\nexports.getMode = getMode;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getValueByDotNotation = exports.mergePatchChangesInStore = exports.mergePatchChanges = exports.hasValue = exports.isEmpty = exports.SORT_OPERATOR_PREFIX = void 0;\nexports.SORT_OPERATOR_PREFIX = '__sort[';\nvar isEmpty = function (obj) { return obj === ''\n || obj === null\n || obj === undefined\n || Number.isNaN(obj)\n || (obj.constructor === Object && Object.keys(obj).length === 0)\n || (obj.constructor === Array && obj.length === 0); };\nexports.isEmpty = isEmpty;\nvar hasValue = function (obj) { return !(0, exports.isEmpty)(obj); };\nexports.hasValue = hasValue;\nvar mergePatchChanges = function (data, changes) { return (changes\n ? Object.keys(changes).reduce(function (prev, curr) {\n var _a, _b, _c, _d, _e;\n if (curr.startsWith(exports.SORT_OPERATOR_PREFIX)) {\n var arrayKeyMarker_1 = curr.indexOf('[');\n var sortKeyEnd = curr.indexOf(']', arrayKeyMarker_1);\n var arrayName = curr.substring(arrayKeyMarker_1 + 1, sortKeyEnd);\n var prevArray = (prev[arrayName] || []);\n var orderLookup_1 = changes[curr];\n return __assign(__assign({}, prev), (_a = {}, _a[arrayName] = prevArray.map(function (d) { return (__assign(__assign({}, d), { sorting: orderLookup_1[d.id] })); }).sort(function (a, b) { return a.sorting - b.sorting; }), _a));\n }\n var arrayKeyMarker = curr.indexOf('[');\n if (arrayKeyMarker > -1) {\n var arrayKeySeparator = curr.indexOf(':', arrayKeyMarker);\n var arrayKeyEnd = curr.indexOf(']', arrayKeySeparator);\n var arrayName = curr.substring(0, arrayKeyMarker);\n var arrayKey_1 = curr.substring(arrayKeyMarker + 1, arrayKeySeparator);\n var arrayKeyValue_1 = curr.substring(arrayKeySeparator + 1, arrayKeyEnd);\n var prevArray = (prev[arrayName] || []);\n var index_1 = prevArray.findIndex(function (d) { return d[arrayKey_1].toString() === arrayKeyValue_1; });\n return __assign(__assign({}, prev), (_b = {}, _b[arrayName] = (index_1 > -1\n ? prevArray.map(function (e, i) { return (i === index_1 ? changes[curr] : e); })\n : __spreadArray(__spreadArray([], prevArray, true), [changes[curr]], false))\n .filter(function (d) { return d; }), _b));\n }\n var objectDotIndex = curr.indexOf('.');\n if (objectDotIndex > -1) {\n var key = curr.substring(0, objectDotIndex);\n var subKey = curr.substring(objectDotIndex + 1);\n return __assign(__assign({}, prev), (_c = {}, _c[key] = __assign(__assign({}, prev[key]), (_d = {}, _d[subKey] = changes[curr], _d)), _c));\n }\n return __assign(__assign({}, prev), (_e = {}, _e[curr] = changes[curr], _e));\n }, data !== null && data !== void 0 ? data : {})\n : data); };\nexports.mergePatchChanges = mergePatchChanges;\nvar mergePatchChangesInStore = function (current, changes, update) { return (__assign(__assign({}, (0, exports.mergePatchChanges)(current, changes)), update)); };\nexports.mergePatchChangesInStore = mergePatchChangesInStore;\nvar getValueByDotNotation = function (obj, propName) {\n if (!obj || !propName) {\n return null;\n }\n // @ts-ignore\n return propName.split('.').reduce(function (prev, curr) { return (prev ? prev[curr] : null); }, obj);\n};\nexports.getValueByDotNotation = getValueByDotNotation;\n","import {\n applyMiddleware, combineReducers, compose, createStore,\n} from 'redux';\nimport thunk from 'redux-thunk';\nimport { connectRouter, routerMiddleware } from 'connected-react-router';\n\nconst buildRootReducer = (allReducers, history) => combineReducers({ ...allReducers, router: connectRouter(history) });\n\nexport const updateStore = (store, reducers, history) => {\n store.replaceReducer(buildRootReducer(reducers, history));\n};\n\nexport const configureStore = (reducers, history, initialState) => {\n const composeEnhancers = (typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) // eslint-disable-line no-underscore-dangle\n || compose;\n\n const store = createStore(\n buildRootReducer(reducers, history),\n initialState,\n composeEnhancers(\n applyMiddleware(thunk, routerMiddleware(history)),\n ),\n );\n\n return store;\n};\n\nconst stateKey = 'ywa-state';\n\nexport const clearState = () => {\n try {\n localStorage.removeItem(stateKey);\n } catch {\n // ignore write errors\n }\n};\n\nexport const loadState = () => {\n try {\n const serializedState = localStorage.getItem(stateKey);\n if (serializedState === null) {\n return undefined;\n }\n return JSON.parse(serializedState);\n } catch (err) {\n return undefined;\n }\n};\n\nexport const saveState = (state) => {\n try {\n const serializedState = JSON.stringify(state);\n localStorage.setItem(stateKey, serializedState);\n } catch {\n // ignore write errors\n }\n};\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getListFromTableResponses = exports.getTableCellResponse = exports.filterOutFreetextResponses = exports.findResponse = exports.getGetResponseFunc = exports.getUpdatedResponsesForTask = exports.buildResponseLookup = exports.buildResponseFormVm = exports.parseResponseSaveResult = exports.parseInsertedResponse = exports.getResponseHash = exports.calculateSubtotals = exports.calculateResponseScore = void 0;\nvar objectUtils_1 = require(\"./objectUtils\");\nvar constants_1 = require(\"./constants\");\nvar calculateResponseScore = function (response) {\n var _a;\n if (!response) {\n return 0;\n }\n if ((0, objectUtils_1.hasValue)(response.scaleResponse)) {\n return response.scaleResponse || 0;\n }\n if (((_a = response.choiceResponse) === null || _a === void 0 ? void 0 : _a.length) && response.choiceResponse.length > 0) {\n return response.choiceResponse.reduce(function (prev, curr) { return prev + ((curr === null || curr === void 0 ? void 0 : curr.score) || 0); }, 0);\n }\n return 0;\n};\nexports.calculateResponseScore = calculateResponseScore;\nvar getQuestionResponses = function (taskResponses, onlyWithChange) { return (taskResponses ? (Object.entries(taskResponses)\n .filter(function (_a) {\n var currQuestionId = _a[0], respValue = _a[1];\n return currQuestionId && respValue && respValue.response && !respValue.isSubtotal && (respValue.changeKey || !onlyWithChange);\n})\n .map(function (_a) {\n var currQuestionId = _a[0], respValue = _a[1];\n return ({ questionId: Number(currQuestionId), response: respValue.response });\n})) : []); };\nvar calculateSubtotals = function (taskResponses, taskSubtotals) {\n var scoresByQuestionId = getQuestionResponses(taskResponses, false)\n .reduce(function (prev, curr) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[curr.questionId || '_err'] = (0, exports.calculateResponseScore)(curr.response), _a)));\n }, {});\n var ret = taskSubtotals.map(function (_a) {\n var taskSubtotalId = _a.id, questionIds = _a.questionIds, calculationType = _a.calculationType;\n var allQuestions = !questionIds || questionIds.length === 0;\n var subTotalSum = allQuestions\n ? Object.values(scoresByQuestionId).reduce(function (sum, score) { return (sum + score); }, 0)\n : questionIds.reduce(function (sum, questionId) { return sum + (scoresByQuestionId[questionId] || 0); }, 0);\n var score = subTotalSum;\n switch (calculationType) {\n case constants_1.subtotalCalculationTypes.sum:\n break;\n case constants_1.subtotalCalculationTypes.average:\n score = subTotalSum / (allQuestions ? Object.keys(scoresByQuestionId).length : questionIds.length);\n break;\n default:\n break;\n }\n return {\n taskSubtotalId: taskSubtotalId,\n response: { scaleResponse: score },\n };\n });\n return ret;\n};\nexports.calculateSubtotals = calculateSubtotals;\nvar getResponseHash = function (response) { return (response ? JSON.stringify({\n f: response.freetextResponse,\n c: response.choiceResponse,\n s: response.scaleResponse,\n t: response.tableResponses,\n}) : null); };\nexports.getResponseHash = getResponseHash;\nvar reduceResponsesForTask = function (newResponses, currentResponseList, taskId, taskVersion, patientProgramElementId, formId, formSubmitted) {\n var _a, _b;\n var _c;\n if (formSubmitted === void 0) { formSubmitted = null; }\n if (!(newResponses === null || newResponses === void 0 ? void 0 : newResponses.length) && !formSubmitted) {\n return currentResponseList || {};\n }\n var existingResponsesForElement = (currentResponseList && currentResponseList[patientProgramElementId]) || {};\n var newModuleResponses = newResponses === null || newResponses === void 0 ? void 0 : newResponses.filter(function (d) { return d.moduleSubtotalId; });\n var filteredNewResponses = newResponses === null || newResponses === void 0 ? void 0 : newResponses.filter(function (d) { return !d.moduleSubtotalId; });\n if (newModuleResponses) {\n newModuleResponses.forEach(function (newModuleRespons) {\n var _a;\n var p = Object.values(existingResponsesForElement).find(function (d) { return newModuleRespons.moduleSubtotalId && d[newModuleRespons.moduleSubtotalId]; });\n if (p && newModuleRespons.moduleSubtotalId) {\n // Update existing respons instead of adding new (could have different taskId!)\n existingResponsesForElement[p.taskId] = __assign(__assign({}, existingResponsesForElement[p.taskId]), (_a = {}, _a[newModuleRespons.moduleSubtotalId] = __assign(__assign({}, p[newModuleRespons.moduleSubtotalId]), { response: newModuleRespons.response }), _a));\n }\n else {\n filteredNewResponses.push(newModuleRespons);\n }\n });\n }\n var existingResponsesForTask = __assign(__assign({}, existingResponsesForElement[taskId]), { patientProgramElementId: patientProgramElementId, taskId: taskId, formId: formId, taskVersion: taskVersion, submitted: formSubmitted || ((_c = existingResponsesForElement[taskId]) === null || _c === void 0 ? void 0 : _c.submitted) });\n return __assign(__assign({}, currentResponseList), (_a = {}, _a[patientProgramElementId] = __assign(__assign({}, existingResponsesForElement), (_b = {}, _b[taskId] = __assign(__assign({}, existingResponsesForTask), filteredNewResponses === null || filteredNewResponses === void 0 ? void 0 : filteredNewResponses.reduce(function (prev, curr) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[curr.questionId || curr.taskSubtotalId || curr.moduleSubtotalId || '_err'] = {\n response: curr.response,\n isSubtotal: !!(curr.taskSubtotalId || curr.moduleSubtotalId),\n changeKey: curr.changeKey,\n }, _a)));\n }, {})), _b)), _a));\n};\nvar parseInsertedResponse = function (inputData, subtotals, currentResponses) {\n var patientProgramElementId = inputData.patientProgramElementId, taskId = inputData.taskId, taskVersion = inputData.taskVersion, responses = inputData.responses, formId = inputData.formId;\n var newResponses = responses.map(function (_a) {\n var questionId = _a.questionId, response = __rest(_a, [\"questionId\"]);\n return ({\n changeKey: (0, exports.getResponseHash)(response),\n questionId: questionId,\n response: response,\n });\n });\n var responseList = reduceResponsesForTask(newResponses, currentResponses, taskId, taskVersion, patientProgramElementId, formId);\n if (subtotals.length && responseList[patientProgramElementId] && responseList[patientProgramElementId][taskId]) {\n var newTaskSubtotalResponses = (0, exports.calculateSubtotals)(responseList[patientProgramElementId][taskId], subtotals);\n responseList = reduceResponsesForTask(newTaskSubtotalResponses, responseList, taskId, taskVersion, patientProgramElementId, formId);\n }\n return responseList;\n};\nexports.parseInsertedResponse = parseInsertedResponse;\nvar parseResponseSaveResult = function (inputData, taskVisitResult, currentResponses) {\n var _a = inputData || {}, responses = _a.responses, taskVersion = _a.taskVersion;\n var newResponses = taskVisitResult.newResponses, patientProgramElementId = taskVisitResult.patientProgramElementId, taskId = taskVisitResult.taskId, formId = taskVisitResult.formId, formSubmitted = taskVisitResult.formSubmitted;\n var savedResponses = responses === null || responses === void 0 ? void 0 : responses.map(function (_a) {\n var questionId = _a.questionId, response = __rest(_a, [\"questionId\"]);\n return ({\n changeKey: null,\n questionId: questionId,\n response: response,\n });\n }).filter(function (d) {\n var _a;\n if (!currentResponses || !currentResponses[patientProgramElementId] || !currentResponses[patientProgramElementId][taskId]\n || (d.questionId && !((_a = currentResponses[patientProgramElementId][taskId][d.questionId]) === null || _a === void 0 ? void 0 : _a.response))) {\n return true;\n }\n if (d.questionId && currentResponses[patientProgramElementId][taskId][d.questionId].changeKey === (0, exports.getResponseHash)(d.response)) {\n return true;\n }\n return false;\n }).concat(newResponses || []);\n return reduceResponsesForTask(savedResponses, currentResponses, taskId, taskVersion, patientProgramElementId, formId, formSubmitted);\n};\nexports.parseResponseSaveResult = parseResponseSaveResult;\nvar buildResponseFormVm = function (form) {\n var _a;\n var formProps = __assign({}, form);\n delete formProps.responses; // remove responses-list from props -> this is spread out on [questionId]\n var formVm = __assign(__assign({}, formProps), (_a = form.responses) === null || _a === void 0 ? void 0 : _a.reduce(function (rPrev, rCurr) {\n var _a;\n return (__assign(__assign({}, rPrev), (_a = {}, _a[rCurr.questionId || rCurr.taskSubtotalId || rCurr.moduleSubtotalId || '_err'] = {\n // could remove \"response\" prop and decompose all subProps directly. But must remove .response references a lot of places..\n response: rCurr.response,\n isSubtotal: !!(rCurr.taskSubtotalId || rCurr.moduleSubtotalId),\n }, _a)));\n }, {}));\n return formVm;\n};\nexports.buildResponseFormVm = buildResponseFormVm;\nvar buildResponseLookup = function (responseList, existingResponseList) { return (responseList === null || responseList === void 0 ? void 0 : responseList.reduce(function (prev, form) {\n var _a, _b;\n var formVm = (0, exports.buildResponseFormVm)(form);\n return __assign(__assign({}, prev), (_a = {}, _a[form.patientProgramElementId] = __assign(__assign({}, prev[form.patientProgramElementId]), (_b = {}, _b[form.taskId] = formVm, _b)), _a));\n}, existingResponseList || {})) || existingResponseList || {}; };\nexports.buildResponseLookup = buildResponseLookup;\nvar getUpdatedResponsesForTask = function (taskResponses, patientProgramElementId, taskId, taskVersion, formId, submitForm) {\n if (!taskResponses && !submitForm) {\n return null;\n }\n var updatedResponsesForTask = getQuestionResponses(taskResponses, true)\n .reduce(function (prev, curr) { return (__spreadArray(__spreadArray([], prev, true), [__assign({ questionId: Number(curr.questionId) }, __assign({}, curr.response))], false)); }, []);\n if (updatedResponsesForTask.length || submitForm) {\n var responseData = {\n patientProgramElementId: patientProgramElementId,\n taskId: taskId,\n taskVersion: taskVersion,\n formId: formId,\n responses: updatedResponsesForTask,\n submit: submitForm,\n };\n return responseData;\n }\n return null;\n};\nexports.getUpdatedResponsesForTask = getUpdatedResponsesForTask;\nvar getGetResponseFunc = function (existingResponseList, currentTaskResponse, patientProgramElementId) { return function (taskId, subtotalId, searchInAllResponses) {\n var _a;\n if ((currentTaskResponse === null || currentTaskResponse === void 0 ? void 0 : currentTaskResponse.taskId) === taskId && (!patientProgramElementId || (currentTaskResponse === null || currentTaskResponse === void 0 ? void 0 : currentTaskResponse.patientProgramElementId) === patientProgramElementId)) {\n return currentTaskResponse;\n }\n if (!existingResponseList) {\n return null;\n }\n // if ppeId is specified, only look in responses for specified PatientProgramElement\n // responsesToLookup is of type: Record\n var responsesToLookup = patientProgramElementId && !searchInAllResponses ? [(_a = existingResponseList[patientProgramElementId]) !== null && _a !== void 0 ? _a : []] : Object.values(existingResponseList);\n if (subtotalId) {\n return responsesToLookup.reduce(function (prevPpe, currPpe) { return prevPpe\n || Object.values(currPpe).reduce(function (prevTask, taskResponse) { return prevTask\n || ((taskResponse === null || taskResponse === void 0 ? void 0 : taskResponse[subtotalId]) ? taskResponse : null); }, null); }, null);\n }\n return responsesToLookup.reduce(function (prevPpe, currPpe) { return prevPpe\n || Object.values(currPpe).reduce(function (prevTask, taskResponse) { return prevTask\n || ((taskResponse === null || taskResponse === void 0 ? void 0 : taskResponse.taskId) === taskId ? taskResponse : null); }, null); }, null);\n}; };\nexports.getGetResponseFunc = getGetResponseFunc;\nvar findResponse = function (taskResponses, taskId, questionId) {\n if (taskResponses && taskId && questionId) {\n var currentTaskResponses = (0, exports.getGetResponseFunc)(taskResponses)(taskId);\n return currentTaskResponses && currentTaskResponses[questionId] ? currentTaskResponses[questionId].response : null;\n }\n return null;\n};\nexports.findResponse = findResponse;\nvar filterOutFreetextResponses = function (patientProgramTaskResponse) {\n var _a;\n return patientProgramTaskResponse && __assign(__assign({}, patientProgramTaskResponse), { responses: (_a = patientProgramTaskResponse.responses) === null || _a === void 0 ? void 0 : _a.map(function (r) { return ({\n questionId: r.questionId,\n scaleResponse: r.scaleResponse,\n }); }).filter(function (r) { return (0, objectUtils_1.hasValue)(r.scaleResponse); }) });\n};\nexports.filterOutFreetextResponses = filterOutFreetextResponses;\nvar getTableCellResponse = function (tableResponse, rowIndex, cellIndex, questionKeyOrIndex) {\n var _a;\n var cellJson = (_a = tableResponse === null || tableResponse === void 0 ? void 0 : tableResponse[rowIndex]) === null || _a === void 0 ? void 0 : _a[cellIndex];\n var cellObject = cellJson ? JSON.parse(cellJson) : null;\n return cellObject === null || cellObject === void 0 ? void 0 : cellObject[questionKeyOrIndex];\n};\nexports.getTableCellResponse = getTableCellResponse;\nvar getListFromTableResponses = function (tableResponses, singleQuestionInCell) { return tableResponses === null || tableResponses === void 0 ? void 0 : tableResponses.flatMap(function (r) { return r.map(function (c) {\n var respObj = c ? JSON.parse(c) : null;\n if (respObj && singleQuestionInCell) {\n return respObj[0]; // respObj is not an array but a single question has propertyName = 0\n }\n return respObj;\n}); }); };\nexports.getListFromTableResponses = getListFromTableResponses;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clearErrors = exports.setRequestStatus = exports.RequestStatusSlice = void 0;\nvar toolkit_1 = require(\"@reduxjs/toolkit\");\nvar initialState = {\n loading: false,\n requests: {},\n errors: [],\n};\nexports.RequestStatusSlice = (0, toolkit_1.createSlice)({\n name: 'RequestStatusSlice',\n initialState: initialState,\n reducers: {\n setRequestStatus: function (state, action) {\n state.requests[action.payload.requestId] = __assign({}, action.payload);\n var errors = Object.values(state.requests).reduce(function (prev, curr) {\n var _a, _b;\n if (curr.error && !curr.background) {\n return __spreadArray(__spreadArray([], prev, true), [((_b = (_a = curr.error.errorCode) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : curr.error.message)], false);\n }\n return prev;\n }, []);\n state.errors = errors;\n state.loading = Object.values(state.requests).reduce(function (prev, curr) { return prev || (curr.loading && !curr.background); }, false);\n },\n clearErrors: function (state) {\n state.errors = [];\n state.requests = state.requests ? Object.keys(state.requests).reduce(function (prev, curr) {\n var _a;\n return (__assign(__assign({}, prev), (_a = {}, _a[curr] = __assign(__assign({}, state.requests[curr]), { error: null }), _a)));\n }, {}) : {};\n },\n },\n});\nexports.setRequestStatus = (_a = exports.RequestStatusSlice.actions, _a.setRequestStatus), exports.clearErrors = _a.clearErrors;\nexports.default = exports.RequestStatusSlice.reducer;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchFromYouwellApi = void 0;\nvar connected_react_router_1 = require(\"connected-react-router\");\nvar apiUrls_1 = __importDefault(require(\"../apiUrls\"));\nvar fetchUtils_1 = require(\"../fetchUtils\");\nvar RequestStatusStore_1 = require(\"./RequestStatusStore\");\nfunction handleOptions(dispatch, data, options) {\n if (!options) {\n return;\n }\n if (options.callback) {\n options.callback(data);\n }\n if (options.redirectWithElementId) {\n dispatch((0, connected_react_router_1.push)(\"\".concat(options.redirectWithElementId, \"/\").concat(data === null || data === void 0 ? void 0 : data.id)));\n }\n else if (options.redirect) {\n dispatch((0, connected_react_router_1.push)(options.redirect));\n }\n else if (options.redirectExternal) {\n window.location.href = options.redirectExternal;\n }\n}\nfunction handleErrorOptions(dispatch, options) {\n if (!options) {\n return;\n }\n if (options.errorCallback) {\n options.errorCallback();\n }\n if (options.redirectOnError) {\n dispatch((0, connected_react_router_1.push)(options.redirectOnError));\n }\n}\nvar startRequest = function (dispatch, requestId, background) {\n if (background === void 0) { background = false; }\n dispatch((0, RequestStatusStore_1.setRequestStatus)({\n requestId: requestId,\n background: background,\n loading: true,\n completed: false,\n }));\n};\nvar completeRequest = function (dispatch, requestId, background) {\n if (background === void 0) { background = false; }\n dispatch((0, RequestStatusStore_1.setRequestStatus)({\n requestId: requestId,\n background: background,\n loading: false,\n completed: true,\n }));\n};\nvar failRequest = function (dispatch, requestId, error, background) {\n if (background === void 0) { background = false; }\n dispatch((0, RequestStatusStore_1.setRequestStatus)({\n requestId: requestId,\n background: background,\n loading: false,\n completed: false,\n error: error,\n }));\n};\n// eslint-disable-next-line import/prefer-default-export\nfunction fetchFromYouwellApi(dispatch, requestOptions, options) {\n var method = requestOptions.method || 'GET';\n var baseUrl = (options === null || options === void 0 ? void 0 : options.baseUrl) || apiUrls_1.default.baseUrl;\n var requestId = \"\".concat((options === null || options === void 0 ? void 0 : options.background) ? 'b_' : '').concat(method, \":\").concat(requestOptions.apiPath);\n var requestBody = method === 'DELETE' || method === 'GET' ? undefined : requestOptions.body ? JSON.stringify(requestOptions.body) : undefined;\n startRequest(dispatch, requestId, options === null || options === void 0 ? void 0 : options.background);\n (0, fetchUtils_1.youwellFetch)(\"\".concat(baseUrl, \"/\").concat(requestOptions.apiPath).concat((0, fetchUtils_1.mapToQueryString)(requestOptions.queryParams)), {\n headers: __assign({}, fetchUtils_1.jsonHeader),\n method: method,\n body: requestBody,\n })\n .then((0, fetchUtils_1.handleErrors)(dispatch))\n .then(fetchUtils_1.json)\n .then(function (data) {\n completeRequest(dispatch, requestId, options === null || options === void 0 ? void 0 : options.background);\n if (requestOptions.dataAction) {\n dispatch(requestOptions.dataAction({ response: data || null, requestBody: requestOptions.body || null, requestQuery: requestOptions.queryParams || null }));\n }\n handleOptions(dispatch, data, options);\n })\n .catch(function (error) {\n failRequest(dispatch, requestId, error, options === null || options === void 0 ? void 0 : options.background);\n handleErrorOptions(dispatch, options);\n });\n}\nexports.fetchFromYouwellApi = fetchFromYouwellApi;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPercentStringFromDecimal = exports.getInitials = exports.parseBoolString = exports.trimDown = exports.generateRandomString = exports.caseInsensitiveContains = exports.firstLetterUp = exports.trimIfString = exports.isNullOrUndefined = exports.listFromCommaStrings = exports.listFromNewLineStrings = exports.commaStringsFromList = exports.newLineStringsFromList = void 0;\nvar htmlUtils_1 = require(\"./htmlUtils\");\nvar newLineStringsFromList = function (list) { return (list ? list.reduce(function (prev, curr) { return (prev ? \"\".concat(prev, \"\\r\\n\").concat(curr) : curr); }, '') : ''); };\nexports.newLineStringsFromList = newLineStringsFromList;\nvar commaStringsFromList = function (list) { return (list ? list.reduce(function (prev, curr) { return (prev ? \"\".concat(prev, \", \").concat(curr) : curr); }, '') : ''); };\nexports.commaStringsFromList = commaStringsFromList;\nvar listFromNewLineStrings = function (string) { return (string ? string.split(/[\\r\\n]+/).map(function (d) { return d.trim(); }) : []); };\nexports.listFromNewLineStrings = listFromNewLineStrings;\nvar listFromCommaStrings = function (string, defaultValue) {\n if (defaultValue === void 0) { defaultValue = []; }\n return (string ? string.split(',').map(function (d) { return d.trim(); }) : defaultValue);\n};\nexports.listFromCommaStrings = listFromCommaStrings;\nvar isNullOrUndefined = function (string) { return !string || string === '' || string === 'null' || string === 'undefined'; };\nexports.isNullOrUndefined = isNullOrUndefined;\nvar trimIfString = function (obj) {\n if (typeof obj === 'string' || obj instanceof String) {\n if ((0, htmlUtils_1.isEmptyHtml)(obj)) {\n return undefined;\n }\n return obj.trim();\n }\n return obj;\n};\nexports.trimIfString = trimIfString;\nvar firstLetterUp = function (string) { return (string ? string.charAt(0).toUpperCase() + string.slice(1) : undefined); };\nexports.firstLetterUp = firstLetterUp;\nvar caseInsensitiveContains = function (inputString, searchString) { return !!inputString && inputString.toLowerCase().indexOf(searchString) > -1; };\nexports.caseInsensitiveContains = caseInsensitiveContains;\nvar generateRandomString = function (length) {\n if (length === void 0) { length = 8; }\n return (+new Date() + Math.random().toString(36)).slice(-length);\n};\nexports.generateRandomString = generateRandomString;\nvar trimDown = function (str, maxLength) { return (str.length > maxLength ? \"\".concat(str.slice(0, maxLength), \"...\") : str); };\nexports.trimDown = trimDown;\nvar parseBoolString = function (str) {\n if (!str)\n return false;\n if (str === true)\n return true;\n var lowerStr = str.toLowerCase();\n return lowerStr === 'true' || lowerStr === '1';\n};\nexports.parseBoolString = parseBoolString;\nvar getInitials = function (name, maxLength) {\n if (maxLength === void 0) { maxLength = 3; }\n if (!name)\n return '';\n var aplhanumName = name.replace(/[^A-Za-z0-9]s/g, '');\n var alphanumNameSplit = aplhanumName.split(' ');\n return alphanumNameSplit.map(function (word, index) { var _a; return (index < maxLength ? (_a = word === null || word === void 0 ? void 0 : word[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase() : ''); }).join('');\n};\nexports.getInitials = getInitials;\nvar getPercentStringFromDecimal = function (decimal) { return \"\".concat(Math.round(decimal * 100), \"%\"); };\nexports.getPercentStringFromDecimal = getPercentStringFromDecimal;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDefaultShadows = exports.getDefaultBorders = exports.defaultPalette = void 0;\n// Important rules for custom color-palette\n// Primary and Secondary should have at least 4.5 contrast ratio to eachother\nexports.defaultPalette = {\n primary: '#06244B',\n secondary: '#0AA3A3',\n highlight: '#FFCD00',\n hover: '#09838D',\n defaultBackground: '#F1F8F8',\n secondaryBackground: '#C3E7E7',\n // common\n inputBackground: '#ffffff',\n white: '#ffffff',\n grayDark: '#626262',\n grayMiddle: '#A9A8A8',\n grayLight: '#D3D1CF',\n black: '#000000',\n red: '#CB333C',\n redLight: '#ED8E93',\n green: '#00C19F',\n greenLight: '#D0ECEC',\n hightScore: '#93C90E',\n midScore: '#003087',\n lowScore: '#87189D',\n yellow: '#FFC845',\n};\nvar getDefaultBorders = function (palette) { return ({\n normal: \"1px solid \".concat(palette.grayMiddle),\n dim: \"1px solid \".concat(palette.grayLight),\n transparent: '1px solid transparent',\n medium: \"4px solid \".concat(palette.grayMiddle),\n large: \"8px solid \".concat(palette.grayMiddle),\n primary: \"2px solid \".concat(palette.primary),\n secondary: \"2px solid \".concat(palette.secondary),\n hover: \"2px solid \".concat(palette.hover),\n dotted: \"2px dotted \".concat(palette.secondary),\n inputBox: \"1px solid \".concat(palette.secondary),\n error: \"1px solid \".concat(palette.red),\n}); };\nexports.getDefaultBorders = getDefaultBorders;\nvar getDefaultShadows = function (_palette) { return ({\n default: '-5px -5px 10px #FFFFFF, 5px 5px 10px #BDD8D8, 10px 10px 20px rgba(189, 216, 216, 0.5), -10px -10px 20px rgba(255, 255, 255, 0.5)',\n button: '2px 2px 4px rgba(0, 0, 0, 0.25))',\n}); };\nexports.getDefaultShadows = getDefaultShadows;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sortByColumn = exports.getValueByDotNotation = exports.toggleSortDirection = void 0;\nvar constants_1 = require(\"./constants\");\nvar defaultSortValue = function (dataType) {\n switch (dataType) {\n case constants_1.sortDataType.date:\n return new Date(0).getTime();\n default:\n return '';\n }\n};\nvar toggleSortDirection = function (current) { return (!current || current === constants_1.sortDirection.desc ? constants_1.sortDirection.asc : constants_1.sortDirection.desc); };\nexports.toggleSortDirection = toggleSortDirection;\nvar getValueByDotNotation = function (obj, propName, dataType) {\n if (!obj || !propName) {\n return defaultSortValue(dataType);\n }\n // @ts-ignore\n return propName.split('.').reduce(function (prev, curr) { return (prev ? prev[curr] || defaultSortValue(dataType) : defaultSortValue(dataType)); }, obj);\n};\nexports.getValueByDotNotation = getValueByDotNotation;\nvar sortCompNumber = function (a, b, sorting) { return (0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? a : b, sorting.columnName, sorting.dataType) - (0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? b : a, sorting.columnName, sorting.dataType); };\nvar sortCompList = function (a, b, sorting) { return (0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? a : b, sorting.columnName, sorting.dataType).join(',').localeCompare((0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? b : a, sorting.columnName, sorting.dataType).join(',')); };\nvar sortCompString = function (a, b, sorting) { return (0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? a : b, sorting.columnName, sorting.dataType).localeCompare((0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? b : a, sorting.columnName, sorting.dataType)); };\nvar sortCompDate = function (a, b, sorting) { return new Date((0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? b : a, sorting.columnName, sorting.dataType)).getTime() - new Date((0, exports.getValueByDotNotation)(sorting.direction === constants_1.sortDirection.asc ? a : b, sorting.columnName, sorting.dataType)).getTime(); };\nvar sortByColumn = function (array, sorting) {\n if (!array || !sorting) {\n return array || [];\n }\n switch (sorting.dataType) {\n case constants_1.sortDataType.date:\n return array.sort(function (a, b) { return sortCompDate(a, b, sorting); });\n case constants_1.sortDataType.number:\n return array.sort(function (a, b) { return sortCompNumber(a, b, sorting); });\n case constants_1.sortDataType.list:\n return array.sort(function (a, b) { return sortCompList(a, b, sorting); });\n default:\n return array.sort(function (a, b) { return sortCompString(a, b, sorting); });\n }\n};\nexports.sortByColumn = sortByColumn;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.emptyGetResponsesFunction = exports.emptyProgramItemFunction = exports.useYouwellCommonSelector = void 0;\nvar react_redux_1 = require(\"react-redux\");\nexports.useYouwellCommonSelector = react_redux_1.useSelector;\nvar emptyProgramItemFunction = function () { return null; };\nexports.emptyProgramItemFunction = emptyProgramItemFunction;\nvar emptyGetResponsesFunction = function () { return null; };\nexports.emptyGetResponsesFunction = emptyGetResponsesFunction;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AUTOSAVE_TIMEOUT_INTERVAL = void 0;\nvar react_1 = require(\"react\");\nvar objectUtils_1 = require(\"./objectUtils\");\nexports.AUTOSAVE_TIMEOUT_INTERVAL = 1000; // miliseconds\nfunction useAutosaveForm(onSaveValues, defaultValues, currentValues) {\n var saveTimer = (0, react_1.useRef)();\n var _a = (0, react_1.useState)(null), changeId = _a[0], setChangeId = _a[1];\n // Must keep constant copy of defaultValues so this should not update\n // eslint-disable-next-line react-hooks/exhaustive-deps\n var initialValues = (0, react_1.useMemo)(function () { return (__assign({}, defaultValues)); }, []);\n var _b = (0, react_1.useState)(__assign({}, initialValues)), values = _b[0], setValues = _b[1];\n var updateValues = function (updatedValues) {\n setValues(function (prevValues) { return (__assign(__assign({}, prevValues), updatedValues)); });\n setChangeId(Date.now());\n };\n var handleChange = function (name) { return function (event) {\n var _a;\n updateValues((_a = {}, _a[name] = event.target.value, _a));\n }; };\n var handleValueChange = function (name) { return function (value) {\n var _a;\n updateValues((_a = {}, _a[name] = value, _a));\n }; };\n var handleSliderChange = function (name) { return function (_event, value) {\n var _a;\n updateValues((_a = {}, _a[name] = value, _a));\n }; };\n var handleMultiSelectChange = function (name, answer) { return function (_event, checked) {\n var _a;\n var responses = (values[name] || []).filter(function (d) { return d !== answer; });\n var value = checked ? __spreadArray(__spreadArray([], responses, true), [answer], false) : responses;\n updateValues((_a = {}, _a[name] = value, _a));\n }; };\n var handleNumberChange = function (name) { return function (event) {\n var _a;\n updateValues((_a = {}, _a[name] = Number(event.target.value), _a));\n }; };\n var saveResponses = (0, react_1.useCallback)(function (updatedValues, callback, background) {\n if (changeId) {\n var internalCallback = function () {\n setChangeId(function (prevId) { return (prevId === changeId ? null : prevId); });\n if (callback) {\n callback();\n }\n };\n onSaveValues(updatedValues, internalCallback, background);\n }\n }, [changeId, onSaveValues]);\n var ensureSaved = function (callback) {\n if (changeId) {\n if (saveTimer.current) {\n clearTimeout(saveTimer.current);\n }\n saveResponses(values, callback);\n }\n else if (callback) {\n callback();\n }\n };\n (0, react_1.useEffect)(function () {\n if (changeId) {\n if (saveTimer.current) {\n clearTimeout(saveTimer.current);\n }\n saveTimer.current = setTimeout(function () {\n saveResponses(values, null, true);\n }, exports.AUTOSAVE_TIMEOUT_INTERVAL);\n }\n }, [changeId, saveResponses, values]);\n (0, react_1.useEffect)(function () {\n if (!changeId) {\n if (currentValues) {\n var valuesToSet_1 = Object.keys(currentValues)\n .reduce(function (obj, key) {\n var _a;\n return ((0, objectUtils_1.hasValue)(currentValues[key]) ? __assign(__assign({}, obj), (_a = {}, _a[key] = currentValues[key], _a)) : obj);\n }, {});\n setValues(function (prev) { return (__assign(__assign({}, prev), valuesToSet_1)); });\n }\n else {\n setValues(__assign({}, initialValues));\n }\n }\n }, [currentValues, changeId, initialValues]);\n return {\n values: values,\n handleChange: handleChange,\n handleValueChange: handleValueChange,\n handleNumberChange: handleNumberChange,\n handleMultiSelectChange: handleMultiSelectChange,\n handleSliderChange: handleSliderChange,\n ensureSaved: ensureSaved,\n };\n}\nexports.default = useAutosaveForm;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nvar validationUtils_1 = require(\"./validationUtils\");\nvar useForm = function (onSubmit, validators, defaultValues) {\n var _a = (0, react_1.useState)(defaultValues), formValues = _a[0], setValues = _a[1];\n var _b = (0, react_1.useState)({}), validationErrors = _b[0], setValidationErrors = _b[1];\n var _c = (0, react_1.useState)(false), hasErrors = _c[0], setHasErrors = _c[1];\n var _d = (0, react_1.useState)(false), shouldValidate = _d[0], setShouldValidate = _d[1];\n var _e = (0, react_1.useState)(false), hasUnsavedChanges = _e[0], setHasUnsavedChanges = _e[1];\n (0, react_1.useEffect)(function () {\n setHasErrors((0, validationUtils_1.checkHasErrors)(validationErrors));\n }, [validationErrors]);\n var resetForm = function () {\n setHasUnsavedChanges(false);\n setValues(defaultValues);\n setValidationErrors({});\n setShouldValidate(false);\n };\n var handleSubmit = function (event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n var currentErrors = (0, validationUtils_1.validateAllFields)(formValues, validators);\n if (!(0, validationUtils_1.checkHasErrors)(currentErrors)) {\n onSubmit({ formValues: formValues, resetFormCallback: resetForm, setAllChangesSaved: function () { return setHasUnsavedChanges(false); } });\n }\n setValidationErrors(currentErrors);\n setShouldValidate(true);\n };\n var handleValueChange = function (name, value) {\n var _a;\n var _b;\n setValues(function (prevValues) {\n var _a;\n return (__assign(__assign({}, prevValues), (_a = {}, _a[name] = value, _a)));\n });\n setHasUnsavedChanges(true);\n if (shouldValidate) {\n var err_1 = (0, validationUtils_1.validateField)(__assign(__assign({}, formValues), (_a = {}, _a[name] = value, _a)), (_b = validators[name]) !== null && _b !== void 0 ? _b : null, name);\n setValidationErrors(function (prevErrors) {\n var _a;\n return (__assign(__assign({}, prevErrors), (_a = {}, _a[name] = err_1, _a)));\n });\n }\n };\n var handleChange = function (name) { return function (event) {\n handleValueChange(name, event.target.value);\n }; };\n var handleCheckedChange = function (name) { return function (event) {\n handleValueChange(name, event.target.checked);\n }; };\n return {\n handleValueChange: handleValueChange,\n handleChange: handleChange,\n handleCheckedChange: handleCheckedChange,\n handleSubmit: handleSubmit,\n formValues: formValues,\n validationErrors: validationErrors,\n hasErrors: hasErrors,\n hasUnsavedChanges: hasUnsavedChanges,\n resetForm: resetForm,\n };\n};\nexports.default = useForm;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nvar useSimpleOffline = function () {\n var _a = (0, react_1.useState)(!navigator.onLine), isOffline = _a[0], setIsOffline = _a[1];\n (0, react_1.useEffect)(function () {\n var onOffline = function () { setIsOffline(true); };\n var onOnline = function () { setIsOffline(false); };\n window.addEventListener('online', onOnline);\n window.addEventListener('offline', onOffline);\n return function () {\n window.removeEventListener('online', onOnline);\n window.removeEventListener('offline', onOffline);\n };\n }, []);\n return isOffline;\n};\nexports.default = useSimpleOffline;\n","\"use strict\";\n/* eslint-disable */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://gist.github.com/jed/982883\nfunction b(a // placeholder\n) {\n return a // if the placeholder was passed, return\n ? ( // a random number from 0 to 15\n a ^ // unless b is 8,\n Math.random() // in which case\n * 16 // a random number from\n >> a / 4 // 8 to 11\n ).toString(16) // in hexadecimal\n : ( // or otherwise a concatenated string:\n // @ts-ignore\n [1e7] + // 10000000 +\n -1e3 + // -1000 +\n -4e3 + // -4000 +\n -8e3 + // -80000000 +\n -1e11 // -100000000000,\n ).replace(// replacing\n /[018]/g, // zeroes, ones, and eights with\n b // random hex digits\n );\n}\nexports.default = b;\n","\"use strict\";\n// Allow any for validation-functions\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateFieldLecagy_TOBEREMOVED = exports.validateAllFields = exports.validateField = exports.checkHasErrors = exports.validateFnr = exports.validatePasswordConfirm = exports.validatePassword = exports.validateDate = exports.validateRoleArray = exports.validateRole = exports.validateEmail = exports.validateChars = exports.validateRequired = exports.noValidation = void 0;\nvar objectUtils_1 = require(\"./objectUtils\");\nvar noValidation = function () { return ({ valid: true, errorTextKey: null }); };\nexports.noValidation = noValidation;\nvar validateRequired = function (text) { return ({\n valid: !!text && text.toString().trim().length >= 1,\n errorTextKey: 'validations.mandatory',\n}); };\nexports.validateRequired = validateRequired;\nvar validateChars = function (maxChars) { return function (text) { return ({\n valid: !text || text.length < maxChars,\n errorTextKey: 'validations.text_too_long',\n}); }; };\nexports.validateChars = validateChars;\nvar rfcEmail = /^(([^<>()\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nvar validateEmail = function (email) { return ({\n valid: !email || rfcEmail.test(email.toString()),\n errorTextKey: 'validations.not_valid_email',\n}); };\nexports.validateEmail = validateEmail;\nvar validateRole = function (role) { return ({\n valid: !!role && role.toString().trim().length >= 1,\n errorTextKey: 'validations.please_select_role',\n}); };\nexports.validateRole = validateRole;\nvar validateRoleArray = function (role) { return ({\n valid: Array.isArray(role) && role.length >= 1,\n errorTextKey: 'validations.please_select_role',\n}); };\nexports.validateRoleArray = validateRoleArray;\nvar validateDate = function (date) { return ({\n valid: !date || Date.parse(date.toString()) < 4102444800000,\n errorTextKey: 'validations.notValidDate',\n}); };\nexports.validateDate = validateDate;\nvar validatePassword = function (password) { return ({\n valid: !password || password.toString().trim().length >= 8,\n errorTextKey: 'validations.password_must_be_at_least_eight_characters',\n}); };\nexports.validatePassword = validatePassword;\nvar validatePasswordConfirm = function (passwordConfirm, allFields, fieldName) { return ({\n valid: (!passwordConfirm && !allFields[fieldName.slice(0, -'Confirm'.length)]) || passwordConfirm === allFields[fieldName.slice(0, -'Confirm'.length)],\n errorTextKey: 'validations.passwords_does_not_match',\n}); };\nexports.validatePasswordConfirm = validatePasswordConfirm;\nvar validateFnr = function (fnr) {\n if (!(0, objectUtils_1.hasValue)(fnr)) {\n return {\n valid: true,\n errorTextKey: null,\n };\n }\n var birthNumber = fnr === null || fnr === void 0 ? void 0 : fnr.toString();\n if (!birthNumber || birthNumber.length !== 11) {\n return {\n valid: false,\n errorTextKey: 'validations.notValidFnr',\n };\n }\n var calculate = function (number, factors) {\n var sum = 0;\n for (var i = 0, l = factors.length; i < l; ++i) {\n sum += parseInt(number.charAt(i), 10) * factors[i];\n }\n return sum;\n };\n var checksum1 = 11 - (calculate(birthNumber, [3, 7, 6, 1, 8, 9, 4, 5, 2]) % 11);\n if (checksum1 === 11)\n checksum1 = 0;\n var checksum2 = 11 - (calculate(birthNumber, [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]) % 11);\n if (checksum2 === 11)\n checksum2 = 0;\n return {\n valid: checksum1 === parseInt(birthNumber.charAt(9), 10)\n && checksum2 === parseInt(birthNumber.charAt(10), 10),\n errorTextKey: 'validations.notValidFnr',\n };\n};\nexports.validateFnr = validateFnr;\nvar checkHasErrors = function (errors) { return Object.keys(errors).reduce(function (prev, key) { return prev || (errors[key] !== null); }, false); };\nexports.checkHasErrors = checkHasErrors;\nvar validateField = function (values, validatorFunction, fieldName) {\n if (!validatorFunction)\n return null;\n var validatorFunctions = Array.isArray(validatorFunction) ? validatorFunction : [validatorFunction];\n var validation = validatorFunctions.reduce(function (prev, currentFunction) {\n if (!currentFunction)\n return prev;\n var currentValidation = currentFunction(values[fieldName], values, fieldName);\n return ({\n valid: prev.valid && currentValidation.valid,\n errorTextKey: prev.valid ? currentValidation.errorTextKey : prev.errorTextKey,\n });\n }, { valid: true, errorTextKey: '' });\n return validation.valid ? null : validation.errorTextKey;\n};\nexports.validateField = validateField;\nvar validateAllFields = function (values, validators) { return Object.keys(validators).reduce(function (prev, key) {\n var _a;\n var _b;\n return (validators[key] ? __assign(__assign({}, prev), (_a = {}, _a[key] = (0, exports.validateField)(values, (_b = validators[key]) !== null && _b !== void 0 ? _b : null, key), _a)) : prev);\n}, {}); };\nexports.validateAllFields = validateAllFields;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nvar validateFieldLecagy_TOBEREMOVED = function (state, validatorFunction, fieldName) {\n var _a;\n var validatorFunctions = validatorFunction ? [].concat(validatorFunction) : [];\n var validation = validatorFunctions.reduce(function (prev, currentFunction) {\n if (!currentFunction)\n return prev;\n // @ts-ignore - legacy function -> To be removed!\n var currentValidation = currentFunction(state[fieldName], state, fieldName);\n return ({\n valid: prev.valid && currentValidation.valid,\n errorTextKey: prev.valid ? currentValidation.errorTextKey : prev.errorTextKey,\n });\n }, { valid: true, errorTextKey: '' });\n var validationErrors = __assign(__assign({}, state.validationErrors), (_a = {}, _a[fieldName] = validation.valid ? null : validation.errorTextKey, _a));\n var hasErrors = Object.keys(validationErrors).reduce(function (prev, key) { return prev || (key !== 'hasErrors' && validationErrors[key] !== null); }, false);\n return __assign(__assign({}, validationErrors), { hasErrors: hasErrors });\n};\nexports.validateFieldLecagy_TOBEREMOVED = validateFieldLecagy_TOBEREMOVED;\n"],"sourceRoot":""}