{"version":3,"sources":["Custom/StylesAppSpecific/AppStyling.ts","Custom/Models/Role.ts","Core/Utils/Hooks/UseReactRouter.ts","Core/Utils/Hooks/UseForceUpdate.ts","Core/Utils/Hooks/UseTimeout.ts","Core/Stores/BaseStore.ts","Custom/Models/User.ts","Core/Utils/React/ElementId.ts","Core/Utils/React/PrivateRoute.tsx","Core/Components/Loader.tsx","Core/Components/General/TextFieldMemo.tsx","Custom/Stores/index.ts","Core/Errors/HttpError.ts","Core/Errors/RequestError.ts","Core/Utils/Axios/GetDefaultConfig.ts","Core/Utils/Axios/MergeDefaultConfig.ts","Core/Utils/App/GoogleAnalyticsUtils.ts","Core/Views/Error2.tsx","Custom/ViewModels/InitViewModel.ts","AppErrorBoundary.tsx","Core/CoreIndex.tsx","Custom/Models/RegisterUserModel.ts","Core/Utils/Format/Format.ts","Core/Components/General/Show.tsx","Custom/Stores/Domain/AccountStores.ts","Custom/Stores/Domain/Admin/UserStore.ts","Custom/Stores/Domain/Admin/RoleStore.ts","Custom/Stores/DomainStores.ts","Core/Components/Styles/CoreStyling.ts","Custom/Content/Images/Shoothill-logo.svg","Custom/Content/Images/sctlogo.png","Core/Utils/Utils.ts","Core/Components/Styles/index.ts","Custom/Models/ForgotPasswordModel.ts","Custom/Models/LoginModel.ts","Custom/Models/SortDirection.ts","Custom/Content/Images/hbprologo.png","Custom/Content/Images/sitetracker.png","Custom/Content/Images/in.png","Custom/Content/Images/out.png","Custom/Content/Images/scanme.jpg","Custom/Content/Images/hbprologo2.png","Custom/Content/Images/shoothilllogo.png","Custom/Content/Images/bg.png","Custom/Content/Images/brickscropped.jpg","Core/ViewModels/ViewModelBase.ts","Core/Components/Styles/BaseStyles.ts","Core/Models/ModelBase.ts","serviceWorker.ts","Core/Components/Validation.tsx","Core/Components/EditableInput.tsx","Custom/Globals/AppUrls.ts","Custom/ViewModels/ForgotPasswordViewModel.ts","Custom/StylesAppSpecific/HomeStyling.ts","Custom/Views/ForgotPasswordPage.tsx","Core/Examples/Animation.tsx","Core/Examples/Buttons.tsx","Core/Examples/DatePicker.tsx","Core/ViewModels/AutoGridViewModel.ts","Core/Components/AutoGrid.tsx","Core/Components/AutoCell.tsx","Core/Examples/GridLayouts.tsx","Core/Models/LockForm.ts","Core/Examples/SelectInput.tsx","Core/Examples/Text.tsx","Core/Utils/Hooks/UseFormLockConcurrency.ts","Core/Examples/TextInputs.tsx","Core/Examples/Layouts.tsx","Custom/Views/Samples.tsx","Core/ViewModels/LogViewerViewModel.ts","Core/Views/LogViewer.tsx","Custom/ViewModels/RegisterUserViewModel.ts","Custom/ViewModels/LoginViewModel.ts","Core/Utils/Hooks/UseMediaQuery.ts","Custom/Components/LogoSwitcher.tsx","Custom/Views/LoginPage.tsx","Custom/Models/CovidRegModel.ts","Custom/Views/UploadLogo.tsx","Custom/Views/Register/RegisterCompanyDetails.tsx","Custom/Views/Register/RegistrationsView.tsx","Custom/Views/Register/RegisterPage.tsx","Custom/Models/ResetPasswordModel.ts","Custom/ViewModels/ResetPasswordViewModel.ts","Custom/Views/ResetPasswordPage.tsx","Custom/Views/SessionExpired.tsx","Custom/Views/Logout.tsx","Custom/Views/Home.styles.ts","Custom/Views/Home.tsx","Core/Views/NotFound.tsx","Custom/ViewModels/RoleViewModel.ts","Custom/ViewModels/UserViewModel.ts","Custom/Views/Admin/UserDetails.tsx","Custom/Views/Admin/RoleDetails.tsx","Custom/StylesAppSpecific/AdminStyling.ts","Custom/Views/Admin/AdminHome.tsx","Custom/Views/Admin/RoleListContainer.tsx","Custom/Views/Admin/RolesList.tsx","Custom/Views/Admin/UserListContainer.tsx","Custom/Views/Admin/UsersList.tsx","Custom/Views/Admin/Admin.tsx","Custom/Views/Admin/AdminRoutes.tsx","Custom/Models/Summary.ts","Custom/ViewModels/CovidRegViewModel.ts","Custom/Components/FooterSwitcher.tsx","Custom/Views/QR.tsx","Custom/Views/CovidRegPage.tsx","Custom/Views/Registrations.tsx","AppRoutes.tsx","Custom/Components/MetaCovid.tsx","Custom/Components/MetaHBProCovid.tsx","Custom/Views/Layout.tsx","App.tsx","index.tsx","Custom/Models/index.ts","Core/Stores/FormLockConcurrencyHubStore.ts","Core/Stores/CoreStore.ts","Custom/Stores/Stores.ts"],"names":["customBreakpoints","createBreakpoints","values","xs","sm","md","lg","xl","appTheme","app","colors","success","dark","green","light","theme","createMuiTheme","coreTheme","breakpoints","palette","text","primary","secondary","disabled","hint","defaultTheme","styled","Box","paddingBottomMobile","Role","IsNotEmpty","message","MobX","id","toDto","model","key","hasOwnProperty","ModelBase","INCORRECT_VERSION_ERROR","Error","MISSING_CONTEXT_ERROR","useRouter","__RouterContext","context","useContext","forceUpdate","useState","setIt","it","useForceUpdate","useEffect","history","listen","useTimeout","cb","timeoutDelayMs","isTimeoutActive","setIsTimeoutActive","savedRefCallback","useRef","clear","start","current","timeout","window","setTimeout","clearTimeout","stop","isActive","BaseStore","stores","this","isLoadingCount","observable","computed","action","isLoaded","User","IsEmail","React","Component","PrivateRoute","props","isAllowed","component","rest","render","to","pathname","state","from","location","Loader","show","setShow","delayBeforeShow","Grid","container","spacing","direction","alignItems","justify","style","minHeight","item","CircularProgress","Typography","loadingText","defaultProps","memo","children","TextField","GetDefaultConfig","validateStatus","undefined","baseURL","getApiUrl","MergeDefaultConfig","configs","_merge","Init","UA","GoogleAnalytics","initialize","set","anonymizeIp","sendEvent","args","event","pageview","path","trackerNames","title","Container","div","Error2","className","variant","color","error","href","InitViewModel","InitData","getInitialState","a","Get","apiResult","runInAction","StoresInstance","init","payload","DataReady","wasSuccessful","afterUpdate","beforeUpdate","fieldName","value","ViewModelBase","AppErrorBoundary","hasError","info","console","log","toString","enforceActions","baseUrl","getBaseUrl","GlobalHistory","History","basename","domain","coreStore","PageView","hash","element","document","querySelector","scrollIntoView","block","behavior","scrollTo","isDev","process","CoreIndex","viewModel","useObserver","IsLoading","IsErrored","RegisterUserModel","Equals","logoBase64","Date","FormatDate","momentDateTime","format","moment","endsWith","tz","Show","iff","renderToDom","position","width","height","display","AccountStore","jwt","refreshToken","refreshTokenExpiryDate","tokenViewModel","isInRole","role","UserRoles","length","includes","initialState","UseAdminGrids","appSettings","useAdminGrids","UseAdminControlsLight","useAdminControlsLight","getLoginState","accountStatus","IsLoggedIn","redirect","localStorage","removeItem","cookie","UserName","DisplayName","getHistory","push","getItem","data","Utils","setItem","UserStore","users","forEach","user","index","domainModel","find","dm","fromDto","isLoadingData","lastUpdated","Moment","loading","filters","slice","searchFilter","filter","or","email","toLowerCase","firstName","lastName","date","orderAsc","RoleStore","roles","name","DomainStores","CurrentUser","isHbProSite","content","snackBarContent","openSnackBar","errorDialogContent","openErrorDialog","baseFontSize","pxToRem","coreBreakpoints","screenWidth","body","clientWidth","typography","fontFamily","fontSize","h1","down","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","button","caption","common","black","white","background","paper","default","main","contrastText","module","exports","getParentObjectPath","split","getPath","splice","generateID","Math","random","substr","isEmptyOrWhitespace","trim","sortByString","b","options","localeCompare","apiurl","baseElements","getElementsByTagName","retVal","getAttribute","parseJwt","token","base64Url","retval","base64","decodeURIComponent","atob","map","c","charCodeAt","join","JSON","parse","getUrlSearchParams","URLSearchParams","search","ForgotPasswordModel","LoginModel","SortDirection","undoable","enableProxy","match","validatorStorage","getFromContainer","MetadataStorage","meta","validator","Validator","proxy","createNewProxy","self","Proxy","get","target","receiver","val","Reflect","bind","prop","newValue","tmpValue","internalSetModel","getType","TCtor","getContext","createProxy","isModelValid","valid","dot","indexOf","_get","Valid","parseObjectProperties","obj","k","setDecorators","getTargetValidationMetadatas","validateDecorators","propertyName","reverse","validated","some","t","validateValueByMetadata","getValue","constraints","isValid","errorMessage","url","config","setIsLoading","axios","getConfig","then","response","headers","post","accessToken","newTokenResult","setLoginState","logout","catch","setIsErrored","setErrors","httpStatusCode","Post","requestConfig","Authorization","status","createViewModel","setValue","submit","reset","_isString","_isBoolean","setError","getError","setValid","getValid","setDirty","getDirty","setTouched","getTouched","getAnyModelAsPayload","exclude","replace","isMobile","isTablet","isDesktop","Errors","SuperDiv","pb","pt","mt","mb","py","inline","frGetter","CSSGrid","flow","minRowHeight","rows","columns","gap","columnGap","rowGap","areas","area","formatAreas","justifyContent","alignContent","Cell","left","top","center","middle","AppHeader","FancyBox","ShoothillPaper","LinkBox","Paper","BounceAnimation","keyframes","DotWrapper","Dot","delay","Row1040","LeftBox","Dirty","Touched","_set","Boolean","hostname","RADIO","TYPES","Validation","uniqueId","validate","isFieldValid","typeMethods","reduce","methods","type","inputOptions","p","getTargetValue","e","isNaN","parseFloat","toISOString","checked","inputProps","isObservableArray","toJS","onClick","onChange","currentValue","alphaOnly","validateOnBlur","onFocus","onBlur","createPropsGetter","Control","FormControl","EditableInput","rendered","multiline","password","radio","checkbox","time","select","number","multiselect","validateOnStart","isInError","dateComp","utils","MomentUtils","placeholder","label","mask","InputLabelProps","shrink","timeComp","radiocomp","FormLabel","RadioGroup","row","aria-label","selectItems","FormControlLabel","control","Radio","FormHelperText","selectField","InputLabel","Select","MenuProps","disableScrollLock","MenuItem","textField","editMode","fullWidth","autoComplete","helperText","checkBox","Checkbox","fullwidth","multline","Client","Root","Server","Api","Account","Login","Logout","ResetPassword","Reset","VerifyToken","SetPassword","ForgotPassword","Admin","ResetFailedLoginAttemptsCount","LiteFormEmail","PostLiteFormAsync","ForgotPasswordViewModel","Covidcontainer","useStyles","makeStyles","root","flexGrow","margin","input","padding","textAlign","datePicker","backgroundColor","border","marginRight","marginBottom","marginTop","datePickerBox","datePickersGridContainer","datePickerGridContainer","maxWidth","subTitle","paddingBottom","ForgotPasswordPage","setErrorMessage","isLoading","isSuccess","setIsSuccess","doSubmit","preventDefault","ForgotPasswordAsync","errors","flexDirection","gutterBottom","onSubmit","Button","Animation","bgcolor","Buttons","classes","accept","multiple","htmlFor","DatePicker","startDate","setStartDate","DateFnsUtils","KeyboardButtonProps","AutoGridViewModel","FormatAreas","_instance","AutoGrid","desktopColumns","setColumns","desktopRows","setRows","desktopArea","setArea","setView","autorun","tabletArea","mobileColumns","mobileRows","mobileArea","tabletColumns","tabletRows","paddingTop","justifyItems","justifySelf","gridTemplateColumns","gridTemplateRows","gridRowGap","gridColumnGap","gridTemplateAreas","AutoCell","view","gridRowEnd","gridColumnEnd","alignSelf","gridArea","FormType","GridWrapper","StyledBox","GridLayouts","teams","SelectInput","selection","setSelection","anchorOrigin","vertical","horizontal","transformOrigin","getContentAnchorEl","team","Text","h1size","seth1size","h2size","seth2size","h3size","seth3size","h4size","seth4size","h5size","seth5size","h6size","seth6size","subtitle1size","setsubtitle1size","subtitle2size","setsubtitle2size","body1size","setbody1size","body2size","setbody2size","h1ref","h2ref","h3ref","h4ref","h5ref","h6ref","subtitle1ref","subtitle2ref","body1ref","body2ref","formRef","formTypes","lockNow","FormLockConcurrencyHubStore","setFormsInfo","formType","lockForm","getIsHubConnected","enqueueToConnectionQueue","unlockAllForms","useFormLockConcurrency","Ping","getEmSize","el","cs","getComputedStyle","fx","Number","getSizes","addEventListener","getIsFormLocked","getLocker","ref","TextInputs","FlexRow","FlexColumn","size","Layouts","Samples","desktopScreen","useMediaQuery","Link","Loaders","LogViewerViewModel","FetchLogFileAsync","file","LogContents","LogLoaded","DownloadFileAsync","URL","createObjectURL","Blob","link","createElement","setAttribute","appendChild","click","FileList","SubPage","LogFileStyle","span","LogViewer","FetchLogListAsync","backToList","paddingRight","cursor","fileName","src","domainStores","LoginViewModel","login","getModel","handleSubmit","useQuery","query","matchMedia","matches","setMatch","handleMatch","mediaQuery","addListener","removeListener","LogoSwitcher","displayName","alt","HBPLogo","crossOrigin","SCTLogo","getLogo","siteTracker","LoginPage","now","isLoggedIn","RouterLink","logoShoothill","getFullYear","CovidRegModel","signIn","signOut","RegisterUserViewModel","downloadDocument","responseType","getRegistrations","Registrations","downloadCSV","downloadQRCode","register","getModelAsPayload","getUserDetails","userModel","setModel","HasImage","isConfirmPasswordValid","Dashboard","isDragAccept","isDragReject","isDragActive","getColor","thumbInner","minWidth","overflow","img","UploadLogo","files","setFiles","hasImage","setHasImage","onDrop","useCallback","acceptedFiles","reader","FileReader","readAsDataURL","onload","result","Object","assign","preview","useDropzone","getRootProps","getInputProps","revokeObjectURL","thumbs","Infotext","RegisterCompanyDetails","Thumb","getLogoUrl","pl","borderBottom","RegistrationsView","field","rowData","inImage","outImage","hidden","dateRegistered","pageSize","pageSizeOptions","emptyRowsWhenPaging","RegisterPage","subpage","params","showRegistrations","subPage","showDashboard","pr","ResetPasswordModel","newPassword","ResetPasswordViewModel","getTokenFromUrl","forgotPasswordToken","verifyForgotPasswordTokenAsync","tokenValid","AppUrls","resetPasswordAsync","ResetPasswordPage","goToForgotPassword","SessionExpired","HomeContainer","Home","SetIsHBProSite","NotFound","RoleViewModel","roleStore","getRole","getRoles","u","newRole","setRoles","roleCount","getRoleCount","ascOrder","existingRole","sort","getIsLoadingData","UserViewModel","userStore","getUser","getUsers","newUser","includeGenericDeleted","includeDeleted","setUsers","userCount","getUserCount","r","userRoles","resetLoginAttemptsError","existingUser","Mui","DetailContainer","UserDetails","userViewModel","setNewUser","resetFailedLoginAttempts","DetailPanel","roleViewModel","loader","setLoader","getUserRoles","loadRolesAsync","rolesResponse","currentUser","setUser","loadUsersAsync","postUserDetailAsync","ShowSnackBar","renderValue","selected","RoleDetails","setNewRole","currentRole","setRole","postRoleDetailAsync","useAdminStyles","adminBtn","borderRadius","textTransform","fontWeight","marginLeft","activeImage","removeImage","right","modalScroll","overflowY","form","cancelButtonAdmin","adminHeading","adminHeader","tabsContainer","bottom","paddingLeft","tabsWidth","liveRadiogroup","icon","boxShadow","strokeWidth","checkedIcon","TabsCustom","Tabs","GridContainerAdmin","AdminHome","MUI","RoleListContainer","handleRowClick","onRowClick","RolesList","UserListContainer","fetchData","UsersList","TabPanel","other","aria-labelledby","a11yProps","handleChange","Tab","AdminRoutes","store","StoresContext","exact","Summary","CovidRegViewModel","getSummary","userId","tradingName","bitly","isHBPro","showSignInPage","CurrentSummary","showLoading","sendForm","FooterSwitcher","ShoothillLogo","Main","QR","port","ScanMe","forwardRef","Slide","SignInOutButton","CovidRegPage","open","setOpen","contact","phoneNumber","company","handleClose","stringify","mainPage","btnText","getRegisterButton","Dialog","onClose","SetShowSignInPage","SignIn","SignOut","AppRoutes","MetaCovid","property","MetaHBProCovid","MainLayout","getBackground","hbProBackGround","backGround","Background","up","Layout","loc","useLocation","showMobileImage","setConfig","showReactDomPatchNotification","App","StylesProvider","injectFirst","CssBaseline","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister","signalRConcurrencyHubConnection","registerFormLocks","send","dispose","HubConnectionBuilder","withUrl","accessTokenFactory","signalRAccessToken","withAutomaticReconnect","nextRetryDelayInMilliseconds","build","enabled","connect","setSignalRAccessToken","disconnect","connectionQueue","invoke","registeredForms","initalFormLocks","lockedBy","formLocks","locked","forms","setForms","disposers","disposer","getResetFormLocks","registerForms","setInitialFormLocks","when","myLockedForms","unlockForm","HubConnectionState","Connected","lockedByName","Disconnected","cid","connectionId","serverSessionId","connectedServer","onreconnected","onreconnecting","intervalId","setInterval","clearInterval","on","onLock","onUnlock","off","CoreStore","setWidth","Stores","classList","remove","add","page","SendEvent","createContext"],"mappings":"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","file":"static/js/main.dae89eea.chunk.js","sourcesContent":["import { coreTheme } from \"./../../Core/Components/Styles/CoreStyling\";\nimport { createMuiTheme, Theme, ThemeOptions } from \"@material-ui/core/styles\";\nimport createBreakpoints from \"@material-ui/core/styles/createBreakpoints\";\nimport { colors, Box } from \"@material-ui/core\";\nimport { Palette } from \"@material-ui/core/styles/createPalette\";\nimport styled from \"styled-components\";\n\n//Define your custom breakpoints here or accept the default values which are the standard common breakpoints\nlet customBreakpointValues = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n};\nexport const customBreakpoints = createBreakpoints({ values: customBreakpointValues });\n\n//Add your specific app styling here\ndeclare module \"@material-ui/core\" {\n export interface Theme {\n app: {\n colors: {\n success: {\n dark: string;\n light: string;\n };\n };\n };\n }\n}\n\nconst getTheme = () => {\n let theme = createMuiTheme(coreTheme as ThemeOptions);\n return theme;\n};\n\nconst appTheme = {\n app: {\n colors: {\n success: {\n dark: colors.green[600],\n light: colors.green[300],\n },\n },\n },\n};\n\n//Overrides\nlet theme = getTheme();\ntheme.breakpoints = customBreakpoints;\n(theme.palette.text = {\n primary: \"rgba(0,0,0, 1)\",\n secondary: \"rgba(0,0,0, 0.74)\",\n disabled: \"rgba(255,255,255, 0.38)\",\n hint: \"rgba(255,255,255, 0.38)\",\n}),\n // theme.palette = {\n // common: { black: \"#000\", white: \"#fff\" },\n // background: { paper: \"#fff\", default: \"#fafafa\" },\n // primary: { light: \"#7986cb\", main: \"#3f51b5\", dark: \"#303f9f\", contrastText: \"#fff\" },\n // secondary: { light: \"#ff4081\", main: \"#f50057\", dark: \"#c51162\", contrastText: \"#fff\" },\n // error: { light: \"#e57373\", main: \"#f44336\", dark: \"#d32f2f\", contrastText: \"#fff\" },\n // text: {\n // secondary: \"rgba(255,0,0, 1)\",\n // primary: \"rgba(255,255,255, 0.54)\",\n // disabled: \"rgba(255,255,255, 0.38)\",\n // hint: \"rgba(255,255,255, 0.38)\",\n // },\n // } as Palette;\n\n (theme = { ...theme, ...appTheme });\nexport const defaultTheme = theme;\n//(window as any).theme = defaultTheme;\n\nexport const LeftBox = styled(Box)`\n display: flex;\n padding: 60px 40px;\n height: 100%;\n\n > div.text-container {\n display: flex;\n flex-direction: column;\n align-self: flex-end;\n align-items: flex-start;\n\n h2 {\n font-weight: bold;\n }\n\n h2,\n h3 {\n color: #fff;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n > span {\n margin-bottom: 5px;\n //background-color: #145b79;\n display: block;\n padding: 5px 15px 10px;\n }\n }\n }\n`;\n\ninterface IRightBoxProps {\n paddingBottomMobile: string;\n}\n\nexport const RightBox = styled(Box)`\n background-color: rgba(255, 255, 255, 0.85);\n box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);\n height: 100%;\n padding: 37px 30px;\n\n @media (max-width: 767px) {\n padding-top: 28px;\n padding-bottom: ${({ paddingBottomMobile }) => paddingBottomMobile};\n }\n\n .topright-link {\n right: 0;\n position: absolute;\n font-weight: bold;\n }\n\n h1.header-text {\n font-weight: bold;\n width: 100%;\n text-align: center;\n color: #333;\n margin: 30px 0 20px;\n\n @media (max-width: 767px) {\n margin-top: 10px;\n }\n\n &.align-left {\n text-align: left;\n }\n }\n\n button {\n margin-top: 28px;\n text-transform: none;\n border-radius: 10px;\n padding: 15px 0 14px;\n line-height: 150%;\n\n @media (max-width: 767px) {\n line-height: 120%;\n }\n }\n\n img.shoothill {\n width: 45%;\n }\n\n img.sct {\n width: 50%;\n }\n\n .link {\n text-decoration: underline;\n color: #0090df;\n }\n`;\n","import * as MobX from \"mobx\";\n\nimport { IsNotEmpty } from \"class-validator\";\n// Libs\nimport { ModelBase } from \"../../Core/Models/ModelBase\";\n\n// App\n\nexport class Role extends ModelBase {\n public id: string = \"\";\n @IsNotEmpty({ message: \"Name is required\" })\n @MobX.observable\n public name: string = \"\";\n\n constructor(id: string) {\n super();\n this.id = id;\n }\n\n @MobX.action\n public fromDto = (model: RoleDTO) => {\n for (let key in model) {\n if (model.hasOwnProperty(key)) {\n this[key] = model[key];\n }\n }\n };\n\n public toDto = (model: Role) => {\n for (let key in model) {\n if (model.hasOwnProperty(key)) {\n model[key] = this[key];\n }\n }\n };\n}\n\nexport interface RoleDTO {\n id: string;\n name: string;\n}\n","import { LocationState } from \"history\";\nimport { Context, useContext, useEffect } from \"react\";\nimport { __RouterContext, RouteComponentProps, StaticContext } from \"react-router\";\nimport { useForceUpdate } from \"./UseForceUpdate\";\n\ntype AnyContext = Context>;\n\nconst INCORRECT_VERSION_ERROR: Error = new Error(\"use-react-router may only be used with react-router@^5.\");\n\nconst MISSING_CONTEXT_ERROR: Error = new Error(\"useReactRouter may only be called within a context.\");\n\nexport function useRouter

(): RouteComponentProps {\n // If this version of react-router does not support Context,\n if (!__RouterContext) {\n throw INCORRECT_VERSION_ERROR;\n }\n\n // If the react-router Context is not a parent Component,\n const context: RouteComponentProps = useContext>((__RouterContext as AnyContext) as Context>);\n if (!context) {\n throw MISSING_CONTEXT_ERROR;\n }\n\n const forceUpdate: VoidFunction = useForceUpdate();\n useEffect((): VoidFunction => context.history.listen(forceUpdate), [context]);\n return context;\n}\n","import { useState } from \"react\";\nexport const useForceUpdate = () => {\n const [, setIt] = useState(false);\n return () => setIt((it) => !it);\n};\n","import { useState, useRef, useEffect } from \"react\";\n\ninterface UseTimeoutHandler {\n start: () => any;\n clear: () => any;\n stop: () => any;\n isActive: boolean;\n}\n/**\n *\n * @param cb\n * @param timeoutDelayMs\n *\n * Usage: const { start, clear } = useTimeout(doAlert, 2000);\n *\n */\nfunction useTimeout(cb: () => void, timeoutDelayMs: number = 0): UseTimeoutHandler {\n const [isTimeoutActive, setIsTimeoutActive] = useState(false);\n const savedRefCallback = useRef<() => any>();\n\n useEffect(() => {\n savedRefCallback.current = cb;\n }, [cb]);\n\n function clear() {\n setIsTimeoutActive(false);\n }\n\n function start() {\n setIsTimeoutActive(true);\n }\n\n useEffect(() => {\n function callback() {\n savedRefCallback.current && savedRefCallback.current();\n clear();\n }\n\n if (isTimeoutActive) {\n const timeout = window.setTimeout(callback, timeoutDelayMs);\n return () => {\n window.clearTimeout(timeout);\n };\n }\n }, [isTimeoutActive]);\n\n return {\n clear,\n start,\n stop: clear,\n isActive: isTimeoutActive,\n };\n}\n\nexport { useTimeout };\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { Stores } from \"../../Custom/Stores/Stores\";\n// Libs\n\n// App\nimport { observable, computed, action } from \"mobx\";\n\nexport class BaseStore {\n public stores: Stores | null | undefined;\n @observable protected isLoadingCount = 0;\n @observable public isLoaded = true;\n @computed public get isLoading() {\n return this.isLoadingCount > 0;\n }\n public constructor(stores?: Stores) {\n if (stores) this.stores = stores;\n }\n\n @action protected setIsLoading = () => {\n this.isLoadingCount++;\n this.isLoaded = false;\n };\n @action protected unsetIsLoading = () => {\n this.isLoadingCount--;\n if (this.isLoadingCount === 0) {\n this.isLoaded = true;\n }\n };\n}\n","// Libs\n\nimport * as MobX from \"mobx\";\n\nimport { IsEmail } from \"class-validator\";\nimport { ModelBase } from \"../../Core/Models/ModelBase\";\nimport { Role } from \".\";\n\n// App\n\nexport class User extends ModelBase {\n public id: string = \"\";\n @MobX.observable public firstName: string = \"\";\n @MobX.observable public lastName: string = \"\";\n @MobX.observable\n @IsEmail({}, { message: \"Email is not valid\" })\n public email: string = \"\";\n @MobX.observable public password: string = \"\";\n @MobX.observable public role: string = \"\";\n @MobX.observable public concurrencyToken: string = \"\";\n @MobX.observable public isDeleted: boolean = false;\n @MobX.observable public userRoles = MobX.observable([]);\n\n constructor(id: string) {\n super();\n this.id = id;\n }\n\n @MobX.action\n public fromDto = (model: UserDTO) => {\n for (let key in model) {\n if (model.hasOwnProperty(key)) {\n this[key] = model[key];\n }\n }\n // this.id = model.id;\n // this.firstName = model.firstName;\n // this.lastName = model.lastName;\n // this.email = model.email;\n // this.password = model.password;\n // this.role = model.role;\n // this.concurrencyToken = model.concurrencyToken;\n // this.isDeleted = model.isDeleted;\n };\n\n public toDto = (model: UserDTO) => {\n for (let key in model) {\n if (model.hasOwnProperty(key)) {\n model[key] = this[key];\n }\n }\n };\n}\n\nexport interface UserDTO {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n role: string;\n concurrencyToken: string;\n isDeleted: boolean;\n}\n","import React from \"react\";\n\nlet defaultPrefix = \"id\";\nlet lastId = 0;\n\nexport interface Props {\n defaultPrefix?: string;\n}\n\nexport class ResetElementIdGenerator extends React.Component {\n public constructor(props: Props) {\n super(props);\n\n lastId = 0;\n\n if (props.defaultPrefix != null) {\n defaultPrefix = props.defaultPrefix;\n }\n }\n\n public render() {\n return null;\n }\n}\n\nexport const getElementId = (prefix?: string) => `${prefix || defaultPrefix}_${++lastId}`;\n","import React from \"react\";\nimport { Route, Redirect, RouteProps } from \"react-router\";\n\ninterface Props extends RouteProps {\n component: any;\n isAllowed: () => boolean;\n}\n\n// https://tylermcginnis.com/react-router-protected-routes-authentication/\n\n// const PrivateRoute = (props: Props) => {\nexport const PrivateRoute: React.FC = (props) => {\n // EN: Destructure component and RENAME it to Component!\n const { isAllowed, component: Component, ...rest } = props;\n\n return (\n {\n // return isAllowed() && ;\n return isAllowed() === true ? (\n \n ) : (\n \n );\n }}\n />\n );\n};\n\n// Usage\n{\n /* ; */\n // const redirectStart = props => \n}\ninterface DProps extends RouteProps {\n trueComponent: any;\n falseComponent: any;\n decisionFunc: any;\n}\nexport const DecisionRoute: React.FC = ({ trueComponent, falseComponent, decisionFunc, ...rest }) => {\n return ;\n};\n","import React, { useState, useEffect } from \"react\";\nimport { withStyles, createStyles, createMuiTheme, Theme, Grid, CircularProgress, Typography } from \"@material-ui/core\";\nimport { useTimeout } from \"Core/Utils\";\n\ninterface Props {\n delayBeforeShow?: number;\n loadingText?: string;\n}\n\nexport const Loader = (props: Props) => {\n const [show, setShow] = useState(false);\n const { start, clear } = useTimeout(() => {\n setShow(true);\n }, props.delayBeforeShow);\n\n useEffect(() => {\n start();\n return () => {\n clear();\n };\n }, []);\n\n if (show) {\n return (\n \n \n \n \n \n {props.loadingText}\n \n \n );\n } else return <>;\n};\n\nLoader.defaultProps = {\n delayBeforeShow: 0,\n loadingText: \"Loading...\",\n};\n","import React from \"react\";\nimport { TextField } from \"@material-ui/core\";\nimport { TextFieldProps } from \"@material-ui/core/TextField\";\n\nexport const TextFieldMemo = React.memo((props: TextFieldProps) => {\n const { children, ...rest } = props;\n return {children};\n});\n","export * from \"./DomainStores\";\nexport * from \"./Stores\";\n","// AJ: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\nexport class HttpError extends Error {\n public readonly httpStatusCode: number;\n\n public constructor(httpStatusCode: number, message: string) {\n // AJ: https://stackoverflow.com/questions/47941324/inherited-exceptions-and-instanceof\n const targetPrototype = new.target.prototype;\n super(message);\n Object.setPrototypeOf(this, targetPrototype);\n\n this.httpStatusCode = httpStatusCode;\n }\n}\n","export class RequestError extends Error {\n public readonly errorMessages: string[];\n\n constructor(errorMessages: string[]) {\n //AJ: https://stackoverflow.com/questions/47941324/inherited-exceptions-and-instanceof\n const targetPrototype = new.target.prototype;\n super(\"The request had errors.\");\n Object.setPrototypeOf(this, targetPrototype);\n\n this.errorMessages = errorMessages;\n }\n}\n","// Libs\nimport * as Axios from \"axios\";\n\n// App\nimport { getApiUrl } from \"../Utils\";\n\nexport const GetDefaultConfig: () => Axios.AxiosRequestConfig = () => {\n return {\n validateStatus: undefined, // We handle the httpstatus validation throwing some custom errors objects.\n baseURL: getApiUrl(),\n };\n};\n","// Libs\nimport * as Axios from \"axios\";\nimport { merge as _merge } from \"lodash-es\";\n\n// App\nimport { GetDefaultConfig } from \"./GetDefaultConfig\";\n\nexport const MergeDefaultConfig: (...configs: (Axios.AxiosRequestConfig | undefined)[]) => Axios.AxiosRequestConfig = (...configs) => _merge(GetDefaultConfig(), ...configs);\n","import GoogleAnalytics, { EventArgs, FieldsObject, TrackerNames } from \"react-ga\";\n\n//export { EventArgs, FieldsObject, TrackerNames };\n\n// GoogleAnalytics.initialize([\n// \t{\n// \t\ttrackingId: \"UA-1852243-71\", //UA-1852243-67\n// \t\tgaOptions: {\n// \t\t\tname: \"PPEExchange\",\n// \t\t},\n// \t},\n// ]);\nexport const Init = (UA: string) => {\n GoogleAnalytics.initialize(UA);\n GoogleAnalytics.set({ anonymizeIp: true });\n};\n\n///\n/// sendEvent\n///\n///https://developers.google.com/analytics/devguides/collection/analyticsjs/events\nexport const sendEvent = (args: EventArgs) => {\n //let eventArgs: EventArgs = {\n // category: category,\n // action: action,\n // label: label,\n // nonInteraction: nonInteraction,\n // transport: transport,\n // value: value\n //};\n //if (args != undefined && args.transport == undefined) {\n // `args.transport` must be either one of these values: `beacon`, `xhr` or `image`\n // args.transport = window.location.pathname;\n //}\n\n GoogleAnalytics.event(args);\n};\n\n///\n/// set\n///\nexport const set = (fieldsObject: FieldsObject, trackerNames?: TrackerNames) => {\n GoogleAnalytics.set({\n fieldsObject,\n trackerNames,\n });\n};\n\n///\n/// pageview\n///\nexport const pageview = (path: string, trackerNames?: TrackerNames, title?: string): void => {\n GoogleAnalytics.pageview(path);\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport \"./Error.scss\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\nimport HomeIcon from \"@material-ui/icons/HomeOutlined\";\nimport { defaultTheme } from \"../../Custom/StylesAppSpecific/AppStyling\";\n\nexport const Container = styled.div`\n height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n background: #333333;\n\n #error {\n margin-bottom: 1rem;\n font-size: 2rem;\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: 0.075em;\n color: #c94d4d;\n -webkit-animation: pulse 4s infinite alternate;\n animation: pulse 4s infinite alternate;\n position: relative;\n }\n @-webkit-keyframes pulse {\n from {\n opacity: 0.5;\n }\n 50% {\n opacity: 0.5;\n }\n }\n @keyframes pulse {\n from {\n opacity: 0.5;\n }\n 50% {\n opacity: 0.5;\n }\n }\n #error::before {\n content: \"\";\n width: 0.75rem;\n height: 50vh;\n margin-bottom: 0.75em;\n position: absolute;\n left: 50%;\n bottom: 100%;\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(60%, rgba(255, 255, 255, 0.1)), to(transparent));\n background: linear-gradient(to bottom, rgba(255, 255, 255, 0.1) 60%, transparent 100%);\n }\n\n #desc {\n margin: 2em 0 1em;\n }\n\n .error-num,\n .error-num__clip,\n .error-num__clip::before,\n .error-num__clip-left {\n position: relative;\n font-size: 10rem;\n font-family: \"Oswald\";\n letter-spacing: -0.01em;\n color: white;\n -webkit-animation: colorSplit 1.25s steps(2, end) infinite;\n animation: colorSplit 1.25s steps(2, end) infinite;\n }\n @-webkit-keyframes colorSplit {\n 25% {\n text-shadow: -0.02em 0 0 #ed008c, 0.025em 0 0 #0087ef;\n }\n 75% {\n text-shadow: -0.035em 0 0 #ed008c, 0.04em 0 0 #0087ef;\n }\n }\n @keyframes colorSplit {\n 25% {\n text-shadow: -0.02em 0 0 #ed008c, 0.025em 0 0 #0087ef;\n }\n 75% {\n text-shadow: -0.035em 0 0 #ed008c, 0.04em 0 0 #0087ef;\n }\n }\n .error-num__clip,\n .error-num__clip::before,\n .error-num__clip-left {\n position: absolute;\n top: 0;\n left: -2px;\n z-index: 10;\n color: #333;\n overflow: visible;\n -webkit-clip-path: polygon(0% 0%, 100% 0, 100% 25%, 0 25%, 0 30%, 100% 30%, 100% 50%, 0 50%, 0 60%, 100% 60%, 100% 65%, 0 65%, 0 80%, 100% 80%, 100% 85%, 0 85%, 0% 0%);\n clip-path: polygon(0% 0%, 100% 0, 100% 25%, 0 25%, 0 30%, 100% 30%, 100% 50%, 0 50%, 0 60%, 100% 60%, 100% 65%, 0 65%, 0 80%, 100% 80%, 100% 85%, 0 85%, 0% 0%);\n -webkit-animation: glitch 1s steps(2, start) infinite;\n animation: glitch 1s steps(2, start) infinite;\n }\n @-webkit-keyframes glitch {\n 30% {\n left: 0;\n }\n to {\n left: 0;\n }\n }\n @keyframes glitch {\n 30% {\n left: 0;\n }\n to {\n left: 0;\n }\n }\n .error-num__clip::before,\n .error-num__clip-left::before {\n content: \"500\";\n left: 0.05em;\n color: white;\n z-index: 9;\n -webkit-clip-path: polygon(0% 0%, 100% 0, 100% 26%, 0 26%, 0 29%, 100% 29%, 100% 51%, 0 51%, 0 59%, 100% 59%, 100% 66%, 0 66%, 0 79%, 100% 79%, 100% 86%, 0 86%, 0% 0%);\n clip-path: polygon(0% 0%, 100% 0, 100% 26%, 0 26%, 0 29%, 100% 29%, 100% 51%, 0 51%, 0 59%, 100% 59%, 100% 66%, 0 66%, 0 79%, 100% 79%, 100% 86%, 0 86%, 0% 0%);\n }\n`;\ntype Props = {\n error?: string;\n};\nexport const Error2: React.FC = (props: Props) => {\n return (\n \n

Error
\n
\n 500\n
500
\n
\n \n Uh oh, there seems to be a problem.\n \n \n {props.error}\n \n \n Let me help you find{\" \"}\n \n \n way out\n \n {/**/}\n {/*\t*/}\n {/*\t\ta way out*/}\n {/*\t*/}\n {/**/}\n \n );\n};\nError2.defaultProps = {\n error: \"Unknown error\",\n};\n","import * as MobX from \"mobx\";\nimport { InitialState, LoginModel } from \"../Models\";\nimport { AccountStatus, ApiResult } from \"Core/Models\";\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\nimport { runInAction } from \"mobx\";\nimport { StoresInstance } from \"../Stores\";\n\nexport class InitViewModel extends ViewModelBase {\n @MobX.observable\n public DataReady: boolean = false;\n public InitData: InitialState = {} as InitialState;\n constructor() {\n super({});\n }\n\n public getInitialState = async (): Promise => {\n let apiResult = await this.Get(\"/api/initialstate/getinitialstatejson\");\n if (apiResult) {\n runInAction(() => {\n // if (!apiResult.payload.accountStatus.isLoggedIn) {\n // \tStoresInstance.domain.AccountStore.Logout(false);\n // }\n\n StoresInstance.init(apiResult.payload);\n this.InitData = apiResult.payload;\n this.DataReady = true;\n });\n return apiResult.wasSuccessful;\n }\n return false;\n };\n\n public isFieldValid(fieldName: \"emailAddress\" | \"password\", value: any): boolean {\n return true;\n }\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n}\n","import * as MobX from \"mobx\";\nimport * as React from \"react\";\nimport * as ReactRouterDom from \"react-router-dom\";\nimport { getHistory } from \"./Core/Utils/Utils\";\nimport { Error2 } from \"./Core/Views/Error2\";\n\ninterface ErrorBoundaryProps {\n hasError: boolean;\n error: string;\n}\nexport class AppErrorBoundary extends React.Component<{}, ErrorBoundaryProps> {\n //@MobX.observable private error: any | undefined = undefined;\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: \"\" };\n }\n static getDerivedStateFromError(error: any) {\n // Update state so the next render will show the fallback UI.\n return { hasError: true, error: error.toString() };\n }\n public componentDidCatch(error: any, info: any) {\n //this.setError(error.toString());\n console.log(\"Error => \" + error.toString());\n }\n\n public render() {\n // AJ: ErrorBoundaries don't catch event/promise errors... so no point handling them here...\n // AJ: https://reactjs.org/docs/error-boundaries.html#how-about-event-handlers\n if (this.state.hasError) {\n return (\n \n // return (\n // \t
\n // \t\t
\n // \t\t\t×\n // \t\t\t

App Crashed

\n // \t\t\t

Something has gone horribly wrong.

\n // \t\t\t{this.state.error}\n // \t\t
\n // \t
\n );\n //getHistory().push(\"/unknownerror\");\n //return ;\n }\n\n return this.props.children;\n }\n\n //@MobX.action private setError = (error: any) => (this.error = error);\n}\n","//EN Do not remove default theme from here\nimport \"Custom/StylesAppSpecific/AppStyling\";\n\n//EN: To support IE 11\n// Uncomment the two lines below\n// Revert MobX to 4.12.0\n// Delete node_modules directory and reinstall\n//import \"react-app-polyfill/ie11\";\n//import \"react-app-polyfill/stable\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport * as MobX from \"mobx\";\nimport \"index.scss\";\nimport App from \"App\";\nimport * as History from \"history\";\nimport { StoresInstance } from \"../Custom/Stores\";\nimport { getBaseUrl } from \"./Utils/Utils\";\nimport { InitViewModel } from \"../Custom/ViewModels/InitViewModel\";\nimport { AppErrorBoundary } from \"../AppErrorBoundary\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { Error2 } from \"./Views/Error2\";\nimport { Loader } from \"./Components\";\n\nMobX.configure({ enforceActions: \"observed\" });\n\nconst baseUrl: string | undefined = getBaseUrl();\nexport const GlobalHistory = History.createBrowserHistory({\n basename: baseUrl,\n});\nGlobalHistory.listen((location: any) => {\n if (StoresInstance && StoresInstance.domain) {\n StoresInstance.coreStore.PageView(location.pathname);\n }\n // Use setTimeout to make sure this runs after React Router's own listener\n setTimeout(() => {\n // Keep default behavior of restoring scroll position when user:\n // - clicked back button\n // - clicked on a link that programmatically calls `history.goBack()`\n // - manually changed the URL in the address bar (here we might want\n // to scroll to top, but we can't differentiate it from the others)\n if (location.action === \"POP\") {\n return;\n }\n // In all other cases, check fragment/scroll to top\n let hash = window.location.hash;\n if (hash) {\n let element = document.querySelector(hash);\n if (element) {\n element.scrollIntoView({ block: \"start\", behavior: \"smooth\" });\n }\n } else {\n window.scrollTo(0, 0);\n }\n });\n});\n\nexport const IsDevMode: boolean = process.env.NODE_ENV === \"development\";\n(window as any).isDev = IsDevMode;\n// const devTools: JSX.Element | null = isDev ? : null;\n\ntype Props = {\n children: React.ReactNode;\n};\nexport const CoreIndex: React.FC = (props: Props) => {\n const [viewModel] = useState(() => new InitViewModel());\n useEffect(() => {\n let _ = viewModel.getInitialState();\n }, []);\n\n const getRender = () => {\n if (viewModel.IsLoading) {\n // EN: Delayed in code behind so we can see the loading text\n return ;\n } else if (viewModel.IsErrored) {\n return ;\n }\n\n if (viewModel.DataReady) {\n return {props.children};\n }\n return <>;\n };\n\n return useObserver(() => {\n return <>{getRender()};\n });\n};\n","import { ModelBase } from \"Core/Models/ModelBase\";\nimport * as MobX from \"mobx\";\nimport { validate, validateOrReject, Contains, IsInt, Length, IsEmail, IsFQDN, IsDate, Min, Max, IsNotEmpty, ValidateIf, Equals } from \"class-validator\";\nimport { RegisterAddressModel } from \"./RegisterUserAddressModel\";\nimport { BlankModelDTO } from \"../../Core/Models/BlankModel\";\n\nexport class RegisterUserModel extends ModelBase {\n @MobX.observable\n @IsNotEmpty({ message: \"Trading name is required\" })\n public tradingName: string = \"\";\n\n public logoBase64: string = \"\";\n\n @MobX.observable\n //@IsNotEmpty({ message: \"Unique name is required\" })\n public displayName: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"Last name is required\" })\n public lastName: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"First name is required\" })\n public firstName: string = \"\";\n\n @MobX.observable\n //@IsNotEmpty({ message: \"Position is required\" })\n public position: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"Email address is required\" })\n @IsEmail({}, { message: \"Email address is not correct\" })\n public email: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"Phone number is required\" })\n public phoneNumber: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"Password is required\" })\n public password: string = \"\";\n\n @MobX.observable\n public confirmPassword: string = \"\";\n\n @MobX.observable\n @Equals(true, { message: \"Must be ticked\" })\n public terms: boolean = false;\n\n @MobX.observable\n public contactConsent: boolean = false;\n\n @MobX.observable\n public isHBPro: boolean = false;\n\n fromDto(model: RegisterUserModel): void {\n //this just iterates through every key assigning it to the model\n //Should only use if there is a direct mapping between dto and domain model\n //otherwise just map them yourself\n for (let key in model) {\n if (model.hasOwnProperty(key)) {\n if (this[key] instanceof Date) {\n this[key] = new Date(model[key]);\n } else {\n this[key] = model[key];\n }\n }\n }\n }\n public toDto = (model: RegisterUserModel) => {};\n}\n","import moment from \"moment-timezone\";\n\nexport const dateTimeFormat = \"DD/MM/YYYY\";\nexport const FormatMoment = (momentDateTime: moment.Moment, format: string = dateTimeFormat) => {\n if (!momentDateTime.isValid()) {\n return \"\";\n }\n\n return momentDateTime.format(format);\n};\nexport const FormatDate = (momentDateTime: Date | null, format: string = dateTimeFormat) => {\n (window as any).moment = moment;\n if (typeof momentDateTime === \"string\") {\n if (!(momentDateTime as string).endsWith(\"Z\")) {\n (momentDateTime as string) += \"Z\";\n }\n }\n return moment(momentDateTime).tz(\"Europe/London\").format(format);\n};\nexport const FormatMomentString = (rawDateTime: string | undefined, format: string = dateTimeFormat) => {\n if (!rawDateTime) {\n return \"\";\n }\n\n const momentDateTime = moment.utc(rawDateTime);\n\n return FormatMoment(momentDateTime, format);\n};\n\nexport const dateTimeString = (rawDateTime: string | undefined) => FormatMomentString(rawDateTime, dateTimeFormat);\n","import React, { useState, useContext, useEffect } from \"react\";\nimport { Box } from \"@material-ui/core\";\n\ninterface Props {\n iff: boolean;\n renderToDom?: boolean;\n}\nexport const Show: React.FC = (props) => {\n if (props.iff) {\n return <>{props.children};\n } else if (props.renderToDom) {\n return (\n \n {props.children}\n \n );\n }\n return <>;\n};\nShow.defaultProps = {\n iff: false,\n renderToDom: false,\n};\n","import { createContext } from \"react\";\nimport * as Utils from \"Core/Utils/Utils\";\nimport * as Models from \"Custom/Models\";\n// Libs\n// App\nimport { BaseStore } from \"../../../Core/Stores/BaseStore\";\nimport { action, computed, observable } from \"mobx\";\nimport { Stores } from \"../Stores\";\nimport { InitialState } from \"Custom/Models\";\nimport { AccountStatus } from \"Core/Models\";\nimport { getHistory } from \"Core/Utils/Utils\";\n\nexport class AccountStore extends BaseStore {\n @observable public IsLoggedIn: boolean = false;\n @observable public UserName: string = \"\";\n @observable public DisplayName: string = \"\";\n @observable public UserRoles: string[] = [];\n @observable public UseAdminGrids: boolean = false;\n @observable public UseAdminControlsLight: boolean = false;\n\n private jwt: string | null = null;\n private refreshToken: string | null = null;\n private refreshTokenExpiryDate: Date | null = null;\n private tokenViewModel = {};\n\n public constructor() {\n super();\n }\n\n public init(stores: Stores, initialState: InitialState) {\n this.UseAdminGrids = initialState.appSettings.useAdminGrids === \"true\";\n this.UseAdminControlsLight = initialState.appSettings.useAdminControlsLight === \"true\";\n this.getLoginState(initialState.accountStatus);\n //this.tokenViewModel = new TokenViewModel();\n }\n\n @action\n public setIsLoggedIn(state: boolean) {\n this.IsLoggedIn = state;\n }\n\n public isInRole = (role: string): boolean => {\n if (this.UserRoles && this.UserRoles.length > 0) {\n return this.UserRoles.includes(role);\n }\n\n return false;\n };\n\n @action\n public Logout = (redirect: boolean = false): void => {\n localStorage.removeItem(\".auth\");\n document.cookie = \".refreshtoken= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\";\n this.IsLoggedIn = false;\n this.UserName = \"\";\n this.DisplayName = \"\";\n this.UserRoles = [];\n //(window as any).jwt = null;\n if (redirect) {\n window.location.href = \"/\";\n } else {\n getHistory().push(\"/\");\n }\n };\n\n public getJwt() {\n return this.jwt;\n }\n\n @action\n public getLoginState = (apiResult: AccountStatus) => {\n let jwt = apiResult?.jwt ?? \"\";\n if (!jwt || jwt.length === 0) {\n this.jwt = localStorage.getItem(\".auth\") as string;\n //this.refreshToken = localStorage.getItem(\".refreshToken\");\n //this.refreshTokenExpiryDate = new Date(localStorage.getItem(\".refreshTokenExpiryDate\") as string);\n } else {\n this.jwt = jwt;\n }\n\n if (this.jwt && this.jwt !== \"undefined\" && this.jwt !== \"null\") {\n const data = Utils.parseJwt(this.jwt);\n localStorage.setItem(\".auth\", this.jwt);\n if (data === \"\") {\n return;\n }\n //localStorage.setItem(\".refreshToken\", apiResult?.refreshToken ?? \"\");\n //localStorage.setItem(\".refreshTokenExpiryDate\", apiResult?.refreshTokenExpiryDate ?? new Date());\n this.IsLoggedIn = true;\n this.UserName = data[\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier\"] as string;\n this.DisplayName = data[\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name\"] as string;\n this.UserRoles = data[\"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\"] as string[];\n // EN: For Debugging\n //(window as any).jwt = this.jwt;\n }\n };\n\n @computed get GetUseAdminGrids(): boolean {\n return this.UseAdminGrids;\n }\n\n @computed get GetUseAdminControlsLight(): boolean {\n return this.UseAdminControlsLight;\n }\n}\n","// Libs\n\nimport * as MobX from \"mobx\";\n\nimport { BaseStore } from \"../../../../Core/Stores/BaseStore\";\nimport Moment from \"moment\";\nimport { Stores } from \"Custom/Stores/index\";\nimport { User } from \"Custom/Models/User\";\nimport { UserDTO } from \"Custom/Models/User\";\n\n// App\n\ninterface Filters {\n date: any;\n orderAsc: boolean;\n searchFilter: string;\n}\n\nexport class UserStore extends BaseStore {\n private users = MobX.observable([]);\n @MobX.observable private isLoadingData: boolean = false;\n @MobX.observable private filters: Filters = {\n date: Moment(),\n orderAsc: true,\n searchFilter: \"\",\n };\n @MobX.observable private lastUpdated: any = Moment();\n\n public constructor() {\n super();\n }\n\n public Init(stores: Stores) {}\n\n @MobX.computed get getUserCount(): number {\n return this.users.length;\n }\n\n @MobX.action\n public setUsers(users: UserDTO[]) {\n this.users.clear();\n users.forEach((user, index) => {\n let domainModel = this.users.find((dm) => dm.id === user.id);\n\n if (!domainModel) {\n domainModel = new User(user.id);\n\n domainModel.fromDto(user);\n this.users.push(domainModel);\n }\n });\n this.isLoadingData = false;\n this.lastUpdated = Moment();\n }\n\n @MobX.action\n public clearUsers() {\n this.users.clear();\n }\n\n @MobX.action\n public setIsLoadingData(loading: boolean) {\n this.isLoadingData = loading;\n }\n\n @MobX.computed\n public get getUsers() {\n return this.users;\n }\n\n @MobX.computed\n public get getIsLoadingData() {\n return this.isLoadingData;\n }\n\n @MobX.computed\n public get getFilters() {\n return this.filters;\n }\n\n @MobX.computed\n public get getFilteredUsers() {\n let users = this.users.slice();\n if (this.filters.searchFilter) {\n users = this.users.filter(\n (or) =>\n or.email.toLowerCase().includes(this.filters.searchFilter) ||\n or.firstName.toLowerCase().includes(this.filters.searchFilter) ||\n or.lastName.toLowerCase().includes(this.filters.searchFilter),\n );\n }\n return users;\n }\n}\n","// Libs\nimport * as MobX from \"mobx\";\n\nimport { Role, RoleDTO } from \"../../../Models/Role\";\n\n// App\nimport { BaseStore } from \"../../../../Core/Stores/BaseStore\";\nimport Moment from \"moment\";\nimport { Stores } from \"Custom/Stores/index\";\n\ninterface Filters {\n date: any;\n orderAsc: boolean;\n searchFilter: string;\n}\n\nexport class RoleStore extends BaseStore {\n private roles = MobX.observable([]);\n @MobX.observable private isLoadingData: boolean = false;\n @MobX.observable private filters: Filters = {\n date: Moment(),\n orderAsc: true,\n searchFilter: \"\",\n };\n @MobX.observable private lastUpdated: any = Moment();\n\n public constructor() {\n super();\n }\n\n public Init(stores: Stores) {}\n\n @MobX.computed get getRoleCount(): number {\n return this.roles.length;\n }\n\n @MobX.action\n public setRoles(roles: RoleDTO[]) {\n this.roles.clear();\n roles.forEach((role, index) => {\n let domainModel = this.roles.find((dm) => dm.id === role.id);\n\n if (!domainModel) {\n domainModel = new Role(role.id);\n\n domainModel.fromDto(role);\n this.roles.push(domainModel);\n }\n });\n this.isLoadingData = false;\n this.lastUpdated = Moment();\n }\n\n @MobX.action\n public clearRoles() {\n this.roles.clear();\n }\n\n @MobX.action\n public setIsLoadingData(loading: boolean) {\n this.isLoadingData = loading;\n }\n\n @MobX.computed\n public get getRoles() {\n return this.roles;\n }\n\n @MobX.computed\n public get getIsLoadingData() {\n return this.isLoadingData;\n }\n\n @MobX.computed\n public get getFilters() {\n return this.filters;\n }\n\n @MobX.computed\n public get getFilteredRoles() {\n let roles = this.roles.slice();\n if (this.filters.searchFilter) {\n roles = this.roles.filter((or) => or.name.toLowerCase().includes(this.filters.searchFilter));\n }\n return roles;\n }\n}\n","import * as GoogleAnalytics from \"Core/Utils/App/GoogleAnalyticsUtils\";\nimport * as Models from \"../Models\";\nimport { action, computed, observable, runInAction } from \"mobx\";\nimport { AccountStore } from \"./Domain\";\nimport { RoleStore } from \"./Domain/Admin\";\nimport { Stores } from \"./Stores\";\nimport { UserStore } from \"./Domain/Admin\";\nimport { RegisterUserModel } from \"../Models/RegisterUserModel\";\nimport { Summary } from \"../Models/Summary\";\n\nexport class DomainStores {\n @observable public openSnackBar = false;\n @observable public openErrorDialog = false;\n @observable public errorDialogContent: string = \"\";\n @observable public snackBarContent: string = \"\";\n @observable public isHbProSite: boolean = true;\n\n public AccountStore: AccountStore = new AccountStore();\n public UserStore = new UserStore();\n public RoleStore = new RoleStore();\n public CurrentUser = new RegisterUserModel();\n @observable public CurrentSummary: Summary | null = null;\n\n public init(stores: Stores, initialState: Models.InitialState) {\n this.AccountStore.init(stores, initialState);\n }\n @action\n public SetIsHBProSite(state: boolean) {\n this.isHbProSite = state;\n }\n @action\n public ShowSnackBar(content: string) {\n this.snackBarContent = content;\n this.openSnackBar = true;\n }\n\n @action\n public CloseSnackBar() {\n this.openSnackBar = false;\n }\n\n @action\n public ShowErrorDialog(content: string) {\n this.errorDialogContent = content;\n this.openErrorDialog = true;\n }\n}\n","import { createMuiTheme, Theme, ThemeOptions } from \"@material-ui/core/styles\";\nimport createBreakpoints from \"@material-ui/core/styles/createBreakpoints\";\nimport { colors } from \"@material-ui/core\";\n\nexport const baseFontSize = 16;\nexport const pxToRem = (value: number) => {\n return `${value / 16}rem`;\n};\nlet coreBreakpointValues = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n};\nexport const coreBreakpoints = createBreakpoints({ values: coreBreakpointValues });\nexport const coreTheme = createMuiTheme({\n coreBreakpoints,\n // app: {\n // \tcolors: {\n // \t\tsuccess: {\n // \t\t\tdark: colors.green[600],\n // \t\t\tlight: colors.green[300],\n // \t\t},\n // \t},\n // },\n spacing: (value: number) => {\n let spacing = 8; //Default spacing on desktop\n let screenWidth = document.body.clientWidth;\n if (screenWidth <= coreTheme.breakpoints.values[\"md\"]) spacing /= 2;\n if (screenWidth > coreTheme.breakpoints.values[\"md\"] && screenWidth <= coreTheme.breakpoints.values[\"lg\"]) spacing /= 1.5;\n if (screenWidth > coreTheme.breakpoints.values[\"lg\"]) spacing /= 1;\n return value * spacing;\n },\n typography: {\n fontFamily: `\"Roboto\", sans-serif`,\n fontSize: baseFontSize,\n h1: {\n fontSize: pxToRem(baseFontSize * 6),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem((baseFontSize * 6) / 1.714),\n },\n },\n h2: {\n fontSize: pxToRem(baseFontSize * 4),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem((baseFontSize * 4) / 1.68),\n },\n },\n h3: {\n fontSize: pxToRem(baseFontSize * 3),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem((baseFontSize * 3) / 1.5),\n },\n },\n h4: {\n fontSize: pxToRem(baseFontSize * 2),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem((baseFontSize * 2) / 1.333),\n },\n },\n h5: {\n fontSize: pxToRem(baseFontSize * 1.5),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem((baseFontSize * 1.5) / 1.333),\n },\n },\n h6: {\n fontSize: pxToRem(baseFontSize * 1.25),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem((baseFontSize * 1.25) / 1.25),\n },\n },\n subtitle1: {\n fontSize: pxToRem(baseFontSize),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem(14),\n },\n },\n subtitle2: {\n fontSize: pxToRem(baseFontSize * 0.875),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem(10),\n },\n },\n body1: {\n fontSize: pxToRem(baseFontSize * 0.875),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem(14),\n },\n },\n body2: {\n fontSize: pxToRem(14),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem(10),\n },\n },\n button: {\n fontSize: pxToRem(baseFontSize * 0.875),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem(14),\n },\n },\n caption: {\n fontSize: pxToRem(baseFontSize * 0.875),\n [coreBreakpoints.down(\"sm\")]: {\n fontSize: pxToRem(10),\n },\n },\n },\n palette: {\n common: { black: \"#000\", white: \"#fff\" },\n background: { paper: \"#fff\", default: \"#fafafa\" },\n primary: { light: \"#2c2c2c\", main: \"#000\", dark: \"#000\", contrastText: \"#fff\" },\n secondary: { light: \"#61c0ff\", main: \"#0090DF\", dark: \"#0063ad\", contrastText: \"#fff\" },\n error: { light: \"#e57373\", main: \"#f44336\", dark: \"#d32f2f\", contrastText: \"#fff\" },\n text: {\n secondary: \"rgba(0,0,0, 1)\",\n primary: \"rgba(255,255,255, 1)\",\n disabled: \"rgba(255,255,255, 0.38)\",\n hint: \"rgba(255,255,255, 0.38)\",\n },\n },\n} as ThemeOptions);\n//(window as any).theme = defaultTheme;\n","module.exports = __webpack_public_path__ + \"static/media/Shoothill-logo.9b159188.svg\";","module.exports = __webpack_public_path__ + \"static/media/sctlogo.b4f76d3d.png\";","import \"url-search-params-polyfill\";\nimport { getPath } from \"ts-object-path\";\nimport { History, LocationState } from \"history\";\nimport { StoresInstance } from \"../../Custom/Stores\";\nimport { AccountStatus } from \"../Models\";\nimport { GlobalHistory } from \"Core/CoreIndex\";\n\nexport type FieldType = Omit<\n T,\n | \"Errors\"\n | \"Dirty\"\n | \"Touched\"\n | \"Valid\"\n | \"getError\"\n | \"setError\"\n | \"getDirty\"\n | \"setDirty\"\n | \"getTouched\"\n | \"setTouched\"\n | \"getValid\"\n | \"setValid\"\n | \"getValue\"\n | \"setValue\"\n | \"fromDto\"\n | \"toDto\"\n>;\n\nexport const nameofFactory = () => (name: keyof T) => name;\n\nfunction _isNil(value: any) {\n return value == null;\n}\n\nexport const getHistory = (): History => {\n return GlobalHistory;\n};\n\nexport const setLoginState = (apiResult: AccountStatus) => {\n StoresInstance.domain.AccountStore.getLoginState(apiResult);\n};\n\nexport const getJWT = () => {\n return StoresInstance.domain.AccountStore.getJwt();\n};\n\nexport const getParentObjectPath = (fieldName: string, action: \"Errors\" | \"Valid\" | \"Dirty\" | \"Touched\"): string[] => {\n let path: string[] = [];\n if (typeof fieldName === \"string\") {\n path = fieldName.split(\".\");\n } else {\n path = getPath(fieldName) as string[];\n // (fieldName as any).forEach((key: any) => {\n // \tpath.push(key);\n // });\n }\n path.splice(path.length - 1, 0, action);\n return path;\n};\n\nexport const generateID = function () {\n // Math.random should be unique because of its seeding algorithm.\n // Convert it to base 36 (numbers + letters), and grab the first 9 characters\n // after the decimal.\n return \"_\" + Math.random().toString(36).substr(2, 9);\n};\n\n/**\n * Test if a string is null, undefined, or empty.\n *\n * @param {string | undefined | null} text\n *\n * @returns true if null, undefined or empty, otherwise false.\n */\nexport const isNullOrEmpty = (text: string | undefined | null): boolean => {\n return text === undefined || text === null || text.length === 0;\n};\n\n/**\n * Test if a string is null, undefined, empty, or whitespace.\n *\n * @param {string | undefined | null} text\n *\n * @returns true if null, undefined, empty, or whitespace otherwise false.\n */\nexport const isEmptyOrWhitespace = (text: string | undefined | null): boolean => {\n return text === undefined || text === null || text.trim().length < 1;\n};\n\nexport const sortByString = (a: string | undefined, b: string | undefined, options?: Intl.CollatorOptions) => {\n if (a === undefined && b === undefined) {\n return 0;\n }\n if (a === undefined) {\n return -1;\n }\n if (b === undefined) {\n return 1;\n }\n\n return a.localeCompare(b, undefined, options);\n};\n\nexport const coalesce = (...args: (TArg | undefined)[]) => {\n for (const arg of args) {\n if (_isNil(arg) === false) {\n return arg;\n }\n }\n\n return null;\n};\nexport const getApiUrl = (): string => (window as any).apiurl;\n\nexport const getImageUrl = (imageUrl: string): string => {\n return getApiUrl() + imageUrl;\n};\n\nexport const getBaseUrl = (): string | undefined => {\n const baseElements = document.getElementsByTagName(\"base\");\n\n if (baseElements.length === 0) {\n throw new Error(\"Base element not found\");\n }\n\n if (baseElements.length > 1) {\n throw new Error(\"Multiple base elements found\");\n }\n\n const baseElement = baseElements[0];\n const baseUrl = baseElement.getAttribute(\"href\");\n\n if (baseUrl === undefined) {\n throw new Error(\"Base element 'href' attribute not found.\");\n }\n\n let retVal: string | undefined;\n if (baseUrl !== null) {\n retVal = baseUrl;\n }\n return retVal;\n};\n\nexport const parseJwt = (token: string) => {\n const base64Url = token.split(\".\")[1];\n let retval = \"\";\n try {\n const base64 = decodeURIComponent(\n atob(base64Url)\n .split(\"\")\n .map((c) => {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(\"\"),\n );\n retval = JSON.parse(base64);\n } catch {}\n\n return retval;\n};\n\nexport const getCookie: (cname: string) => string = (cname: string): string => {\n var name: string = cname + \"=\";\n var decodedCookie: string = decodeURIComponent(document.cookie);\n var ca: string[] = decodedCookie.split(\";\");\n for (var i: number = 0; i < ca.length; i++) {\n var c: string = 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\nexport const getUrlSearchParams: () => URLSearchParams = () => {\n return new URLSearchParams(window.location.search);\n};\n","export * from \"./BaseStyles\";\n","import * as MobX from \"mobx\";\n\nimport { IsEmail, IsNotEmpty } from \"class-validator\";\n\nimport { ModelBase } from \"../../Core/Models/ModelBase\";\n\nexport class ForgotPasswordModel extends ModelBase {\n @MobX.observable\n @IsNotEmpty({ message: \"You must enter an email address\" })\n @IsEmail({}, { message: \"Email address is not in a valid format\" })\n public emailAddress: string = \"\";\n\n fromDto(model: ForgotPasswordModelDTO): void {}\n\n toDto(model: ForgotPasswordModel): void {}\n}\n\nexport interface ForgotPasswordModelDTO {\n emailAddress: string;\n}\n","import * as MobX from \"mobx\";\nimport { ModelBase } from \"Core/Models/ModelBase\";\nimport { IsEmail, IsNotEmpty } from \"class-validator\";\nimport { IObservable } from \"mobx\";\n\nexport class LoginModel extends ModelBase {\n @MobX.observable\n @IsNotEmpty({ message: \"You must enter an email address\" })\n @IsEmail({}, { message: \"Email address is not in a valid format\" })\n public emailAddress: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"You must enter a password\" })\n public password: string = \"\";\n\n @MobX.observable\n public rememberMe: boolean = false;\n\n fromDto(model: LoginModelDTO): void {}\n\n toDto(model: LoginModel): void {}\n}\n\nexport interface LoginModelDTO {\n emailAddress: string;\n password: string;\n rememberMe: boolean;\n}\n","export enum SortDirection {\n None = 0,\n Asc = 1,\n Desc = 2,\n}\n","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAAA5CAYAAACCnT+vAAAABHNCSVQICAgIfAhkiAAACoJJREFUeF7tnb1vHEUUwN/s2aEggaSlwZFAspLbw64ocQrqJAUNFDgSEmWcvwD7L8D5C3AkREGT0CNhiz+A8+7ZiijgXKWDMyZCuq9Bc7d7npl983Xfzr7rkp3dnXn7fvM+5s2YQYl/H3//wTs3/uPnIxEw/sXPX/3xQ4lFQkOXJMDKLA2Co8xf3z12goMsh1tLStqC4CA4Sqr67mETHASHW0tK2oLgIDhKqvruYRMcBIdbS0raguAgOEqq+u5hExwEh1tLStqC4CA4Sqr67mETHASHW0tK2oLgIDhKqvruYaNwVKvVrSiCT/LbOWf1Tqdz/PLly6bpkXEcr/f7/bek652Tk5NT8e87d+5sVCqVd93dKbaoVC6O6/VmS1xZX19fW11dfT/0OWmaHmH3+JSPxHH1EAB46DtF+zRt3Mvvq9Wq+5zDR+bnsCZjvClkXalcHOVj9n2v+GaMwTdY+16v/+T09LTu86w4jrcB+H3G2BYA3BT3cM4PGeMHSXLyzPQMbHzy+PP78H6yszRNt/1lhfciUN51xnjLJm8FjjiOHzAG3+VC0bvAORx0Op09DJJarfo7APvwEij+Kk0b74l/CwVjjI1g8/lIeZt+n99rNBpCQaFWq+4CMFQBbM9MkhSdBHzgqNXiscAQ/ZHfGyiDFgDfT5LGnq+s7LLpP0mSk33bszY21m72etefZ1AYmvJ6t9t/hIGGjQ+TO9aOc3iUpulB/tJAWY36OqG8d5Ok8VQe+EhpxIyRgeH6Hq1ut3dPFxDBURTbBB9r8DAxGaVp+sj1QYYTUPyCMbiPt+VPk6SxY3qOAKPfv/GnaVLU7mu1251NfYL0gWPokbBf1OfxsyRprMn/twA4sterchrAgXfa+kmaUXSxKZt+gmP6cGSAPEzT9IULkDiu1hljqNvGOT9K04Zwk9BfuDLyepI0Nl0KrVsOH6sxBH08T2PSyUiX9wAOU2eEUMVsggtdNdUEx2zgACgqIqbhDvevlSTpLew+i8dwzjkXwG0AQCFe9HGFZGX1tRqLh4Mf5rELE0HutWurwqTKv/Nut7eVu04GATaTJL2d32SHQ7hsXDGdALANwLTgmhd87Ha7e5CbcMyv5hyeiUDWNrMmSWMXu+4Tc+AKVZzZTHFNfr/L7RBJi5WV6AEWU0XRxS1bgD68t/KbTQamZ2DumJBppXKxI945jEVu7DMGX8rP5xx+StP0ge/4fK2GCQ6XfPWxu+SdJZ2EvB/r9+bvYlkQ/lxtUPRRsZfJArfBMS0Fw+CQA3aX66FfXyY4LpWsGDu4xoh/Q3W0pmfUatWmPknpIGUxyd+a/JTJ0aaMIVZjXnDYoM5lxXwVrla7uwMQfZs/VLhcvV5/J7cuBAeeEfOdWSULXMjIueAwZKrE9l/JHcIzVro7ZopPXDOx7XqI1Zg3HDb994YjW2PY6PV6TSyVR3AsDg7cNeJHavocz1jNGo5Qq7FUcOAm2Z0X110UgmORcKiZKs75MQCry3GCySLMGg7MbdOD+dB4wcd9dlk6H0vN8GDOL0Mid5LgWBwcmIIzBodacI9mrGYJh4CguHZWXNdYWjhEx8ahmyyHuuLvyqZMYybDZkzD5LYnyiIYAyXRgmWsfOEQ74miaFBOkv/yygWTKwQAIouoZCldVmOp3KoMDqwsA10JN5k0shyLsRwmt7jfZ3V9NRoL7H3hcLkyfgt3bquxdHAMU3XX68V1B/AGhOCYGhz7eu7dlq2yZVuKC4PFWHLOcOyZ1pxk+AzZLXSFv9PpnGG1fr6WOo7jA30NZ5TKzTtlWUhqZabQWsKwKDjECjLnMKjalX+MwbGtnki0XbZ1DtN6hW0REPu47XbntlCYWi0WcpHSucWM1ZzhKJSdYBbJzwrld3IUOB84DIvb50mSDtxHvSrXWHzo8hUXBwdu8F31RMsAhygFz3vPmCgPH5RqKD99JVq/HrK+gMlkvnAAdLu9TVf5/Kzg8JT3s7x8vlDKbavOtVWJEhzhbpXLjweA83a7s2HbR4Mo93GaNgaQIValkLGaNxyiNEXeuzFPyxEqb3SfgwMQpfY+fyHBMX04XNYaq4uTrQMWj+gu2rzhAIBWFF3cttWKzcpyuODQYzvjNlkbIHjWw7zZyXd2cKVDQzY7XQW3yvaxfPpvWH0e+eBYDKN/uwXAAQD2RWYcjmJRqpBfvw+Hcko5l2kYYIPdjoWyfuse8kz4IhDXS5aD9nPMEg5X3ZFNARcdkLtmsnEmC9na4PDoWw3UnY4+UPp+T9FOxEzIJiylaDEkjnLJbFw4xH26vJ0HLGRZLBE4aoCoWYJFuVVXGQ51c06xGpdzsG50wjJVbuVRM1a+lmPoSXBli4G8jdcw2w92+WGLzLbv5pNpco3T9QzsurdbJb9cr8jNrnnv5/CdacaZKd8UOHAZ27e3hroOw5lcdR/84bDvYbFV3pr24ZgCc5diu8AYJiPs/cVddHXCd1oOm5mS03JkOcIDcnkyGKfGbczDH5SM1SzhyMdn2FAH5g1Y4ZvJQl0zzOXUJ46sZH149AznII53QRfPcNIu/VeCYzI4hPyLi3ZgVCCTwvnMquomNb+YwzUTu69jB0CMv4DnGqerP5m8CyfLyBOWgEPfCYZWb7oyIwTH5HAYtqyicYdpnwTng2K/0Y8xUfinbkdWjzuaGxzYAjMamPso9jTgwOQty4ZhHcFWMQ3baUdpQ4JjcjhC4g4fn3noew/OItO2QcsWv3AuF6qwiFUblVn4+Pgmy4glHeYFh0HeI50WlqNQ6MY5f5GmjYcyna5ZjeCYHI6QuMNWMCd/N8MzR+dY4UG9nu5Vt0hjgb2PQuO6ph7U4AvaNCwHJhs57jBsdhoMX5wAt5dV7D4GYIUTPJbhgAUAviP2LtiENclxoNPKtPkoz3B2dR94YFKgvOBQ77Mt6DZkIgcHymXHk64xJk6K0X8qQD7jM8VJer/xzNdlHZrpW8vHgfr0x2TNRqePmATtIlMviFuU5XD1U1yf5DjQecOBWQTM9cAyVaZxIge+jeLK7GQREaeEnGV8HkUXa3IJiK8ymla/5VL2cVLU+nf27495fWncEw8L1ZUEx+RuVRYjIIGrut7hqqnSgcZcYtnq+xztIz8Tq/kKUEZnYD5POGxx3jhn5QqTWyg+JDimAwfueqh7+vEcfdF3zxXa5/ilrJZOHDZttSCmYkhfOEyWSn7uPOGwxXnYfg6bgM45hx35RGzpAxhPWZ+WaxJSeCi/8yq5Vaa4Q/bLfTNVuQxcGau8XXb80q6+My4PwDmHXazILzSIxl3Hy2M45wmHJe6oFFbIh2S/vc15tAXAsw31rMVY/zCKXh+YSo3j+O7nww07o99r299zyGp1lM33ri2U2RGOxgORTfHHtI8D9YlzrnobIet8DCsr/9ZD/17IVR+/6L93+cibMFh9DONW5b6JsqAxFSVAcNCfPSMuDBIgOAgOgoPgKEqA3CriwiYBshxkOYgQshxkOYiCMAmQ5SDLEaYxJWpNcBAcJVL3sKESHARHmMaUqDXBQXCUSN3DhkpwEBxhGlOi1qWG47MfofLXP2uf5t+73ePHv3599qpE35+GapHA/8Y7D/98zt/5AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAgCAYAAABQISshAAAABHNCSVQICAgIfAhkiAAAAgNJREFUWEfdmTFOAkEUht9bT+ANXDyAN1ABay3t1BhWQiws7GyMB8AYS9FKL2BL2BXtiXqAZWOsjIUarSDMb2ZllQKXWURmlm0ZZt83/8z737xlGvOTr2TOO633Un37+WOUr+ZRTqYy11JlFgD5gmn1yvEbKv9RGaMFRAYGUJtJ7NWcoExMUAk2bow2kO+ggCoYa64TPP0FRj+IVIfwBIE1rxhUh4UxAiTcagQwuPwCf69RpHZSIGNAosBB1IBorXrFRz8JjHEg3UTwQSxKrhNcqMIYCfKjDi5UPcdokK46Sp4TguQrGZeJcwD2YaFuwbr+OoC04zr+cbRCuVN7Pvqt5vhDLYI0RNXt8q2MgufEghDwQiC7Vmy+yUl1gah4TjxI6MA4dLeau0aAxHjOQBAJIFjMeIXgQbsiXWn6ec4AEAREbIPguU4zbwpIP88ZACLWCXxEzNMdiBW26FXHYY9LDgCFnhMLIlgssOBFZj4gQiAYG6kFsTp8TxbdRltMpmm5QuNMv78p0lvODFTEKwQ32RN7eYqty94JdYIkPuxya0mQXtOMYHSB/FbyKykig8+e2XNTwrrTChJzCVMGCVU5yZwx8+a4z4jKtXioeilprdQ7PmmtpdqoMBoElPIyPjK5VF+sUn/VnYjmw2S0g9LeoFPxhiRpXkv6VfUGo0H+67PCJ5YVMPXPEFLAAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAAgCAYAAABD9mvVAAAABHNCSVQICAgIfAhkiAAAAodJREFUWEflmbFv01AQxr9z1QQp7lhlqlTnMdOhY5kbRphYCkhBCSOIzjCA1BEBEqoS00pELB2QGGGHP6A7dit1yu5IbaT60Fl1ZBnHeWkeUu1ke8l79+737nzfvZhg+PNpddWurKzst33/kWHTc5mjuVanFrtKbTJwRIBqe55R2/P6acQZBsh1nF1Y1h4By+JU6UBdx6kzUZ+ItpOnXirQruNsW0R9ENXTqVUK0C6wTErtEfMuiDLTv/Cg3bU1ZVUqRwA28wpEoUFdx9lhy9onwJ5WBQsJGmsjiHamAca/Fw40qY26kIWSlyxtNAnar9dr57XaQwJaINpiQDqML9UgePd4MBjKXr1G44CIWsz8tOP7h/H+vUajRUQHMmbmQ5mT55usz6yYk7TRFGgEadtfCbj/j03m39XhsCmw/xU0TxtNgbpKvQLwRqLIo1Hz2dmZJ4cLom8SXQCv2573Vgc0WQtcx7kDyzrOenTGEdXRRlOgPaX+SD/Ml5f3OqenP8cpub7epKWlHzKuBoF9Xqt9nJa6M4HqaqMJ0OSph6PRbYlmbFdS+sK2g2gchhtM9NwY6CzaaBo0S4JcpVj2IeBuyCxFJ7cYaUd0YUDl9BYideN0vAnF6LNSoqe/MorRi47vf0jrKAPfO573IP5eq+qOgXOuXiaeUbExg7xIMXofNRNhuNU+ORlkydC1QCNHJlymTYHmNQwCdSsINqRhuJp3LFKU3jsJf23QqLXK+HvEFKjY0WkB43kXtv2SgSeR9l61igjDnkQ46dNMqZuGKX1TnwReiGtaKjXKffFOwupqbuEu3lkFSEdzSwGqo7mlAs3T3NKBTtLcUoKOO5Oyv2TK0tyb9trwLwRC6LAaep5zAAAAAElFTkSuQmCC\"","module.exports = \"data:image/jpeg;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAAAfCAMAAADtLr7fAAAA0lBMVEUAAAAAj98Aj99GRUVEREQAj99AQEBGRERFRUVFRUVJPT1GRUUAj98Aj99FRUVFRERFRERFRUVFRERFREQ7OzsAj99IQEAAj94Aj98Aj95FRUVFRERGRUVFRUUAkN8AkN9GRkZGQ0MAj98Aj99GREQAj99GRUVEREQAkN8AkN8AkN9GQ0NFRUVGREQAkN9GRERGREQAkt8Aj98Aj98Akd9FRUVGRUVAQEBHR0cAjt4AkN9ERERGRUVGRUVGRkZFRERHQUFGRUVGRkZAQEBGRUUAkN/1GVctAAAARHRSTlMAMEDQQCAQgMA/Fe7AEDC/8GDg9g1QIOCg8M/voJDv3zNQkGCw0N9wv4/PX59/n6+PP7CAX2/4FBI9r0+25izDL9cLDEOhkTAAAAMhSURBVHja7ZaFuuM4DEblNHbTnQbLfJmZlvn3+7/SRvbUTeKZubnLdMog6Xy2bIfq9Pv0Cl10qR3twz9/+ZaI3r38/Lew+QzviGiA4d/aRog/wGaVJm+3kecXOgj0xbn8nW0ihG+1iW+0nkylnB5rfRP/xTZiraeSDHKq14KqJL0tnO6qfE2oLarXm+P54+FC+jZiPQvIEcyqOskJHJzOMr8kR3iXpunV1+QYX5df3F4q/g0V/HChN55NvJ4JqiBm69jJLJBFWzhdUb52AKSKDCqFxTXrCpaT/TI8ijJ0/HDMTbicPHo2Ux0QM5LyiZhAf7Wb9SPl943KM5PP2q72w3CVYWF01BxY5mF4WgB5o2/8cL9vpJ4alw2vqc3I+kmyAOqDXaw6uLW1O8p+scRiTERLZMn2v9h3Nn54+mGbA1M60LPDOD6c6JERPHA2H1lT44yrdI2M5Yj9QifDP57UbPzwH7LvmzbHx1QymcRUEk82/Hq8IQsH+TbMCisiVH4eA2OKqmu4QO5s/PAl0R46TRszUSN9SIZDPTLj5eIXlz0maaYLEVHI2RxHOK3P7CmOKjZeuGfTPzsTgSQiGcRkef9RnJ2d2SbccqVq6RRAp1jVB87puYofsyHAt+n339vc123uvyx/IiaPDAWvykY697FiE/0GG3+m7JtHTU2SAt1muv1a8RW6YyzIYX9eovsWm+MLKrHdS/FmZrp4Qh6cu5GuLK6qTbtPRbXrl1hx2ElrG7fCR3rzxJuOW+EeCTpeuuoSOkXG45NWAjA2kt32Nm73m/DuNxtZQUEeuT82FAK5O0P4rcpwRRY1x9J2D65b27iTIT6U8jC2h1nfbSK9LZdlNS8ddYG7MZe+hqttT6x8sd0Zc+CEz/F2NrE7tN0pKndju2Ppp+P5AeZpan9mwgw4SdMFWMayX4BpZ0NCV3XEWgfk2RRHuT/UTHIEJnLdq5aZCcjJofKjKIMf/l3xDdEXRalEPxY/OYGZvpHbK1I9C+hNqDAMFVUpvxjTryd+0HxJzBfH+kHSX448MGtqciDob4IQ9Dei36fX+d/mf34BxNqcXCX6K1cAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/bg.69c1bc59.png\";","module.exports = __webpack_public_path__ + \"static/media/brickscropped.202174f5.jpg\";","import { AccountStatus, ApiResult, ModelBase } from \"../Models\";\nimport { CheckHttpStatus, MergeDefaultConfig } from \"../Utils/Axios\";\nimport { FieldType, getHistory, getParentObjectPath } from \"../Utils/Utils\";\nimport { History, LocationState } from \"history\";\nimport { MetadataStorage, Validator, getFromContainer, validate, validateOrReject } from \"class-validator\";\nimport { ObjPathProxy, createProxy } from \"ts-object-path\";\nimport { action, computed, observable, runInAction } from \"mobx\";\nimport axios, * as Axios from \"axios\";\n\nimport { IModel } from \"Core/Models/IModel\";\nimport { IViewModel } from \"Core/ViewModels/IViewModel\";\nimport { ValidationMetadata } from \"class-validator/metadata/ValidationMetadata\";\nimport { get as _get } from \"lodash-es\";\nimport { isBoolean as _isBoolean } from \"lodash-es\";\nimport { isString as _isString } from \"lodash-es\";\nimport { set as _set } from \"lodash-es\";\nimport { createViewModel } from \"mobx-utils\";\nimport dot from \"dot-object\";\nimport { match } from \"react-router\";\nimport { Stores, StoresInstance } from \"../../Custom/Stores\";\nimport { constants } from \"os\";\n//import { StoresInstance } from \"../../Custom/Stores\";\n\n//Give typing and intellisense to the field names\n\nexport type ValidationResponse = {\n isValid: boolean;\n errorMessage: string;\n};\nexport type Create = new (...args: any[]) => T;\nexport abstract class ViewModelBase = any> implements IViewModel {\n public model: T = {} as T;\n\n @observable public IsLoading: boolean = false;\n @observable public IsErrored = false;\n @observable public Errors: string = \"\";\n @observable public Valid: boolean = false;\n\n @action protected setIsLoading = (state: boolean) => (this.IsLoading = state);\n @action protected setIsErrored = (state: boolean) => (this.IsErrored = state);\n @action protected setErrors = (state: string) => (this.Errors = state);\n\n public history: History;\n public location: LocationState = {} as LocationState;\n public match = {} as match<{}>;\n\n public validatorStorage: MetadataStorage = getFromContainer(MetadataStorage);\n private meta = {} as ValidationMetadata[];\n private validator = new Validator();\n private proxy: T = {} as T;\n\n protected constructor(model: T, undoable: boolean = false, enableProxy: boolean = true) {\n this.history = getHistory();\n\n if (model) {\n if (enableProxy) {\n this.createNewProxy(model, undoable);\n } else {\n this.internalSetModel(model, undoable);\n }\n }\n (window as any).model = model;\n }\n\n public createNewProxy = (model: T, undoable: boolean) => {\n let self: IViewModel = this;\n this.proxy = new Proxy(model, {\n get(target: any, value: any, receiver: any) {\n let val = Reflect.get(target, value, receiver); // (1)\n return typeof value == \"function\" ? val.bind(target) : val;\n },\n set(target: any, prop: any, value: any, receiver: any) {\n let newValue = value;\n if (typeof self[\"beforeUpdate\"] === \"function\") {\n let tmpValue = self[\"beforeUpdate\"](prop, value);\n if (tmpValue !== null && tmpValue !== undefined) {\n newValue = tmpValue;\n }\n }\n let retval = Reflect.set(target, prop, newValue, receiver); // (1)\n if (typeof self[\"afterUpdate\"] === \"function\") {\n self[\"afterUpdate\"](prop, newValue);\n }\n return retval;\n },\n });\n this.internalSetModel(this.proxy, undoable);\n };\n\n private getType = (TCtor: new (...args: any[]) => T) => {\n return typeof TCtor;\n };\n\n //This must be overriden in any class that extends this base class\n abstract isFieldValid(fieldName: keyof FieldType, value: any): boolean;\n abstract beforeUpdate?(fieldName: keyof FieldType, value: any): any;\n abstract afterUpdate?(fieldName: keyof FieldType, value: any): void;\n\n @computed\n public get getModel(): T {\n return this.model;\n }\n @computed\n public get screenWidth(): number {\n return StoresInstance.coreStore.screenWidth;\n }\n @computed\n public get isMobile(): boolean {\n return StoresInstance.coreStore.isMobile;\n }\n @computed\n public get isTablet(): boolean {\n return StoresInstance.coreStore.isTablet;\n }\n @computed\n public get isDesktop(): boolean {\n return StoresInstance.coreStore.isDesktop;\n }\n @computed\n public get isLoggedIn(): boolean {\n return StoresInstance.domain.AccountStore.IsLoggedIn;\n }\n private internalSetModel(model: T, undoable: boolean = false) {\n if (undoable) {\n //This is a helper method to make the model undoable. You must call submit on the model to save changes\n this.model = createViewModel(model);\n return;\n }\n this.model = model;\n }\n\n public setModel(model: T, undoable: boolean = false) {\n for (let key in model) {\n if (model.hasOwnProperty(key)) {\n if (this.getValue(key as any) instanceof Date) {\n this.setValue(key as any, new Date(model[key] as any));\n } else {\n this.setValue(key as any, model[key]);\n }\n }\n }\n }\n\n public getContext = (): ObjPathProxy => {\n return createProxy();\n };\n\n public saveModel(): void {\n (this.model as any).submit();\n }\n\n public resetModel(): void {\n (this.model as any).reset();\n }\n\n @action\n public setValue(fieldName: keyof FieldType, value: TR) {\n this.model.setValue(fieldName, value);\n }\n\n public getValue(fieldName: keyof FieldType): TR {\n let value = this.model.getValue(fieldName);\n if (value === null) {\n if (_isString(value)) {\n ((value as any) as string) = \"\";\n } else if (_isBoolean(value)) {\n ((value as any) as boolean) = false;\n }\n this.model.setValue(fieldName, value);\n }\n return value;\n }\n\n @action\n public setError(fieldName: keyof FieldType | string, value: string) {\n this.model.setError(fieldName, value);\n }\n\n public getError(fieldName: keyof FieldType | string) {\n return this.model.getError(fieldName);\n }\n\n @action\n public setValid(fieldName: keyof FieldType | string, value: boolean): void {\n this.model.setValid(fieldName, value);\n }\n\n public getValid(fieldName: keyof FieldType | string): boolean {\n return this.model.getValid(fieldName);\n }\n\n @action\n public setDirty(fieldName: keyof FieldType | string, value: boolean): void {\n this.model.setDirty(fieldName, value);\n }\n\n public getDirty(fieldName: keyof FieldType | string): boolean {\n return this.model.getDirty(fieldName);\n }\n\n @action\n public setTouched(fieldName: keyof FieldType | string, value: boolean): void {\n this.model.setTouched(fieldName, value);\n }\n\n public getTouched(fieldName: keyof FieldType | string): boolean {\n return this.model.getTouched(fieldName);\n }\n\n public isModelValid = () => {\n let valid = true;\n //EN: Flatten the object into dot notation so we can iterate over nested objects\n let target = dot.dot(this.model);\n for (let prop in target) {\n if (prop.indexOf(\"Errors.\") < 0 && prop.indexOf(\"Dirty.\") < 0 && prop.indexOf(\"Touched.\") < 0 && prop.indexOf(\"Valid.\") < 0) {\n if (prop != \"getParentObjectPath\") {\n this[\"isFieldValid\"](prop as any, _get(this.model, prop));\n }\n }\n }\n\n // //Run through again checking properties of model\n for (let prop in target) {\n if (prop.indexOf(\"Errors.\") < 0 && prop.indexOf(\"Dirty.\") < 0 && prop.indexOf(\"Touched.\") < 0 && prop.indexOf(\"Valid.\") < 0) {\n if (valid) {\n let path = getParentObjectPath(prop, \"Valid\");\n valid = _get(this.model, path);\n }\n }\n }\n runInAction(() => {\n this.Valid = valid;\n });\n return valid;\n };\n\n private parseObjectProperties = (obj: any, parse: any) => {\n for (let k in obj) {\n if (typeof obj[k] === \"object\" && obj[k] !== null) {\n this.parseObjectProperties(obj[k], parse);\n } else if (obj.hasOwnProperty(k)) {\n parse(obj, k);\n }\n }\n };\n\n public setDecorators = (model: any) => {\n this.meta = this.validatorStorage.getTargetValidationMetadatas(model, \"\");\n };\n\n public validateDecorators = (fieldName: keyof FieldType): ValidationResponse => {\n let target = this.meta.filter((a) => a.propertyName === fieldName).reverse();\n let message = \"\";\n if (target && target.length > 0) {\n let validated = false;\n target.some((t: ValidationMetadata) => {\n validated = this.validator.validateValueByMetadata(this.getValue(fieldName), t!);\n if (t.message) {\n message = t.message.toString();\n } else if (t.constraints.length > 0) {\n message = t.constraints[0].message;\n }\n return !validated;\n });\n //let vp = this.validator.length(\"\", 1, 10);\n //let ve = new ValidationExecutor(this.validator);\n //let promise = await validate(target!);\n return { isValid: validated, errorMessage: validated ? \"\" : message.toString() };\n } else {\n //No decorators found so presume no validation required\n return { isValid: true, errorMessage: \"\" };\n }\n };\n\n public getModelAsPayload(): T {\n let payload = this.getAnyModelAsPayload(this.model);\n return payload;\n }\n\n public getAnyModelAsPayload(model: any): T {\n let exclude = [\"Dirty\", \"Errors\", \"Valid\", \"Touched\", \"localComputedValues\", \"localValues\", \"isPropertyDirty\"];\n let payload = {} as T;\n for (let key in this.model) {\n if (this.model.hasOwnProperty(key)) {\n if (!exclude.includes(key)) {\n //EN: Check for recursed models\n if (key == \"model\" && typeof this.model[key] === \"object\") {\n continue;\n }\n payload[key] = this.model[key];\n if (typeof payload[key] === \"string\") {\n //EN: Exclude null characters in a string\n ((payload[key] as any) as string).replace(/\\0/g, \"\");\n }\n }\n }\n }\n return payload;\n }\n\n Get = >(\n url: string,\n //model?: any,\n config?: Axios.AxiosRequestConfig,\n ): Promise> => {\n this.setIsLoading(true);\n const getPromise = axios\n .get>(url, this.getConfig(config))\n .then(async (response) => {\n if (response.headers[\"token-expired\"]) {\n let newTokenResult = await axios.post>(\"/api/account/refresh\", {\n accessToken: localStorage.getItem(\".auth\"),\n });\n this.setLoginState(newTokenResult.data.payload);\n if (newTokenResult.data.payload.jwt === \"\") {\n //Go to session expired page\n window.location.href = \"/sessionexpired\";\n //return false;\n }\n //Make the original call again\n response = await axios.get>(url, this.getConfig(config));\n } else if (response.headers[\"unauthorized\"]) {\n this.logout();\n }\n //CheckHttpStatus(response);\n this.setIsLoading(false);\n return response.data;\n })\n .catch((error) => {\n this.setIsErrored(true);\n this.setIsLoading(false);\n this.setErrors(error);\n if (error.httpStatusCode === 401) {\n this.logout();\n return;\n }\n return { wasSuccessful: false };\n });\n\n return getPromise as Promise>;\n };\n\n Post = >(url: string, model?: any, config?: Axios.AxiosRequestConfig): Promise> => {\n this.setIsLoading(true);\n const postPromise = axios\n .post>(url, model, this.getConfig(config))\n .then(async (response) => {\n if (response.headers[\"token-expired\"]) {\n let newTokenResult = await axios.post>(\"/api/account/refresh\", {\n accessToken: localStorage.getItem(\".auth\"),\n });\n this.setLoginState(newTokenResult.data.payload);\n if (newTokenResult.data.payload.jwt === \"\") {\n //Go to session expired page\n window.location.href = \"/sessionexpired\";\n }\n response = await axios.post>(url, model, this.getConfig(config));\n } else if (response.headers[\"unauthorized\"]) {\n this.logout();\n }\n //CheckHttpStatus(response);\n this.setIsLoading(false);\n\n return response.data;\n })\n .catch((error) => {\n this.setIsErrored(true);\n this.setIsLoading(false);\n this.setErrors(error);\n if (error.httpStatusCode === 401) {\n this.logout();\n return;\n }\n return { wasSuccessful: false };\n });\n\n return postPromise as Promise>;\n };\n\n setLoginState = (apiResult: AccountStatus) => {\n localStorage.setItem(\".auth\", apiResult.jwt as string);\n //EN: Hack at the moment so that we do not get cicular references\n // let stores = (window as any).Stores as Stores;\n // if (stores) {\n // \tstores.domain.AccountStore.getLoginState(apiResult);\n // }\n };\n logout = () => {\n //(window as any).Stores.domain.AccountStore.Logout();\n this.history.push(\"/logout\");\n };\n getConfig = (config?: Axios.AxiosRequestConfig) => {\n const requestConfig = MergeDefaultConfig(config);\n //Sets the bearer on every header if available\n //Note: You might need to remove this bearer if calling 3rd party api's\n let jwt = localStorage.getItem(\".auth\") as string;\n if (jwt && jwt.length > 0) {\n requestConfig.headers = {\n Authorization: \"Bearer \" + jwt,\n \"content-type\": \"application/json\",\n };\n } else {\n requestConfig.headers = {\n \"content-type\": \"application/json\",\n };\n }\n requestConfig.validateStatus = (status: number) => {\n return status < 500;\n };\n return requestConfig;\n };\n}\n","import styled, { keyframes } from \"styled-components\";\nimport { Button, Box, Paper, Container } from \"@material-ui/core\";\nexport type SuperDivProps = {\n pb?: string;\n pt?: string;\n mt?: string;\n mb?: string;\n inline?: boolean;\n color?: string;\n py?: number;\n style?: any;\n};\nexport const SuperDiv = styled.div`\n padding-bottom: ${(props) => props.pb};\n padding-top: ${(props) => props.pt};\n margin-top: ${(props) => props.mt};\n margin-bottom: ${(props) => props.mb};\n color: ${(props) => props.color};\n py: ${(props) => props.py};\n style: ${(props) => props.style};\n display: ${(props) => (props.inline ? \"inline\" : \"block\")};\n`;\n//https://github.com/azz/styled-css-grid\nconst autoRows = ({ minRowHeight = \"20px\" }) => `minmax(${minRowHeight}, auto)`;\nconst frGetter = (value: number | string) => (typeof value === \"number\" ? `repeat(${value}, 1fr)` : value);\nconst gap = ({ gap = \"8px\" }) => gap;\nconst flow = ({ flow = \"row\" }) => flow;\nconst formatAreas = (areas: string[]) => areas.map((area) => `\"${area}\"`).join(\" \");\nexport type CSSGridProps = {\n className: string;\n columns: string | number;\n gap: string;\n columnGap: string;\n rowGap: string;\n height: string;\n minRowHeight: string;\n flow: string;\n rows: string | number;\n areas: string[];\n justifyContent: string;\n alignContent: string;\n py?: number;\n style?: any;\n};\nexport const CSSGrid = styled(SuperDiv)>`\n display: grid;\n height: ${({ height = \"auto\" }) => height};\n grid-auto-flow: ${flow};\n grid-auto-rows: ${autoRows};\n ${({ rows }) => rows && `grid-template-rows: ${frGetter(rows)}`};\n grid-template-columns: ${({ columns = 12 }) => frGetter(columns)};\n grid-gap: ${gap};\n style: ${(props) => props.style};\n ${({ columnGap }) => columnGap && `column-gap: ${columnGap}`};\n ${({ rowGap }) => rowGap && `row-gap: ${rowGap}`};\n ${({ areas }) => areas && `grid-template-areas: ${formatAreas(areas)}`};\n ${({ justifyContent }) => justifyContent && `justify-content: ${justifyContent}`};\n ${({ alignContent }) => alignContent && `align-content: ${alignContent}`};\n`;\n\nexport type CellProps = {\n className: string;\n width: number;\n height: number;\n top: number | string;\n left: number | string;\n middle: boolean;\n center: boolean;\n area: string;\n};\nexport const Cell = styled(SuperDiv)>`\n height: 100%;\n min-width: 0;\n grid-column-end: ${({ width = 1 }) => `span ${width}`};\n grid-row-end: ${({ height = 1 }) => `span ${height}`};\n ${({ left }) => left && `grid-column-start: ${left}`};\n ${({ top }) => top && `grid-row-start: ${top}`};\n ${({ center }) => center && `text-align: center`};\n ${({ area }) => area && `grid-area: ${area}`};\n ${/* prettier-ignore */\n ({ middle }) => middle && `\n display: inline-flex;\n flex-flow: column wrap;\n justify-content: center;\n justify-self: stretch;\n `};\n`;\n\nexport const AppHeader: any = styled(Box)`\n height: 0;\n min-height: 100px;\n @media screen and (min-width: 1040px) {\n min-height: 100px;\n }\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n background-position: 0 40%;\n max-width: 100%;\n margin: 0 auto;\n`;\n\nexport const StyledButton = styled.button`\n font-size: 1em;\n margin: 1em;\n padding: 0.25em 1em;\n border-radius: 3px;\n background-color: cyan;\n\n /* Color the border and text with theme.main */\n color: ${(props) => props.theme.main};\n border: 2px solid ${(props) => props.theme.main};\n`;\n\nexport const Uppercase = styled.div`\n * {\n text-transform: uppercase;\n }\n`;\n\nexport const Centered = styled.div`\n text-align: center;\n`;\n\nexport interface StyledProps {\n pb?: string;\n pt?: string;\n mt?: string;\n mb?: string;\n inline?: boolean;\n color?: string;\n}\n//&& bumps up the importance of the style to override global styles. The more you use the higher it will be\nexport const Header4 = styled.h4`\n text-shadow: rgb(255, 255, 255) 2px 2px 5px;\n text-transform: uppercase;\n padding-bottom: ${(props) => props.pb};\n padding-top: ${(props) => props.pt};\n margin-top: ${(props) => props.mt};\n margin-bottom: ${(props) => props.mb};\n color: ${(props) => props.color};\n margin: 0px;\n font-size: 52px;\n font-weight: 700;\n display: ${(props) => (props.inline ? \"inline\" : \"block\")};\n`;\n\nexport const FancyBox = styled(Box)`\n display: inline-block;\n transition: background-color 0.5s ease-in-out;\n &:hover {\n background-color: #f2893e;\n /* animation: color 4s ease-in-out; */\n }\n`;\n\nexport const GridContainer = styled(Box)`\n display: grid;\n`;\n\nexport const BoxMiddle = styled(Box)`\n text-align: center;\n`;\n\nexport const ShoothillPaper = styled(Box)`\n box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12);\n /* color: rgba(0, 0, 0, 0.54); */\n color: ${(props) => props.theme.palette.text.secondary};\n border-radius: 4px;\n transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n`;\n\nexport const PaperMiddle = styled(ShoothillPaper)`\n text-align: center;\n`;\n\nexport const PaperFullHeight = styled(Paper)`\n height: 90vh;\n padding-left: 10px;\n`;\n\nexport const LinkBox = styled(Box)`\n padding: 5px;\n cursor: pointer;\n`;\n\nexport const RightSide = styled(CSSGrid)`\n overflow: auto;\n width: 100%;\n height: 90vh;\n`;\n\nexport const BounceAnimation = keyframes`\n\t0% { margin-bottom: 0; }\n\t50% { margin-bottom: 15px }\n\t100% { margin-bottom: 0 }\n`;\n\nexport const DotWrapper = styled.div`\n display: flex;\n align-items: flex-end;\n`;\n\nexport const Dot = styled.div`\n background-color: black;\n border-radius: 50%;\n width: 10px;\n height: 10px;\n margin: 0 5px;\n /* Animation */\n animation: ${BounceAnimation} 0.5s linear infinite;\n animation-delay: ${(props) => props.delay};\n`;\n\nexport const HeaderStyles: any = styled(Box)`\n height: 0;\n min-height: 80px;\n @media screen and (min-width: 1040px) {\n min-height: 80px;\n }\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n background-position: 0 40%;\n max-width: 100%;\n margin: 0 auto;\n`;\n\nexport const Row1040: any = styled(CSSGrid)`\n max-width: 1040px;\n margin: 0 auto;\n padding: 0;\n`;\n\nexport const BtnGrid: any = styled(CSSGrid)`\n margin: 0 auto;\n button {\n max-width: 295px;\n }\n`;\n\nexport const LeftBox: any = styled(Box)`\n margin: 20px 22px 20px 61px;\n @media (max-width: 1040px) {\n margin: 10px auto;\n max-width: 295px;\n }\n`;\n\nexport const RightBox: any = styled(LeftBox)`\n margin: 20px 61px 20px 22px;\n`;\n\nexport const Row1076: any = styled(Row1040)`\n max-width: 1076px;\n`;\n\nexport const BRFormBox: any = styled(Box)`\n width: 100%;\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: 16px;\n border: none;\n margin: 30px auto 200px;\n @media screen and (max-width: 1024px) {\n margin: 0px auto 60px;\n }\n`;\n","import { observable, action } from \"mobx\";\nimport { set as _set } from \"lodash-es\";\nimport { get as _get } from \"lodash-es\";\nimport { IModel } from \"./IModel\";\nimport { InputValuesDirty, InputValuesTouched, InputValuesErrors, InputValuesValidity } from \"./IModel\";\nimport { FieldType, getParentObjectPath } from \"../Utils/Utils\";\n\nexport abstract class ModelBase implements IModel {\n @observable public Errors = {} as InputValuesErrors;\n @observable public Valid = {} as InputValuesValidity;\n @observable public Dirty = {} as InputValuesDirty;\n @observable public Touched = {} as InputValuesTouched;\n\n abstract fromDto(model: TDTO): void;\n abstract toDto(model: T): void;\n\n constructor() {\n //Loop through added properties setting their default values\n for (let prop in this) {\n if (prop != \"Errors\" && prop != \"Valid\" && prop != \"Dirty\" && prop != \"Touched\") {\n // @ts-ignore\n this.Errors[prop] = \"\";\n // @ts-ignore\n this.Valid[prop] = true;\n // @ts-ignore\n this.Dirty[prop] = false;\n // @ts-ignore\n this.Touched[prop] = false;\n }\n }\n }\n\n @action\n public setValue(fieldName: keyof FieldType, value: TR): void {\n _set(this, fieldName as any, value);\n }\n\n public getValue(fieldName: keyof FieldType): TR {\n return _get(this, fieldName as any);\n }\n\n @action\n public setError(fieldName: keyof FieldType, value: string): void {\n let path = getParentObjectPath(fieldName as any, \"Errors\");\n _set(this, path, value);\n }\n\n public getError(fieldName: keyof FieldType): string {\n let path = getParentObjectPath(fieldName as any, \"Errors\");\n return _get(this, path);\n }\n\n @action\n public setValid(fieldName: keyof FieldType, value: boolean): void {\n let path = getParentObjectPath(fieldName as any, \"Valid\");\n _set(this, path, value);\n }\n\n public getValid(fieldName: keyof FieldType): boolean {\n let path = getParentObjectPath(fieldName as any, \"Valid\");\n return _get(this, path);\n }\n\n @action\n public setDirty(fieldName: keyof FieldType, value: boolean): void {\n let path = getParentObjectPath(fieldName as any, \"Dirty\");\n _set(this, path, value);\n }\n\n public getDirty(fieldName: keyof FieldType): boolean {\n let path = getParentObjectPath(fieldName as any, \"Dirty\");\n return _get(this, path);\n }\n\n @action\n public setTouched(fieldName: keyof FieldType, value: boolean): void {\n let path = getParentObjectPath(fieldName as any, \"Touched\");\n _set(this, path, value);\n }\n\n public getTouched(fieldName: keyof FieldType): boolean {\n let path = getParentObjectPath(fieldName as any, \"Touched\");\n return _get(this, path);\n }\n}\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.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: 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 as { env: { [key: string]: string } }).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(\"This web app is being served cache-first by a service \" + \"worker. To learn more, visit https://bit.ly/CRA-PWA\");\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: 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(\"New content is available and will be used when all \" + \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\");\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: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\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 (response.status === 404 || (contentType != null && contentType.indexOf(\"javascript\") === -1)) {\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(\"No internet connection found. App is running in offline mode.\");\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n//Based on https://github.com/wsmd/react-use-form-state\n\nimport { FieldType, generateID } from \"../Utils/Utils\";\nimport { IObservableArray, isObservableArray, observable, runInAction } from \"mobx\";\nimport { ObjPathProxy, getPath } from \"ts-object-path\";\nimport { useCallback, useEffect, useMemo, useReducer, useRef, useState } from \"react\";\n\nimport { EditableInputProps } from \"./EditableInput\";\nimport { IModel } from \"../Models\";\nimport { IViewModel } from \"../ViewModels\";\nimport { Moment } from \"moment\";\nimport React from \"react\";\n\nexport const CHECKBOX = \"checkbox\";\nexport const COLOR = \"color\";\nexport const DATE = \"date\";\nexport const EMAIL = \"email\";\nexport const MONTH = \"month\";\nexport const NUMBER = \"number\";\nexport const PASSWORD = \"password\";\nexport const RADIO = \"radio\";\nexport const RANGE = \"range\";\nexport const SEARCH = \"search\";\nexport const SELECT = \"select\";\nexport const TEL = \"tel\";\nexport const TEXT = \"text\";\nexport const TIME = \"time\";\nexport const URL = \"url\";\nexport const WEEK = \"week\";\nexport const MULTISELECT = \"multiselect\";\n/**\n * @todo add support for datetime-local\n */\nexport const DATETIME_LOCAL = \"datetime-local\";\n/**\n * @todo add support for a multiple select\n */\nexport const MULTIPLE = \"multiple\";\n\nexport const TYPES = [CHECKBOX, COLOR, DATE, EMAIL, MONTH, NUMBER, PASSWORD, RADIO, RANGE, SEARCH, SELECT, TEL, TEXT, NUMBER, TIME, URL, WEEK, MULTISELECT];\n\ntype Maybe = T;\n\ntype TModel = IModel & any;\n\ninterface InputOptions {\n id?: string;\n validateOnBlur?: boolean;\n alphaOnly?: boolean;\n}\n\ninterface Inputs> {\n select(fieldName: keyof FieldType, inputOptions?: InputOptions): Omit;\n email(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n color(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n password(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n text(fieldName: keyof FieldType | string, inputOptions?: InputOptions): InputProps;\n number(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n url(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n search(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n number(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n range(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n tel(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n radio(\n fieldName: keyof FieldType,\n inputOptions: InputOptions | null,\n ): //ownValue: string,\n Omit;\n checkbox(fieldName: keyof FieldType, inputOptions?: InputOptions): Omit;\n date(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n month(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n week(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n time(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n multiselect(fieldName: keyof FieldType, inputOptions?: InputOptions): InputProps;\n}\n\ninterface CheckedProp {\n checked: boolean;\n}\n\ninterface InputProps {\n onChange(e: any): void;\n onBlur(e: any): void;\n onFocus(e: any): void;\n checked: boolean;\n value: string | number | string[] | undefined;\n id: string;\n type?: string;\n error: boolean;\n}\n\nexport function Validation>(viewModel: IViewModel): [ObjPathProxy, Inputs] {\n // const formHandler = useState(defaultValues);\n //const [mounted, setMounted] = useState(false);\n const uniqueId = useRef(generateID());\n\n // initial mounted flag\n useEffect(() => {}, []);\n\n const validate = (fieldName: keyof FieldType, value: any) => {\n // if (props.required) {\n // \tif (props.type === \"text\") {\n // \t\tlet isValid = value !== \"\";\n // \t\tprops.viewModel.setValid(props.fieldName, isValid);\n // \t\tprops.viewModel.setError(props.fieldName, `${props.label} is required.`);\n // \t\treturn;\n // \t}\n // }\n viewModel.isFieldValid(fieldName, value);\n };\n\n const createPropsGetter = (type: any) => (fieldName: keyof FieldType, inputOptions: InputOptions | null, ownValue: string = \"\") => {\n if (!inputOptions) {\n inputOptions = {};\n }\n //EN: If we are passing in a proxy convert it back into an object string path\n if (typeof fieldName !== \"string\") {\n let p = getPath(fieldName as string);\n // @ts-ignore\n fieldName = p.join(\".\") as string;\n }\n\n const onDateChange = (value: Moment) => {\n if (value) {\n let d = value.toDate();\n if (!isNaN(d.getTime())) {\n viewModel.setValue(fieldName, d);\n viewModel.setDirty(fieldName, true);\n\n if (!inputOptions!.validateOnBlur) {\n validate(fieldName, d.toISOString());\n }\n }\n }\n };\n\n const getTargetValue = (e: any): string | boolean | Date | number | null | any[] => {\n let value: string | number | boolean | Date | Moment | null;\n if (type === \"number\") {\n value = e.target.value;\n if (isNaN(parseFloat(value as any))) {\n return null;\n }\n return parseFloat(value as any);\n } else if (type === \"date\") {\n return (e as Moment).toISOString();\n //return (e as Moment).toDate();\n } else if (type === \"checkbox\") {\n return e.target.checked;\n } else {\n return e.target.value;\n }\n };\n\n const inputProps = {\n get name() {\n return fieldName;\n },\n get id() {\n if (type !== SELECT && type !== RADIO) {\n if (!inputOptions!.id || inputOptions!.id === \"\") {\n return fieldName + \"-\" + uniqueId.current;\n }\n return inputOptions!.id;\n }\n return inputOptions!.id;\n },\n get error() {\n if (!viewModel.getValid(fieldName)) {\n return true;\n }\n return undefined;\n },\n get type() {\n if (type === DATE || type === TIME) {\n return \"text\";\n }\n if (type !== SELECT && type !== RADIO) {\n return type;\n }\n if (type === RADIO) {\n return \"radio\";\n }\n return undefined;\n },\n get checked() {\n return viewModel.getValue(fieldName);\n },\n get value() {\n const value = viewModel.getValue(fieldName);\n if (type === MULTISELECT && isObservableArray(value)) {\n return (value as IObservableArray).toJS();\n }\n return value;\n },\n get multiple() {\n return type === MULTISELECT ? true : undefined;\n },\n onClick(e: any) {\n const { value: targetValue, checked } = e.target;\n if (type === RADIO) {\n }\n },\n onChange(e: React.ChangeEvent) {\n let value = getTargetValue(e);\n const currentValue = viewModel.getValue(fieldName);\n if (inputOptions?.alphaOnly) {\n try {\n value = value!.toString().replace(/[^A-Za-z]/gi, \"\");\n } catch (e) {}\n }\n\n if (type === MULTISELECT && isObservableArray(currentValue)) {\n viewModel.setValue(fieldName, observable(value! as any[]));\n } else {\n viewModel.setValue(fieldName, value!);\n }\n\n viewModel.setDirty(fieldName, true);\n\n if (!inputOptions!.validateOnBlur) {\n validate(fieldName, value);\n }\n },\n onFocus(e: React.ChangeEvent) {\n viewModel.setTouched(fieldName, true);\n },\n onBlur(e: React.ChangeEvent) {\n let value = getTargetValue(e);\n\n if (inputOptions!.validateOnBlur) {\n validate(fieldName, value);\n }\n },\n };\n return inputProps;\n };\n\n const typeMethods = TYPES.reduce(\n (methods: any, type: string) => ({\n ...methods,\n [type]: createPropsGetter(type),\n }),\n {},\n );\n\n return [viewModel.getContext(), typeMethods];\n}\n","import * as moment from \"moment\";\n\nimport { Box, Checkbox, FormControl, FormControlLabel, FormHelperText, InputLabel, MenuItem, Radio, TextField } from \"@material-ui/core\";\nimport { FieldType, generateID } from \"../Utils/Utils\";\nimport { KeyboardDatePicker, KeyboardTimePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport { ObjPathProxy, getPath } from \"ts-object-path\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport { IModel } from \"Core/Models/IModel\";\nimport { IViewModel } from \"Core/ViewModels/IViewModel\";\nimport { KeyValuePair } from \"Core/Models/KeyValuePair\";\nimport { Moment } from \"moment\";\nimport MomentUtils from \"@date-io/moment\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport Select from \"@material-ui/core/Select\";\nimport { Validation } from \"./Validation\";\nimport styled from \"styled-components\";\nimport { useObserver } from \"mobx-react-lite\";\n\nconst Control = styled(FormControl)`\n min-width: 120px;\n`;\n\ntype TModel = IModel & any;\n\ntype InputProps = {\n multiline?: boolean;\n rows?: number;\n maxLength?: number;\n renderValue?: (selected: any) => JSX.Element;\n placeholder?: string;\n InputLabelProps?: {\n shrink?: boolean;\n };\n};\n\nexport type EditableInputProps = {\n viewModel: IViewModel;\n fieldName: keyof FieldType | string;\n selectItems?: KeyValuePair[];\n inputProps?: InputProps;\n required?: boolean;\n editMode?: boolean;\n validateOnStart?: boolean;\n validateOnBlur?: boolean;\n fullwidth?: boolean;\n autoComplete?: string;\n alphaOnly?: boolean;\n type?: \"text\" | \"number\" | \"password\" | \"email\" | \"checkbox\" | \"radio\" | \"select\" | \"date\" | \"time\" | \"datetime\" | \"multiselect\";\n label?: string | JSX.Element;\n className?: string;\n //[x: string]: IViewModel | undefined | string | boolean | InputProps | KeyValuePair[];\n};\n\nexport function EditableInput(props: EditableInputProps) {\n const rendered = useRef(false);\n const { multiline } = props.inputProps!;\n const [bind, { text, password, radio, checkbox, date, time, email, select, number, multiselect }] = Validation(props.viewModel);\n\n let fieldName: keyof FieldType = props.fieldName as any;\n if (typeof props.fieldName !== \"string\") {\n let p = getPath(fieldName as string);\n fieldName = p.join(\".\") as any;\n }\n\n useEffect(() => {\n rendered.current = true;\n\n if (props.validateOnStart) {\n validate(props.viewModel.getValue(fieldName));\n }\n }, []);\n\n const validate = (value: any) => {\n props.viewModel.isFieldValid(fieldName, value);\n };\n\n const isInError = (): boolean => {\n let isValid = props.viewModel.getValid(fieldName);\n if (props.validateOnStart) {\n return !isValid;\n }\n\n if (!rendered.current) {\n return false;\n }\n return !isValid;\n };\n\n const renderControl = () => {\n if (props.type === \"checkbox\") {\n return checkBox();\n } else if (props.type === \"radio\") {\n return radiocomp();\n } else if (props.type === \"select\" || props.type === \"multiselect\") {\n return selectField();\n } else if (props.type === \"date\") {\n return dateComp();\n } else if (props.type === \"time\") {\n return timeComp();\n } else {\n return textField();\n }\n };\n\n const dateComp = () => {\n return (\n <>\n \n \n \n \n );\n };\n\n const timeComp = () => {\n return (\n <>\n \n \n \n \n );\n };\n\n const radiocomp = () => {\n return (\n \n \n {props.label}\n \n \n {props.selectItems!.map((item: KeyValuePair) => {\n return } label={item.key} />;\n })}\n \n {isInError() && {props.viewModel.getError(fieldName)}}\n \n );\n };\n\n const selectField = () => {\n return (\n \n {props.label}\n \n {props.selectItems!.map((item: KeyValuePair, index: number) => {\n return (\n \n {item.key}\n \n );\n })}\n \n {isInError() && {props.viewModel.getError(fieldName)}}\n \n );\n };\n\n const getTypeOfInput = () => {\n if (props.type === \"number\") {\n return number(fieldName, { validateOnBlur: props.validateOnBlur });\n } else if (props.type === \"password\") {\n return password(fieldName, { validateOnBlur: props.validateOnBlur });\n } else if (props.type === \"email\") {\n return email(fieldName, { validateOnBlur: props.validateOnBlur });\n }\n return text(fieldName, { validateOnBlur: props.validateOnBlur, alphaOnly: props.alphaOnly });\n };\n const textField = () => {\n if (props.editMode) {\n return (\n \n );\n } else {\n return (\n \n {props.label}\n \n );\n }\n };\n\n const checkBox = () => {\n return (\n <>\n }\n label={props.label}\n className={props.className}\n />\n {isInError() && (\n \n {/*{errorMessage}*/}\n {props.viewModel.getError(fieldName)}\n \n )}\n \n );\n };\n\n const formatSelectValue = (value: any) => {\n let retval = props.selectItems!.find((a) => a.value == value);\n if (retval) return retval!.key;\n else return \"\";\n };\n\n return useObserver(() => {renderControl()});\n}\n\nEditableInput.defaultProps = {\n type: \"text\",\n editMode: true,\n validateOnStart: false,\n validateOnBlur: true,\n fullwidth: true,\n inputProps: {\n multline: undefined,\n },\n};\n","export const Client = {\n Root: \"/\",\n};\n\nexport const Server = {\n Api: {\n Account: {\n Login: \"./api/account/login\",\n Logout: \"./api/account/logout\",\n ResetPassword: {\n Reset: \"./api/account/resetpassword\",\n VerifyToken: \"./api/account/resetpasswordtoken\",\n },\n SetPassword: \"./api/account/setpassword\",\n ForgotPassword: \"./api/account/forgotpassword\",\n },\n Admin: {\n ResetFailedLoginAttemptsCount: \"./api/user/ResetLoginAttempts\",\n },\n LiteFormEmail: {\n PostLiteFormAsync: \"/api/LiteForm/PostLiteFormAsync\",\n },\n },\n};\n\nexport const Admin = {\n Root: \"/admin\",\n};\n","import { ForgotPasswordModel, ForgotPasswordModelDTO } from \"../Models\";\nimport { action, runInAction } from \"mobx\";\n\nimport { ApiResult } from \"../../Core/Models/ApiResult\";\nimport { Server } from \"Custom/Globals/AppUrls\";\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\n\nexport class ForgotPasswordViewModel extends ViewModelBase {\n constructor() {\n super(new ForgotPasswordModel());\n this.setDecorators(ForgotPasswordModel);\n }\n\n @action\n public ForgotPasswordAsync = async (): Promise> => {\n return await this.Post(Server.Api.Account.ForgotPassword, this.model);\n };\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n\n public isFieldValid(fieldName: \"emailAddress\", value: any): boolean {\n const { isValid, errorMessage } = this.validateDecorators(fieldName);\n\n this.setError(fieldName, errorMessage);\n this.setValid(fieldName, isValid);\n\n return isValid;\n }\n}\n","import { Box, makeStyles } from \"@material-ui/core\";\nimport styled from \"styled-components\";\n\nexport const Covidcontainer = styled(Box)`\n margin-top: 50px;\n width: 828px;\n margin-left: auto;\n margin-right: auto;\n border-radius: 20px;\n background-color: rgb(255, 255, 255, 0.9);\n padding: 50px 45px 50px 45px;\n\n @media (max-width: 767px) {\n margin-top: 10px;\n width: 100vw;\n margin-left: auto;\n margin-right: auto;\n border-radius: 0;\n background-color: rgb(255, 255, 255, 1);\n padding: 0 15px 5px 15px;\n }\n`;\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n },\n button: {\n margin: theme.spacing(1),\n },\n input: {\n display: \"none\",\n },\n paper: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n color: theme.palette.text.secondary,\n },\n datePicker: {\n backgroundColor: \"#FFFFFF\",\n border: \"1px solid #E0DAF0\",\n height: \"54px\",\n marginRight: \"5px\",\n marginBottom: \"0px\",\n marginTop: \"0px\",\n width: \"100%\",\n placeholder: {\n color: \"#000000\",\n },\n },\n datePickerBox: {},\n datePickersGridContainer: {\n justifyContent: \"space-between\",\n },\n datePickerGridContainer: {\n maxWidth: \"96%\",\n },\n subTitle: {\n marginBottom: \"18px\",\n paddingBottom: \"0px !important\",\n },\n}));\n","import { Box, Button, Fade, Paper, Typography } from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport { Centered } from \"Core/Components/Styles\";\nimport { EditableInput } from \"Core/Components/EditableInput\";\nimport { ForgotPasswordModel } from \"../Models\";\nimport { ForgotPasswordViewModel } from \"../ViewModels/ForgotPasswordViewModel\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { Covidcontainer } from \"../StylesAppSpecific/HomeStyling\";\n\nexport const ForgotPasswordPage = () => {\n const [viewModel] = useState(() => new ForgotPasswordViewModel());\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const doSubmit = async (e: any) => {\n e.preventDefault();\n if (viewModel.isModelValid()) {\n setIsLoading(true);\n let apiResult: any = await viewModel.ForgotPasswordAsync();\n setIsLoading(false);\n if (apiResult !== null) {\n if (apiResult.wasSuccessful) {\n setIsSuccess(true);\n } else {\n if (apiResult && apiResult.errors && apiResult.errors.length > 0) {\n setErrorMessage(\"* \" + apiResult.errors[0].message);\n } else {\n setErrorMessage(\"* Unknown error has occurred.\");\n }\n }\n }\n }\n };\n\n const goToForgotPassword = async (e: any) => {\n viewModel.history.push(\"/forgotpassword\");\n };\n\n return useObserver(() => (\n \n \n \n \n \n Forgot password\n \n \n If you have forgotten your password, please enter your email address below and we will send you a link to reset it.\n \n \n
\n \n {errorMessage !== \"\" && (\n \n {errorMessage}\n \n )}\n type=\"email\" label=\"Email Address\" validateOnBlur={true} viewModel={viewModel} fieldName=\"emailAddress\" />\n \n \n \n {isSuccess && (\n \n An email has been sent to the address above. Please check your inbox.\n \n )}\n \n
\n
\n
\n
\n ));\n};\n","//https://carlosmanotas.github.io/animate-styled/?selectedKind=Bounce%20animation&selectedStory=bounce&full=0&addons=1&stories=1&panelRight=1&addonPanel=storybooks%2Fstorybook-addon-knobs\nimport AnimateStyled from \"animate-styled\";\nimport { FancyBox } from \"../Components/Styles/BaseStyles\";\nimport { Box, Grid, InputLabel } from \"@material-ui/core\";\nimport React from \"react\";\n\nexport const Animation: React.FC = () => {\n return (\n <>\n \n \n \n Simple Hover\n Hello\n \n \n \n \n Fade In\n \n Hello\n \n \n \n \n \n Bounce In\n \n Hello\n \n \n \n \n \n Light Speed In\n \n Hello\n \n \n \n \n Zoom In\n \n Hello\n \n \n \n Zoom Out\n \n Hello\n \n \n \n Flip\n \n Hello\n \n \n \n \n );\n};\n","import { useStyles } from \"Custom/StylesAppSpecific/HomeStyling\";\nimport { Box, Button, Typography } from \"@material-ui/core\";\nimport React from \"react\";\n\nexport const Buttons: React.FC = () => {\n const classes = useStyles();\n return (\n <>\n <>\n \n Lots more buttons here can be found here{\" \"}\n \n Material UI Buttons\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import \"date-fns\";\n\nimport { Box, FormControl, Grid } from \"@material-ui/core\";\nimport { KeyboardDatePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\n\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { MaterialUiPickersDate } from \"@material-ui/pickers/typings/date\";\nimport React from \"react\";\n\nexport const DatePicker: React.FC = () => {\n const [startDate, setStartDate] = React.useState(undefined);\n\n function handleStartDateChange(date: MaterialUiPickersDate): void {\n setStartDate(date);\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\nimport { BlankModel } from \"../Models/BlankModel\";\nimport { FieldType } from \"../Utils/Utils\";\nimport { RegisterUserModel } from \"../../Custom/Models/RegisterUserModel\";\n\n//extend viewmodel base and passing your model as the generic type\nexport class AutoGridViewModel extends ViewModelBase {\n //Singleton instance of class\n private static _instance: AutoGridViewModel;\n public static get Instance() {\n return this._instance || (this._instance = new this());\n }\n\n constructor() {\n super(null, false);\n }\n\n public FormatAreas = (areas: string[]) => {\n if (areas && areas.length > 0) {\n return areas.map((area) => `\"${area}\"`).join(\" \");\n }\n return \"\";\n };\n\n //This must be present in your viewmodel. Just return true if you dont need to validate anything.\n //keyof BlankModel & string lets you add type checking to the fieldName\n //I am using the validator package to make checking easier https://www.npmjs.com/package/validator\n public isFieldValid(fieldName: keyof FieldType): boolean {\n return true;\n }\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Box, BoxProps, useMediaQuery } from \"@material-ui/core\";\nimport { StoresInstance } from \"Custom/Stores\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { autorun } from \"mobx\";\nimport { LogViewerViewModel } from \"../ViewModels/LogViewerViewModel\";\nimport { AutoGridViewModel } from \"../ViewModels/AutoGridViewModel\";\n\n//type AutoGridProps = React.ComponentType & {\ntype AutoGridProps = {\n id?: string;\n height?: string | number;\n columns?: string;\n mobileColumns?: string;\n tabletColumns?: string;\n desktopColumns?: string;\n mobileRows?: string;\n tabletRows?: string;\n desktopRows?: string;\n mobileArea?: string[];\n tabletArea?: string[];\n desktopArea?: string[];\n columnGap?: string | number;\n rowGap?: string | number;\n children?: React.ReactNode;\n paddingTop?: string | number;\n padding?: string | number;\n justifyContent?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n justifyItems?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n justifySelf?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n alignContent?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n alignItems?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n} & React.HTMLAttributes;\nexport const AutoGrid: React.FC = (props: AutoGridProps) => {\n const [viewModel] = useState(() => new AutoGridViewModel());\n const [columns, setColumns] = React.useState(props.desktopColumns);\n const [rows, setRows] = React.useState(props.desktopRows);\n const [area, setArea] = React.useState(props.desktopArea!);\n const [view, setView] = React.useState(\"desktop\");\n\n useEffect(() => {\n autorun(() => {\n //\tconsole.log(StoresInstance.domain.screenWidth);\n let tabletArea = props.tabletArea === undefined ? props.desktopArea : props.tabletArea;\n if (StoresInstance.coreStore.isMobile) {\n setColumns(props.mobileColumns!);\n setRows(props.mobileRows!);\n setArea(props.mobileArea!);\n setView(\"mobile\");\n } else if (StoresInstance.coreStore.isTablet) {\n setColumns(props.tabletColumns!);\n setRows(props.tabletRows!);\n setArea(tabletArea!);\n setView(\"tablet\");\n } else if (StoresInstance.coreStore.isDesktop) {\n setColumns(props.desktopColumns!);\n setRows(props.desktopRows!);\n setArea(props.desktopArea!);\n setView(\"desktop\");\n }\n });\n }, []);\n\n return useObserver(() => (\n <>\n \n {props.children}\n \n \n ));\n};\nAutoGrid.defaultProps = {\n columnGap: \"1em\",\n rowGap: \"0.5em\",\n //paddingTop: \"0\",\n mobileColumns: \"1fr\",\n //tabletColumns: \"1fr 1fr\",\n //desktopColumns: \"1fr 1fr 1fr 1fr\",\n justifyContent: \"normal\",\n alignContent: \"normal\",\n};\n","import React, { useEffect } from \"react\";\nimport { Box } from \"@material-ui/core\";\nimport { StoresInstance } from \"Custom/Stores\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { autorun } from \"mobx\";\n\ntype AutoCellProps = {\n id?: string;\n width?: number;\n height?: number;\n className?: string;\n mobileArea?: string;\n tabletArea?: string;\n desktopArea?: string;\n children?: any;\n paddingTop?: string;\n onClick?: any;\n pb?: string | number;\n padding?: string;\n justifyContent?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n justifySelf?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n alignContent?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n alignSelf?: \"normal\" | \"start\" | \"end\" | \"flex-start\" | \"flex-end\" | \"left\" | \"right\" | \"stretch\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n};\nexport const AutoCell: React.FC = (props: AutoCellProps) => {\n const [area, setArea] = React.useState(props.desktopArea!);\n const [view, setView] = React.useState(\"desktop\");\n\n useEffect(() => {\n autorun(() => {\n //\tconsole.log(StoresInstance.domain.screenWidth);\n if (StoresInstance.coreStore.isMobile) {\n setArea(props.mobileArea!);\n setView(\"mobile\");\n } else if (StoresInstance.coreStore.isTablet) {\n setArea(props.tabletArea!);\n setView(\"tablet\");\n } else if (StoresInstance.coreStore.isDesktop) {\n setArea(props.desktopArea!);\n setView(\"desktop\");\n }\n });\n }, []);\n\n return useObserver(() => (\n <>\n \n {props.children}\n \n \n ));\n};\nAutoCell.defaultProps = {\n justifyContent: \"normal\",\n alignContent: \"normal\",\n};\n","import React from \"react\";\nimport { useStyles } from \"../../Custom/StylesAppSpecific/HomeStyling\";\nimport { PaperMiddle, GridContainer } from \"../Components/Styles\";\nimport { Box, Paper, Typography } from \"@material-ui/core\";\nimport { CSSGrid, Cell } from \"Core/Components/Styles\";\nimport styled from \"styled-components\";\nimport { AutoGrid } from \"../Components/AutoGrid\";\nimport { Header } from \"../../Custom/Views/Header\";\nimport { AutoCell } from \"../Components/AutoCell\";\n\nexport const GridWrapper = styled(CSSGrid)`\n div {\n border: 2px solid rgb(233, 171, 88);\n border-radius: 5px;\n background-color: rgba(233, 171, 88, 0.5);\n padding: 1em;\n color: #d9480f;\n }\n`;\n\nconst StyledBox = styled(Box)`\n border: 2px solid rgb(233, 171, 88);\n border-radius: 5px;\n background-color: rgba(233, 171, 88, 0.5);\n padding: 1em;\n color: #d9480f;\n`;\n\nexport const GridLayouts: React.FC = () => {\n return (\n <>\n \n \n Basic Grid\n \n 1/12\n 2/12\n 3/12\n 4/12\n 5/12\n 6/12\n 7/12\n 8/12\n 9/12\n 10/12\n 11/12\n 12/12\n \n \n
\n \n Responsive Grid\n \n A\n B\n C\n D\n \n \n
\n \n Holy Grail Grid\n \n \n

Header

\n
\n Menu\n Content\n Ads\n Footer\n
\n
\n
\n \n Grid Areas\n \n Header\n Content\n Menu\n Ads\n Footer\n \n \n
\n \n Sub Grid\n \n \n
1
\n
2
\n
3
\n
4
\n
\n
Two
\n
Three
\n
Four
\n
\n
\n\n \n Auto Grid\n \n Column 1\n Column 2\n Column 3\n Column 4\n \n \n\n \n Auto Grid With Areas\n \n \n Top\n \n \n Middle\n \n \n Bottom\n \n \n \n
\n
\n
\n
\n
\n
\n \n );\n};\n","export interface LockForm {\n formType: FormType;\n formRef: string;\n id: string;\n lockedByName: string;\n}\n\nexport enum FormType {\n Ping,\n}\n","import { FormControl, MenuItem, Select } from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport { CSSGrid } from \"Core/Components/Styles\";\n\nconst teams = [\n {\n value: \"1\",\n label: \"Blackpool\",\n },\n {\n value: \"2\",\n label: \"Man City\",\n },\n {\n value: \"3\",\n label: \"Shrewsbury\",\n },\n {\n value: \"4\",\n label: \"Wolves\",\n },\n];\n\nexport const SelectInput: React.FC = () => {\n const [selection, setSelection] = useState(\"all\");\n\n function handleChange(event: any) {\n setSelection(event.target.value);\n }\n\n return (\n \n \n \n \n {\"Show the final league positions\"}\n \n {teams.map((team, index) => {\n return (\n \n {team.label}\n \n );\n })}\n \n \n \n );\n};\n","import { useStyles } from \"Custom/StylesAppSpecific/HomeStyling\";\nimport { Typography, Paper, Button, Box } from \"@material-ui/core\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport axios from \"axios\";\nimport { useFormLockConcurrency } from \"../Utils/Hooks/UseFormLockConcurrency\";\nimport { FormType } from \"Core/Models/LockForm\";\nimport { StoresInstance } from \"Custom/Stores/Stores\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { baseFontSize } from \"../Components/Styles/CoreStyling\";\n\n//const fontBaseSize = 16;\nexport const Text = React.memo(() => {\n const classes = useStyles();\n const [h1size, seth1size] = useState(0);\n const [h2size, seth2size] = useState(0);\n const [h3size, seth3size] = useState(0);\n const [h4size, seth4size] = useState(0);\n const [h5size, seth5size] = useState(0);\n const [h6size, seth6size] = useState(0);\n const [subtitle1size, setsubtitle1size] = useState(0);\n const [subtitle2size, setsubtitle2size] = useState(0);\n const [body1size, setbody1size] = useState(0);\n const [body2size, setbody2size] = useState(0);\n const h1ref = useRef(null);\n const h2ref = useRef(null);\n const h3ref = useRef(null);\n const h4ref = useRef(null);\n const h5ref = useRef(null);\n const h6ref = useRef(null);\n const subtitle1ref = useRef(null);\n const subtitle2ref = useRef(null);\n const body1ref = useRef(null);\n const body2ref = useRef(null);\n useFormLockConcurrency(\"text\", [FormType.Ping], true);\n const getEmSize = (el: any) => {\n try {\n let cs = getComputedStyle(el, \"\");\n let fx = parseFloat(cs!.fontSize!);\n return Number(fx);\n } catch {}\n return 0;\n };\n const getSizes = () => {\n seth1size(getEmSize(h1ref.current));\n seth2size(getEmSize(h2ref.current));\n seth3size(getEmSize(h3ref.current));\n seth4size(getEmSize(h4ref.current));\n seth5size(getEmSize(h5ref.current));\n seth6size(getEmSize(h6ref.current));\n setsubtitle1size(getEmSize(subtitle1ref.current));\n setsubtitle2size(getEmSize(subtitle2ref.current));\n setbody1size(getEmSize(body1ref.current));\n setbody2size(getEmSize(body2ref.current));\n };\n useEffect(() => {\n getSizes();\n window.addEventListener(\"resize\", () => {\n getSizes();\n });\n }, []);\n\n return useObserver(() => (\n <>\n \n * Text sizes in brackets are @ 1366 width with Font base size of {baseFontSize}px\n \n \n Padding 1\n \n \n Padding 2\n \n \n Padding 3\n \n \n Padding 4\n \n \n Padding 5\n \n
\n \n
\n {\n let _ = axios.post(`/api/example/ping`);\n }}\n disabled={StoresInstance.coreStore.FormLockConcurrencyHubStore.getIsFormLocked(FormType.Ping)}\n >\n {StoresInstance.coreStore.FormLockConcurrencyHubStore.getIsFormLocked(FormType.Ping)\n ? `Ping Locked By ${StoresInstance.coreStore.FormLockConcurrencyHubStore.getLocker(FormType.Ping)}`\n : \"Ping\"}\n \n {\n let _ = axios.get(`/api/example/getping`);\n }}\n >\n {\"?\"}\n \n {/**/}\n {/*\th1. Fixed Font Heading ({fontBaseSize * 2}px)*/}\n {/**/}\n \n h1. Heading ({h1size}px)\n \n \n h2. Heading ({h2size}px)\n \n \n h3. Heading ({h3size}px)\n \n \n h4. Heading ({h4size}px)\n \n \n h5. Heading ({h5size}px)\n \n \n h6. Heading ({h6size}px)\n \n \n subtitle1. Lorem ipsum dolor sit amet, consectetur adipisicing elit. ({subtitle1size}px)\n \n \n subtitle2. Lorem ipsum dolor sit amet, consectetur adipisicing elit. ({subtitle2size}px)\n \n \n body1. Lorem ipsum dolor sit amet, consectetur adipisicing elit. ({body1size}px)\n \n \n body2. Lorem ipsum dolor sit amet, consectetur adipisicing elit. ({body2size}px)\n \n \n button text\n \n \n caption text\n \n \n overline text\n \n
\n
\n \n ));\n});\n","import { useEffect } from \"react\";\nimport { StoresInstance } from \"../../../Custom/Stores\";\n\nexport function useFormLockConcurrency(formRef: string, formTypes: [number], lockNow: boolean = false) {\n useEffect(() => {\n StoresInstance.coreStore.FormLockConcurrencyHubStore.setFormsInfo(formRef, formTypes);\n\n if (lockNow) {\n const cb = () => {\n formTypes.forEach((formType) => {\n StoresInstance.coreStore.FormLockConcurrencyHubStore.lockForm(formType);\n });\n };\n\n if (StoresInstance.coreStore.FormLockConcurrencyHubStore.getIsHubConnected) {\n cb();\n } else {\n StoresInstance.coreStore.FormLockConcurrencyHubStore.enqueueToConnectionQueue(cb);\n }\n }\n\n return () => StoresInstance.coreStore.FormLockConcurrencyHubStore.unlockAllForms();\n }, []);\n}\n","import { FormControl, Grid, InputLabel } from \"@material-ui/core\";\nimport PasswordField from \"material-ui-password-field\";\nimport React from \"react\";\n\nexport const TextInputs: React.FC = () => {\n return (\n \n \n Password With Show\n \n \n \n );\n};\n","import { useStyles } from \"../../Custom/StylesAppSpecific/HomeStyling\";\nimport { PaperMiddle, GridContainer } from \"../Components/Styles\";\nimport { Box, Grid, Paper, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nconst Container = styled(Paper)`\n display: flex;\n margin-bottom: 10px;\n`;\n\nconst FlexRow = styled(Box)`\n background-color: royalblue;\n display: flex;\n margin-bottom: 10px;\n align-items: center;\n justify-content: center;\n text-align: center;\n`;\n\nexport interface FlexColumnProps {\n size: number;\n}\nconst FlexColumn = styled(Box)`\n color: white;\n border: 0.2rem solid white;\n width: ${(props) => (props.size / 12) * 100}vw;\n justify-content: center;\n align-items: center;\n`;\n\nexport const Layouts: React.FC = () => {\n const classes = useStyles();\n\n return (\n <>\n \n Basic Grids\n \n \n Left\n \n \n Middle\n \n \n Right\n \n \n \n \n Fixed\n \n \n Stretch\n \n \n Fixed\n \n \n \n \n );\n};\n","import React, { useState, useContext, useRef, useEffect } from \"react\";\nimport { Link, Box, useMediaQuery } from \"@material-ui/core\";\nimport { LinkBox, RightSide, Dot, DotWrapper } from \"Core/Components/Styles/BaseStyles\";\nimport { Animation } from \"Core/Examples/Animation\";\nimport { Buttons } from \"Core/Examples/Buttons\";\nimport { DatePicker } from \"Core/Examples/DatePicker\";\nimport { GridLayouts } from \"Core/Examples/GridLayouts\";\nimport { SelectInput } from \"Core/Examples/SelectInput\";\nimport { Text } from \"Core/Examples/Text\";\nimport { TextInputs } from \"Core/Examples/TextInputs\";\nimport { Layouts } from \"Core/Examples/Layouts\";\nimport { CSSGrid, Cell } from \"Core/Components/Styles\";\n\nexport const Samples: React.FC = () => {\n const desktopScreen = useMediaQuery(\"(min-width:600px)\");\n const [view, setView] = useState();\n\n return (\n \n
\n \n setView()}>Typography\n \n \n setView()}>Buttons\n \n \n setView()}>Text Input\n \n \n setView()}>Select Input\n \n \n setView()}>Date Picker\n \n \n setView()}>Grid Layouts\n \n \n setView()}>Layouts\n \n \n setView()}>Animation\n \n \n setView()}>Loaders\n \n
\n {view}\n
\n );\n};\n\nexport const Loaders: React.FC = () => {\n return (\n <>\n \n Animated Dots\n \n \n \n \n \n \n \n );\n};\n","import { ViewModelBase } from \"./ViewModelBase\";\nimport { observable, action, computed, runInAction } from \"mobx\";\nimport { FieldType } from \"../Utils/Utils\";\n\nexport class LogViewerViewModel extends ViewModelBase {\n @observable public FileList = observable([]);\n @observable public LogLoaded = false;\n @observable public LogContents = {};\n\n constructor() {\n super({});\n }\n\n @action\n public FetchLogListAsync = async (): Promise => {\n let apiResult = await this.Get<[]>(\"/api/logs/getlist\");\n runInAction(() => {\n this.FileList.clear();\n\n if (apiResult.wasSuccessful && apiResult.payload.length > 0) {\n apiResult.payload.forEach((item: string, index: number) => {\n this.FileList.push(item);\n });\n }\n });\n\n return apiResult.wasSuccessful;\n };\n\n public FetchLogFileAsync = async (file: string): Promise => {\n let apiResult = await this.Get(`/api/logs/getlog?file=${file}`);\n runInAction(() => {\n if (apiResult.wasSuccessful && apiResult.payload.length > 0) {\n this.LogContents = JSON.parse(apiResult.payload);\n this.LogLoaded = true;\n }\n });\n\n return apiResult.wasSuccessful;\n };\n\n public DownloadFileAsync = async (file: string): Promise => {\n let apiResult = await this.Get(`/api/logs/downloadlog?file=${file}`);\n const url = window.URL.createObjectURL(new Blob([apiResult.payload]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", file);\n document.body.appendChild(link);\n link.click();\n\n return apiResult.wasSuccessful;\n };\n\n public isFieldValid(fieldName: keyof FieldType): boolean {\n return true;\n }\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n}\n","import React, { useState } from \"react\";\nimport { Typography, Box } from \"@material-ui/core\";\nimport GetAppIcon from \"@material-ui/icons/GetApp\";\nimport { useObserver } from \"mobx-react-lite\";\nimport styled from \"styled-components\";\nimport { LogViewerViewModel } from \"../ViewModels/LogViewerViewModel\";\nimport { runInAction } from \"mobx\";\nimport { Show } from \"../Components\";\nimport ReactJson from \"react-json-view\";\n\nexport const LogFileStyle = styled.span`\n cursor: pointer;\n padding-bottom: 10px;\n`;\nexport const Container = styled(Box)`\n .MuiTableCell-root {\n font-size: 0.8rem;\n }\n .MuiTableSortLabel-root {\n :hover {\n color: lightgray;\n }\n }\n /* .MuiIconButton-label {\n\t\tcolor: white;\n\t} */\n .MuiTableRow-root {\n cursor: pointer;\n /* user-select: none; */\n :hover {\n background-color: lightgray;\n }\n }\n`;\n//EN: use empty generic type to get default react props\nexport const LogViewer: React.FC = (props) => {\n const [viewModel] = useState(() => new LogViewerViewModel());\n\n React.useEffect(() => {\n let _ = viewModel.FetchLogListAsync();\n }, []);\n\n const backToList = () => {\n runInAction(() => {\n viewModel.LogContents = {};\n viewModel.LogLoaded = false;\n });\n };\n const fetchLogFile = (fileName: string) => {\n let _ = viewModel.FetchLogFileAsync(fileName);\n };\n\n console.log(\"Render\");\n\n return useObserver(() => (\n \n \n \n \n Log Viewer\n \n \n \n \n {viewModel.FileList.map((item: string, index: number) => {\n return (\n \n \n viewModel.DownloadFileAsync(item)} />\n \n fetchLogFile(item)}>\n {item}\n \n \n );\n })}\n {/* fetchLogFile(\"weblog-20200225.json\")}>Test*/}\n \n \n \n \n Back to List\n \n \n \n \n \n ));\n};\n","import { AccountStatus, ApiResult } from \"Core/Models\";\nimport { RegisterUserModel } from \"Custom/Models/RegisterUserModel\";\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\nimport validator from \"validator\";\nimport { FieldType, isNullOrEmpty } from \"../../Core/Utils/Utils\";\nimport { RegisterAddressModel } from \"../Models/RegisterUserAddressModel\";\nimport { StoresInstance } from \"../Stores\";\nimport { computed, observable, runInAction } from \"mobx\";\nimport { pipe, gotenberg, convert, html, please, url } from \"gotenberg-js-client\";\nimport Axios from \"axios\";\nimport { CovidRegModel } from \"../Models/CovidRegModel\";\n\nexport enum SubPage {\n Dashboard,\n Registrations,\n}\n//Pass in as the generic type because we are showing the use of nested classes\nexport class RegisterUserViewModel extends ViewModelBase {\n @observable public HasImage = false;\n @observable public subPage = SubPage.Dashboard;\n @observable public Registrations = [] as CovidRegModel[];\n constructor() {\n super(new RegisterUserModel());\n console.log(\"Register View Model Created\");\n this.setDecorators(RegisterUserModel);\n }\n\n public downloadDocument = async () => {\n let response = (await this.Get(\"/api/covid/createfromurl/\" + this.getValue(\"displayName\"), {\n responseType: \"blob\",\n })) as any;\n const url = window.URL.createObjectURL(new Blob([response]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", \"qrdocument.pdf\"); //or any other extension\n document.body.appendChild(link);\n link.click();\n };\n\n public getRegistrations = async () => {\n let response = await this.Get(\"/api/covid/getregistrations/\");\n if (response.wasSuccessful) {\n runInAction(() => {\n response.payload.forEach((item, index) => {\n let domain = new CovidRegModel();\n domain.fromDto(item);\n this.Registrations.push(domain);\n });\n });\n }\n };\n\n public downloadCSV = async () => {\n let url = \"/api/covid/downloadcsv/\";\n if (StoresInstance.domain.isHbProSite) {\n url = \"/api/covid/downloadcsvforhbpro/\";\n }\n let response = (await this.Get(url, {\n responseType: \"blob\",\n })) as any;\n url = window.URL.createObjectURL(new Blob([response]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", \"registrations.csv\"); //or any other extension\n document.body.appendChild(link);\n link.click();\n };\n\n public downloadQRCode = () => {};\n\n public register = async (): Promise> => {\n this.setValue(\"isHBPro\", StoresInstance.domain.isHbProSite);\n let apiResult = await this.Post(\"/api/account/register\", this.getModelAsPayload());\n if (apiResult.errors.length > 0) {\n if (apiResult.errors[0].message == \"Registration failed as the display name is already taken.\") {\n this.setError(\"displayName\", apiResult.errors[0].message);\n this.setValid(\"displayName\", false);\n }\n }\n if (apiResult && apiResult.wasSuccessful) {\n StoresInstance.domain.AccountStore.getLoginState(apiResult.payload);\n }\n return apiResult;\n };\n\n public getUserDetails = async (): Promise> => {\n let response = await this.Get(\"/api/account/getuserdetails/\" + StoresInstance.domain.AccountStore.DisplayName);\n runInAction(() => {\n let userModel = new RegisterUserModel();\n userModel.fromDto(response.payload);\n this.setModel(userModel);\n this.HasImage = true;\n });\n return response;\n };\n\n @computed\n public get getLogoUrl() {\n return `https://shoothillweb2general.blob.core.windows.net/covidtracer/logos/${this.getValue(\"displayName\")}_thumb.jpg`;\n }\n\n public isFieldValid(fieldName: keyof FieldType, value: any): boolean {\n let { isValid, errorMessage } = this.validateDecorators(fieldName);\n\n if (StoresInstance.domain.AccountStore.IsLoggedIn) {\n if (fieldName === \"terms\") {\n isValid = true;\n errorMessage = \"\";\n }\n if (fieldName === \"password\") {\n if (value === null || value === \"\") {\n isValid = true;\n errorMessage = \"\";\n }\n }\n }\n //Overriding the decorators to check password fields\n if (fieldName === \"confirmPassword\") {\n if (this.getValue(\"password\") !== null && this.getValue(\"password\") !== \"\") {\n errorMessage = this.isConfirmPasswordValid;\n isValid = errorMessage === \"\";\n }\n }\n\n if (!StoresInstance.domain.isHbProSite && fieldName === \"tradingName\") {\n isValid = true;\n errorMessage = \"\";\n }\n\n if (!isValid) {\n console.log(fieldName + \" is invalud with value \" + value);\n }\n\n this.setError(fieldName, errorMessage);\n this.setValid(fieldName, isValid);\n\n return isValid;\n }\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n\n public get isConfirmPasswordValid(): string {\n if (this.getValue(\"password\") !== this.getValue(\"confirmPassword\") && this.getValue(\"password\") !== \"\") return \"Passwords must match\";\n return \"\";\n }\n}\n","import { action, computed, observable } from \"mobx\";\nimport { FieldType, isEmptyOrWhitespace } from \"Core/Utils/Utils\";\nimport { LoginModel } from \"../Models\";\nimport { AccountStatus, ApiResult } from \"Core/Models\";\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\nimport { TestModel } from \"../../Core/Models/TestModel\";\nimport { StoresInstance } from \"../../Core/Base\";\nimport { getHistory } from \"../../Core/Utils/Utils\";\n\nconst domainStores = StoresInstance.domain;\n\nexport class LoginViewModel extends ViewModelBase {\n @observable\n public errorMessage = \"\";\n\n constructor() {\n super(new LoginModel());\n console.log(\"Login View Model Created\");\n //EN - Havent figured out how to make this call work from the base model yet\n //This is only needed if you make use of the validation decorators\n this.setDecorators(LoginModel);\n //(window as any).model = this.model;\n //(window as any).proxy = proxy;\n\n this.handleSubmit = this.handleSubmit.bind(this);\n }\n\n public async handleSubmit(e: React.FormEvent) {\n try {\n e.preventDefault();\n if (this.isModelValid()) {\n const apiResult = await this.login();\n if (apiResult && apiResult.wasSuccessful) {\n domainStores.AccountStore.getLoginState(apiResult.payload);\n const { from } = (getHistory().location.state as any) || { from: { pathname: \"/dashboard\" } };\n if (from) {\n getHistory().push(from.pathname);\n }\n } else {\n // Errors caught below if no error message or failed request\n this.setErrorMessage(apiResult.errors[0].message);\n }\n }\n } catch {\n this.setErrorMessage(\"An unknown error occured\");\n }\n }\n\n @action\n public setErrorMessage(message: string) {\n this.errorMessage = message;\n }\n\n public login = async (): Promise> => {\n let apiResult = await this.Post(\"/api/account/login\", this.getModel);\n return apiResult;\n };\n\n public isFieldValid(fieldName: \"emailAddress\" | \"password\", value: any): boolean {\n const { isValid, errorMessage } = this.validateDecorators(fieldName);\n\n this.setError(fieldName, errorMessage);\n this.setValid(fieldName, isValid);\n\n return isValid;\n }\n\n //public afterUpdate: undefined;\n afterUpdate(fieldName: keyof FieldType, value: any): void {\n //Do something like call an api or whatever/\n //Can use this instead of mobx reaction\n return;\n }\n //public beforeUpdate: undefined;\n beforeUpdate(fieldName: keyof FieldType, value: any): any {\n //Do something and return the new value if you want or just use it to perform another action\n if (value === \"something\" && fieldName === \"emailAddress\") {\n value = \"boo\";\n }\n return value;\n }\n\n @computed\n public get isEmailAddressValid(): string {\n let retval = \"\";\n if (isEmptyOrWhitespace(this.getValue(\"emailAddress\"))) return \"Email address is required\";\n if (this.getValue(\"emailAddress\").length < 4) return \"Email address must be greater than 4 characters\";\n\n return retval;\n }\n\n @computed\n public get isPasswordValid(): string {\n let retval = \"\";\n if (isEmptyOrWhitespace(this.getValue(\"password\") as string)) return \"Password is required\";\n if (this.getValue(\"password\").length < 4) return \"Password must be greater than 4 characters\";\n\n return retval;\n }\n}\n","import { useEffect, useState } from \"react\";\n\nexport const useMediaQuery = (useQuery: string) => {\n const query = window.matchMedia(useQuery);\n const [match, setMatch] = useState(query.matches);\n useEffect(() => {\n const handleMatch = (mediaQuery: any) => setMatch(mediaQuery.matches);\n query.addListener(handleMatch);\n return () => query.removeListener(handleMatch);\n });\n return match ? true : false;\n};\n","import { Stores, StoresInstance } from \"../Stores\";\nimport HBPLogo from \"../Content/Images/hbprologo.png\";\nimport SCTLogo from \"../Content/Images/sctlogo.png\";\nimport { Box, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { Show } from \"../../Core/Base\";\nimport siteTracker from \"../Content/Images/sitetracker.png\";\nimport { AutoGrid } from \"../../Core/Components/AutoGrid\";\n\ninterface Props {\n displayName?: string;\n}\n\nexport const LogoSwitcher: React.FC = (props: Props) => {\n const getLogo = () => {\n if (props.displayName && props.displayName !== \"\") {\n let url = `https://shoothillweb2general.blob.core.windows.net/covidtracer/logos/${props.displayName}_thumb.jpg`;\n return {\"Company;\n } else if (StoresInstance.domain.isHbProSite) {\n return (\n (window.location.href = \"https://housebuilderpro.co.uk\")}\n style={{ height: \"60px\", cursor: \"pointer\" }}\n id={\"logo\"}\n src={HBPLogo}\n alt={\"Company Logo\"}\n />\n );\n } else {\n return {\"Company;\n }\n };\n\n return useObserver(() => (\n \n {getLogo()}\n \n \n \n \n {/*\n Housebuilder Pro Site Tracker\n */}\n \n \n ));\n\n /*return useObserver(() => (\n \n {getLogo()}\n \n \n {/!*\n Housebuilder Pro Site Tracker\n *!/}\n \n \n ));*/\n};\n","import { Box, Button, Link, Typography } from \"@material-ui/core\";\nimport React, { useState } from \"react\";\n\nimport { EditableInput } from \"Core/Components/EditableInput\";\nimport { LoginViewModel } from \"../ViewModels/LoginViewModel\";\nimport { Redirect } from \"react-router\";\nimport { CSSGrid, Cell } from \"../../Core/Components/Styles\";\nimport { LoginContainer } from \"./LoginPage.styles\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport logoShoothill from \"Custom/Content/Images/Shoothill-logo.svg\";\nimport logoSCT from \"Custom/Content/Images/SCT-logo.svg\";\nimport { StoresInstance, useObserver } from \"../../Core/Base\";\nimport { LeftBox, RightBox } from \"Custom/StylesAppSpecific/AppStyling\";\nimport { useMediaQuery } from \"../../Core/Utils/Hooks/UseMediaQuery\";\nimport { Covidcontainer } from \"../StylesAppSpecific/HomeStyling\";\nimport { LogoSwitcher } from \"../Components/LogoSwitcher\";\n\nexport const LoginPage: React.FunctionComponent = () => {\n const [viewModel] = useState(() => new LoginViewModel());\n const [now] = useState(new Date());\n const isMobile = !!useMediaQuery(\"(max-width: 767px)\");\n\n if (viewModel.isLoggedIn) {\n return ;\n }\n\n return useObserver(() => (\n \n \n \n
\n \n \n Company Login\n \n \n \n {viewModel.errorMessage !== \"\" && (\n \n {viewModel.errorMessage}\n \n )}\n \n \n \n \n \n Login using your contact email address\n \n \n \n \n \n \n I've forgotten my password\n \n \n \n \n \n \n \n \n \n \n Home\n \n \n \n \n {!StoresInstance.domain.isHbProSite && (\n \n \n \"Shoothill\n © {now.getFullYear()} Shoothill Ltd.\n \n \n )}\n \n
\n
\n
\n ));\n};\n","import { ModelBase } from \"Core/Models/ModelBase\";\nimport * as MobX from \"mobx\";\nimport { validate, validateOrReject, Contains, IsInt, Length, IsEmail, IsFQDN, IsDate, Min, Max, IsNotEmpty, ValidateIf, Equals } from \"class-validator\";\nimport { RegisterAddressModel } from \"./RegisterUserAddressModel\";\n\nexport class CovidRegModel extends ModelBase {\n @MobX.observable\n public userId: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"First name is required\" })\n public firstName: string = \"\";\n\n @MobX.observable\n public dateRegistered: Date | null = null;\n\n @MobX.observable\n @IsNotEmpty({ message: \"Last name is required\" })\n public lastName: string = \"\";\n\n @MobX.observable\n public company: string = \"\";\n\n @MobX.observable\n @IsNotEmpty({ message: \"Phone number is required\" })\n public phoneNumber: string = \"\";\n\n @MobX.observable\n //@IsNotEmpty({ message: \"Email address is required\" })\n //@IsEmail({}, { message: \"Email address is not correct\" })\n public emailAddress: string = \"\";\n\n @MobX.observable\n //@IsNotEmpty({ message: \"Postcode is required\" })\n public postCode: string = \"\";\n\n @MobX.observable\n @Equals(true, { message: \"Must be ticked\" })\n public agreedConsent: boolean = false;\n\n public signIn: boolean = false;\n public signOut: boolean = false;\n\n public fromDto = (model: CovidRegModel) => {\n for (let key in model) {\n if (model.hasOwnProperty(key)) {\n if (this[key] instanceof Date) {\n this[key] = new Date(model[key]);\n } else {\n this[key] = model[key];\n }\n }\n }\n };\n public toDto = (model: CovidRegModel) => {};\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { useDropzone } from \"react-dropzone\";\nimport styled from \"styled-components\";\nimport { RegisterUserModel } from \"../Models/RegisterUserModel\";\nimport { RegisterUserViewModel } from \"../ViewModels/RegisterUserViewModel\";\nimport { Box } from \"@material-ui/core\";\nimport { CSSGrid } from \"../../Core/Components/Styles\";\n\nconst getColor = (props: any) => {\n if (props.isDragAccept) {\n return \"#00e676\";\n }\n if (props.isDragReject) {\n return \"#ff1744\";\n }\n if (props.isDragActive) {\n return \"#2196f3\";\n }\n return \"#eeeeee\";\n};\n\nconst Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 40px;\n border-width: 2px;\n border-radius: 2px;\n border-color: ${(props) => getColor(props)};\n border-style: dashed;\n background-color: #e8e8e8;\n color: #3f3f3f;\n outline: none;\n transition: border 0.24s ease-in-out;\n`;\nconst thumbsContainer = {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n marginTop: 16,\n};\n\nconst thumb = {\n display: \"inline-flex\",\n borderRadius: 2,\n border: \"1px solid #eaeaea\",\n marginBottom: 8,\n marginRight: 8,\n width: 100,\n height: 100,\n padding: 4,\n boxSizing: \"border-box\",\n};\n\nconst thumbInner = {\n display: \"flex\",\n minWidth: 0,\n overflow: \"hidden\",\n justifyContent: \"center\",\n};\n\nconst img = {\n display: \"block\",\n width: \"auto\",\n //height: \"100%\",\n maxWidth: \"180px\",\n};\ninterface Props {\n viewModel: RegisterUserViewModel;\n}\nexport const UploadLogo = (props: Props) => {\n const [files, setFiles] = useState([]);\n const [hasImage, setHasImage] = useState(false);\n const onDrop = useCallback((acceptedFiles) => {\n setFiles(\n acceptedFiles.map((file: any) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = (event) => {\n if (event && event.target) {\n props.viewModel.setValue(\"logoBase64\", event!.target!.result);\n }\n setHasImage(true);\n // this.setState({\n // generalPhotos: this.state.generalPhotos.concat([{ base64: event.target.result }])\n // });\n };\n return Object.assign(file, {\n preview: URL.createObjectURL(file),\n });\n }),\n );\n }, []);\n const { getRootProps, getInputProps, isDragActive, isDragAccept, isDragReject } = useDropzone({ onDrop: onDrop, accept: \"image/*\" });\n useEffect(\n () => () => {\n // Make sure to revoke the data uris to avoid memory leaks\n files.forEach((file) => URL.revokeObjectURL((file as any).preview));\n },\n [files],\n );\n const thumbs = files.map((file: any) => (\n
\n
\n \n
\n
\n ));\n return (\n <>\n {/**/}\n {!hasImage && (\n \n \n \n

Drag file or click to add your business logo (optional)

\n
\n
\n )}\n {hasImage && (\n <>\n \n {\n setHasImage(false);\n }}\n >\n {thumbs}\n \n \n * Click image to remove\n \n \n \n )}\n {/*
*/}\n \n );\n};\n","import { RegisterUserViewModel } from \"../../ViewModels/RegisterUserViewModel\";\nimport { Box, Button, Link, Typography } from \"@material-ui/core\";\nimport { StoresInstance } from \"../../Stores\";\nimport { Cell, CSSGrid } from \"../../../Core/Components/Styles\";\nimport { UploadLogo } from \"../UploadLogo\";\nimport { AutoGrid } from \"../../../Core/Components/AutoGrid\";\nimport { EditableInput } from \"../../../Core/Components/EditableInput\";\nimport { RegisterUserModel } from \"../../Models/RegisterUserModel\";\nimport React, { useState } from \"react\";\nimport { Thumb } from \"./RegisterPage\";\nimport styled from \"styled-components\";\nimport { runInAction } from \"mobx\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { Show } from \"../../../Core/Base\";\n\nconst Infotext = styled(Box)`\n color: gray;\n font-size: 12px;\n padding-top: 5px;\n`;\n\nexport function RegisterCompanyDetails(props: { viewModel: RegisterUserViewModel }) {\n const { viewModel } = props;\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n const doSubmit = async (e: any) => {\n e.preventDefault();\n if (viewModel.IsLoading) {\n return;\n }\n //isValid will check all fields to make sure they are in a valid state.\n if (!viewModel.isModelValid()) {\n setErrorMessage(\"Please fill out all of the required fields\");\n } else {\n let response = await viewModel.register();\n StoresInstance.domain.CurrentUser = viewModel.getModel;\n if (response.wasSuccessful) {\n viewModel.history.push(\"/dashboard\");\n } else {\n setErrorMessage(response.errors[0].message);\n }\n }\n };\n\n return useObserver(() => (\n <>\n \n {StoresInstance.domain.AccountStore.IsLoggedIn ? Company Details : Sign up your business}\n \n {errorMessage !== \"\" && (\n <>\n \n {errorMessage}\n \n
\n \n )}\n
\n \n {StoresInstance.domain.AccountStore.IsLoggedIn && viewModel.HasImage ? (\n \n \n\n \n {/* runInAction(() => (viewModel.HasImage = false))}>\n Remove\n */}\n runInAction(() => (viewModel.HasImage = false))}>\n \n Remove Logo\n \n \n \n \n ) : (\n \n )}\n\n {StoresInstance.domain.AccountStore.IsLoggedIn && (\n \n \n \n )}\n {/*\n viewModel={viewModel} autoComplete={\"organization-title\"} label=\"Position (required)\" fieldName=\"position\" />\n What is the position you hold at your business\n */}\n \n\n \n \n \n \n viewModel={viewModel} autoComplete={\"organization\"} label=\"Company name (required)\" fieldName=\"tradingName\" />\n Name of your business\n \n \n viewModel={viewModel} autoComplete={\"given-name\"} label=\"Contact first name (required)\" fieldName=\"firstName\" />\n viewModel={viewModel} autoComplete={\"family-name\"} label=\"Contact last name (required)\" fieldName=\"lastName\" />\n viewModel={viewModel} autoComplete={\"tel\"} label=\"Contact phone number (required)\" fieldName=\"phoneNumber\" />\n viewModel={viewModel} autoComplete={\"email\"} type={\"email\"} label=\"Contact email address (required)\" fieldName=\"email\" />\n \n \n\n \n \n Account details\n \n \n \n \n \n {StoresInstance.domain.AccountStore.IsLoggedIn ? (\n <>\n \n alphaOnly={true}\n editMode={false}\n viewModel={viewModel}\n autoComplete={\"organization\"}\n label=\"Display name\"\n fieldName=\"displayName\"\n />\n \n {viewModel.getValue(\"displayName\")}\n \n This cannot be edited please contact us on 01743 636300 if it needs to be changed\n \n ) : (\n <>\n \n alphaOnly={true}\n viewModel={viewModel}\n autoComplete={\"organization\"}\n label=\"Display name (required)\"\n fieldName=\"displayName\"\n />\n {StoresInstance.domain.isHbProSite ? (\n \n The name that will be used on the customer url e.g https://sitetracker.housebuilderpro.co.uk/qr/shoothill. Only characters a to z\n allowed.\n \n ) : (\n \n The name that will be used on the customer url e.g https://shoothillcovidtracer.com/qr/shoothill. Only characters a to z allowed.\n \n )}\n \n )}\n \n \n \n \n \n viewModel={viewModel} type={\"password\"} autoComplete={\"new-password\"} label=\"Password (required)\" fieldName=\"password\" />\n More than 8 characters & contain at least one capital letter, number & symbol\n \n viewModel={viewModel} type={\"password\"} autoComplete={\"new-password\"} label=\"Confirm Password\" fieldName=\"confirmPassword\" />\n \n {!StoresInstance.domain.AccountStore.IsLoggedIn && (\n <>\n \n \n \n viewModel={viewModel}\n type={\"checkbox\"}\n label={\n \n \n I accept the\n {StoresInstance.domain.isHbProSite ? Housebuilder Pro Ltd Covid Tracer : Shoothill Covid Tracer }\n {StoresInstance.domain.isHbProSite ? (\n \n Terms & Conditions\n \n ) : (\n \n Terms & Conditions\n \n )}\n \n \n }\n fieldName=\"terms\"\n />\n \n \n \n viewModel={viewModel}\n type={\"checkbox\"}\n label={\n \n We may wish to contact you from time to time. Please tick the box if you give your consent to do so\n \n }\n fieldName=\"agreedConsent\"\n />\n \n \n \n \n \n \n )}\n {StoresInstance.domain.AccountStore.IsLoggedIn && (\n <>\n \n \n \n \n )}\n
\n \n ));\n}\n","import { RegisterUserViewModel, SubPage } from \"../../ViewModels/RegisterUserViewModel\";\nimport { Box, Button, Link, Typography } from \"@material-ui/core\";\nimport React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useObserver } from \"mobx-react-lite\";\nimport MaterialTable from \"material-table\";\nimport inImage from \"../../Content/Images/in.png\";\nimport outImage from \"../../Content/Images/out.png\";\nimport { FormatDate } from \"../../../Core/Utils/Format\";\nimport { getHistory } from \"../../../Core/Utils/Utils\";\nimport { StoresInstance } from \"../../Stores\";\n\nconst Infotext = styled(Box)`\n color: gray;\n font-size: 12px;\n`;\n\nexport function RegistrationsView(props: { viewModel: RegisterUserViewModel }) {\n const { viewModel } = props;\n\n useEffect(() => {}, []);\n\n const getColumns = () => {};\n\n return useObserver(() => (\n <>\n {viewModel.getValue(\"isHBPro\")}\n \n {viewModel.getValue(\"isHBPro\") == true ? Visitor/Contractor ins and outs : Registrations}\n \n \n \n {\n if (rowData.signIn) {\n return ;\n } else if (rowData.signOut) {\n return ;\n }\n return \"NA\";\n },\n hidden: !StoresInstance.domain.isHbProSite,\n },\n {\n title: \"Date / Time\",\n field: \"dateRegistered\",\n render: (rowData) => {\n return FormatDate(rowData.dateRegistered, \"DD MMM, YYYY\") + \" @ \" + FormatDate(rowData.dateRegistered, \"HH:mm\");\n },\n },\n { title: \"Name\", field: \"lastName\", render: (rowData) => rowData.firstName + \" \" + rowData.lastName },\n { title: \"Company\", field: \"company\", hidden: !StoresInstance.domain.isHbProSite },\n { title: \"Contact Number\", field: \"phoneNumber\" },\n ]}\n isLoading={viewModel.IsLoading}\n options={{\n pageSize: 50,\n pageSizeOptions: [10, 20, 50, 100],\n emptyRowsWhenPaging: false,\n }}\n data={viewModel.Registrations.slice()}\n title=\"\"\n />\n \n \n ));\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Box, Typography } from \"@material-ui/core\";\nimport styled from \"styled-components\";\nimport { RegisterUserViewModel, SubPage } from \"../../ViewModels/RegisterUserViewModel\";\nimport { StoresInstance } from \"../../Stores\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { Covidcontainer } from \"../../StylesAppSpecific/HomeStyling\";\nimport { RegisterCompanyDetails } from \"./RegisterCompanyDetails\";\nimport { useRouter } from \"../../../Core/Utils/Hooks\";\nimport { runInAction } from \"mobx\";\nimport { Show } from \"../../../Core/Base\";\nimport { RegistrationsView } from \"./RegistrationsView\";\nimport { getHistory } from \"../../../Core/Utils/Utils\";\nimport { LogoSwitcher } from \"../../Components/LogoSwitcher\";\n\nexport const Thumb = styled.img`\n max-height: 100px;\n`;\n\nexport const RegisterPage: React.FC = () => {\n const [viewModel] = useState(() => new RegisterUserViewModel());\n const { history, match } = useRouter();\n //const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop });\n\n useEffect(() => {\n const { subpage } = match.params as any;\n if (subpage && subpage === \"registrations\") {\n runInAction(() => {\n showRegistrations();\n });\n }\n if (StoresInstance.domain.AccountStore.IsLoggedIn) {\n let _ = viewModel.getUserDetails();\n }\n }, []);\n\n const showRegistrations = () => {\n getHistory().push(\"/dashboard/registrations\");\n runInAction(() => {\n viewModel.subPage = SubPage.Registrations;\n if (viewModel.Registrations.length == 0) {\n viewModel.getRegistrations();\n }\n });\n };\n\n const showDashboard = () => {\n getHistory().push(\"/dashboard\");\n runInAction(() => {\n viewModel.subPage = SubPage.Dashboard;\n });\n };\n\n return useObserver(() => (\n \n \n \n \n \n \n \n \n \n Company Details\n \n \n \n |\n \n \n \n Registrations\n \n \n \n |\n \n \n getHistory().push(\"/logout\")}>\n Logout\n \n \n \n \n \n \n \n \n \n \n \n \n ));\n};\n","import * as MobX from \"mobx\";\n\nimport { IsEmail, IsNotEmpty } from \"class-validator\";\n\nimport { ModelBase } from \"../../Core/Models/ModelBase\";\n\nexport class ResetPasswordModel extends ModelBase {\n @MobX.observable\n @IsNotEmpty({ message: \"Password is required\" })\n public newPassword: string = \"\";\n\n @MobX.observable\n public confirmPassword: string = \"\";\n\n @MobX.observable\n public token: string = \"\";\n\n @MobX.action\n fromDto(model: ResetPasswordModelDTO): void {\n this.newPassword = model.newPassword;\n this.token = model.token;\n }\n\n toDto(model: ResetPasswordModel): void {}\n}\n\nexport interface ResetPasswordModelDTO {\n newPassword: string;\n token: string;\n}\n","import { FieldType, getUrlSearchParams } from \"../../Core/Utils/Utils\";\nimport { ResetPasswordModel, ResetPasswordModelDTO } from \"../Models/ResetPasswordModel\";\nimport { action, observable, runInAction } from \"mobx\";\n\nimport { ApiResult } from \"../../Core/Models/ApiResult\";\nimport { AppUrls } from \"../Globals\";\nimport { ViewModelBase } from \"../../Core/ViewModels/ViewModelBase\";\n\nexport class ResetPasswordViewModel extends ViewModelBase {\n @observable\n public tokenValid?: boolean;\n\n constructor() {\n super(new ResetPasswordModel());\n this.setDecorators(ResetPasswordModel);\n }\n\n public getTokenFromUrl = () => {\n const urlSearchParams = getUrlSearchParams();\n const forgotPasswordToken = urlSearchParams.get(\"forgottoken\");\n if (forgotPasswordToken) {\n this.model.setValue(\"token\", forgotPasswordToken);\n this.verifyForgotPasswordTokenAsync();\n } else {\n runInAction(() => {\n this.tokenValid = false;\n });\n }\n };\n\n public verifyForgotPasswordTokenAsync = async (): Promise => {\n let apiResult = await this.Post(AppUrls.Server.Api.Account.ResetPassword.VerifyToken, this.model);\n runInAction(() => {\n this.tokenValid = apiResult.wasSuccessful;\n\n if (this.tokenValid) {\n this.model.fromDto(apiResult.payload);\n }\n });\n };\n\n public resetPasswordAsync = async (): Promise> => {\n let apiResult = await this.Post(AppUrls.Server.Api.Account.ResetPassword.Reset, this.model);\n return apiResult;\n };\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n\n public isFieldValid(fieldName: keyof FieldType, value: any): boolean {\n let { isValid, errorMessage } = this.validateDecorators(fieldName);\n\n if (fieldName === \"confirmPassword\") {\n errorMessage = this.isConfirmPasswordValid;\n isValid = errorMessage === \"\";\n }\n\n this.setError(fieldName, errorMessage);\n this.setValid(fieldName, isValid);\n\n return isValid;\n }\n\n public get isConfirmPasswordValid(): string {\n if (this.getValue(\"newPassword\") !== this.getValue(\"confirmPassword\") && this.getValue(\"newPassword\") !== \"\") return \"Passwords must match\";\n return \"\";\n }\n}\n","import { Box, Button, Fade, Link, Paper, Typography } from \"@material-ui/core\";\nimport React, { useEffect, useState } from \"react\";\n\nimport { Centered } from \"Core/Components\";\nimport { EditableInput } from \"Core/Components/EditableInput\";\nimport { ForgotPasswordModel } from \"../Models\";\nimport { ResetPasswordModel } from \"../Models/ResetPasswordModel\";\nimport { ResetPasswordViewModel } from \"../ViewModels/ResetPasswordViewModel\";\nimport { runInAction } from \"mobx\";\nimport { useObserver, useRouter } from \"../../Core/Base\";\nimport { RegisterUserViewModel } from \"../ViewModels/RegisterUserViewModel\";\nimport { Covidcontainer } from \"../StylesAppSpecific/HomeStyling\";\n\nexport const ResetPasswordPage: React.FunctionComponent = () => {\n const [viewModel] = useState(() => new ResetPasswordViewModel());\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n useEffect(() => {\n viewModel.getTokenFromUrl();\n }, []);\n\n const doSubmit = async (e: any) => {\n e.preventDefault();\n\n if (viewModel.isModelValid()) {\n runInAction(() => {\n setIsLoading(true);\n });\n\n const apiResult = await viewModel.resetPasswordAsync();\n\n runInAction(() => {\n setIsLoading(false);\n\n if (apiResult) {\n if (apiResult.wasSuccessful) {\n setErrorMessage(\"\");\n setIsSuccess(true);\n } else {\n setErrorMessage(\"* \" + apiResult.errors[0].message);\n setIsSuccess(false);\n }\n } else {\n setErrorMessage(\"* Unknown error has occurred.\");\n setIsSuccess(false);\n }\n });\n }\n };\n\n const goToForgotPassword = async (e: any) => {\n viewModel.history.push(\"/forgotpassword\");\n };\n\n return useObserver(() => (\n \n \n \n {viewModel.tokenValid === true ? (\n <>\n \n \n Reset password\n \n \n Please type a new password.\n \n \n
\n \n {errorMessage !== \"\" && (\n \n {errorMessage}\n \n )}\n type=\"password\" label=\"New Password\" validateOnBlur={true} viewModel={viewModel} fieldName=\"newPassword\" />\n \n \n \n type=\"password\"\n label=\"Confirm Password\"\n validateOnBlur={true}\n viewModel={viewModel}\n fieldName=\"confirmPassword\"\n />\n \n \n \n \n {errorMessage !== \"\" && Return to forgot password}\n {isSuccess && (\n \n You have successfully reset your password\n \n )}\n
\n \n ) : viewModel.tokenValid === false ? (\n <>\n \n \n Reset password\n \n \n Url is expired or invalid, please try again.\n \n Return to forgot password\n \n \n ) : (\n <>\n \n \n Reset password\n \n \n Loading...\n \n \n \n )}\n
\n
\n
\n ));\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, { useState, useEffect } from \"react\";\nimport { Typography } from \"@material-ui/core\";\nimport { LoginPage } from \"./LoginPage\";\n\nexport const SessionExpired: React.FC = () => {\n return (\n /*\n Your session has expired!\n */\n \n );\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, { useState, useEffect } from \"react\";\nimport { StoresInstance } from \"Custom/Stores\";\n\nexport const Logout: React.FC = () => {\n useEffect(() => {\n StoresInstance.domain.AccountStore.Logout();\n }, []);\n\n return <>;\n};\n","import { styled } from \"../../Core/Base\";\n\nexport const HomeContainer = styled.div`\n span.header-sct {\n font-style: italic;\n }\n\n p.p1 {\n font-weight: bold;\n }\n\n p.paragraph {\n @media (max-width: 767px) {\n font-size: 0.75rem;\n letter-spacing: -0.18px;\n }\n }\n\n .button-link:hover {\n text-decoration: none;\n }\n\n img.sct {\n @media (max-width: 767px) {\n display: flex;\n margin: auto;\n height: fit-content;\n }\n }\n`;\n","import { Box, Button, Link, Typography } from \"@material-ui/core\";\nimport React, { useEffect, useState } from \"react\";\n\nimport { Link as RouterLink } from \"react-router-dom\";\nimport logoShoothill from \"Custom/Content/Images/Shoothill-logo.svg\";\nimport { StoresInstance, useObserver, useRouter } from \"../../Core/Base\";\nimport { HomeContainer } from \"./Home.styles\";\nimport { useMediaQuery } from \"../../Core/Utils/Hooks/UseMediaQuery\";\nimport { Covidcontainer } from \"../StylesAppSpecific/HomeStyling\";\nimport { LogoSwitcher } from \"../Components/LogoSwitcher\";\n\nexport const Home: React.FunctionComponent = () => {\n const [now] = useState(new Date());\n const { history, match } = useRouter();\n const isMobile = !!useMediaQuery(\"(max-width: 767px)\");\n\n useEffect(() => {\n //let { layout } = match.params as any;\n if (history.location.pathname.indexOf(\"hbpro\") > 0) {\n StoresInstance.domain.SetIsHBProSite(true);\n }\n }, []);\n\n const getHBPro = () => {\n return (\n \n \n \n \n \n \n The Housebuilder Pro Covid-19 Site Tracker system is a free-to-use registration system designed to help businesses follow Government guidelines\n in logging visitors to sites and offices around the UK.\n \n \n
\n \n Sign up takes less than 5 minutes and once you register your business, you will receive a unique QR code that you can print and display at your\n business premises.\n \n
\n \n Your visitors or contractors can scan the code using their smart phones, which then takes them to a personalised registration page so you can keep\n an accurate track of your visitors during these challenging times.\n \n
\n \n Once they have scanned the code, they will be presented with a \"Sign in\" or \"Sign out\" option so your visitor log is easily kept up-to-date.\n \n
\n {!StoresInstance.domain.AccountStore.IsLoggedIn && (\n \n \n \n \n \n \n \n Login\n \n \n \n \n )}\n {StoresInstance.domain.AccountStore.IsLoggedIn && (\n \n \n \n \n \n )}\n
\n
\n
\n );\n };\n\n const getCovidTracer = () => {\n return (\n \n \n \n \n \n What is 'Shoothill Covid Tracer'?\n \n \n \n \n The Shoothill Covid-19 trace system is a free-to-use visitor registration system designed to help businesses follow Government guidelines to help\n support the NHS Test & Trace effort automatically.\n \n
\n \n Sign up takes less than 5 minutes and once you register your business, you will receive a unique QR code that you can print and place on your\n business premises. Then your visitors / customer can scan the code using their smart phones, which then takes them to a personalised registration\n page so you can keep an accurate track of your customers during these challenging times.\n \n
\n {!StoresInstance.domain.AccountStore.IsLoggedIn && (\n \n \n \n \n \n \n \n Login\n \n \n \n \n )}\n {StoresInstance.domain.AccountStore.IsLoggedIn && (\n \n \n \n \n \n \n \n Logout\n \n \n \n \n )}\n \n \"Shoothill\n © {new Date().getFullYear()} Shoothill Ltd.\n \n
\n
\n
\n );\n };\n\n return useObserver(() => (\n \n \n \n\n {StoresInstance.domain.isHbProSite ? getHBPro() : getCovidTracer()}\n \n \n ));\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, { useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport \"./Error.scss\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\nimport HomeIcon from \"@material-ui/icons/HomeOutlined\";\nimport { defaultTheme } from \"../../Custom/StylesAppSpecific/AppStyling\";\n\nexport const Container = styled.div`\n background-color: #d4d9ed;\n text-align: center;\n height: 100vh;\n\n .cont_principal {\n position: absolute;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n .cont_error {\n position: absolute;\n width: 100%;\n height: 300px;\n top: 50%;\n margin-top: -150px;\n }\n\n .cont_error > h1 {\n font-family: \"Lato\", sans-serif;\n font-weight: 400;\n font-size: 150px;\n color: #fff;\n position: relative;\n left: -100%;\n transition: all 0.5s;\n }\n\n .cont_error > p {\n font-family: \"Lato\", sans-serif;\n font-weight: 300;\n font-size: 24px;\n letter-spacing: 5px;\n color: #9294ae;\n position: relative;\n left: 100%;\n transition: all 0.5s;\n transition-delay: 0.5s;\n -webkit-transition: all 0.5s;\n -webkit-transition-delay: 0.5s;\n }\n\n .cont_aura_1 {\n position: absolute;\n width: 300px;\n height: 120%;\n top: 25px;\n right: -340px;\n background-color: #8a65df;\n box-shadow: 0px 0px 60px 20px rgba(137, 100, 222, 0.5);\n -webkit-transition: all 0.5s;\n transition: all 0.5s;\n }\n\n .cont_aura_2 {\n position: absolute;\n width: 100%;\n height: 300px;\n right: -10%;\n bottom: -301px;\n background-color: #8b65e4;\n box-shadow: 0px 0px 60px 10px rgba(131, 95, 214, 0.5), 0px 0px 20px 0px rgba(0, 0, 0, 0.1);\n z-index: 5;\n transition: all 0.5s;\n -webkit-transition: all 0.5s;\n }\n\n .cont_error_active > .cont_error > h1 {\n left: 0%;\n }\n .cont_error_active > .cont_error > p {\n left: 0%;\n }\n\n .cont_error_active > .cont_aura_2 {\n animation-name: animation_error_2;\n animation-duration: 4s;\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n animation-direction: alternate;\n transform: rotate(-20deg);\n }\n .cont_error_active > .cont_aura_1 {\n transform: rotate(20deg);\n right: -170px;\n animation-name: animation_error_1;\n animation-duration: 4s;\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n animation-direction: alternate;\n }\n\n @-webkit-keyframes animation_error_1 {\n from {\n -webkit-transform: rotate(20deg);\n transform: rotate(20deg);\n }\n to {\n -webkit-transform: rotate(25deg);\n transform: rotate(25deg);\n }\n }\n @-o-keyframes animation_error_1 {\n from {\n -webkit-transform: rotate(20deg);\n transform: rotate(20deg);\n }\n to {\n -webkit-transform: rotate(25deg);\n transform: rotate(25deg);\n }\n }\n @-moz-keyframes animation_error_1 {\n from {\n -webkit-transform: rotate(20deg);\n transform: rotate(20deg);\n }\n to {\n -webkit-transform: rotate(25deg);\n transform: rotate(25deg);\n }\n }\n @keyframes animation_error_1 {\n from {\n -webkit-transform: rotate(20deg);\n transform: rotate(20deg);\n }\n to {\n -webkit-transform: rotate(25deg);\n transform: rotate(25deg);\n }\n }\n`;\n\nexport const NotFound: React.FC = () => {\n return (\n \n
\n
\n

Oops

\n

The Page you're looking for isn't here.

\n
\n
\n
\n
\n
\n );\n};\n","import * as MobX from \"mobx\";\n\nimport { FieldType, sortByString } from \"../../Core/Utils/Utils\";\nimport { Role, RoleDTO } from \"../Models/Role\";\nimport { action, computed } from \"mobx\";\n\nimport { ApiResult } from \"Core/Models/ApiResult\";\nimport { RoleStore } from \"../Stores/Domain/Admin/RoleStore\";\nimport { StoresInstance } from \"Custom/Stores/Stores\";\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\n\nexport default class RoleViewModel extends ViewModelBase {\n @MobX.observable public roleCount: number = 0;\n @MobX.observable private ascOrder = true;\n private roleStore: RoleStore = StoresInstance.domain.RoleStore;\n @MobX.observable public Valid: boolean = false;\n\n constructor() {\n super(new Role(\"\"));\n this.setDecorators(Role);\n }\n\n public setRole(role: Role, newRole: boolean) {\n this.setValue(\"id\", newRole ? \"\" : role.id);\n this.setValue(\"name\", newRole ? \"\" : role.name);\n }\n\n public get(fieldName: any) {\n return this.getValue(fieldName);\n }\n\n @action\n public set(fieldName: any, value: string | number | boolean | Date) {\n this.setValue(fieldName, value as string);\n }\n\n public isFieldValid(fieldName: keyof FieldType, value: any): boolean {\n const { isValid, errorMessage } = this.validateDecorators(fieldName);\n\n this.setError(fieldName, errorMessage);\n this.setValid(fieldName, isValid);\n\n return isValid;\n }\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n\n @action\n public async loadRolesAsync(): Promise> {\n var apiResult = await this.Get(\"/api/roles/getall\");\n\n if (apiResult.wasSuccessful) {\n this.roleStore.setRoles(apiResult.payload);\n MobX.runInAction(() => (this.roleCount = this.roleStore.getRoleCount));\n }\n return apiResult;\n }\n\n @computed get getRoles(): Role[] {\n let roles = this.roleStore.getRoles.slice();\n roles.sort((a: RoleDTO, b: RoleDTO) => {\n if (this.ascOrder) return sortByString(a.name, b.name);\n else return sortByString(b.name, a.name);\n });\n return roles;\n }\n\n public getRole = (id: string) => {\n if (id) {\n return this.roleStore.getRoles.find((u) => u.id === id);\n } else {\n return new Role(\"\");\n }\n };\n\n @computed get getRoleCount(): number {\n return this.roleCount;\n }\n\n @computed get getIsLoadingData(): boolean {\n return this.roleStore.getIsLoadingData;\n }\n\n @action\n public setOrderAsc() {\n this.ascOrder = !this.ascOrder;\n }\n\n @computed get getOrderAsc(): boolean {\n return this.ascOrder;\n }\n\n public async postRoleDetailAsync() {\n var apiResult = await this.Post(`/api/roles/Upsert`, this.getModel);\n if (apiResult.wasSuccessful) {\n let existingRole = this.roleStore.getRoles.find((u) => u.id === this.getValue(\"id\"));\n if (existingRole) {\n const index = this.roleStore.getRoles.indexOf(existingRole, 0);\n if (index > -1) {\n this.roleStore.getRoles.splice(index, 1);\n }\n }\n const newRole = new Role(apiResult.payload.id);\n newRole.fromDto(apiResult.payload);\n this.roleStore.getRoles.push(newRole);\n }\n return apiResult.payload;\n }\n}\n","import * as MobX from \"mobx\";\n\nimport { FieldType, sortByString } from \"../../Core/Utils/Utils\";\nimport { GenericIncludeDeleted, LoginModel, Role, RoleDTO } from \"../Models\";\nimport { User, UserDTO } from \"Custom/Models/User\";\nimport { action, computed } from \"mobx\";\n\nimport { ApiResult } from \"Core/Models/ApiResult\";\nimport { AppUrls } from \"Custom/Globals\";\nimport { StoresInstance } from \"Custom/Stores/Stores\";\nimport { UserStore } from \"Custom/Stores/Domain\";\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\n\nconst domainStores = StoresInstance.domain;\n\nexport default class UserViewModel extends ViewModelBase {\n @MobX.observable public userCount: number = 0;\n @MobX.observable private ascOrder = true;\n private userStore: UserStore = StoresInstance.domain.UserStore;\n @MobX.observable public Valid: boolean = false;\n @MobX.observable public resetLoginAttemptsError = \"\";\n\n constructor() {\n super(new User(\"\"));\n this.setDecorators(LoginModel);\n }\n\n public setUser(user: User, newUser: boolean) {\n this.setValue(\"id\", newUser ? \"\" : user.id);\n this.setValue(\"firstName\", newUser ? \"\" : user.firstName);\n this.setValue(\"lastName\", newUser ? \"\" : user.lastName);\n this.setValue(\"email\", newUser ? \"\" : user.email);\n this.setValue(\"password\", newUser ? \"\" : user.password);\n }\n\n public get(fieldName: any) {\n return this.getValue(fieldName);\n }\n\n @action\n public set(fieldName: any, value: string | number | boolean | Date) {\n this.setValue(fieldName, value as string);\n }\n\n public isFieldValid(fieldName: keyof FieldType, value: any): boolean {\n const { isValid, errorMessage } = this.validateDecorators(fieldName);\n\n this.setError(fieldName, errorMessage);\n this.setValid(fieldName, isValid);\n\n return isValid;\n }\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n\n @action\n public async loadUsersAsync(): Promise> {\n const includeGenericDeleted: GenericIncludeDeleted = {\n includeDeleted: true,\n };\n var apiResult = await this.Post(\"/api/user/getall\", includeGenericDeleted);\n\n if (apiResult.wasSuccessful) {\n this.userStore.setUsers(apiResult.payload);\n MobX.runInAction(() => (this.userCount = this.userStore.getUserCount));\n }\n return apiResult;\n }\n\n public async getUserRoles(): Promise> {\n var apiResult = await this.Post(\"/api/user/GetUserRoles\", { id: this.getValue(\"id\") });\n if (apiResult.wasSuccessful) {\n apiResult.payload.forEach((role) => {\n MobX.runInAction(() => {\n const existingRole = domainStores.RoleStore.getRoles.find((r) => r.id === role.id);\n\n if (existingRole) {\n this.model.userRoles.push(existingRole);\n }\n });\n });\n }\n return apiResult;\n }\n\n public async resetFailedLoginAttempts(): Promise {\n MobX.runInAction(() => (this.IsLoading = true));\n const apiResult = await this.Post(AppUrls.Server.Api.Admin.ResetFailedLoginAttemptsCount, {\n id: this.getValue(\"id\"),\n });\n if (apiResult.wasSuccessful) {\n MobX.runInAction(() => (this.resetLoginAttemptsError = \"\"));\n } else {\n MobX.runInAction(() => {\n this.IsErrored = true;\n this.resetLoginAttemptsError = \"Unknown Error resetting Failed Login Attempts Count\";\n });\n }\n MobX.runInAction(() => (this.IsLoading = false));\n }\n\n @computed get getUsers(): User[] {\n let users = this.userStore.getUsers.slice();\n users.sort((a: UserDTO, b: UserDTO) => {\n if (this.ascOrder) return sortByString(a.firstName, b.firstName);\n else return sortByString(b.firstName, a.firstName);\n });\n return users;\n }\n\n public getUser = (id: string) => {\n if (id) {\n return this.userStore.getUsers.find((u) => u.id === id);\n } else {\n return new User(\"\");\n }\n };\n\n @computed get getUserCount(): number {\n return this.userCount;\n }\n\n @computed get getIsLoadingData(): boolean {\n return this.userStore.getIsLoadingData;\n }\n\n @action\n public setOrderAsc() {\n this.ascOrder = !this.ascOrder;\n }\n\n @computed get getOrderAsc(): boolean {\n return this.ascOrder;\n }\n\n public async postUserDetailAsync() {\n var apiResult = await this.Post(`/api/user/Upsert`, this.getModel);\n if (apiResult.wasSuccessful) {\n let existingUser = this.userStore.getUsers.find((u) => u.id === this.getValue(\"id\"));\n if (existingUser) {\n const index = this.userStore.getUsers.indexOf(existingUser, 0);\n if (index > -1) {\n this.userStore.getUsers.splice(index, 1);\n }\n }\n apiResult.payload.password = \"\";\n const newUser = new User(apiResult.payload.id);\n newUser.fromDto(apiResult.payload);\n this.userStore.getUsers.push(newUser);\n }\n return apiResult.payload;\n }\n}\n","import * as Mui from \"@material-ui/core\";\n\nimport { React, StoresInstance, styled, useEffect, useObserver, useRouter, useState } from \"../../../Core/Base\";\n\nimport { EditableInput } from \"../../../Core/Components/EditableInput\";\nimport { KeyValuePair } from \"Core/Models/KeyValuePair\";\nimport { Role } from \"Custom/Models\";\nimport RoleViewModel from \"../../ViewModels/RoleViewModel\";\nimport { User } from \"../../Models\";\nimport UserViewModel from \"../../../Custom/ViewModels/UserViewModel\";\nimport { CSSGrid } from \"../../../Core/Components/Styles\";\n\nconst domainStores = StoresInstance.domain;\nexport const Container = styled(Mui.Box)``;\nexport const DetailContainer = styled(Mui.Box)`\n position: relative;\n`;\n\nexport const UserDetails: React.FC = () => {\n const [userViewModel] = useState(() => new UserViewModel());\n const { history, match } = useRouter();\n const [newUser, setNewUser] = useState(false);\n\n let { id } = match.params as any;\n\n React.useEffect(() => {\n if (id === \"0\") {\n setNewUser(true);\n }\n }, []);\n\n React.useEffect(() => {\n if (history.location.pathname === \"/userlist/user/0\") {\n setNewUser(true);\n }\n }, [history.location.pathname]);\n\n return useObserver(() => (\n \n \n \n \n User\n \n \n \n
\n \n userViewModel.resetFailedLoginAttempts()}>\n Reset Failed Login Attempts Count\n \n
{userViewModel.IsLoading ? \"Resetting...\" : \"\"}
\n
{userViewModel.resetLoginAttemptsError}
\n
\n ));\n};\n\ninterface DetailPanelProps {\n newUser: boolean;\n id: string;\n userViewModel: UserViewModel;\n}\nexport const DetailPanel: React.FC = (props) => {\n const { userViewModel } = props;\n const [roleViewModel] = useState(() => new RoleViewModel());\n let user: User = new User(\"\");\n\n //const [editable, seteditable] = useState(false);\n const [loader, setLoader] = useState(false);\n const { history } = useRouter();\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n const getUserRoles = async () => {\n const rolesResponse = await roleViewModel.loadRolesAsync();\n\n if (rolesResponse.wasSuccessful) {\n const response = await userViewModel.getUserRoles();\n\n if (!response.wasSuccessful) {\n if (response.errors) {\n setErrorMessage(response.errors[0].message);\n } else {\n setErrorMessage(\"There was a problem getting this user's roles.\");\n }\n }\n } else {\n if (rolesResponse.errors) {\n setErrorMessage(rolesResponse.errors[0].message);\n } else {\n setErrorMessage(\"There was a problem getting the roles.\");\n }\n }\n };\n\n useEffect(() => {\n window.scrollTo(0, 0);\n if (props.id !== \"0\") {\n let currentUser = userViewModel.getUser(props.id);\n if (currentUser) {\n userViewModel.setUser(currentUser, false);\n getUserRoles();\n } else {\n userViewModel.loadUsersAsync().then(() => {\n let currentUser = userViewModel.getUser(props.id);\n if (currentUser) {\n userViewModel.setUser(currentUser, false);\n getUserRoles();\n }\n });\n }\n } else {\n userViewModel.setUser(user, true);\n }\n }, []);\n\n const doSubmit = (e: any) => {\n e.preventDefault();\n if (!userViewModel.isModelValid()) {\n setErrorMessage(\"Problem\");\n } else {\n setErrorMessage(\"\");\n setLoader(true);\n userViewModel.postUserDetailAsync().then(() => {\n setLoader(false);\n domainStores.ShowSnackBar(\"User saved successfully\");\n history.push(\"/admin\");\n });\n }\n };\n\n return useObserver(() => (\n
\n \n {errorMessage !== \"\" && (\n \n {errorMessage}\n \n )}\n \n \n \n \n \n {!loader ? \"Save\" : \"Saving\"}\n \n \n {\n history.push(\"/admin\");\n }}\n >\n Cancel\n \n \n \n \n \n\n \n \n \n \n \n ({ value: role, key: role.name })) as KeyValuePair[]}\n inputProps={{\n renderValue: (selected: Role[]) => (\n
\n {selected.map((value) => (\n \n ))}\n
\n ),\n }}\n />\n
\n
\n
\n ));\n};\n","import * as Mui from \"@material-ui/core\";\n\nimport { React, StoresInstance, styled, useEffect, useObserver, useRouter, useState } from \"../../../Core/Base\";\n\nimport { EditableInput } from \"../../../Core/Components/EditableInput\";\nimport { Role } from \"../../Models\";\nimport RoleViewModel from \"../../ViewModels/RoleViewModel\";\nimport { CSSGrid } from \"../../../Core/Components/Styles\";\n\nconst domainStores = StoresInstance.domain;\nexport const Container = styled(Mui.Box)``;\nexport const DetailContainer = styled(Mui.Box)`\n position: relative;\n`;\n\nexport const RoleDetails: React.FC = () => {\n const [roleViewModel] = useState(() => new RoleViewModel());\n const { history, match } = useRouter();\n const [newRole, setNewRole] = useState(false);\n\n let { id } = match.params as any;\n\n React.useEffect(() => {\n if (id === \"0\") {\n setNewRole(true);\n }\n }, []);\n\n React.useEffect(() => {\n if (history.location.pathname === \"/roleslist/role/0\") {\n setNewRole(true);\n }\n }, [history.location.pathname]);\n\n return useObserver(() => (\n \n \n \n \n Role\n \n \n \n
\n \n
\n ));\n};\n\ninterface DetailPanelProps {\n newRole: boolean;\n id: string;\n roleViewModel: RoleViewModel;\n}\nexport const DetailPanel: React.FC = (props) => {\n const { roleViewModel } = props;\n let role: Role = new Role(\"\");\n\n //const [editable, seteditable] = useState(false);\n const [loader, setLoader] = useState(false);\n const { history } = useRouter();\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n useEffect(() => {\n window.scrollTo(0, 0);\n if (props.id !== \"0\") {\n let currentRole = roleViewModel.getRole(props.id);\n if (currentRole) {\n roleViewModel.setRole(currentRole, false);\n } else {\n roleViewModel.loadRolesAsync().then(() => {\n let currentRole = roleViewModel.getRole(props.id);\n if (currentRole) {\n roleViewModel.setRole(currentRole, false);\n }\n });\n }\n } else {\n roleViewModel.setRole(role, true);\n }\n }, []);\n\n const doSubmit = (e: any) => {\n e.preventDefault();\n if (!roleViewModel.isModelValid()) {\n setErrorMessage(\"Problem\");\n } else {\n setErrorMessage(\"\");\n setLoader(true);\n roleViewModel.postRoleDetailAsync().then(() => {\n setLoader(false);\n domainStores.ShowSnackBar(\"Role saved successfully\");\n history.push(\"/admin\");\n });\n }\n };\n\n return useObserver(() => (\n
\n \n {errorMessage !== \"\" && (\n \n {errorMessage}\n \n )}\n \n \n \n \n \n {!loader ? \"Save\" : \"Saving\"}\n \n \n {\n history.push(\"/admin\");\n }}\n >\n Cancel\n \n \n \n \n \n\n \n \n \n \n
\n ));\n};\n","import styled from \"styled-components\";\nimport { Theme } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/styles\";\nimport { Tabs, Link, Box, Grid, TextField } from \"@material-ui/core\";\nimport * as MUI from \"@material-ui/core\";\n\nexport const useAdminStyles: any = makeStyles((theme: Theme) => ({\n root: {\n flexGrow: 1,\n },\n marginTop: {\n marginTop: \"40px\",\n },\n adminBtn: {\n borderRadius: \"10px\",\n border: \"none\",\n backgroundColor: \"#000000\",\n width: \"100%\",\n height: \"54px\",\n color: \"#FFFFFF\",\n \"&:hover\": {\n backgroundColor: \"#000000\",\n color: \"#000000\",\n },\n textTransform: \"none\",\n fontWeight: \"bold\",\n marginRight: \"0px\",\n marginLeft: \"0px\",\n maxWidth: \"47%\",\n },\n activeImage: {\n position: \"relative\",\n minWidth: \"1px\",\n display: \"table\",\n width: \"100%\",\n maxWidth: \"500px\",\n },\n removeImage: {\n position: \"absolute\",\n top: \"0\",\n right: \"0\",\n border: \"solid 1px red\",\n backgroundColor: \"red\",\n color: \"#FFFFFF\",\n padding: \"2px 8px\",\n textTransform: \"capitalize\",\n cursor: \"pointer\",\n },\n modalScroll: {\n overflowY: \"auto\",\n },\n subTitle: {\n marginBottom: \"18px\",\n paddingBottom: \"0px !important\",\n },\n form: {\n paddingBottom: \"140px\",\n },\n cancelButtonAdmin: {\n backgroundColor: \"#222120\",\n \"&:hover\": {\n backgroundColor: \"#222120\",\n color: \"#FFFFFF\",\n },\n },\n adminHeading: {\n color: \"#000000\",\n fontSize: \"50px\",\n fontWeight: \"bold\",\n },\n adminHeader: {\n position: \"relative\",\n },\n tabsContainer: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n paddingLeft: \"24px\",\n paddingRight: \"24px\",\n },\n tabsWidth: {\n width: \"100%\",\n maxWidth: \"1040px\",\n },\n liveRadiogroup: {\n marginLeft: \"-10px\",\n },\n icon: {\n backgroundColor: \"#ffffff\",\n \"input:disabled ~ &\": {\n boxShadow: \"none\",\n background: \"rgba(206,217,224,.5)\",\n },\n width: \"30px\",\n height: \"30px\",\n color: \"#A2A2A2\",\n borderRadius: \"50%\",\n strokeWidth: 1,\n border: \"2px solid #A2A2A2\",\n },\n checkedIcon: {\n borderRadius: \"50%\",\n width: \"30px\",\n height: \"30px\",\n backgroundColor: \"#ffffff\",\n border: \"2px solid #A2A2A2\",\n \"&:before\": {\n display: \"block\",\n width: \"22px\",\n height: \"22px\",\n content: '\"\"',\n marginLeft: \"2px\",\n marginTop: \"2px\",\n backgroundColor: \"black\",\n borderRadius: \"50%\",\n },\n },\n}));\n\nexport const TabsCustom: any = styled(Tabs)`\n .MuiButtonBase-root {\n color: #222120;\n opacity: 0.8;\n background: #d0d0d0 0% 0% no-repeat;\n font-weight: bold;\n font-size: 14px;\n width: 147px;\n height: 53px;\n margin: 0;\n border-radius: 0px;\n z-index: 1;\n\n hover {\n background: #d0d0d0 0% 0% no-repeat;\n }\n }\n\n .MuiButtonBase-root.Mui-selected {\n color: #000000;\n opacity: 1;\n background: #ffffff 0% 0% no-repeat;\n /* box-shadow: 0px 0px 2px 3px #00000029; */\n z-index: 2;\n border-bottom: none;\n\n hover {\n background: #ffffff 0% 0% no-repeat;\n }\n }\n`;\n\nexport const CreateLink: any = styled(Link)`\n background-color: #000000;\n border-radius: 10px;\n font-size: 16px;\n text-align: center;\n color: #f3f3f3;\n width: 178px;\n height: 54px;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nexport const CreateBox: any = styled(Box)`\n display: flex;\n justify-content: flex-end;\n margin-top: 0px;\n margin-bottom: 61px;\n margin-left: 10px;\n`;\n\nexport const ControlsContainer: any = styled(Grid)`\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n flex-wrap: wrap;\n`;\n\nexport const WhiteToBlueGradAdmin: any = styled.div`\n display: flex;\n`;\n\nexport const BlueGraditentBoxAdmin: any = styled(Box)`\n background-image: linear-gradient(0deg, rgba(65, 144, 202, 1) 2%, rgba(255, 255, 255, 0.05) 30%);\n`;\n\nexport const ArticleBoxAdmin: any = styled(Box)`\n text-align: left;\n margin: 0 0 180px;\n padding: 0;\n display: inline-block;\n white-space: pre-line;\n font-size: 18px;\n\n p,\n h2,\n h3 {\n margin: 0 0 10px;\n padding: 0;\n }\n\n h2,\n h3 {\n color: #000000;\n }\n`;\n\nexport const ImageBoxAdmin: any = styled(Box)`\n margin: 0;\n padding: 0 0 40px 40px;\n min-width: 1px;\n max-width: 520px;\n float: right;\n overflow: hidden;\n img {\n width: 100%;\n height: auto;\n }\n`;\n\nexport const DateSpaceTypoAdmin: any = styled(Box)`\n font-size: 18px;\n margin: 46px 0 29px;\n`;\n\nexport const ArticleGridAdmin: any = styled(Grid)``;\n\nexport const TempBox: any = styled(Box)`\n display: flex;\n flex-direction: column;\n margin: 15% auto;\n width: 60%;\n padding: 10px;\n background-color: #ffffff;\n border: solid 2px #000000;\n`;\n\nexport const TextFieldAdmin: any = styled(TextField)`\n background-color: #ffffff;\n border: 1px solid #e0daf0;\n height: 54px;\n input {\n margin: 0px !important;\n font-size: 21px !important;\n }\n`;\n\nexport const GridContainerAdmin: any = styled(Grid)`\n padding-top: 24px;\n`;\n\nexport const ButtonGridAdmin: any = styled(Grid)`\n width: 100%;\n`;\n\nexport const ButtonBoxAdmin: any = styled(Box)`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`;\n\nexport const RadioGroup: any = styled(MUI.RadioGroup)`\n flex-direction: row;\n\n span {\n color: black;\n }\n`;\n","import React from \"react\";\nimport { GridContainerAdmin } from \"Custom/StylesAppSpecific/AdminStyling\";\nimport Typography from \"@material-ui/core/Typography\";\n\nexport const AdminHome: React.FC = () => {\n return (\n <>\n \n \n Dashboard\n \n \n \n );\n};\n","import * as Mui from \"@material-ui/core\";\n\nimport React, { useEffect } from \"react\";\n\nimport { ApiResult } from \"../../../Core/Models\";\nimport MaterialTable from \"material-table\";\nimport { RoleDTO } from \"../../Models\";\nimport RoleViewModel from \"../../ViewModels/RoleViewModel\";\n// App\nimport styled from \"styled-components\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { useRouter } from \"../../../Core/Utils\";\n\nconst roleViewModel = new RoleViewModel();\n\nexport const Container = styled(Mui.Box)`\n .MuiTableCell-root {\n font-size: 0.8rem;\n }\n .MuiTableSortLabel-root {\n :hover {\n color: lightgray;\n }\n }\n .MuiTableRow-root {\n cursor: pointer;\n :hover {\n background-color: lightgray;\n }\n }\n`;\n\nexport const RoleListContainer: React.FC = () => {\n const { history } = useRouter();\n useEffect(() => {\n const response = roleViewModel.loadRolesAsync().then((apiResult: ApiResult) => {\n if (apiResult.wasSuccessful) {\n }\n });\n }, []);\n\n const handleRowClick = (e: any, rowData: any) => {\n history.push(`/roleslist/role/${rowData.id}`);\n };\n\n const handleNewClick = () => {\n history.push(`/roleslist/role/0`);\n };\n\n return useObserver(() => (\n \n \n \n Roles\n \n \n \n handleNewClick()}>\n New Role\n \n \n \n \n {\n \n }\n \n ));\n};\n","import React from \"react\";\nimport { RoleListContainer } from \"./RoleListContainer\";\n\nexport const RolesList: React.FC = () => {\n return (\n <>\n
\n \n
\n \n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport MaterialTable from \"material-table\";\nimport * as Mui from \"@material-ui/core\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { useRouter } from \"../../../Core/Utils\";\n\n// App\nimport UserViewModel from \"Custom/ViewModels/UserViewModel\";\nimport { UserDTO } from \"Custom/Models/User\";\nimport styled from \"styled-components\";\nimport { ApiResult } from \"../../../Core/Models\";\nimport { LoginViewModel } from \"../../ViewModels/LoginViewModel\";\n\nexport const Container = styled(Mui.Box)`\n .MuiTableCell-root {\n font-size: 0.8rem;\n }\n .MuiTableSortLabel-root {\n :hover {\n color: lightgray;\n }\n }\n .MuiTableRow-root {\n cursor: pointer;\n :hover {\n background-color: lightgray;\n }\n }\n`;\n\nexport const UserListContainer: React.FC = () => {\n const [viewModel] = useState(() => new UserViewModel());\n\n const { history } = useRouter();\n useEffect(() => {\n const fetchData = async () => {\n const apiResult = await viewModel.loadUsersAsync();\n if (apiResult.wasSuccessful) {\n }\n };\n let _ = fetchData();\n }, []);\n\n const handleRowClick = (e: any, rowData: any) => {\n history.push(`/userslist/user/${rowData.id}`);\n };\n\n const handleNewClick = () => {\n history.push(`/userslist/user/0`);\n };\n\n return useObserver(() => (\n \n \n \n Users\n \n \n \n handleNewClick()}>\n New User\n \n \n \n \n {\n \n }\n \n ));\n};\n","import { UserListContainer } from \"./UserListContainer\";\nimport React from \"react\";\n\nexport const UsersList: React.FC = () => {\n return (\n <>\n
\n \n
\n \n );\n};\n","import { Box, Tab } from \"@material-ui/core\";\nimport { TabsCustom, useAdminStyles } from \"../../StylesAppSpecific/AdminStyling\";\n\nimport { AdminHome } from \"./AdminHome\";\nimport { AppHeader } from \"../../../Core/Components/Styles/BaseStyles\";\nimport React from \"react\";\nimport { RolesList } from \"./RolesList\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { UsersList } from \"./UsersList\";\nimport { useObserver } from \"mobx-react-lite\";\n\ninterface TabPanelProps {\n children?: React.ReactNode;\n index: any;\n value: any;\n}\n\nfunction TabPanel(props: TabPanelProps) {\n const { children, value, index, ...other } = props;\n\n return (\n \n );\n}\n\nfunction a11yProps(index: any) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`,\n };\n}\n\nexport const Admin: React.FC = () => {\n const classes = useAdminStyles();\n const [value, setValue] = React.useState(0);\n\n function handleChange(event: React.ChangeEvent<{}>, newValue: number) {\n setValue(newValue);\n }\n\n return useObserver(() => (\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","import React, { useContext } from \"react\";\nimport { Stores, StoresContext } from \"../../Stores\";\nimport { UserDetails } from \"./UserDetails\";\nimport { RoleDetails } from \"./RoleDetails\";\nimport { TestPage } from \"../../../Core/Views/TestPage\";\nimport { PrivateRoute } from \"../../../Core/Utils/React\";\nimport { User } from \"../../Models\";\nimport { Admin } from \"./Admin\";\nimport { Route } from \"react-router-dom\";\n\nexport const AdminRoutes: React.FC = () => {\n const store = useContext(StoresContext);\n return (\n <>\n {\n return store.domain.AccountStore.IsLoggedIn && store.domain.AccountStore.isInRole(\"admin\");\n }}\n />\n {\n return store.domain.AccountStore.IsLoggedIn && store.domain.AccountStore.isInRole(\"admin\");\n }}\n />\n {\n return store.domain.AccountStore.IsLoggedIn && store.domain.AccountStore.isInRole(\"admin\");\n }}\n />\n {\n return store.domain.AccountStore.IsLoggedIn && store.domain.AccountStore.isInRole(\"admin\");\n }}\n />\n \n );\n};\n","import * as MobX from \"mobx\";\nimport { ModelBase } from \"Core/Models/ModelBase\";\nimport { IsEmail, IsNotEmpty } from \"class-validator\";\nimport { IObservable } from \"mobx\";\n\nexport class Summary extends ModelBase {\n @MobX.observable\n public userId: string = \"\";\n @MobX.observable\n public tradingName: string = \"\";\n @MobX.observable\n public displayName: string = \"\";\n @MobX.observable\n public bitly: string = \"\";\n @MobX.observable\n public isHBPro: boolean = false;\n\n fromDto(model: Summary): void {}\n toDto(model: Summary): void {}\n}\n\nexport interface LoginModelDTO {\n emailAddress: string;\n password: string;\n rememberMe: boolean;\n}\n","import { AccountStatus, ApiResult } from \"Core/Models\";\nimport { ViewModelBase } from \"Core/ViewModels/ViewModelBase\";\nimport validator from \"validator\";\nimport { FieldType } from \"../../Core/Utils/Utils\";\nimport { CovidRegModel } from \"../Models/CovidRegModel\";\nimport { Summary } from \"../Models/Summary\";\nimport { action, computed, observable, runInAction } from \"mobx\";\nimport { StoresInstance } from \"../Stores\";\n\n//Pass in as the generic type because we are showing the use of nested classes\nexport class CovidRegViewModel extends ViewModelBase {\n public Summary = new Summary();\n\n @observable public showLoading: boolean = true;\n @observable public showSignInPage: boolean = false;\n\n constructor() {\n super(new CovidRegModel());\n console.log(\"Register View Model Created\");\n this.setDecorators(CovidRegModel);\n }\n\n public getSummary = async (displayName: string) => {\n let response = await this.Get(\"/api/account/getsummary/\" + displayName);\n runInAction(() => {\n if (response.payload) {\n this.Summary.userId = response.payload.userId;\n this.Summary.tradingName = response.payload.tradingName;\n this.Summary.displayName = response.payload.displayName;\n this.Summary.bitly = response.payload.bitly;\n this.Summary.isHBPro = response.payload.isHBPro;\n this.showSignInPage = StoresInstance.domain.isHbProSite;\n StoresInstance.domain.CurrentSummary = this.Summary;\n this.showLoading = false;\n }\n });\n };\n\n @action\n public SetShowSignInPage(state: boolean) {\n this.showSignInPage = state;\n }\n\n @action\n public SignIn() {\n this.showSignInPage = false;\n this.setValue(\"signIn\", true);\n this.setValue(\"signOut\", false);\n }\n\n @action\n public SignOut() {\n this.showSignInPage = false;\n this.setValue(\"signIn\", false);\n this.setValue(\"signOut\", true);\n }\n\n @computed\n public get getLogoUrl() {\n return `https://shoothillweb2general.blob.core.windows.net/covidtracer/logos/${this.Summary.displayName}_thumb.jpg`;\n }\n\n public sendForm = async (): Promise> => {\n this.setValue(\"userId\", this.Summary.userId);\n let response = await this.Post(\"/api/covid/upsert\", this.getModel);\n return response;\n };\n\n public isFieldValid(fieldName: keyof FieldType, value: any): boolean {\n let { isValid, errorMessage } = this.validateDecorators(fieldName);\n\n if (StoresInstance.domain.isHbProSite && fieldName == \"company\") {\n if (value === \"\") {\n errorMessage = \"This field is required.\";\n isValid = false;\n }\n }\n\n this.setError(fieldName, errorMessage);\n this.setValid(fieldName, isValid);\n\n return isValid;\n }\n\n public afterUpdate: undefined;\n public beforeUpdate: undefined;\n}\n","import { StoresInstance } from \"../Stores\";\nimport { Box, Typography } from \"@material-ui/core\";\nimport React, { useState } from \"react\";\nimport { useObserver } from \"mobx-react-lite\";\nimport HBPLogo from \"../Content/Images/hbprologo2.png\";\nimport SCTLogo from \"../Content/Images/sctlogo.png\";\nimport ShoothillLogo from \"../Content/Images/shoothilllogo.png\";\n\ninterface Props {\n displayName?: string;\n}\n\nexport const FooterSwitcher: React.FC = (props: Props) => {\n const [now] = useState(new Date());\n\n const getLogo = () => {\n if (StoresInstance.domain.isHbProSite) {\n return {\"Company;\n } else {\n return {\"Company;\n }\n };\n\n const getText = () => {\n if (StoresInstance.domain.isHbProSite) {\n return © {now.getFullYear()} Housebuilder Pro Ltd.;\n } else {\n return © {now.getFullYear()} Shoothill Ltd.;\n }\n };\n\n return useObserver(() => (\n \n \n {getLogo()}\n \n {getText()}\n \n \n \n ));\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React, { useState, useEffect } from \"react\";\nimport { StoresInstance } from \"Custom/Stores\";\nimport { useRouter } from \"../../Core/Utils/Hooks\";\nimport { CovidRegViewModel } from \"../ViewModels/CovidRegViewModel\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { Box, Typography } from \"@material-ui/core\";\nimport QRCode from \"react-qr-code\";\nimport styled from \"styled-components\";\nimport ScanMe from \"Custom/Content/Images/scanme.jpg\";\nimport logoShoothill from \"../Content/Images/Shoothill-logo.svg\";\nimport { FooterSwitcher } from \"../Components/FooterSwitcher\";\nimport { Show } from \"../../Core/Base\";\n\nconst Main = styled(Box)`\n width: 100vw;\n height: 100vh;\n background-color: white;\n\n @media print {\n .hide {\n display: none;\n }\n }\n`;\n\nconst Paper = styled(Box)`\n width: 700px;\n height: 842px;\n min-height: 842px;\n\n background-color: white;\n`;\n\nexport const QR: React.FC = () => {\n const [viewModel] = useState(() => new CovidRegViewModel());\n const { history, match } = useRouter();\n let { displayName } = match.params as any;\n\n useEffect(() => {\n let _ = viewModel.getSummary(displayName);\n }, []);\n\n return useObserver(() => (\n
\n viewModel.history.push(\"/dashboard\")}>\n {\" \"}\n Back\n \n \n \n \n \n {viewModel.Summary.tradingName}\n \n \n \n \n To follow Government guidelines, we require all visitors to register when they arrive or leave these premises.\n \n
\n
\n \n Please scan the below QR code with your smartphone camera on arriving and leaving at this address\n \n
\n \n \n \n To follow Government guidelines due to the Covid-19 pandemic, we require all visitors to register their details by scanning the QR code below.\n \n \n \n
\n
\n \n \n \n \n \n \n Or enter the following web address and fill in the form\n \n {viewModel.Summary.bitly}\n \n \n \n \n {/*\n \"Shoothill\n © {new Date().getFullYear()} Shoothill Ltd.\n */}\n
\n
\n ));\n};\n","import React, { useEffect, useState } from \"react\";\nimport {\n Avatar,\n Box,\n Button,\n Checkbox,\n Dialog,\n FormControl,\n FormControlLabel,\n Grid,\n InputLabel,\n Link,\n MenuItem,\n Modal,\n Paper,\n Select,\n Slide,\n TextField,\n Theme,\n Typography,\n} from \"@material-ui/core\";\nimport { Centered, Show, TextFieldMemo } from \"Core/Components\";\nimport styled from \"styled-components\";\nimport { EditableInput } from \"../../Core/Components/EditableInput\";\nimport { RegisterUserViewModel } from \"../ViewModels/RegisterUserViewModel\";\nimport { nameofFactory } from \"../../Core/Utils/Utils\";\nimport { RegisterUserModel } from \"../Models/RegisterUserModel\";\nimport Radio from \"@material-ui/core/Radio\";\nimport { KeyValuePair } from \"../../Core/Models/KeyValuePair\";\nimport { LoginViewModel } from \"../ViewModels/LoginViewModel\";\nimport { CovidRegViewModel } from \"../ViewModels/CovidRegViewModel\";\nimport { CovidRegModel } from \"../Models/CovidRegModel\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { CSSGrid } from \"../../Core/Components/Styles\";\nimport { useRouter } from \"../../Core/Utils/Hooks\";\nimport { runInAction } from \"mobx\";\nimport { StoresInstance } from \"../Stores\";\nimport { Covidcontainer } from \"../StylesAppSpecific/HomeStyling\";\nimport { LogoSwitcher } from \"../Components/LogoSwitcher\";\nimport { AutoGrid } from \"../../Core/Components/AutoGrid\";\nimport { FooterSwitcher } from \"../Components/FooterSwitcher\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nconst Main = styled(Box)`\n .covidcontainer {\n margin-top: 80px;\n overflow: hidden;\n margin-left: auto;\n margin-right: auto;\n background-color: rgb(255, 255, 255, 0.8);\n width: 960px;\n border-radius: 20px;\n padding: 60px 120px 120px 120px;\n }\n\n .covidcontainer-mobile {\n overflow: hidden;\n margin-left: auto;\n margin-right: auto;\n background-color: rgb(255, 255, 255, 0.8);\n margin-top: 0;\n //width: 960px;\n border-radius: 0;\n padding: 0 5px 5px 5px;\n }\n`;\n\nconst Transition = React.forwardRef(function Transition(props, ref) {\n return ;\n});\n\nfunction SignInOutButton(props: { onClick: () => void; text: string }) {\n let padding = \"10px 30px 10px 30px\";\n if (StoresInstance.coreStore.isMobile) {\n padding = \"2px\";\n }\n\n return (\n \n );\n}\n\nexport const CovidRegPage: React.FunctionComponent = () => {\n const [viewModel] = useState(() => new CovidRegViewModel());\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [open, setOpen] = useState(false);\n\n const bind = viewModel.getContext();\n const { history, match } = useRouter();\n let { displayName } = match.params as any;\n\n useEffect(() => {\n if (displayName === undefined) {\n viewModel.history.push(\"/register\");\n } else {\n let _ = viewModel.getSummary(displayName);\n let contact = JSON.parse(localStorage.getItem(\"contact\") as string) as CovidRegModel;\n if (contact) {\n viewModel.model.setValue(\"firstName\", contact.firstName);\n viewModel.model.setValue(\"lastName\", contact.lastName);\n viewModel.model.setValue(\"phoneNumber\", contact.phoneNumber);\n viewModel.model.setValue(\"company\", contact.company);\n }\n }\n }, []);\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n //setOpen(false);\n //viewModel.SetShowSignInPage(true);\n };\n\n const doSubmit = async (e: any) => {\n e.preventDefault();\n //isValid will check all fields to make sure they are in a valid state.\n if (!viewModel.isModelValid()) {\n setErrorMessage(\"Please fill out all of the required fields\");\n } else {\n //setErrorMessage(\"No problem\");\n localStorage.setItem(\n \"contact\",\n JSON.stringify({\n firstName: viewModel.model.firstName,\n lastName: viewModel.model.lastName,\n phoneNumber: viewModel.model.phoneNumber,\n company: viewModel.model.company,\n }),\n );\n\n let response = await viewModel.sendForm();\n if (response.wasSuccessful) {\n setOpen(true);\n } else {\n setErrorMessage(response.errors[0].message);\n }\n }\n };\n\n const getRegisterButton = () => {\n let btnText = \"Register\";\n if (viewModel.Summary.isHBPro) {\n if (viewModel.getValue(\"signOut\")) {\n btnText = \"Sign Out\";\n } else {\n btnText = \"Sign In\";\n }\n }\n\n return (\n \n );\n };\n\n const signInPage = () => {\n return (\n \n \n To follow Government guidelines on the reopening of the hospitality industry, we require all visitors to register their details below to help the NHS Track &\n Trace service.\n \n
\n
\n Please choose an option below to let our system know whether you are signing in or signing out:\n \n \n viewModel.SignIn()} text={\"IN\"} />\n viewModel.SignOut()} text={\"OUT\"} />\n \n \n \n \n What is ‘Housebuilder Pro Site Tracker’ ?\n \n
\n \n The Housebuilder Pro Covid-19 visitor\\contractor sign in system is a free-to-use registration system designed to help businesses follow Government\n guidelines in logging visitors to sites and offices around the UK.\n \n
\n \n Sign up takes less than 5 minutes and once you register your business, you will receive a unique QR code that you can print and display at your business\n premises.\n \n
\n \n Your visitors or contractors can scan the code using their smart phones, which then takes them to a personalised registration page so you can keep an\n accurate track of your visitors during these challenging times.\n \n
\n \n Once they have scanned the code, they will be presented with a \"Sign in\" or \"Sign out\" option so your visitor log is easily kept up-to-date.\n \n
\n
\n );\n };\n\n const mainPage = () => {\n return (\n <>\n \n \n Add your contact details here\n \n \n
\n {errorMessage !== \"\" && (\n \n {errorMessage}\n \n )}\n \n viewModel={viewModel} label=\"First name (required\" fieldName=\"firstName\" />\n viewModel={viewModel} label=\"Last name (required)\" fieldName=\"lastName\" />\n \n viewModel={viewModel} label=\"Company (required)\" fieldName=\"company\" />\n \n viewModel={viewModel} label=\"Contact phone number (required)\" fieldName=\"phoneNumber\" />\n \n \n \n viewModel={viewModel}\n type={\"checkbox\"}\n label=\"I consent to share my information with the Government track and trace system if required\"\n fieldName=\"agreedConsent\"\n />\n \n
\n \n {getRegisterButton()}\n \n
\n\n {/**/}\n \n \n \n Thank you!\n You can now close this page\n {/**/}\n \n \n {/**/}\n \n \n );\n };\n\n return useObserver(() => (\n \n {!viewModel.showLoading && (\n \n \n \n \n \n {!viewModel.showSignInPage && (\n {\n viewModel.SetShowSignInPage(true);\n }}\n >\n \n back to start\n \n \n )}\n \n \n \n \n {viewModel.Summary.tradingName}\n \n \n \n {!StoresInstance.domain.isHbProSite && (\n <>\n \n To follow Government guidelines on the reopening of the hospitality industry, we require all visitors to register their details below to help the\n NHS Track & Trace service.\n \n \n If someone who has visited our business tests positive for Covid-19, we are obliged to share details of all other patrons they may have come into\n contact with.\n \n
\n
\n \n )}\n {viewModel.showSignInPage ? signInPage() : mainPage()}\n \n
\n )}\n
\n ));\n};\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Avatar, Box, Button, Checkbox, FormControl, FormControlLabel, Grid, InputLabel, Link, MenuItem, Paper, Select, TextField, Theme, Typography } from \"@material-ui/core\";\nimport styled from \"styled-components\";\nimport { EditableInput } from \"../../Core/Components/EditableInput\";\nimport { RegisterUserViewModel } from \"../ViewModels/RegisterUserViewModel\";\nimport { RegisterUserModel } from \"../Models/RegisterUserModel\";\nimport { Cell, CSSGrid } from \"../../Core/Components/Styles\";\nimport SCTLogo from \"Custom/Content/Images/sctlogo.png\";\nimport { UploadLogo } from \"./UploadLogo\";\nimport { StoresInstance } from \"../Stores\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { runInAction } from \"mobx\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport moment from \"moment\";\nimport { Covidcontainer } from \"../StylesAppSpecific/HomeStyling\";\n\nconst Infotext = styled(Box)`\n color: gray;\n font-size: 12px;\n`;\n\nexport const Thumb = styled.img`\n max-height: 100px;\n`;\n\nexport const Registrations: React.FC = () => {\n const [viewModel] = useState(() => new RegisterUserViewModel());\n let first = useRef(true);\n\n useEffect(() => {\n if (StoresInstance.domain.AccountStore.IsLoggedIn) {\n let _ = viewModel.getRegistrations();\n }\n }, []);\n\n return useObserver(() => (\n \n \n \n \n {\"Company\n {StoresInstance.domain.AccountStore.IsLoggedIn && (\n <>\n \n \n \n \n )}\n \n {StoresInstance.domain.AccountStore.IsLoggedIn && (\n \n Logout\n \n // \n // viewModel.history.push(\"/logout\")}>\n // Logout\n // \n // \n )}\n \n \n \n {StoresInstance.domain.AccountStore.IsLoggedIn ? Registrations from the last 21 days : Sign up your business}\n \n \n \n {!viewModel.isMobile && (\n \n \n Date of Registration\n \n \n First Name\n \n \n Last Name\n \n \n Phone Number\n \n \n )}\n \n {viewModel.Registrations.map((item, index) => {\n return (\n <>\n {moment(item.dateRegistered).format(\"HH:mm DD MMM YYYY\")}\n {item.firstName}\n {item.lastName}\n {item.phoneNumber}\n \n );\n })}\n \n \n \n \n ));\n};\n","import React, { useContext } from \"react\";\nimport { Stores, StoresContext } from \"./Custom/Stores\";\n\nimport { Admin } from \"./Custom/Views/Admin/Admin\";\nimport { ForgotPasswordPage } from \"./Custom/Views/ForgotPasswordPage\";\nimport { Samples } from \"./Custom/Views/Samples\";\nimport { LogViewer } from \"./Core/Views/LogViewer\";\nimport { LoginPage } from \"./Custom/Views/LoginPage\";\nimport { PrivateRoute } from \"Core/Utils\";\nimport { RegisterPage } from \"./Custom/Views/Register/RegisterPage\";\nimport { ResetPasswordPage } from \"./Custom/Views/ResetPasswordPage\";\nimport { RoleDetails } from \"./Custom/Views/Admin/RoleDetails\";\nimport { Route } from \"react-router\";\nimport { SessionExpired } from \"./Custom/Views/SessionExpired\";\nimport { TestPage } from \"./Core/Views/TestPage\";\nimport { User } from \"./Custom/Views/User\";\nimport { UserDetails } from \"./Custom/Views/Admin/UserDetails\";\nimport { Logout } from \"Custom/Views/Logout\";\nimport { Home } from \"./Custom/Views/Home\";\nimport { Error } from \"./Core/Views/Error\";\nimport { Error2 } from \"./Core/Views/Error2\";\nimport { NotFound } from \"./Core/Views/NotFound\";\nimport { AdminRoutes } from \"./Custom/Views/Admin/AdminRoutes\";\nimport { QR } from \"./Custom/Views/QR\";\nimport { CovidRegPage } from \"./Custom/Views/CovidRegPage\";\nimport { Registrations } from \"./Custom/Views/Registrations\";\n\nexport const AppRoutes: React.FC = () => {\n const store = useContext(StoresContext);\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import React from \"react\";\nimport MetaTags from \"react-meta-tags\";\n\nexport class MetaCovid extends React.Component {\n render() {\n return (\n
\n \n {/*\n Page 1\n \n \n \n*/}\n\n Shoothill Covid 19 Trace System\n \n \n \n \n \n
\n );\n }\n}\n","import React from \"react\";\nimport MetaTags from \"react-meta-tags\";\n\nexport class MetaHBProCovid extends React.Component {\n render() {\n return (\n
\n \n Housebuilder Pro Site Tracker\n \n \n \n \n \n
\n );\n }\n}\n","import React from \"react\";\nimport { Box, Container, Typography } from \"@material-ui/core\";\nimport { CSSGrid, Cell } from \"../../Core/Components/Styles\";\nimport backGround from \"Custom/Content/Images/bg.png\";\nimport hbProBackGround from \"Custom/Content/Images/brickscropped.jpg\";\nimport styled from \"styled-components\";\nimport { useObserver } from \"mobx-react-lite\";\nimport { StoresInstance } from \"../Stores\";\nimport { useMediaQuery } from \"../../Core/Utils/Hooks/UseMediaQuery\";\nimport { useLocation } from \"react-router-dom\";\nimport { MetaCovid } from \"../Components/MetaCovid\";\nimport { MetaHBProCovid } from \"../Components/MetaHBProCovid\";\n\nexport const MainLayout = styled(Box)``;\n\nconst getBackground = () => {\n /*if (StoresInstance.domain.CurrentSummary && StoresInstance.domain.CurrentSummary.isHBPro) {\n return `https://shoothillweb2general.blob.core.windows.net/covidtracer/logos/${StoresInstance.domain.CurrentSummary.displayName}_thumb.jpg`;\n } else */\n if (StoresInstance.domain.isHbProSite) {\n return hbProBackGround;\n } else {\n return backGround;\n }\n};\n\nconst Background = styled(Box)`\n /*top: 0;\n position: absolute;\n width: 100vw;\n height: 100vh;*/\n z-index: -1;\n padding-bottom: 100px;\n background: url(${getBackground()}) repeat center center;\n //background-size: cover;\n background-attachment: fixed;\n height:1280px;\n //overflow: hidden;\n \n /*> div {\n //transform: scale(1.2);\n //position: relative;\n //top: -85px;\n width: 100%;\n height: 100%;\n z-index: -1;\n background: url(${getBackground()}) repeat center center;\n //background-size: cover;\n background-attachment: fixed;\n /!* ${(props) => props.theme.breakpoints.up(\"sm\")} {\n height: 1400px;\n } *!/\n\n @media (max-width: 767px) {\n top: 0;\n left: 0;\n transform: scale(1.3);\n background-position-x: -213px;\n background-position-y: -65px;\n }\n }*/\n`;\n\n//EN: use empty generic type to get default react props\nexport const Layout: React.FC<{}> = (props) => {\n const isMobile = !!useMediaQuery(\"(max-width: 767px)\");\n\n const showMobileImage = () => {\n let loc = useLocation();\n if (isMobile && loc.pathname.indexOf(\"/qr/\") < 0) {\n return ;\n }\n };\n\n const isHBPROSite = () => {\n if (StoresInstance.domain.isHbProSite || location.href.indexOf(\"sitetracker\") >= 0) {\n return ;\n }\n\n return ;\n };\n\n return useObserver(() => (\n \n \n {isHBPROSite()}\n {showMobileImage()}\n\n \n {/**/}\n {/*\t
*/}\n {/**/}\n {props.children}\n \n {!isMobile &&
}\n \n \n ));\n};\n","import { hot, setConfig } from \"react-hot-loader\";\n\nimport { AppRoutes } from \"./AppRoutes\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { Layout } from \"./Custom/Views/Layout\";\nimport { ThemeProvider as MuiThemeProvider } from \"@material-ui/styles\";\nimport React from \"react\";\nimport { Router } from \"react-router-dom\";\nimport { StylesProvider } from \"@material-ui/styles\";\nimport { ThemeProvider } from \"styled-components\";\nimport { defaultTheme } from \"Custom/StylesAppSpecific/AppStyling\";\nimport { GlobalHistory } from \"Core/CoreIndex\";\n\nsetConfig({\n showReactDomPatchNotification: false,\n});\n\nconst App: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default hot(module)(App);\n","//EN Do not remove default theme from here\nimport \"Custom/StylesAppSpecific/AppStyling\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"index.scss\";\nimport * as serviceWorker from \"serviceWorker\";\nimport { CoreIndex } from \"./Core/CoreIndex\";\nimport App from \"./App\";\n\nconst Init: React.FC = () => {\n return (\n \n \n \n );\n};\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","export * from \"./AppSettings\";\nexport * from \"./ChangeLog\";\nexport * from \"./GenericIncludeDeleted\";\nexport * from \"./ForgotPasswordModel\";\nexport * from \"./InitialState\";\nexport * from \"./LoginModel\";\nexport * from \"./ResetPassword\";\nexport * from \"./SetPassword\";\nexport * from \"./SortDirection\";\nexport * from \"./Sorting\";\nexport * from \"./User\";\nexport * from \"./Role\";\n","import { BaseStore } from \"./BaseStore\";\nimport { observable, autorun, action, computed, observe, runInAction, when } from \"mobx\";\nimport { Stores, StoresInstance } from \"../../Custom/Stores/Stores\";\nimport { LockForm } from \"../Models\";\nimport { Disposer } from \"../Models\";\nimport { DomainStores } from \"../../Custom/Stores/DomainStores\";\nimport { InitialState } from \"../../Custom/Models\";\nimport axios, { AxiosResponse } from \"axios\";\nimport { ApiResult } from \"Core/Models/ApiResult\";\nimport { HubConnection, HubConnectionBuilder, HubConnectionState, RetryContext } from \"@microsoft/signalr\";\n\nexport class FormLockConcurrencyHubStore extends BaseStore {\n private signalRConcurrencyHubConnection: HubConnection;\n private domainStores?: DomainStores;\n\n @observable private formLocks = observable<{ [ref: string]: { locked: boolean; lockedBy: string; id: string } }>({}); // Keep track of who by and if all form types are locked\n @observable private formRef = \"\"; // The form ref the client is currently tracking\n @observable private disposers: Disposer[] = []; // Disposers to unregister from notifications\n @observable private connectionQueue: (() => void)[] = []; // Queue of callbacks to invoke when the connection is started\n @observable private registeredForms: number[] = []; // Keep track of which forms the client has registered to recieve notification for\n @observable private cid: string = \"\"; // The current connection id\n @observable private myLockedForms: number[] = []; // The forms the client intents to be locked (to keep track of which forms should be re-claimed if the server goes down)\n @observable private signalRAccessToken: string = \"\";\n @observable private connectedServer: string = \"\";\n @observable private enabled: boolean = false;\n\n constructor() {\n super();\n\n this.signalRConcurrencyHubConnection = new HubConnectionBuilder()\n .withUrl(`/hubs/concurrency/formlock`, { accessTokenFactory: () => this.signalRAccessToken }) // Access token to allow authentication, also allows server to get the username of the client\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: (context: RetryContext) => {\n return 1000;\n },\n }) // Don't stop attempting to reconnect\n .build();\n }\n\n public init(stores: Stores, initialState: InitialState) {\n this.domainStores = stores.domain;\n this.signalRAccessToken = initialState.accountStatus.signalRAccessToken;\n this.enabled = initialState.appSettings.useFormLockConcurrency === \"true\";\n\n autorun(() => {\n if (this.domainStores!.AccountStore.IsLoggedIn && this.signalRAccessToken) {\n this.connect();\n } else {\n if (this.enabled) {\n axios.post(`/api/account/GetSignalRToken`).then((apiResult: AxiosResponse>) => {\n if (apiResult.status === 200 && apiResult.data && apiResult.data.wasSuccessful) {\n this.setSignalRAccessToken(apiResult.data.payload);\n }\n });\n } else {\n this.disconnect();\n }\n }\n });\n }\n\n @action\n public enqueueToConnectionQueue(cb: () => void) {\n this.connectionQueue.push(cb);\n }\n\n @action\n private setInitialFormLocks() {\n this.signalRConcurrencyHubConnection.invoke(`GetAreFormsLockedAsync`, this.registeredForms, this.formRef).then((initalFormLocks: string[]) => {\n initalFormLocks.forEach((lockedBy: string, index: number) => {\n runInAction(() => {\n this.formLocks[this.registeredForms[index]] = { locked: lockedBy !== \"\", lockedBy: lockedBy, id: \"\" };\n });\n });\n });\n }\n\n @action\n public setSignalRAccessToken(token: string) {\n this.signalRAccessToken = token;\n }\n\n // Track a new set of forms\n @action\n public setFormsInfo(ref: string, forms: number[]) {\n // Create callback\n const setForms = () => {\n // Dispose to unregister from any previous notifications\n this.disposers.forEach((disposer) => {\n disposer.dispose();\n });\n // Reset disposers\n this.disposers = [];\n // Reset which forms are locked\n this.formLocks = this.getResetFormLocks;\n // Set the reference for the new forms\n this.formRef = ref;\n // Set new forms as the registered forms\n this.registeredForms = forms;\n // Register for notifications for new forms\n this.registerForms();\n // Get which forms are already locked\n this.setInitialFormLocks();\n };\n\n // If the connection to the server is ready, run the above callback\n if (this.getIsHubConnected) {\n setForms();\n } else {\n // Otherwise, add it to a queue to invoke when it becomes ready\n this.connectionQueue.push(setForms);\n }\n }\n\n @action\n private registerForms() {\n // Register for notifications for all form types in list\n this.registeredForms.forEach((form) => {\n this.disposers.push(this.registerFormLocks(form));\n });\n }\n\n @computed\n public get getIsHubConnected() {\n return this.signalRConcurrencyHubConnection.state === HubConnectionState.Connected;\n }\n\n @computed\n private get getResetFormLocks() {\n // The observable dictionary for tracking locked form types\n return observable<{ [ref: string]: { locked: boolean; lockedBy: string; id: string } }>({});\n }\n\n @action\n private onLock = (lockForm: LockForm) => {\n // Handle message from server to lock a form type\n this.formLocks[lockForm.formType] = { locked: true, lockedBy: lockForm.lockedByName, id: lockForm.id };\n };\n\n @action\n private onUnlock = (lockForm: LockForm) => {\n // Handle message from server to unlock a form type\n this.formLocks[lockForm.formType] = { ...this.formLocks[lockForm.formType], locked: false };\n };\n\n @computed\n public get getFormRef() {\n return this.formRef;\n }\n\n // Try to lock the form if not already, returning a promise which will resolve to a boolean indicating if this client now has the form type locked\n @action\n public async lockForm(formType: number) {\n let success = await this.signalRConcurrencyHubConnection.invoke(`TryLockFormForEditing`, formType, this.formRef);\n if (success) {\n // Wait for notification from the server to be added to the formLocks dictionary for verification\n await when(() => this.formLocks[formType] && this.formLocks[formType].locked && this.formLocks[formType].lockedBy === this.domainStores!.AccountStore.UserName);\n // Add it to the list of forms locked by this client\n this.myLockedForms.push(formType);\n return true;\n }\n return false;\n }\n\n @action\n public async forceUnlockForm(formType: number, formRef: string) {\n await this.signalRConcurrencyHubConnection.invoke(`ForceUnlockForm`, formType, formRef);\n }\n\n @action\n public unlockAllForms() {\n this.myLockedForms.forEach((form) => {\n this.unlockForm(form);\n });\n }\n\n // Unlock a form type\n @action\n public unlockForm(formType: number) {\n this.signalRConcurrencyHubConnection.send(`UnlockForm`, this.formLocks[formType].id);\n // Remove from list of forms locked by this client\n this.myLockedForms.splice(this.myLockedForms.indexOf(formType), 1);\n }\n\n public getLocker(formType: number) {\n let form = this.formLocks[formType];\n return form ? form.lockedBy : \"\";\n }\n\n public getIsFormLocked(formType: number) {\n let form = this.formLocks[formType];\n // Don't include if the form is locked by this client\n return form ? form.locked && form.lockedBy !== this.domainStores!.AccountStore.DisplayName : false;\n }\n\n // Register for notifications for a form type\n private registerFormLocks = (formType: number): Disposer => {\n this.signalRConcurrencyHubConnection.send(`JoinFormLockGroup`, formType, this.formRef).catch((error) => {\n console.error(`Failed to \"JoinFormLockGroup\": ${error}`);\n });\n\n // Return a disposer to unregister from the notifications\n return {\n dispose: () => {\n if (this.signalRConcurrencyHubConnection !== null && this.signalRConcurrencyHubConnection !== undefined) {\n this.signalRConcurrencyHubConnection.send(`LeaveFormLockGroup`, formType, this.formRef).catch((error) => {\n console.error(`Failed to \"LeaveFormLockGroup\": ${error}`);\n });\n }\n },\n };\n };\n\n // Connect to the server\n @action\n private connect = () => {\n // Make sure client isn't already connected\n if (this.signalRConcurrencyHubConnection.state === HubConnectionState.Disconnected) {\n this.signalRConcurrencyHubConnection.start().then(() => {\n // Connection established\n // Track the connection id of this connection\n this.cid = this.signalRConcurrencyHubConnection.connectionId!;\n\n this.signalRConcurrencyHubConnection.invoke(`GetServerSessionId`).then((serverSessionId: string) => {\n runInAction(() => {\n this.connectedServer = serverSessionId;\n });\n });\n // Add handler for if the server goes down and needs to reconnect\n this.signalRConcurrencyHubConnection.onreconnected(() => {\n // Register for notifications on the forms on new connection\n this.registerForms();\n // Send a reconnection message to handle which forms are locked by this client\n this.signalRConcurrencyHubConnection.send(`Reconnected`, this.cid, this.myLockedForms, this.connectedServer);\n // Track the connection id of this new connection\n this.cid = this.signalRConcurrencyHubConnection.connectionId!;\n // Get which forms are already locked\n this.setInitialFormLocks();\n });\n this.signalRConcurrencyHubConnection.onreconnecting(() => {\n let intervalId = window.setInterval(() => {\n axios.post(`/api/account/GetSignalRToken`).then((apiResult: AxiosResponse>) => {\n if (apiResult.status === 200 && apiResult.data && apiResult.data.wasSuccessful) {\n window.clearInterval(intervalId);\n this.setSignalRAccessToken(apiResult.data.payload);\n }\n });\n }, 1000);\n });\n // Register handlers for lock & unlock notifications\n this.signalRConcurrencyHubConnection.on(`LockForm`, this.onLock);\n this.signalRConcurrencyHubConnection.on(`UnlockForm`, this.onUnlock);\n // Invoke any callbacks in the connection queue\n this.connectionQueue.forEach((cb) => {\n runInAction(() => {\n cb();\n });\n });\n });\n }\n };\n\n // Disconnect from the server\n @action\n private disconnect = () => {\n // Make sure client isn't already disconnected\n if (this.signalRConcurrencyHubConnection.state === HubConnectionState.Connected) {\n // Unregister handlers for lock & unlock notifications\n this.signalRConcurrencyHubConnection.off(`LockForm`, this.onLock);\n this.signalRConcurrencyHubConnection.off(`UnlockForm`, this.onUnlock);\n // Stop the connection\n this.signalRConcurrencyHubConnection.stop();\n }\n };\n}\n","/* eslint-disable @typescript-eslint/no-parameter-properties */\nimport { observable, runInAction } from \"mobx\";\nimport { defaultTheme } from \"../../Custom/StylesAppSpecific/AppStyling\";\nimport * as GoogleAnalytics from \"../Utils/App/GoogleAnalyticsUtils\";\nimport { EventArgs } from \"react-ga\";\nimport { FormLockConcurrencyHubStore } from \"./FormLockConcurrencyHubStore\";\nimport { Stores } from \"../../Custom/Stores\";\nimport { InitialState } from \"../../Custom/Models\";\nimport * as MobX from \"mobx\";\n\nexport class CoreStore {\n @observable public screenWidth = 0;\n @observable public isMobile = false;\n @observable public isTablet = false;\n @observable public isDesktop = false;\n public FormLockConcurrencyHubStore = new FormLockConcurrencyHubStore();\n\n public constructor() {}\n\n public Init = (stores: Stores, initialState: InitialState) => {\n GoogleAnalytics.Init(\"UA-1542809-16\");\n window.addEventListener(\"resize\", () => {\n this.setWidth();\n });\n this.setWidth();\n this.FormLockConcurrencyHubStore.init(stores, initialState);\n\n //this.domain.History = history;\n // EN: For debugging\n (window as any).Stores = stores;\n (window as any).MobX = MobX;\n };\n\n private setWidth = () => {\n runInAction(() => {\n this.screenWidth = document.body.clientWidth;\n this.isMobile = this.screenWidth <= defaultTheme.breakpoints.values[\"md\"];\n this.isTablet = this.screenWidth > defaultTheme.breakpoints.values[\"md\"] && this.screenWidth <= defaultTheme.breakpoints.values[\"lg\"];\n this.isDesktop = this.screenWidth > defaultTheme.breakpoints.values[\"lg\"];\n document.body.classList.remove(\"mobile\");\n document.body.classList.remove(\"tablet\");\n document.body.classList.remove(\"desktop\");\n if (this.isMobile) {\n document.body.classList.add(\"mobile\");\n }\n if (this.isTablet) {\n document.body.classList.add(\"tablet\");\n }\n if (this.isDesktop) {\n document.body.classList.add(\"desktop\");\n }\n });\n //console.log(`Screen Mobile=${this.isMobile}, Tablet=${this.isTablet},Desktop=${this.isDesktop}`);\n };\n\n public PageView = (page: string) => {\n GoogleAnalytics.pageview(page);\n };\n\n public SendEvent = (args: EventArgs) => {\n GoogleAnalytics.sendEvent(args);\n };\n}\n","import { DomainStores } from \"./DomainStores\";\n/* eslint-disable @typescript-eslint/no-parameter-properties */\nimport * as Models from \"../Models\";\nimport * as MobX from \"mobx\";\nimport React, { createContext } from \"react\";\nimport { CoreStore } from \"../../Core/Stores/CoreStore\";\nimport { action, observable } from \"mobx\";\n\nexport class Stores {\n public coreStore: CoreStore = new CoreStore();\n public domain: DomainStores = new DomainStores();\n\n public constructor() {}\n\n public init(initialState: Models.InitialState) {\n this.coreStore.Init(this, initialState);\n this.domain.init(this, initialState);\n }\n}\nexport const StoresInstance = new Stores();\nexport const StoresContext: React.Context = createContext(StoresInstance);\n"],"sourceRoot":""}