{"version":3,"sources":["components/FormField.js","helpers/currency.js","components/CrudDataTable/useCrudDataTable.js","components/DataSelect/DataSelect.js","components/DataSelect/index.js","blocks/VentureForm/VentureForm.js","hooks/useAbilityList.js","blocks/VentureTableList/VentureTableList.js","constants/role.constants.js","components/ConfirmDialog.js","modules/user.module.js","components/DataTable.js","blocks/VenturePeriodForm/HeadcountFieldSet.js","blocks/VenturePeriodForm/SourceFieldArray/SourceFieldArray.config.js","blocks/VenturePeriodForm/GoalsFieldArray/GoalsFieldArray.config.js","blocks/VenturePeriodForm/VenturePeriodForm.config.js","components/FormFieldList/FormFieldList.js","blocks/VenturePeriodForm/GoalsFieldArray/GoalFieldSet.js","blocks/VenturePeriodForm/GoalsFieldArray/GoalsFieldArray.js","components/DatePickerField.js","blocks/VenturePeriodForm/SourceFieldArray/SourceFieldSet.js","blocks/VenturePeriodForm/SourceFieldArray/SourceFieldArray.js","blocks/VenturePeriodForm/RunwayInput.js","blocks/VenturePeriodForm/VenturePeriodForm.js","blocks/VentureTableList/VenturePeriodsTable.js","blocks/DataManagement/ListCrudTable.config.js","blocks/UserManagement/UserManagement.config.js","blocks/UserManagement/UserForm.js","blocks/DataManagement/ListCrudTable.container.js","components/CrudDataTable/CrudDataTable.js","theme/palette.js","theme/index.js","utils/renderRoutes.js","components/ListItemLink.js","layouts/Sidebar.js","blocks/Search/Search.js","layouts/MainLayout/MainLayout.js","pages/VenturesPage.js","blocks/Login/PasswordForm.js","blocks/Login/ResetPasswordForm.js","pages/ResetPasswordPage.js","pages/CreatePasswordPage.js","blocks/Login/ChangePasswordForm.js","pages/ChangePasswordPage.js","blocks/Login/ForgotPasswordButton.js","blocks/Login/LoginForm.js","pages/LoginPage.js","modules/app.module.js","hooks/useAppSettings.js","pages/HomePage.js","layouts/HomeLayout.js","blocks/SettingsForm/SettingsForm.js","pages/SettingsPage.js","pages/UserManagementPage.js","routes.js","App.js","hooks/useAuth.js","Root.js","serviceWorker.js","index.js","components/DataSelect/DataSelect.config.js","modules/data.module.js","components/Form/Form.js","components/Form/index.js","components/Link.js","modules/ventures.module.js","modules/configureStore.js","modules/crudModuleBuilder.js","constants/validation.constants.js","helpers/dateUtils.js","pages/Page.js","hooks/useAbility.js"],"names":["FormField","disabled","Component","as","helperText","name","props","field","isSubmitting","form","meta","showError","error","touched","newProps","defaultProps","TextField","toCurrency","value","toLocaleString","undefined","style","currency","maximumFractionDigits","minimumFractionDigits","defaultGetFormInitialValues","editItem","initialValues","defaultRequest","useCrudDataTable","title","apiModule","FormComponent","dialogProps","getFormInitialValues","allColumns","columns","other","createMutation","getListRequest","updateMutation","deleteMutation","listSelector","useAbilityList","useRequest","isPending","useMutation","createItem","editRow","deleteRow","data","useSelector","useState","isOpenEditDialog","setIsOpenEditDialog","setEditItem","dialogTitle","setDialogTitle","handleCloseEditDialog","useCallback","handleCreate","handleEditRow","item","getDialogProps","open","onClose","getFormProps","onReset","onSuccess","onSubmit","enableReinitialize","canCreate","canEdit","canDelete","onCreate","onEditRow","onDeleteRow","DataSelect","source","API_SOURCE_CONFIG","options","select","variant","map","option","MenuItem","key","id","VALIDATION_SCHEMA","object","string","max","ERROR_MESSAGES","maxNumber","required","owner","email","nullable","cohort","INITIAL_VALUES","VentureForm","validationSchema","container","spacing","xs","md","label","fullWidth","type","DATA_SOURCE","COHORT","createAblityListChecker","subItemsKey","can","filterItems","items","filter","permission","list","ability","useAbility","useMemo","checkList","VENTURE_TABLE_COLUMNS","Header","accessor","row","color","component","Link","to","periods","length","stage","formatMonth","date","sortType","a","original","b","sortByDate","reduce","total","sales","ROLE","ADMIN","VIEWER","formatDateTime","updatedAt","EDIT_CELL_COLUMN","DELETE_CELL_COLUMN","renderRowSubComponent","venture","px","pb","size","ventureId","VentureTableList","defaultExpaned","0","venturesApiModule","initialState","expanded","USER","ConfirmDialog","onOk","children","message","okButtonText","cancelButtonText","setOpen","errorMessage","setErrorMessage","handleClose","handleClick","handleOk","Promise","resolve","then","catch","err","React","cloneElement","onClick","loginMutation","body","url","update","user","prev","next","transform","logoutMutation","method","restorePasswordMutation","resetPasswordMutation","password","hash","changePasswordMutation","oldPassword","getUserRequest","userSelector","createSelector","entitiesSelector","rowsPerPageOptions","DataTable","stickyHeader","useTable","pageSize","useSortBy","useExpanded","usePagination","getTableProps","getTableBodyProps","headerGroups","rows","flatColumns","page","gotoPage","setPageSize","prepareRow","state","pageIndex","handleChangePage","e","newPage","handleChangeRowsPerPage","target","headerGroup","getHeaderGroupProps","headers","column","canSort","getHeaderProps","getSortByToggleProps","render","active","isSorted","direction","isSortedDesc","getRowProps","cells","cell","getCellProps","padding","getExpandedToggleProps","isExpanded","colSpan","labelRowsPerPage","count","rowsPerPage","onChangePage","onChangeRowsPerPage","ActionsComponent","TablePaginationActions","fullTime","number","invalid","min","minNumber","partTime","contractors","others","HeadcountFieldSet","Card","CardContent","Typography","Grid","sm","SOURCE_INITIAL_VALUE","SOURCE_VALIDATION_SCHEMA","positive","GOAL_STATUS","GOAL_INITIAL_VALUE","status","text","GOAL_VALIDATION_SCHEMA","headcount","HEADCOUNT_VALIDATION_SCHEMA","progress","plans","risks","burnRate","cashInBank","payingCustomers","customerTrials","marketingSpend","technicalSpend","partners","runway","integer","ipStatus","businessPlan","link","pitchDeck","goals","array","of","debts","investments","grants","valuations","getKey","index","FormFieldList","description","addLabel","renderItem","onAdd","onRemove","gutterBottom","TableContainer","Table","TableBody","TableRow","TableCell","align","IconButton","Button","startIcon","memo","GoalStatusSelect","GoalFieldSet","alignItems","autoComplete","push","remove","useField","handleAdd","Date","now","handleRemove","DatePickerField","setFieldValue","setFieldError","currentError","errors","handleChange","handleError","DatePicker","autoOk","Boolean","onError","onChange","SourceFieldSet","sourceType","wrap","InputProps","startAdornment","InputAdornment","position","width","TITLE_BY_SOURCE_TYPE","DEBTS","INVESTMENTS","GRANTS","VALUATIONS","setValue","i","RunwayInput","burnRateName","cashName","cash","useEffect","toFixed","VenturePeriodForm","Form","views","format","disableFuture","inputVariant","maxDate","VENTURE_STAGES","multiline","rowsMax","lg","GoalsFieldArray","PERIOD_COLUMNS","VenturePeriodsTable","lastPeriodDate","setMonth","getMonth","period","venturePeriodApiModule","maxWidth","sortBy","desc","CrudDataTable","AUDIT_COLUMNS","updatedBy","BASE_COLUMNS","ListForm","ROLES","userColumns","activated","role","oneOf","UserForm","TABLE_CONFIG_BY_TYPE","ventures","VANTURE_INITIAL_VALUES","investmentsApiModule","debtsApiModule","ventureStages","ventureStagesApiModule","valuationsApiModule","grantsApiModule","cohorts","cohortsApiModule","users","usersApiModule","USER_INITIAL_VALUES","ListCrudTable","disableSortBy","Cell","elevation","visibility","aria-label","top","right","white","black","primary","contrastText","dark","main","light","success","info","colors","blue","warning","orange","red","blueGrey","secondary","background","default","paper","theme","createMuiTheme","palette","zIndex","appBar","drawer","overrides","MuiDialogContent","root","MuiTableCell","backgroundColor","MuiGrid","display","renderRoutes","routes","extraProps","switchProps","fallback","CircularProgress","route","path","exact","strict","ListItemLink","icon","ListItem","ListItemIcon","ListItemText","useStyles","makeStyles","toolbar","mixins","flexShrink","whiteSpace","drawerOpen","overflow","transition","transitions","create","easing","sharp","duration","enteringScreen","drawerClose","leavingScreen","overflowX","Sidebar","menuItems","classes","Drawer","className","clsx","List","button","search","borderRadius","shape","fade","common","marginLeft","breakpoints","up","searchIcon","height","pointerEvents","justifyContent","inputRoot","inputInput","SearchInput","inputProps","InputBase","ref","placeholder","input","Search","useHistory","cohortsSelector","filterOptions","createFilterOptions","matchFrom","stringify","c","v","pathname","qs","Autocomplete","blurOnSelect","getOptionLabel","renderOption","Chip","renderInput","header","content","flexGrow","UserInfo","logout","anchorEl","setAnchorEl","event","currentTarget","handleMenuClose","Menu","keepMounted","anchorOrigin","vertical","horizontal","transformOrigin","getContentAnchorEl","MainLayout","handleDrawerToggle","AppBar","Toolbar","Hidden","mdUp","implementation","edge","menuButton","hide","VenturesPage","Page","confirmPassword","serverError","VALIDATION_RULES","PasswordForm","resetPassword","onCancel","margin","ResetPasswordForm","ResetPasswordPage","history","location","Container","Box","mt","parse","ignoreQueryPrefix","CreatePasswordPage","ChangePasswordForm","ChangePasswordPage","ForgotPasswordButton","forgotPassword","res","Error","LoginForm","login","showButtons","FormHelperText","LoginPage","updateSettingsMutation","settings","settingsSelector","useAppSettings","force","documents","HomePage","backgroundImage","backgroundSize","pt","ExpansionPanel","defaultExpanded","ExpansionPanelSummary","expandIcon","ExpansionPanelDetails","d","href","feedbackLink","HomeLayout","NavLink","SettingsForm","updateAppSettings","SettingsPage","UserManagementPage","DashboardPage","lazy","VentureDetailsPage","DataManagementPage","RedirectToRelativePage","firstAvailableRoute","getFirstAvailableRoute","routeList","excludeRoute","Array","isArray","auth","DashboardOutlinedIcon","FormatListBulletedOutlinedIcon","SettingsOutlinedIcon","GroupAddOutlinedIcon","TuneOutlinedIcon","App","isFinished","isAuthorized","useAuth","awailableRoutes","Backdrop","invisible","store","configureStore","Root","ThemeProvider","CssBaseline","utils","DateFnsUtils","queriesSelector","window","hostname","match","ReactDOM","document","getElementById","navigator","serviceWorker","ready","registration","unregister","crudModuleBuilder","subject","handleSubmit","dirty","noValidate","justify","forwardRef","underline","RouterLink","propTypes","PropTypes","node","isRequired","obj","pos","arr","mapObj","indexOf","getVentureByIdRequest","findIndex","splice","getVentureByIdSelector","find","periodId","queries","entities","errorsSelector","rootReducer","combineReducers","entitiesReducer","queriesReducer","errorsReducer","createStore","composeWithDevTools","applyMiddleware","queryMiddleware","superagentInterface","minLength","maxLength","trim","matches","year","month","day","hour","minute","p","includes","isAdmin","adminOnly"],"mappings":"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","file":"static/js/main.10095fb0.chunk.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field } from 'formik';\nimport { TextField } from '@material-ui/core';\n\nconst FormField = ({\n disabled,\n as: Component,\n helperText,\n name,\n ...props\n}) => (\n \n {({\n field,\n form: { isSubmitting },\n meta,\n }) => {\n const showError = meta.error && meta.touched;\n\n const newProps = {\n disabled: disabled || isSubmitting,\n error: showError,\n helperText: showError ? (\n <>\n {meta.error}\n {' '}\n {helperText}\n \n ) : helperText,\n };\n\n return (\n \n );\n }}\n \n);\n\nFormField.propTypes = {\n name: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n as: PropTypes.elementType,\n helperText: PropTypes.node,\n};\n\nFormField.defaultProps = {\n as: TextField,\n disabled: false,\n helperText: null,\n};\n\nexport default FormField;\n","export const toCurrency = (value) => value.toLocaleString(undefined, {\n style: 'currency',\n currency: 'GBP',\n maximumFractionDigits: 0,\n minimumFractionDigits: 0,\n});\n","import { useCallback, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useRequest, useMutation } from 'redux-query-react';\nimport useAbilityList from '../../hooks/useAbilityList';\n\nconst defaultGetFormInitialValues = (editItem, initialValues) => editItem || initialValues;\nconst defaultRequest = () => null;\n\nconst useCrudDataTable = ({\n title,\n apiModule = {},\n FormComponent,\n initialValues,\n dialogProps,\n getFormInitialValues = defaultGetFormInitialValues,\n columns: allColumns,\n ...other\n}) => {\n const {\n createMutation = defaultRequest,\n getListRequest = defaultRequest,\n updateMutation = defaultRequest,\n deleteMutation = defaultRequest,\n listSelector = () => [],\n } = apiModule;\n\n const columns = useAbilityList(allColumns);\n\n const [{ isPending }] = useRequest(getListRequest());\n\n const [, createItem] = useMutation(createMutation);\n const [, editRow] = useMutation(updateMutation);\n const [, deleteRow] = useMutation(deleteMutation);\n const data = useSelector(listSelector);\n\n const [isOpenEditDialog, setIsOpenEditDialog] = useState(false);\n const [editItem, setEditItem] = useState(null);\n const [dialogTitle, setDialogTitle] = useState(null);\n const handleCloseEditDialog = useCallback(() => setIsOpenEditDialog(false), []);\n\n const handleCreate = useCallback(() => {\n setEditItem(null);\n setIsOpenEditDialog(true);\n setDialogTitle(`Create new ${title}`);\n }, [title]);\n\n const handleEditRow = useCallback((item) => {\n setEditItem(item);\n setIsOpenEditDialog(true);\n setDialogTitle(`Edit ${title}`);\n }, [title]);\n\n const getDialogProps = useCallback(() => ({\n ...dialogProps,\n open: isOpenEditDialog,\n onClose: handleCloseEditDialog,\n }), [dialogProps, handleCloseEditDialog, isOpenEditDialog]);\n\n const getFormProps = useCallback(() => ({\n onReset: handleCloseEditDialog,\n onSuccess: handleCloseEditDialog,\n onSubmit: editItem ? editRow : createItem,\n initialValues: getFormInitialValues(editItem, initialValues),\n enableReinitialize: true,\n }), [createItem, editItem, editRow, getFormInitialValues, handleCloseEditDialog, initialValues]);\n\n return {\n isPending,\n data,\n canCreate: !!(apiModule.createMutation && FormComponent),\n canEdit: !!(apiModule.updateMutation && FormComponent),\n canDelete: !!(apiModule.deleteMutation),\n onCreate: handleCreate,\n onEditRow: handleEditRow,\n onDeleteRow: deleteRow,\n title,\n dialogTitle,\n columns,\n\n getDialogProps,\n getFormProps,\n FormComponent,\n ...other,\n };\n};\n\nexport default useCrudDataTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useRequest } from 'redux-query-react';\n\nimport { MenuItem, TextField } from '@material-ui/core';\nimport { API_SOURCE_CONFIG, DATA_SOURCE } from './DataSelect.config';\n\nconst DataSelect = ({ source, ...props }) => {\n const { getListRequest, listSelector } = API_SOURCE_CONFIG[source];\n\n useRequest(getListRequest());\n\n const options = useSelector(listSelector);\n\n return (\n \n {options.map((option) => (\n {option.name}\n ))}\n \n );\n};\n\nDataSelect.propTypes = {\n source: PropTypes.oneOf(Object.values(DATA_SOURCE)).isRequired,\n};\n\nexport default DataSelect;\n","export { default } from './DataSelect';\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { object, string } from 'yup';\nimport {\n Grid,\n} from '@material-ui/core';\n\nimport Form from '../../components/Form';\nimport FormField from '../../components/FormField';\nimport DataSelect from '../../components/DataSelect';\nimport { DATA_SOURCE } from '../../components/DataSelect/DataSelect.config';\nimport { ERROR_MESSAGES } from '../../constants/validation.constants';\n\nexport const VALIDATION_SCHEMA = object({\n name: string()\n .max(100, ERROR_MESSAGES.maxNumber)\n .required(ERROR_MESSAGES.required),\n\n owner: object({\n email: string()\n .email(ERROR_MESSAGES.email)\n .required(ERROR_MESSAGES.required),\n }).nullable(),\n\n cohort: object().nullable(),\n});\n\nexport const INITIAL_VALUES = {\n name: '',\n owner: {\n email: '',\n },\n cohort: {\n id: '',\n },\n};\n\nconst VentureForm = ({ initialValues, ...props }) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nVentureForm.propTypes = {\n initialValues: PropTypes.shape({}),\n};\n\nVentureForm.defaultProps = {\n initialValues: null,\n};\n\nexport default VentureForm;\n","import { useMemo } from 'react';\nimport useAbility from './useAbility';\n\nconst createAblityListChecker = ({ can }, subItemsKey) => function filterItems(items) {\n return items.filter((item) => can(item.permission)).map((item) => {\n if (!item[subItemsKey]) {\n return item;\n }\n return {\n ...item,\n [subItemsKey]: filterItems(item[subItemsKey]),\n };\n });\n};\n\nconst useAbilityList = (list, subItemsKey = 'items') => {\n const ability = useAbility();\n\n return useMemo(() => {\n const checkList = createAblityListChecker(ability, subItemsKey);\n\n return checkList(list);\n }, [ability, list, subItemsKey]);\n};\n\nexport default useAbilityList;\n","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Box } from '@material-ui/core';\nimport Link from '../../components/Link';\nimport VenturePeriodsTable from './VenturePeriodsTable';\nimport CrudDataTable, { EDIT_CELL_COLUMN, DELETE_CELL_COLUMN } from '../../components/CrudDataTable/CrudDataTable';\nimport useCrudDataTable from '../../components/CrudDataTable/useCrudDataTable';\nimport { venturesApiModule } from '../../modules/ventures.module';\nimport VentureForm, { INITIAL_VALUES } from '../VentureForm/VentureForm';\nimport useAbility from '../../hooks/useAbility';\nimport { formatDateTime, formatMonth, sortByDate } from '../../helpers/dateUtils';\nimport { toCurrency } from '../../helpers/currency';\nimport ROLE from '../../constants/role.constants';\n\nexport const VENTURE_TABLE_COLUMNS = [\n {\n Header: 'Name',\n id: 'name',\n accessor: (row) => (\n \n {row.name}\n \n ),\n },\n {\n Header: 'Cohort',\n id: 'cohort',\n accessor: (row) => row.cohort && (\n \n {row.cohort.name}\n \n ),\n },\n {\n Header: 'Stage',\n id: 'stage',\n accessor: (row) => (row.periods.length ? row.periods[row.periods.length - 1].stage.name : '-'),\n },\n {\n Header: 'Periods',\n id: 'periods',\n accessor: (row) => row.periods[0] ? `${formatMonth(row.periods[0].date)} - ${formatMonth(row.periods[row.periods.length - 1].date)}` : '-',\n sortType: ({ original: { periods: a } }, { original: { periods: b } }) => sortByDate(a[0]?.date, b[0]?.date),\n },\n {\n Header: 'Total-Sales',\n id: 'total-sales',\n accessor: (row) => toCurrency(row.periods.reduce((total, { sales }) => total + sales, 0)),\n },\n {\n Header: 'Owner',\n id: 'owner',\n accessor: (row) => row.owner && row.owner.email,\n permission: [ROLE.ADMIN, ROLE.VIEWER],\n },\n {\n Header: 'Last Updated At',\n id: 'updatedAt',\n accessor: (row) => formatDateTime(row.updatedAt),\n },\n {\n ...EDIT_CELL_COLUMN,\n permission: [ROLE.ADMIN],\n },\n DELETE_CELL_COLUMN,\n];\n\nconst renderRowSubComponent = ({ original: venture }) => (\n \n \n \n);\n\nconst VentureTableList = () => {\n const { can } = useAbility();\n const defaultExpaned = useMemo(() => ({\n 0: !can([ROLE.ADMIN, ROLE.VIEWER]),\n }), [can]);\n\n const options = {\n title: 'Venture',\n FormComponent: VentureForm,\n initialValues: INITIAL_VALUES,\n columns: VENTURE_TABLE_COLUMNS,\n canCreate: can([ROLE.ADMIN]),\n apiModule: venturesApiModule,\n initialState: {\n expanded: defaultExpaned,\n },\n };\n const props = useCrudDataTable(options);\n\n return (\n \n );\n};\n\nVentureTableList.propTypes = {\n data: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n })),\n};\n\nVentureTableList.defaultProps = {\n data: [],\n};\n\nexport default VentureTableList;\n","export default {\n ADMIN: 'ADMIN',\n VIEWER: 'VIEWER',\n USER: 'USER',\n};\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Dialog, Button, DialogActions, DialogContent, DialogTitle, Typography,\n} from '@material-ui/core';\n\nconst ConfirmDialog = ({\n onOk, children, title, message, okButtonText, cancelButtonText, ...props\n}) => {\n const [open, setOpen] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleClick = useCallback(() => {\n setOpen(true);\n }, []);\n\n const handleOk = useCallback(() => {\n Promise.resolve().then(onOk).then(() => {\n setOpen(false);\n })\n .catch((err) => {\n setErrorMessage(err.message || 'Something went wrong');\n });\n }, [onOk]);\n\n return (\n <>\n {React.cloneElement(children, { onClick: handleClick })}\n \n {title && {title}}\n \n {message}\n \n \n {errorMessage && (\n {errorMessage}\n )}\n \n \n \n \n \n );\n};\n\nConfirmDialog.propTypes = {\n onOk: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n message: PropTypes.node.isRequired,\n okButtonText: PropTypes.node,\n cancelButtonText: PropTypes.node,\n title: PropTypes.node,\n};\n\nConfirmDialog.defaultProps = {\n okButtonText: 'Yes',\n cancelButtonText: 'Cancel',\n title: null,\n};\n\nexport default ConfirmDialog;\n","import { createSelector } from 'reselect';\nimport { entitiesSelector } from './configureStore';\n\nexport const loginMutation = (body) => ({\n url: '/api/login',\n body,\n update: {\n user: (prev, next) => next,\n },\n transform: (user) => ({\n user,\n }),\n});\n\nexport const logoutMutation = () => ({\n url: '/api/logout',\n options: {\n method: 'GET',\n },\n update: {\n user: (prev, next) => next,\n },\n transform: () => ({\n user: null,\n }),\n});\n\nexport const restorePasswordMutation = (email) => ({\n url: '/api/login/restore-password',\n body: {\n email,\n },\n});\n\nexport const resetPasswordMutation = ({ password, hash }) => ({\n url: '/api/login/reset-password',\n body: {\n hash,\n password,\n },\n});\n\nexport const changePasswordMutation = ({ password, oldPassword }) => ({\n url: '/api/login/change-password',\n body: {\n oldPassword,\n password,\n },\n});\n\nexport const getUserRequest = () => ({\n url: '/api/user',\n update: {\n user: (prev, next) => next,\n },\n transform: (user) => ({\n user,\n }),\n});\nexport const userSelector = createSelector(\n entitiesSelector,\n ({ user }) => user || null,\n);\n","import React, { Fragment, useCallback } from 'react';\nimport {\n Table,\n TableHead,\n TableRow,\n TableCell,\n TableBody,\n IconButton,\n TableFooter,\n TablePagination,\n TableSortLabel,\n} from '@material-ui/core';\nimport TablePaginationActions from '@material-ui/core/TablePagination/TablePaginationActions';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\nimport {\n usePagination,\n useSortBy,\n useTable,\n useExpanded,\n} from 'react-table';\n\nconst rowsPerPageOptions = [10, 20, 50];\n\nconst DataTable = ({ initialState, stickyHeader, ...props }) => {\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n flatColumns,\n page,\n gotoPage,\n setPageSize,\n prepareRow,\n renderRowSubComponent,\n state: { pageIndex, pageSize },\n } = useTable({\n initialState: {\n pageSize: 10,\n ...initialState,\n },\n ...props,\n }, useSortBy, useExpanded, usePagination);\n\n const items = page || rows;\n\n const handleChangePage = useCallback((e, newPage) => {\n gotoPage(newPage);\n }, [gotoPage]);\n\n const handleChangeRowsPerPage = useCallback((e) => {\n setPageSize(e.target.value);\n }, [setPageSize]);\n\n return (\n \n \n {headerGroups.map((headerGroup) => (\n \n {headerGroup.headers.map((column) => (\n \n {column.render('Header')}\n {column.canSort && (\n \n )}\n \n ))}\n {renderRowSubComponent && (\n \n )}\n \n ))}\n \n \n {items.map((row) => {\n prepareRow(row);\n return (\n \n \n {row.cells.map((cell) => (\n \n {cell.render('Cell')}\n \n ))}\n {renderRowSubComponent && (\n \n \n {row.isExpanded ? : }\n \n \n )}\n \n {row.isExpanded ? (\n \n \n {renderRowSubComponent(row)}\n \n \n ) : null}\n \n );\n })}\n \n {(rows.length > rowsPerPageOptions[0]) && (\n \n \n \n \n \n )}\n
\n );\n};\n\nexport default DataTable;\n","import React from 'react';\nimport {\n Grid, Card, CardContent, Typography,\n} from '@material-ui/core';\nimport { number, object } from 'yup';\nimport FormField from '../../components/FormField';\nimport { ERROR_MESSAGES } from '../../constants/validation.constants';\n\nexport const HEADCOUNT_INITIAL_VALUE = {\n fullTime: 0,\n partTime: 0,\n contractors: 0,\n others: 0,\n};\n\nexport const VALIDATION_SCHEMA = object({\n fullTime: number(ERROR_MESSAGES.invalid)\n .min(0, ERROR_MESSAGES.minNumber)\n .required(ERROR_MESSAGES.required),\n partTime: number(ERROR_MESSAGES.invalid)\n .min(0)\n .required(ERROR_MESSAGES.required),\n contractors: number(ERROR_MESSAGES.invalid)\n .min(0, ERROR_MESSAGES.minNumber)\n .required(ERROR_MESSAGES.required),\n others: number(ERROR_MESSAGES.invalid)\n .min(0, ERROR_MESSAGES.minNumber)\n .required(ERROR_MESSAGES.required),\n});\n\nconst HeadcountFieldSet = () => (\n \n \n \n Headcount\n \n \n All individuals working in the venture this month\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default HeadcountFieldSet;\n","import { object, number, string } from 'yup';\nimport { ERROR_MESSAGES } from '../../../constants/validation.constants';\n\nexport const SOURCE_INITIAL_VALUE = {\n source: {\n id: '',\n },\n value: '',\n};\n\nexport const SOURCE_VALIDATION_SCHEMA = object({\n source: object({\n id: string().required(ERROR_MESSAGES.required),\n })\n .nullable(),\n value: number(ERROR_MESSAGES.invalid)\n .positive(ERROR_MESSAGES.positive)\n .required(ERROR_MESSAGES.required),\n});\n","import {\n string, object,\n} from 'yup';\nimport { ERROR_MESSAGES } from '../../../constants/validation.constants';\n\nexport const GOAL_STATUS = {\n COMPLETED: 'COMPLETED',\n IN_PROGRESS: 'IN_PROGRESS',\n INCOMPLETE: 'INCOMPLETE',\n};\n\nexport const GOAL_INITIAL_VALUE = {\n status: GOAL_STATUS.IN_PROGRESS,\n text: '',\n};\n\nexport const GOAL_VALIDATION_SCHEMA = object({\n status: string().nullable().required(ERROR_MESSAGES.required),\n text: string(ERROR_MESSAGES.invalid)\n .required(ERROR_MESSAGES.required),\n});\n","import {\n object, string, number, array, date,\n} from 'yup';\nimport { ERROR_MESSAGES } from '../../constants/validation.constants';\nimport { VALIDATION_SCHEMA as HEADCOUNT_VALIDATION_SCHEMA, HEADCOUNT_INITIAL_VALUE } from './HeadcountFieldSet';\nimport { SOURCE_VALIDATION_SCHEMA } from './SourceFieldArray/SourceFieldArray.config';\nimport { GOAL_VALIDATION_SCHEMA } from './GoalsFieldArray/GoalsFieldArray.config';\n\nexport const VALIDATION_SCHEMA = object({\n date: date().nullable().required(ERROR_MESSAGES.required),\n stage: object({\n id: string().required(ERROR_MESSAGES.required),\n }).nullable(),\n\n headcount: HEADCOUNT_VALIDATION_SCHEMA,\n\n progress: string(ERROR_MESSAGES.invalid),\n plans: string(ERROR_MESSAGES.invalid),\n risks: string(ERROR_MESSAGES.invalid),\n\n burnRate: number().required(ERROR_MESSAGES.required),\n sales: number().required(ERROR_MESSAGES.required),\n cashInBank: number(ERROR_MESSAGES.invalid)\n .min(0, ERROR_MESSAGES.minNumber)\n .required(ERROR_MESSAGES.required),\n\n payingCustomers: number().required(ERROR_MESSAGES.required),\n customerTrials: number().required(ERROR_MESSAGES.required),\n marketingSpend: number().required(ERROR_MESSAGES.required),\n technicalSpend: number().required(ERROR_MESSAGES.required),\n partners: string(),\n runway: number().integer(ERROR_MESSAGES.integer).required(ERROR_MESSAGES.required),\n\n ipStatus: string(),\n businessPlan: string().url(ERROR_MESSAGES.link),\n pitchDeck: string().url(ERROR_MESSAGES.link),\n\n goals: array().of(GOAL_VALIDATION_SCHEMA),\n debts: array().of(SOURCE_VALIDATION_SCHEMA),\n investments: array().of(SOURCE_VALIDATION_SCHEMA),\n grants: array().of(SOURCE_VALIDATION_SCHEMA),\n valuations: array().of(SOURCE_VALIDATION_SCHEMA),\n});\n\nexport const INITIAL_VALUES = {\n date: null,\n stage: {\n id: '',\n },\n\n headcount: HEADCOUNT_INITIAL_VALUE,\n\n progress: '',\n plans: '',\n risks: '',\n\n burnRate: '',\n sales: '',\n cashInBank: '',\n\n payingCustomers: '',\n customerTrials: '',\n marketingSpend: '',\n technicalSpend: '',\n partners: '',\n runway: '',\n\n ipStatus: '',\n businessPlan: '',\n pitchDeck: '',\n\n investments: [],\n goals: [],\n debts: [],\n grants: [],\n valuations: [],\n};\n","import React, { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Button,\n Typography,\n IconButton,\n Table,\n TableBody,\n TableRow,\n TableCell,\n TableContainer,\n Card,\n CardContent,\n} from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport CancelIcon from '@material-ui/icons/Cancel';\n\nconst getKey = (item, index) => item.id || item.key || index;\n\nconst FormFieldList = ({\n title, description, addLabel, renderItem, onAdd, onRemove, data,\n}) => (\n \n \n \n {title}\n \n {description && (\n \n {description}\n \n )}\n \n \n \n \n {data.map((item, index) => (\n \n \n {renderItem(item, index)}\n \n \n onRemove(e, index)}>\n \n \n \n \n ))}\n \n \n \n \n \n \n
\n
\n
\n);\n\nFormFieldList.propTypes = {\n title: PropTypes.node.isRequired,\n description: PropTypes.node,\n data: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string,\n })),\n addLabel: PropTypes.string,\n onAdd: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n renderItem: PropTypes.func.isRequired,\n};\n\nFormFieldList.defaultProps = {\n addLabel: 'Add',\n data: [],\n description: null,\n};\n\nexport default memo(FormFieldList);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Grid, MenuItem, TextField,\n} from '@material-ui/core';\nimport FormField from '../../../components/FormField';\nimport { GOAL_STATUS } from './GoalsFieldArray.config';\n\nconst options = [\n {\n value: GOAL_STATUS.COMPLETED,\n label: 'Completed',\n },\n {\n value: GOAL_STATUS.IN_PROGRESS,\n label: 'In Progress',\n },\n {\n value: GOAL_STATUS.INCOMPLETE,\n label: 'Incomplete',\n },\n];\n\nconst GoalStatusSelect = (props) => (\n \n {options.map((option) => (\n \n {option.label}\n \n ))}\n \n);\n\nconst GoalFieldSet = ({ name, label }) => (\n \n \n \n \n \n \n \n \n);\n\nGoalFieldSet.propTypes = {\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n};\n\nexport default GoalFieldSet;\n","import React, { memo, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useField } from 'formik';\nimport FormFieldList from '../../../components/FormFieldList';\nimport GoalFieldSet from './GoalFieldSet';\nimport { GOAL_INITIAL_VALUE } from './GoalsFieldArray.config';\n\nconst GoalsFieldArray = ({ name, push, remove }) => {\n const [{ value }] = useField(name);\n\n const handleAdd = useCallback(() => {\n push({\n key: Date.now(),\n ...GOAL_INITIAL_VALUE,\n });\n }, [push]);\n\n const handleRemove = useCallback((e, index) => {\n remove(index);\n }, [remove]);\n\n const renderItem = useCallback((item, index) => (\n \n ), [name]);\n\n return (\n \n );\n};\n\nGoalsFieldArray.propTypes = {\n name: PropTypes.string.isRequired,\n push: PropTypes.func.isRequired,\n remove: PropTypes.func.isRequired,\n};\n\nexport default memo(GoalsFieldArray);\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { DatePicker } from '@material-ui/pickers';\n\nconst DatePickerField = ({ field, form, ...other }) => {\n const { name, value } = field;\n const { setFieldValue, setFieldError, errors } = form;\n const currentError = errors[name];\n\n const handleChange = useCallback((date) => setFieldValue(name, date), [setFieldValue, name]);\n const handleError = useCallback((error) => {\n if (error && error !== currentError) {\n setFieldError(name, error);\n }\n }, [currentError, setFieldError, name]);\n\n return (\n \n );\n};\n\nDatePickerField.propTypes = {\n field: PropTypes.shape({\n name: PropTypes.string.isRequired,\n value: PropTypes.instanceOf(Date),\n }).isRequired,\n form: PropTypes.shape({\n setFieldValue: PropTypes.func.isRequired,\n setFieldError: PropTypes.func.isRequired,\n errors: PropTypes.shape({}),\n }).isRequired,\n};\n\nexport default DatePickerField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Grid, InputAdornment,\n} from '@material-ui/core';\nimport FormField from '../../../components/FormField';\nimport DataSelect from '../../../components/DataSelect';\n\nconst SourceFieldSet = ({ name, label, sourceType }) => (\n \n \n \n \n \n £,\n }}\n variant=\"outlined\"\n width={100}\n />\n \n \n);\n\nSourceFieldSet.propTypes = {\n name: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n sourceType: PropTypes.string.isRequired,\n};\n\nexport default SourceFieldSet;\n","import React, { memo, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useField } from 'formik';\nimport FormFieldList from '../../../components/FormFieldList';\nimport SourceFieldSet from './SourceFieldSet';\nimport { SOURCE_INITIAL_VALUE } from './SourceFieldArray.config';\nimport { DATA_SOURCE } from '../../../components/DataSelect/DataSelect.config';\n\nconst TITLE_BY_SOURCE_TYPE = {\n [DATA_SOURCE.DEBTS]: {\n title: 'Debt',\n description: 'New debt incurred this month',\n },\n [DATA_SOURCE.INVESTMENTS]: {\n title: 'Investments',\n description: 'New investment acquired this month',\n },\n [DATA_SOURCE.GRANTS]: {\n title: 'Grants',\n description: 'New grants acquired this month',\n },\n [DATA_SOURCE.VALUATIONS]: {\n title: 'Valuations',\n description: 'New valuation estimate this month',\n },\n};\n\nconst SourceFieldArray = ({\n name, sourceType,\n}) => {\n const [{ value }, , { setValue }] = useField(name);\n\n const handleAdd = useCallback(() => {\n setValue([...value, {\n key: Date.now(),\n ...SOURCE_INITIAL_VALUE,\n }]);\n }, [setValue, value]);\n\n const handleRemove = useCallback((e, index) => {\n setValue(value.filter((item, i) => i !== index));\n }, [setValue, value]);\n\n const renderItem = useCallback((item, index) => (\n \n ), [name, sourceType]);\n\n return (\n \n );\n};\n\nSourceFieldArray.propTypes = {\n name: PropTypes.string.isRequired,\n sourceType: PropTypes.string.isRequired,\n};\n\nexport default memo(SourceFieldArray);\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useField } from 'formik';\nimport FormField from '../../components/FormField';\n\nconst RunwayInput = ({\n burnRateName, cashName, name, ...props\n}) => {\n const [, , { setValue }] = useField(name);\n const [{ value: burnRate }] = useField(burnRateName);\n const [{ value: cash }] = useField(cashName);\n\n useEffect(() => {\n if (burnRate && cash) {\n setValue((cash / burnRate).toFixed());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [burnRate, cash]);\n\n return (\n \n );\n};\n\nRunwayInput.propTypes = {\n burnRateName: PropTypes.string.isRequired,\n cashName: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n};\n\nexport default RunwayInput;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Grid, InputAdornment, Card, CardContent, Typography,\n} from '@material-ui/core';\nimport { FieldArray, Field } from 'formik';\n\nimport Form from '../../components/Form';\nimport FormField from '../../components/FormField';\nimport HeadcountFieldSet from './HeadcountFieldSet';\nimport GoalsFieldArray from './GoalsFieldArray';\nimport DataSelect from '../../components/DataSelect';\nimport { DATA_SOURCE } from '../../components/DataSelect/DataSelect.config';\nimport DatePickerField from '../../components/DatePickerField';\nimport SourceFieldArray from './SourceFieldArray';\nimport { INITIAL_VALUES, VALIDATION_SCHEMA } from './VenturePeriodForm.config';\nimport RunwayInput from './RunwayInput';\n\nconst VenturePeriodForm = (props) => (\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 \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n Financials\n \n \n \n \n £,\n }}\n fullWidth\n helperText=\"Negative Cashflow this month.\"\n />\n \n\n \n £,\n }}\n fullWidth\n />\n \n\n \n £,\n }}\n fullWidth\n />\n \n \n \n \n \n \n \n \n\n \n \n \n Markets\n \n \n \n \n \n \n \n \n \n\n \n £,\n }}\n fullWidth\n helperText=\"Total amount spend on non-staff marketing.\"\n />\n \n \n £,\n }}\n fullWidth\n helperText=\"Total amount spend on non-staff technical.\"\n />\n \n\n \n \n \n \n \n \n \n\n \n \n \n Other\n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n\n \n \n);\n\nVenturePeriodForm.propTypes = {\n initialValues: PropTypes.shape({\n stage: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }),\n }),\n};\n\nVenturePeriodForm.defaultProps = {\n initialValues: null,\n};\n\nexport default VenturePeriodForm;\n","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { INITIAL_VALUES } from '../VenturePeriodForm/VenturePeriodForm.config';\nimport VenturePeriodForm from '../VenturePeriodForm/VenturePeriodForm';\nimport CrudDataTable, { DELETE_CELL_COLUMN, EDIT_CELL_COLUMN } from '../../components/CrudDataTable/CrudDataTable';\nimport useCrudDataTable from '../../components/CrudDataTable/useCrudDataTable';\nimport { venturePeriodApiModule } from '../../modules/ventures.module';\nimport { formatMonth, formatDateTime, sortByDate } from '../../helpers/dateUtils';\nimport { toCurrency } from '../../helpers/currency';\nimport useAbility from '../../hooks/useAbility';\nimport ROLE from '../../constants/role.constants';\n\nconst PERIOD_COLUMNS = [\n {\n Header: 'Period',\n id: 'period',\n accessor: ({ date }) => formatMonth(date),\n sortType: ({ original: { date: a } }, { original: { date: b } }) => sortByDate(a, b),\n },\n {\n Header: 'Stage',\n id: 'stage',\n accessor: (row) => row.stage.name,\n },\n {\n Header: 'Cash in the bank',\n id: 'cashInBank',\n accessor: (row) => toCurrency(row.cashInBank),\n },\n {\n Header: 'Burn Rate',\n id: 'burnRate',\n accessor: (row) => toCurrency(row.burnRate),\n },\n {\n Header: 'Sales',\n id: 'sales',\n accessor: (row) => toCurrency(row.sales),\n },\n {\n Header: 'Last Updated At',\n id: 'updatedAt',\n accessor: (row) => formatDateTime(row.updatedAt),\n },\n EDIT_CELL_COLUMN,\n DELETE_CELL_COLUMN,\n];\n\nconst VenturePeriodsTable = ({ ventureId, data }) => {\n const { can } = useAbility();\n\n const options = {\n title: 'Period',\n FormComponent: VenturePeriodForm,\n initialValues: INITIAL_VALUES,\n columns: PERIOD_COLUMNS,\n canCreate: can([ROLE.ADMIN, ROLE.USER]),\n getFormInitialValues: (editItem, initialValues) => {\n if (editItem) {\n return editItem;\n }\n\n if (!data.length) {\n return initialValues;\n }\n\n const lastPeriodDate = new Date(data[data.length - 1].date);\n\n return {\n ...initialValues,\n date: new Date(lastPeriodDate.setMonth(lastPeriodDate.getMonth() + 1)),\n };\n },\n apiModule: {\n createMutation: (period) => venturePeriodApiModule.createMutation(ventureId, period),\n updateMutation: (period) => venturePeriodApiModule.updateMutation(ventureId, period),\n deleteMutation: (period) => venturePeriodApiModule.deleteMutation(ventureId, period),\n listSelector: () => data,\n },\n dialogProps: {\n fullWidth: true,\n maxWidth: 'xl',\n },\n };\n const props = useCrudDataTable(options);\n const initialValues = useMemo(() => ({\n sortBy: [{ id: 'period', desc: true }],\n }), []);\n\n return (\n \n );\n};\n\nVenturePeriodsTable.propTypes = {\n ventureId: PropTypes.string.isRequired,\n data: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string.isRequired,\n date: PropTypes.string.isRequired,\n })).isRequired,\n};\n\nexport default VenturePeriodsTable;\n","import React from 'react';\n\nimport { object, string } from 'yup';\nimport Form from '../../components/Form';\nimport FormField from '../../components/FormField';\nimport { ERROR_MESSAGES } from '../../constants/validation.constants';\nimport { DELETE_CELL_COLUMN, EDIT_CELL_COLUMN } from '../../components/CrudDataTable/CrudDataTable';\nimport ROLE from '../../constants/role.constants';\n\nexport const VALIDATION_SCHEMA = object({\n name: string().required(ERROR_MESSAGES.required),\n});\nexport const INITIAL_VALUES = {\n name: '',\n};\nexport const AUDIT_COLUMNS = [\n {\n Header: 'Last Updated At',\n id: 'updatedAt',\n accessor: (row) => new Date(row.updatedAt).toLocaleString(),\n },\n {\n Header: 'Last Updated By',\n id: 'updatedBy',\n accessor: (row) => row.updatedBy && row.updatedBy.email,\n permission: [ROLE.ADMIN],\n },\n];\nexport const BASE_COLUMNS = [\n {\n Header: 'Name',\n accessor: 'name',\n },\n ...AUDIT_COLUMNS,\n EDIT_CELL_COLUMN,\n DELETE_CELL_COLUMN,\n];\n\nexport const ListForm = (props) => (\n \n \n \n);\n","import { AUDIT_COLUMNS } from '../DataManagement/ListCrudTable.config';\nimport { EDIT_CELL_COLUMN, DELETE_CELL_COLUMN } from '../../components/CrudDataTable/CrudDataTable';\nimport ROLE from '../../constants/role.constants';\n\nexport const ROLES = [ROLE.ADMIN, ROLE.VIEWER, ROLE.USER];\n\nexport const userColumns = [\n {\n Header: 'Email',\n id: 'email',\n accessor: 'email',\n },\n {\n Header: 'Role',\n id: 'role',\n accessor: 'role',\n },\n {\n Header: 'Activated',\n id: 'activated',\n accessor: ({ activated }) => (activated ? 'Yes' : 'No'),\n },\n ...AUDIT_COLUMNS,\n EDIT_CELL_COLUMN,\n DELETE_CELL_COLUMN,\n];\n","\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { object, string } from 'yup';\nimport {\n Grid, MenuItem,\n} from '@material-ui/core';\n\nimport Form from '../../components/Form';\nimport FormField from '../../components/FormField';\nimport { ERROR_MESSAGES } from '../../constants/validation.constants';\nimport ROLE from '../../constants/role.constants';\n\nimport { ROLES } from './UserManagement.config';\n\nexport const VALIDATION_SCHEMA = object({\n email: string()\n .email(ERROR_MESSAGES.email)\n .required(ERROR_MESSAGES.required),\n\n role: string().oneOf(ROLES),\n});\n\nexport const INITIAL_VALUES = {\n email: '',\n role: ROLE.USER,\n};\n\nconst UserForm = ({ initialValues, ...props }) => (\n \n \n \n \n \n \n \n {ROLES.map((option) => (\n \n {option}\n \n ))}\n \n \n \n \n);\n\nUserForm.propTypes = {\n initialValues: PropTypes.shape({}),\n};\n\nUserForm.defaultProps = {\n initialValues: null,\n};\n\nexport default UserForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport CrudDataTable from '../../components/CrudDataTable/CrudDataTable';\nimport useCrudDataTable from '../../components/CrudDataTable/useCrudDataTable';\n\nimport {\n investmentsApiModule,\n debtsApiModule,\n ventureStagesApiModule,\n valuationsApiModule,\n grantsApiModule,\n cohortsApiModule,\n usersApiModule,\n} from '../../modules/data.module';\nimport { venturesApiModule } from '../../modules/ventures.module';\nimport {\n ListForm,\n INITIAL_VALUES,\n BASE_COLUMNS,\n} from './ListCrudTable.config';\nimport VentureForm, { INITIAL_VALUES as VANTURE_INITIAL_VALUES } from '../VentureForm/VentureForm';\nimport { VENTURE_TABLE_COLUMNS } from '../VentureTableList/VentureTableList';\nimport { userColumns } from '../UserManagement/UserManagement.config';\nimport UserForm, { INITIAL_VALUES as USER_INITIAL_VALUES } from '../UserManagement/UserForm';\n\nexport const TABLE_CONFIG_BY_TYPE = {\n ventures: {\n title: 'Venture',\n apiModule: venturesApiModule,\n FormComponent: VentureForm,\n initialValues: VANTURE_INITIAL_VALUES,\n columns: VENTURE_TABLE_COLUMNS,\n },\n investments: {\n title: 'Investment Source',\n apiModule: investmentsApiModule,\n },\n debts: {\n title: 'Debt Source',\n apiModule: debtsApiModule,\n },\n ventureStages: {\n title: 'Venture Stage',\n apiModule: ventureStagesApiModule,\n },\n valuations: {\n title: 'Valuation',\n apiModule: valuationsApiModule,\n },\n grants: {\n title: 'Grant Source',\n apiModule: grantsApiModule,\n },\n cohorts: {\n title: 'Cohort Source',\n apiModule: cohortsApiModule,\n },\n users: {\n title: 'User',\n apiModule: usersApiModule,\n columns: userColumns,\n FormComponent: UserForm,\n initialValues: USER_INITIAL_VALUES,\n },\n};\n\nconst ListCrudTable = ({ type }) => {\n const options = {\n FormComponent: ListForm,\n initialValues: INITIAL_VALUES,\n columns: BASE_COLUMNS,\n ...TABLE_CONFIG_BY_TYPE[type],\n };\n const props = useCrudDataTable(options);\n\n return (\n \n );\n};\n\nListCrudTable.propTypes = {\n type: PropTypes.oneOf(Object.keys(TABLE_CONFIG_BY_TYPE)).isRequired,\n};\n\nexport default ListCrudTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Paper,\n TableContainer,\n Toolbar,\n LinearProgress,\n Typography,\n} from '@material-ui/core';\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\nimport EditIcon from '@material-ui/icons/Edit';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport CloseIcon from '@material-ui/icons/Close';\nimport ConfirmDialog from '../ConfirmDialog';\nimport DataTable from '../DataTable';\nimport ROLE from '../../constants/role.constants';\n\nconst EditCellButton = ({ onEditRow, row }) => (\n onEditRow(row.original)}>\n \n \n);\nEditCellButton.propTypes = {\n onEditRow: PropTypes.func.isRequired,\n row: PropTypes.shape({\n original: PropTypes.shape({}).isRequired,\n }).isRequired,\n};\n\nconst DeleteCellButton = ({ onDeleteRow, row }) => (\n onDeleteRow(row.original.id)}\n message={Are you sure you want to delete this item?}\n >\n \n \n \n \n);\nDeleteCellButton.propTypes = {\n onDeleteRow: PropTypes.func.isRequired,\n row: PropTypes.shape({\n original: PropTypes.shape({\n id: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport const EDIT_CELL_COLUMN = {\n Header: '',\n id: 'edit',\n disableSortBy: true,\n Cell: EditCellButton,\n props: { padding: 'checkbox' },\n permission: [ROLE.ADMIN, ROLE.USER],\n};\n\nexport const DELETE_CELL_COLUMN = {\n Header: '',\n id: 'delete',\n disableSortBy: true,\n Cell: DeleteCellButton,\n props: { padding: 'checkbox' },\n permission: [ROLE.ADMIN],\n};\n\nconst CrudDataTable = ({\n title,\n FormComponent,\n dialogTitle,\n getDialogProps,\n getFormProps,\n canCreate,\n onCreate,\n isPending,\n ...props\n}) => {\n const dialogProps = getDialogProps && getDialogProps();\n\n return (\n \n \n \n {canCreate && (\n \n }\n >\n {`Create New ${title}`}\n \n \n )}\n \n {FormComponent && (\n \n \n {dialogTitle}\n {dialogProps.onClose ? (\n \n \n \n ) : null}\n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default CrudDataTable;\n","import { colors } from '@material-ui/core';\n\nconst white = '#FFFFFF';\nconst black = '#000000';\n\nexport default {\n black,\n white,\n primary: {\n contrastText: white,\n dark: '#0059c1',\n main: '#4285f4',\n light: '#80b4ff',\n },\n // secondary: {\n // contrastText: white,\n // dark: '#3c3c3c',\n // main: '#666666',\n // light: '#949494',\n // },\n success: {\n contrastText: white,\n dark: '#007827',\n main: '#34A853',\n light: '#6bda81',\n },\n info: {\n contrastText: white,\n dark: colors.blue[900],\n main: colors.blue[600],\n light: colors.blue[400],\n },\n warning: {\n contrastText: white,\n dark: colors.orange[900],\n main: colors.orange[600],\n light: colors.orange[400],\n },\n error: {\n contrastText: white,\n dark: colors.red[900],\n main: colors.red[600],\n light: colors.red[400],\n },\n text: {\n primary: colors.blueGrey[900],\n secondary: colors.blueGrey[600],\n link: colors.blue[600],\n },\n background: {\n default: '#EEEEEE',\n paper: white,\n },\n // icon: colors.blueGrey[600],\n // divider: colors.grey[200],\n};\n","import { createMuiTheme } from '@material-ui/core';\n\nimport palette from './palette';\n\nconst theme = createMuiTheme({\n palette,\n zIndex: {\n appBar: 1200,\n drawer: 1100,\n },\n overrides: {\n MuiDialogContent: {\n root: {\n padding: '16px',\n },\n },\n MuiTableCell: {\n stickyHeader: {\n backgroundColor: 'white',\n },\n },\n MuiGrid: {\n container: {\n '@media print': {\n display: 'block !important',\n },\n },\n },\n },\n});\n\nexport default theme;\n","import React, { Suspense } from 'react';\nimport {\n Switch, Route,\n} from 'react-router-dom';\nimport { CircularProgress } from '@material-ui/core';\n\nexport const getFirstAvailableRoute = (routeList, excludeRoute) => {\n if (!routeList) {\n return null;\n }\n\n if (!Array.isArray(routeList)) {\n return getFirstAvailableRoute([routeList], excludeRoute);\n }\n\n return routeList.map((route) => {\n if (route.path && (!(excludeRoute && excludeRoute.path) || route.path !== excludeRoute.path)) {\n return route;\n }\n\n return getFirstAvailableRoute(route.routes, excludeRoute);\n }).filter(Boolean)[0];\n};\n\nexport const renderRoutes = (routes, extraProps = {}, switchProps = {}) => (routes ? (\n }>\n \n {routes.map((route, i) => (\n (route.render ? (\n route.render({ ...props, ...extraProps, route })\n ) : (\n \n ))}\n />\n ))}\n \n \n) : null);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ListItemIcon, ListItemText, ListItem } from '@material-ui/core';\nimport Link from './Link';\n\nfunction ListItemLink({\n icon, primary, ...props\n}) {\n return (\n
  • \n \n {icon ? {icon} : null}\n \n \n
  • \n );\n}\n\nListItemLink.propTypes = {\n icon: PropTypes.element,\n primary: PropTypes.string.isRequired,\n to: PropTypes.string.isRequired,\n};\nListItemLink.defaultProps = {\n icon: null,\n};\n\nexport default ListItemLink;\n","import React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/styles';\nimport {\n Drawer,\n List,\n} from '@material-ui/core';\nimport ListItemLink from '../components/ListItemLink';\n\nconst drawerWidth = '240px';\nconst useStyles = makeStyles((theme) => ({\n toolbar: theme.mixins.toolbar,\n drawer: {\n flexShrink: 0,\n whiteSpace: 'nowrap',\n '@media print': {\n display: 'none',\n },\n },\n drawerOpen: {\n width: drawerWidth,\n overflow: 'hidden',\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n drawerClose: {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: '64px',\n },\n}));\n\nconst Sidebar = ({ open, menuItems, ...props }) => {\n const classes = useStyles();\n\n return (\n \n
    \n \n {menuItems.map((item) => item.title && (\n }\n primary={item.title}\n />\n ))}\n \n \n );\n};\n\nSidebar.propTypes = {\n open: PropTypes.bool.isRequired,\n menuItems: PropTypes.arrayOf(PropTypes.shape({\n path: PropTypes.string.isRequired,\n icon: PropTypes.elementType,\n title: PropTypes.node,\n })).isRequired,\n};\n\nexport default Sidebar;\n","import React, { useMemo, useCallback } from 'react';\nimport Autocomplete, { createFilterOptions } from '@material-ui/lab/Autocomplete';\nimport {\n Chip, InputBase, fade,\n} from '@material-ui/core';\nimport { useRequest } from 'redux-query-react';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\nimport qs from 'qs';\nimport { makeStyles } from '@material-ui/styles';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { venturesApiModule } from '../../modules/ventures.module';\nimport Link from '../../components/Link';\n\nconst useStyles = makeStyles((theme) => ({\n search: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade(theme.palette.common.white, 0.15),\n '&:hover': {\n backgroundColor: fade(theme.palette.common.white, 0.25),\n },\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(1),\n width: 'auto',\n },\n },\n searchIcon: {\n width: theme.spacing(7),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n inputRoot: {\n color: 'inherit',\n },\n inputInput: {\n padding: theme.spacing(1, 1, 1, 7),\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n width: 120,\n '&:focus': {\n width: 200,\n },\n },\n },\n}));\n\nconst SearchInput = ({ InputProps, inputProps }) => {\n const classes = useStyles();\n\n return (\n
    \n
    \n \n
    \n \n
    \n );\n};\n\nconst Search = () => {\n const { push } = useHistory();\n useRequest(venturesApiModule.getListRequest());\n const ventures = useSelector(venturesApiModule.listSelector);\n\n const cohorts = useSelector(venturesApiModule.cohortsSelector);\n\n const filterOptions = createFilterOptions({\n matchFrom: 'start',\n stringify: (option) => option.name,\n });\n\n const options = useMemo(() => [...cohorts.map((c) => ({\n ...c,\n type: 'cohort',\n })), ...ventures.map((v) => ({\n ...v,\n type: 'venture',\n }))], [cohorts, ventures]);\n\n const handleChange = useCallback((e, option) => {\n if (!option) {\n return;\n }\n\n if (option.type === 'venture') {\n push(`/ventures/${option.id}`);\n } else if (option.type === 'cohort') {\n push({\n pathname: '/dashboard',\n search: qs.stringify({\n cohorts: [option.id],\n }),\n });\n }\n }, [push]);\n\n return (\n ''}\n onChange={handleChange}\n renderOption={(option) => (\n \n {option.name}\n {option.cohort && (\n \n )}\n \n )}\n renderInput={SearchInput}\n />\n );\n};\n\nexport default Search;\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport {\n AppBar,\n Toolbar,\n Typography,\n IconButton,\n Button,\n Menu,\n MenuItem,\n Hidden,\n} from '@material-ui/core';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport AccountCircle from '@material-ui/icons/AccountCircle';\nimport { makeStyles } from '@material-ui/styles';\n\nimport { useSelector } from 'react-redux';\nimport { useRequest, useMutation } from 'redux-query-react';\nimport Sidebar from '../Sidebar';\nimport { userSelector, getUserRequest, logoutMutation } from '../../modules/user.module';\nimport { renderRoutes } from '../../utils/renderRoutes';\nimport Link from '../../components/Link';\nimport Search from '../../blocks/Search/Search';\nimport useAbility from '../../hooks/useAbility';\nimport ROLE from '../../constants/role.constants';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n header: {\n '@media print': {\n display: 'none',\n },\n },\n toolbar: {\n ...theme.mixins.toolbar,\n '@media print': {\n display: 'none',\n },\n },\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n // padding: theme.spacing(3),\n },\n}));\n\n\nconst UserInfo = () => {\n useRequest(getUserRequest());\n const [, logout] = useMutation(logoutMutation);\n const user = useSelector(userSelector);\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleMenuClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n if (!user) {\n return null;\n }\n\n return (\n <>\n \n )}\n >\n {user.email}\n \n \n Change Password\n Logout\n \n \n );\n};\n\nconst MainLayout = ({ route }) => {\n const { can } = useAbility();\n const classes = useStyles();\n const [open, setOpen] = React.useState(true);\n\n const handleDrawerToggle = useCallback(() => {\n setOpen(!open);\n }, [open]);\n\n return (\n
    \n \n \n \n \n \n \n \n \n Venture Dashboard\n \n {can([[ROLE.ADMIN, ROLE.VIEWER]]) && }\n \n \n \n \n
    \n
    \n {renderRoutes(route.routes)}\n
    \n
    \n );\n};\n\nMainLayout.propTypes = {\n route: PropTypes.shape({\n routes: PropTypes.arrayOf(PropTypes.shape({})),\n }).isRequired,\n};\n\nexport default MainLayout;\n","import React from 'react';\nimport VentureTableListContainer from '../blocks/VentureTableList';\nimport Page from './Page';\n\nconst VenturesPage = () => (\n \n \n \n);\n\nexport default VenturesPage;\n","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Typography,\n} from '@material-ui/core';\nimport { string, object, ref } from 'yup';\n\nimport { useMutation } from 'redux-query-react';\nimport Form from '../../components/Form';\nimport FromField from '../../components/FormField';\nimport { ERROR_MESSAGES, VALIDATION_RULES } from '../../constants/validation.constants';\nimport { resetPasswordMutation } from '../../modules/user.module';\n\nconst INITIAL_VALUES = {\n hash: '',\n oldPassword: '',\n password: '',\n confirmPassword: '',\n serverError: '',\n};\n\nconst VALIDATION_SCHEMA = object({\n password: VALIDATION_RULES.password\n .required(ERROR_MESSAGES.required),\n confirmPassword: string()\n .oneOf([ref('password'), null], 'Passwords must match')\n .required(ERROR_MESSAGES.required),\n});\n\nconst PasswordForm = ({\n hash, oldPassword, title, ...props\n}) => {\n const [, resetPassword] = useMutation(resetPasswordMutation);\n\n const initialValues = useMemo(() => ({\n ...INITIAL_VALUES,\n hash,\n }), [hash]);\n\n return (\n \n \n {title}\n \n\n {oldPassword && (\n \n )}\n\n \n \n \n );\n};\n\nPasswordForm.propTypes = {\n hash: PropTypes.string.isRequired,\n title: PropTypes.node.isRequired,\n oldPassword: PropTypes.bool,\n};\n\nPasswordForm.defaultProps = {\n oldPassword: false,\n};\n\nexport default PasswordForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useMutation } from 'redux-query-react';\nimport { resetPasswordMutation } from '../../modules/user.module';\nimport PasswordForm from './PasswordForm';\n\nconst ResetPasswordForm = (props) => {\n const [, resetPassword] = useMutation(resetPasswordMutation);\n\n return (\n \n );\n};\n\nResetPasswordForm.propTypes = {\n hash: PropTypes.string.isRequired,\n};\n\nexport default ResetPasswordForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport qs from 'qs';\nimport { Container, Box } from '@material-ui/core';\nimport ResetPasswordForm from '../blocks/Login/ResetPasswordForm';\n\nconst ResetPasswordPage = ({ history, location }) => (\n \n \n history.push('/login')}\n />\n \n \n);\n\nResetPasswordPage.propTypes = {\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n }).isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default ResetPasswordPage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport qs from 'qs';\nimport { Container, Box } from '@material-ui/core';\nimport ResetPasswordFormContainer from '../blocks/Login/ResetPasswordForm';\n\nconst CreatePasswordPage = ({ history, location }) => (\n \n \n history.push('/login')}\n />\n \n \n);\n\nCreatePasswordPage.propTypes = {\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n }).isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default CreatePasswordPage;\n","import React from 'react';\n\nimport { useMutation } from 'redux-query-react';\nimport { changePasswordMutation } from '../../modules/user.module';\nimport PasswordForm from './PasswordForm';\n\nconst ChangePasswordForm = (props) => {\n const [, resetPassword] = useMutation(changePasswordMutation);\n\n return (\n \n );\n};\n\nexport default ChangePasswordForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Container } from '@material-ui/core';\nimport ChangePasswordForm from '../blocks/Login/ChangePasswordForm';\nimport Page from './Page';\n\nconst ChangePasswordPage = ({ history }) => (\n \n \n history.push('/')}\n />\n \n \n);\n\nChangePasswordPage.propTypes = {\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nexport default ChangePasswordPage;\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport React from 'react';\nimport { Link, Typography } from '@material-ui/core';\nimport { useMutation } from 'redux-query-react';\nimport { useField } from 'formik';\nimport { restorePasswordMutation } from '../../modules/user.module';\nimport ConfirmDialog from '../../components/ConfirmDialog';\n\nconst ForgotPasswordButton = () => {\n const [{ value: email }, { error }] = useField('email');\n const [, forgotPassword] = useMutation(restorePasswordMutation);\n\n const handleClick = () => forgotPassword(email)\n .then((res) => {\n if (res.status !== 200) {\n throw new Error();\n }\n });\n\n if (error || !email) {\n return null;\n }\n\n return (\n {`After clicking Reset Password below, an email will be sent to \"${email}\" with a link to reset password.`}\n )}\n onOk={handleClick}\n okButtonText=\"Reset Password\"\n >\n \n Forgot password?\n \n \n );\n};\n\nexport default ForgotPasswordButton;\n","import React from 'react';\nimport {\n Grid, Button, Typography, FormHelperText,\n} from '@material-ui/core';\nimport { string, object } from 'yup';\nimport { useMutation } from 'redux-query-react';\n\nimport { ErrorMessage } from 'formik';\n\nimport { loginMutation } from '../../modules/user.module';\nimport Form from '../../components/Form';\nimport FromField from '../../components/FormField';\nimport { ERROR_MESSAGES, VALIDATION_RULES } from '../../constants/validation.constants';\nimport ForgotPasswordButton from './ForgotPasswordButton';\n\nconst INITIAL_VALUES = {\n email: '',\n password: '',\n};\n\nconst VALIDATION_SCHEMA = object({\n email: string().email(ERROR_MESSAGES.email).required(ERROR_MESSAGES.required),\n password: VALIDATION_RULES.password.required(ERROR_MESSAGES.required),\n});\n\nconst LoginForm = (props) => {\n const [, login] = useMutation(loginMutation);\n\n return (\n \n \n Sign in\n \n\n \n \n\n \n \n \n \n \n \n Sign In\n \n \n \n \n \n \n \n );\n};\n\nexport default LoginForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Container, Box } from '@material-ui/core';\nimport LoginFormContainer from '../blocks/Login/LoginForm';\n\nconst LoginPage = ({ history }) => (\n \n \n history.push('/')} />\n \n \n);\n\nLoginPage.propTypes = {\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nexport default LoginPage;\n","import { createSelector } from 'reselect';\nimport { entitiesSelector } from './configureStore';\n\nexport const getSettingsRequets = (data) => ({\n url: '/api/settings',\n force: true,\n body: data,\n update: {\n settings: (prev, next) => next,\n },\n transform: (settings) => ({\n settings,\n }),\n});\n\nexport const updateSettingsMutation = (data) => ({\n url: '/api/settings',\n body: data,\n update: {\n settings: (prev, next) => next,\n },\n transform: (settings) => ({\n settings,\n }),\n});\n\nexport const settingsSelector = createSelector(\n entitiesSelector,\n ({ settings }) => settings,\n);\n","import { useRequest } from 'redux-query-react';\nimport { useSelector } from 'react-redux';\nimport { getSettingsRequets, settingsSelector } from '../modules/app.module';\n\nconst useAppSettings = () => {\n useRequest(getSettingsRequets());\n\n return useSelector(settingsSelector);\n};\n\nexport default useAppSettings;\n","import React from 'react';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport Typography from '@material-ui/core/Typography';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport Link from '@material-ui/core/Link';\nimport { Container, Box } from '@material-ui/core';\nimport useAppSettings from '../hooks/useAppSettings';\n\nconst documents = [\n {\n title: 'Acceptable Use Policy',\n link: '/assets/files/Acceptable Use Policy.pdf',\n },\n {\n title: 'Cookie Policy',\n link: '/assets/files/Cookie Policy.pdf',\n },\n {\n title: 'Data Processing Agreement',\n link: '/assets/files/Data Processing Agreement.pdf',\n },\n {\n title: 'General Privacy Policy',\n link: '/assets/files/General Privacy Policy.pdf',\n },\n {\n title: 'Product Privacy Policy',\n link: '/assets/files/Product Privacy Policy.pdf',\n },\n {\n title: 'Terms of Service',\n link: '/assets/files/Terms of Service.pdf',\n },\n {\n title: 'Website Terms of Use',\n link: '/assets/files/Website Terms of Use.pdf',\n },\n];\n\nconst HomePage = () => {\n const settings = useAppSettings();\n\n return (\n \n \n \n Venture Dashboard\n \n }\n >\n About\n \n \n \n The Venture Dashboard service allows ventures to collect data about their progress\n on a monthly basis in a secure environment.\n It also allow coaches and advisors to be fully\n informed and enables them to provide contextual advice\n \n \n \n \n }\n >\n Terms of Service\n \n \n \n {documents.map((d, index) => (\n \n \n {d.title}\n \n \n ))}\n \n \n \n {settings && (\n \n }\n >\n Feedback\n \n \n \n Go to feedback form\n \n \n \n )}\n \n \n
    \n );\n};\n\nexport default HomePage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n AppBar, Toolbar, Typography, Button,\n} from '@material-ui/core';\nimport { NavLink } from 'react-router-dom';\nimport { renderRoutes } from '../utils/renderRoutes';\nimport Link from '../components/Link';\n\nconst HomeLayout = ({ route }) => (\n <>\n \n \n \n Venture Dashboard\n \n \n \n \n
    \n {renderRoutes(route.routes)}\n
    \n \n);\n\nHomeLayout.propTypes = {\n route: PropTypes.shape({\n routes: PropTypes.arrayOf(PropTypes.shape({})),\n }).isRequired,\n};\n\nexport default HomeLayout;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { object, string } from 'yup';\nimport {\n Grid, Typography,\n} from '@material-ui/core';\n\nimport { useMutation } from 'redux-query-react';\nimport Form from '../../components/Form';\nimport FormField from '../../components/FormField';\nimport { ERROR_MESSAGES } from '../../constants/validation.constants';\nimport { updateSettingsMutation } from '../../modules/app.module';\nimport useAppSettings from '../../hooks/useAppSettings';\n\nexport const VALIDATION_SCHEMA = object({\n feedbackLink: string()\n .url(ERROR_MESSAGES.link)\n .required(ERROR_MESSAGES.required),\n});\n\nexport const INITIAL_VALUES = {\n feedbackLink: '',\n};\n\nconst SettingsForm = () => {\n const [, updateAppSettings] = useMutation(updateSettingsMutation);\n const settings = useAppSettings();\n return (\n \n \n \n \n Settings\n \n \n \n \n \n \n \n );\n};\n\nSettingsForm.propTypes = {\n initialValues: PropTypes.shape({}),\n};\n\nSettingsForm.defaultProps = {\n initialValues: null,\n};\n\nexport default SettingsForm;\n","import React from 'react';\nimport { Container } from '@material-ui/core';\nimport Page from './Page';\nimport SettingsForm from '../blocks/SettingsForm';\n\nconst SettingsPage = () => (\n \n \n \n \n \n);\n\nexport default SettingsPage;\n","import React from 'react';\nimport ListCrudTable from '../blocks/DataManagement/ListCrudTable.container';\nimport Page from './Page';\n\nconst UserManagementPage = () => (\n \n \n \n);\n\nexport default UserManagementPage;\n","import React, { lazy } from 'react';\nimport { Redirect } from 'react-router-dom';\n\nimport FormatListBulletedOutlinedIcon from '@material-ui/icons/FormatListBulletedOutlined';\nimport DashboardOutlinedIcon from '@material-ui/icons/DashboardOutlined';\nimport SettingsOutlinedIcon from '@material-ui/icons/SettingsOutlined';\nimport TuneOutlinedIcon from '@material-ui/icons/TuneOutlined';\nimport GroupAddOutlinedIcon from '@material-ui/icons/GroupAddOutlined';\n\nimport { getFirstAvailableRoute } from './utils/renderRoutes';\n\nimport MainLayout from './layouts/MainLayout';\nimport VenturesPage from './pages/VenturesPage';\nimport ResetPasswordPage from './pages/ResetPasswordPage';\nimport CreatePasswordPage from './pages/CreatePasswordPage';\nimport ChangePasswordPage from './pages/ChangePasswordPage';\nimport LoginPage from './pages/LoginPage';\nimport HomePage from './pages/HomePage';\nimport HomeLayout from './layouts/HomeLayout';\nimport SettingsPage from './pages/SettingsPage';\nimport UserManagementPage from './pages/UserManagementPage';\nimport ROLE from './constants/role.constants';\n\nconst DashboardPage = lazy(() => import('./pages/DashboardPage'));\nconst VentureDetailsPage = lazy(() => import('./pages/VentureDetailsPage'));\nconst DataManagementPage = lazy(() => import('./pages/DataManagementPage'));\n\n\nconst RedirectToRelativePage = ({ route, routes }) => {\n const firstAvailableRoute = getFirstAvailableRoute(routes, route);\n\n return (\n \n );\n};\n\nexport default [\n {\n path: '/reset-password',\n exact: true,\n component: ResetPasswordPage,\n },\n {\n path: '/create-password',\n exact: true,\n component: CreatePasswordPage,\n },\n {\n component: MainLayout,\n permission: {\n auth: true,\n },\n routes: [\n {\n path: '/dashboard',\n exact: true,\n title: 'Dashboard',\n icon: DashboardOutlinedIcon,\n component: DashboardPage,\n permission: [ROLE.ADMIN, ROLE.VIEWER],\n },\n {\n path: '/ventures',\n title: 'Ventures',\n exact: true,\n icon: FormatListBulletedOutlinedIcon,\n component: VenturesPage,\n },\n {\n path: '/ventures/:ventureId',\n exact: true,\n component: VentureDetailsPage,\n },\n {\n path: '/data-management',\n exact: true,\n title: 'Data Management',\n icon: SettingsOutlinedIcon,\n component: DataManagementPage,\n permission: [ROLE.ADMIN],\n },\n {\n path: '/user-management',\n exact: true,\n title: 'User Management',\n icon: GroupAddOutlinedIcon,\n component: UserManagementPage,\n permission: [ROLE.ADMIN],\n },\n {\n path: '/settings',\n exact: true,\n title: 'Settings',\n icon: TuneOutlinedIcon,\n component: SettingsPage,\n permission: [ROLE.ADMIN],\n },\n {\n path: '/change-password',\n exact: true,\n component: ChangePasswordPage,\n },\n {\n path: '/landing',\n exact: true,\n component: HomePage,\n },\n {\n path: '*',\n component: RedirectToRelativePage,\n },\n ],\n },\n {\n component: HomeLayout,\n routes: [\n {\n path: '/landing',\n exact: true,\n component: HomePage,\n },\n {\n path: '/login',\n exact: true,\n component: LoginPage,\n },\n {\n path: '*',\n component: RedirectToRelativePage,\n },\n ]\n },\n];\n","import React from 'react';\nimport { Backdrop, CircularProgress } from '@material-ui/core';\n\nimport useAuth from './hooks/useAuth';\nimport { renderRoutes } from './utils/renderRoutes';\nimport useAbilityList from './hooks/useAbilityList';\nimport routes from './routes';\n\nconst App = () => {\n const { isFinished, isAuthorized } = useAuth();\n const awailableRoutes = useAbilityList(routes, 'routes');\n\n if (!isAuthorized && !isFinished) {\n return (\n \n \n \n );\n }\n\n return renderRoutes(awailableRoutes);\n};\n\nexport default App;\n","import { useSelector } from 'react-redux';\nimport { useRequest } from 'redux-query-react';\nimport { getUserRequest, userSelector } from '../modules/user.module';\n\nexport default () => {\n const [{ isPending, isFinished }] = useRequest(getUserRequest());\n const user = useSelector(userSelector);\n\n return {\n isPending,\n isFinished,\n isAuthorized: !!user,\n user,\n };\n};\n","import React from 'react';\nimport { ThemeProvider } from '@material-ui/styles';\nimport { BrowserRouter } from 'react-router-dom';\nimport { Provider } from 'react-redux';\nimport { Provider as ReduxQueryProvider } from 'redux-query-react';\nimport { CssBaseline } from '@material-ui/core';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport DateFnsUtils from '@date-io/date-fns';\n\nimport theme from './theme';\nimport configureStore, { queriesSelector } from './modules/configureStore';\nimport App from './App';\n\nconst store = configureStore();\n\nfunction Root() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default Root;\n","/* eslint-disable no-console */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-use-before-define */\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost'\n // [::1] is the IPv6 localhost address.\n || window.location.hostname === '[::1]'\n // 127.0.0.0/8 are considered localhost for IPv4.\n || window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n ),\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service '\n + 'worker. To learn more, visit https://bit.ly/CRA-PWA',\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all '\n + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404\n || (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.',\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Root from './Root';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import {\n investmentsApiModule,\n ventureStagesApiModule,\n valuationsApiModule,\n debtsApiModule,\n grantsApiModule,\n cohortsApiModule,\n} from '../../modules/data.module';\n\nexport const DATA_SOURCE = {\n DEBTS: 'debts',\n VENTURE_STAGES: 'venture-stages',\n VALUATIONS: 'valuations',\n INVESTMENTS: 'investments',\n GRANTS: 'grants',\n COHORT: 'cohorts',\n};\n\nexport const API_SOURCE_CONFIG = {\n [DATA_SOURCE.DEBTS]: debtsApiModule,\n [DATA_SOURCE.VENTURE_STAGES]: ventureStagesApiModule,\n [DATA_SOURCE.VALUATIONS]: valuationsApiModule,\n [DATA_SOURCE.INVESTMENTS]: investmentsApiModule,\n [DATA_SOURCE.GRANTS]: grantsApiModule,\n [DATA_SOURCE.COHORT]: cohortsApiModule,\n};\n","import crudModuleBuilder from './crudModuleBuilder';\n\nexport const investmentsApiModule = crudModuleBuilder({ subject: 'investments' });\nexport const ventureStagesApiModule = crudModuleBuilder({ subject: 'ventureStages' });\nexport const valuationsApiModule = crudModuleBuilder({ subject: 'valuations' });\nexport const debtsApiModule = crudModuleBuilder({ subject: 'debts' });\nexport const grantsApiModule = crudModuleBuilder({ subject: 'grants' });\nexport const cohortsApiModule = crudModuleBuilder({ subject: 'cohorts' });\nexport const usersApiModule = crudModuleBuilder({ subject: 'users' });\n","import React, { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Formik, Form as FormikForm, ErrorMessage } from 'formik';\nimport { Grid, Button, FormHelperText } from '@material-ui/core';\n\nconst Form = ({\n children, onSubmit, showButtons, onSuccess, onCancel, initialValues, ...props\n}) => {\n const handleSubmit = useCallback(({ serverError, ...data }, { setFieldError }) => onSubmit(data)\n .then((res) => {\n if (res.status < 300) {\n return onSuccess(res);\n }\n if (res.body.message) {\n setFieldError('serverError', res.body.message);\n }\n return res;\n }), [onSubmit, onSuccess]);\n return (\n ({ ...initialValues, serverError: '' }), [initialValues])}\n onSubmit={handleSubmit}\n >\n {({ dirty, isSubmitting }) => (\n \n \n \n {children}\n \n\n {showButtons && (\n \n \n \n \n {onCancel && (\n \n \n Cancel\n \n \n )}\n \n \n Save\n \n \n \n )}\n \n \n )}\n \n );\n};\n\nForm.propTypes = {\n children: PropTypes.node.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onSuccess: PropTypes.func,\n onCancel: PropTypes.func,\n showButtons: PropTypes.bool,\n initialValues: PropTypes.shape({}),\n};\n\nForm.defaultProps = {\n onCancel: null,\n onSuccess: (res) => res,\n showButtons: true,\n initialValues: null,\n};\n\nexport default Form;\n","export { default } from './Form';\n","import React, { forwardRef, memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { Link as UILink } from '@material-ui/core';\n\nconst Link = forwardRef(({ children, ...props }, ref) => (\n \n {children}\n \n));\n\nLink.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default memo(Link);\n","import { createSelector } from 'reselect';\nimport { entitiesSelector } from './configureStore';\nimport crudModuleBuilder from './crudModuleBuilder';\n\nexport const venturesApiModule = {\n ...crudModuleBuilder({ subject: 'ventures', force: true }),\n cohortsSelector: createSelector(\n entitiesSelector,\n ({ ventures = [] }) => ventures.map(({ cohort }) => cohort)\n .filter((obj, pos, arr) => arr.map((mapObj) => mapObj.id).indexOf(obj.id) === pos),\n ),\n};\n\nexport const getVentureByIdRequest = (ventureId) => ({\n url: `/api/ventures/${ventureId}`,\n force: true,\n update: {\n ventures: (prev = [], next) => {\n const index = prev.findIndex((item) => item.id === next.id);\n if (index >= 0) {\n prev.splice(index, 1, next);\n return [...prev];\n }\n return [next, ...prev];\n },\n },\n transform: (venture) => ({\n ventures: venture,\n }),\n});\n\nexport const getVentureByIdSelector = (ventureId) => createSelector(\n entitiesSelector,\n ({ ventures = [] }) => ventures.find((item) => item.id === ventureId),\n);\n\nexport const venturePeriodApiModule = {\n createMutation: (ventureId, body) => ({\n url: `/api/ventures/${ventureId}/periods`,\n force: true,\n body,\n options: {\n method: 'POST',\n },\n update: {\n ventures: (prev, next) => prev.map((item) => (item.id === next.id ? next : item)),\n },\n transform: (venture) => ({\n ventures: venture,\n }),\n }),\n updateMutation: (ventureId, body) => ({\n url: `/api/ventures/${ventureId}/periods/${body.id}`,\n body,\n options: {\n method: 'PUT',\n },\n update: {\n ventures: (prev, next) => prev.map((item) => (item.id === next.id ? next : item)),\n },\n transform: (venture) => ({\n ventures: venture,\n }),\n }),\n deleteMutation: (ventureId, periodId) => ({\n url: `/api/ventures/${ventureId}/periods/${periodId}`,\n options: {\n method: 'DELETE',\n },\n update: {\n ventures: (prev, next) => prev.map((item) => (item.id === next.id ? next : item)),\n },\n transform: (data) => ({\n ventures: data,\n }),\n }),\n};\n","import { createStore, applyMiddleware, combineReducers } from 'redux';\nimport {\n entitiesReducer, queryMiddleware, errorsReducer, queriesReducer,\n} from 'redux-query';\nimport { composeWithDevTools } from 'redux-devtools-extension/developmentOnly';\nimport superagentInterface from 'redux-query-interface-superagent';\n\nexport const queriesSelector = (state = {}) => state.queries || {};\nexport const entitiesSelector = (state = {}) => state.entities || {};\nexport const errorsSelector = (state = {}) => state.errors || {};\n\nconst rootReducer = combineReducers({\n entities: entitiesReducer,\n queries: queriesReducer,\n errors: errorsReducer,\n});\n\nexport default function configureStore() {\n return createStore(\n rootReducer,\n composeWithDevTools(\n applyMiddleware(\n queryMiddleware(\n superagentInterface,\n queriesSelector,\n entitiesSelector,\n errorsSelector,\n ),\n ),\n ),\n );\n}\n","import { createSelector } from 'reselect';\nimport { entitiesSelector } from './configureStore';\n\nconst crudModuleBuilder = ({ subject, force }) => ({\n createMutation: (body) => ({\n url: `/api/${subject}`,\n body,\n options: {\n method: 'POST',\n },\n update: {\n [subject]: (prev, next) => [next, ...prev],\n },\n transform: (data) => ({\n [subject]: data,\n }),\n }),\n getListRequest: () => ({\n url: `/api/${subject}`,\n force,\n update: {\n [subject]: (prev, next) => next,\n },\n transform: (data) => ({\n [subject]: data,\n }),\n }),\n updateMutation: (body) => ({\n url: `/api/${subject}/${body.id}`,\n body,\n options: {\n method: 'PUT',\n },\n update: {\n [subject]: (prev, next) => prev.map((item) => (item.id === next.id ? next : item)),\n },\n transform: (data) => ({\n [subject]: data,\n }),\n }),\n deleteMutation: (id) => ({\n url: `/api/${subject}/${id}`,\n options: {\n method: 'DELETE',\n },\n update: {\n [subject]: (prev) => prev.filter((item) => (item.id !== id)),\n },\n transform: (data) => ({\n [subject]: data,\n }),\n }),\n listSelector: createSelector(\n entitiesSelector,\n ({ [subject]: list }) => list || [],\n ),\n});\n\nexport default crudModuleBuilder;\n","import { string } from 'yup';\n\nexport const ERROR_MESSAGES = {\n required: 'Required.',\n positive: 'Positive.',\n invalid: 'Invalid value.',\n minLength: ({ min }) => `Minimum ${min} characters.`,\n maxLength: ({ max }) => `Maximum ${max} characters.`,\n minNumber: () => 'Invalid value.',\n maxNumber: () => 'Invalid value.',\n email: 'Invalid Email.',\n link: 'Invalid link.',\n integer: 'Invalid value.',\n password: 'Minimum eight characters, at least one uppercase letter, one lowercase letter, one number and one special character without any space.',\n};\n\nexport const VALIDATION_RULES = {\n password: string()\n .trim()\n .min(8, ERROR_MESSAGES.password)\n .max(32, ERROR_MESSAGES.password)\n .matches(/[A-Z]/, ERROR_MESSAGES.password)\n .matches(/[a-z]/, ERROR_MESSAGES.password)\n .matches(/\\d/, ERROR_MESSAGES.password)\n .matches(/[-=*!@#$%^&(){}[\\]:;<>,.?/~+_|\\\\]/, ERROR_MESSAGES.password),\n};\n","export const formatDateTime = (date) => new Date(date).toLocaleString('default', {\n year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric',\n});\n\nexport const formatMonth = (date) => new Date(date).toLocaleString('default', { month: 'short', year: 'numeric' });\n\nexport const sortByDate = (a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Box } from '@material-ui/core';\n\nconst Page = ({ children, ...props }) => (\n \n {children}\n \n);\n\nPage.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default Page;\n","import { useSelector } from 'react-redux';\nimport { useMemo } from 'react';\nimport { userSelector } from '../modules/user.module';\n\nconst useAbility = () => {\n const user = useSelector(userSelector);\n\n return useMemo(() => ({\n user,\n can: (permission) => {\n if (!permission) {\n return true;\n }\n if (!user) {\n return false;\n }\n if (Array.isArray(permission)) {\n return permission.includes(user.role);\n }\n\n return user.isAdmin || !permission.adminOnly;\n },\n }), [user]);\n};\n\nexport default useAbility;\n"],"sourceRoot":""}