{"version":3,"sources":["environments/environment.ts","authConfig.ts","api/DiamondCertificateApi.ts","components/QuickPrint/QuickPrint.tsx","api/A4CertificateRequestApi.ts","context/WarehouseContext.ts","components/EnhancedTable/EnhancedTable.tsx","components/A4CertificateRequests/A4CertificateRequests.tsx","api/CardCertificateRequestApi.ts","components/CardCertificateRequests/EnhancedTableHead.tsx","components/CardCertificateRequests/EnhancedTableToolbar.tsx","components/CardCertificateRequests/CardCertificateRequests.tsx","components/CardCertificateRequests/Docket.ts","components/ListItemLink/ListItemLink.tsx","components/BulkPrint/BulkPrint.tsx","components/AddCardCertificate/AddCardCertificateOptions.ts","components/AddCardCertificate/AddCardCertificate.tsx","components/CardCertificates/EnhancedTableHead.tsx","components/CardCertificates/CardCertificates.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["environment","apiClientId","spaClientId","tenantId","timeout","Number","baseUrl","msalConfig","auth","authority","clientId","postLogoutRedirectUri","redirectUri","cache","cacheLocation","storeAuthStateInCookie","pca","PublicClientApplication","accounts","getAllAccounts","length","setActiveAccount","addEventCallback","event","eventType","EventType","LOGIN_SUCCESS","payload","account","GradingCompany","loginRequest","scopes","authService","tokenRequest","getActiveAccount","acquireTokenSilent","msalApiFetch","relativeUrl","a","options","method","headers","pragma","url","then","r","Authorization","accessToken","opt","fetch","res","response","clone","ok","json","problem","Promise","reject","message","JSON","stringify","status","statusText","catch","reason","Error","Api","createCertificate","req","body","text","parse","getCertificate","certificateNumber","content","getCertificateList","page","pageSize","certificateNumberFilter","getCertificates","certificates","bulkPrintCertificates","certificateNumbers","blob","updateSku","sku","bulkUpdateSkus","pairs","getCertificateFromIgi","pdfBaseUrl","useStyles","makeStyles","theme","createStyles","backdrop","zIndex","drawer","color","QuickPrint","CertificateRequestStatus","props","classes","enqueueSnackbar","useSnackbar","useState","validCertificateNumber","formIsValid","isLoading","igiCheckDone","state","setState","skuInputRef","useRef","printButtonRef","useEffect","setTitle","saveSku","parseInt","current","focus","e","toString","variant","loadSku","cert","loadCertFromIGI","noValidate","autoComplete","onKeyDown","key","preventDefault","stopPropagation","window","open","Backdrop","className","CircularProgress","Grid","container","direction","spacing","item","xs","sm","alignItems","justify","TextField","id","label","fullWidth","onChange","target","value","onBlur","error","type","disabled","inputRef","Help","Button","style","minWidth","onClick","dataUrl","URL","createObjectURL","pdfWindow","print","innerRef","Warehouse","A4CertificateRequestApi","warehouse","show","WarehouseContext","createContext","AU","setWarehouse","console","warn","useWarehouse","useContext","stableSort","array","comparator","stabilizedThis","map","el","index","sort","b","order","descendingComparator","orderBy","getComparator","createData","requestID","store","createdDate","certificateVendor","prevStatus","headCells","numeric","disablePadding","EnhancedTableHead","onRequestSort","TableHead","TableRow","TableCell","padding","headCell","align","sortDirection","TableSortLabel","active","property","visuallyHidden","useToolbarStyles","root","paddingLeft","paddingRight","highlight","palette","secondary","main","backgroundColor","lighten","light","primary","dark","title","flex","EnhancedTableToolbar","openClosedStatus","toggleOpenClosed","Toolbar","clsx","Typography","component","Tooltip","ToggleButtonGroup","exclusive","aria-label","ToggleButton","width","formControl","margin","paper","marginBottom","table","editableCell","border","clip","height","overflow","position","top","EnhancedTable","rowsPerPage","showOpenOrClosed","setIsLoading","rows","setRows","dateRequested","emptyRows","Math","min","Paper","TableContainer","Table","aria-labelledby","size","isAsc","rowCount","TableBody","slice","row","labelId","isChanged","hover","tabIndex","scope","Date","toLocaleString","FormControl","InputLabel","Select","findIndex","update","idx","handleChange","MenuItem","OrderReceived","OnOrderFromSupplier","OrderComplete","Despatched","PrintedAwaitingDespatch","Cancelled","IconButton","name","upd","save","colSpan","TablePagination","rowsPerPageOptions","count","onChangePage","newPage","onChangeRowsPerPage","CardCertificateRequestApi","requestId","onSelectAllClick","numSelected","disableSelectAll","Checkbox","indeterminate","checked","inputProps","printSelection","skuContainer","display","justifyContent","marginRight","skuButtons","CardCertificateRequests","selected","loadRequests","storeSku","systemSku","editSku","validSku","originalSystemSku","skuError","createTableData","handleClick","selectedIndex","indexOf","newSelected","find","concat","isSelected","selectedCertificates","filter","toggleEditSku","rs","c","TableDataUrl","setTimeout","stores","reduce","prev","curr","printWindow","document","write","Object","keys","join","close","onafterprint","printDocket","n","isItemSelected","role","aria-checked","modifySku","helperText","undefined","ListItemLink","icon","to","renderLink","React","useMemo","forwardRef","itemProps","ref","ListItem","button","ListItemIcon","ListItemText","control","BulkPrint","invalidCertificateNumber","newCertificateRef","addNewCertificate","newCert","isValid","saveSkus","invalidSkus","certs","forEach","every","s","applyValidation","handleCsvContent","data","certRegEx","skuRegEx","certData","split","result","cells","trim","test","push","ex","errors","newCerts","acc","cur","gutterBottom","lg","contentEditable","autoFocus","splice","deleteCertificate","htmlFor","accept","files","reader","FileReader","onload","readAsText","Fab","Add","finally","None","GradingCompanyOptions","ColourGradeOptions","ClarityGradeOptions","defaultValues","gradingCompanyOption","shapeCut","measurements","weight","colourGradeOption","clarityGradeOption","polishSymmetry","cutGrade","treatment","comments","AddCardCertificate","gradingCompanyInput","colourGradeInput","clarityGradeInput","autoCompleteState","setAutoCompleteState","setErrors","setFormIsValid","validate","values","alpha20Regex","alphaSlash20Regex","gradingCompany","colourGrade","clarityGrade","entries","err","next","onAutoCompleteChange","onSubmit","Autocomplete","getOptionLabel","option","_","newValue","inputValue","onInputChange","renderInput","params","log","multiline","rowsMax","search","searchButton","inputRoot","inputInput","borderRadius","shape","filterString","setFilterString","InputBase","placeholder","input","currentTarget","numberOfCertififcates","setNumberOfCertififcates","DiamondCertificateApi","totalCount","shortenString","str","clarity","colour","polish","created","createdBy","modified","modifiedBy","drawerWidth","createMuiTheme","appBar","transition","transitions","create","easing","sharp","duration","leavingScreen","appBarShift","marginLeft","enteringScreen","menuButton","hide","flexShrink","whiteSpace","drawerOpen","drawerClose","overflowX","breakpoints","up","flexGrow","toolbar","mixins","withRouter","setOpen","anchorEl","setAnchorEl","menuOpen","Boolean","handleClose","ThemeProvider","authenticationRequest","interactionType","InteractionType","Redirect","maxSnack","autoHideDuration","Provider","CssBaseline","AppBar","edge","aria-controls","aria-haspopup","Menu","anchorOrigin","vertical","horizontal","keepMounted","transformOrigin","onClose","CA","Drawer","Divider","List","exact","path","render","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode","instance","getElementById"],"mappings":"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","file":"static/js/main.9adcda99.chunk.js","sourcesContent":["export const environment = {\r\n authConfig: {\r\n apiClientId: \"#{auth.ApiClientId}\",\r\n spaClientId: \"#{auth.SpaClientId}\",\r\n tenantId: \"#{auth.TenantId}\",\r\n timeout: Number(\"#{auth.Timeout}\"),\r\n },\r\n apiConfig: {\r\n baseUrl: \"#{api.baseUrl}\",\r\n },\r\n build: {\r\n version: \"#{build.Version}\",\r\n },\r\n};\r\n","import { environment } from \"./environments/environment\";\r\nimport {\r\n AccountInfo,\r\n AuthenticationResult,\r\n Configuration,\r\n EventType,\r\n EventMessage,\r\n PublicClientApplication,\r\n RedirectRequest,\r\n SilentRequest,\r\n} from \"@azure/msal-browser\";\r\n\r\nexport const msalConfig: Configuration = {\r\n auth: {\r\n authority: `https://login.microsoftonline.com/${environment.authConfig.tenantId}/`,\r\n clientId: environment.authConfig.spaClientId,\r\n postLogoutRedirectUri: \"/\",\r\n redirectUri: \"/\",\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\",\r\n storeAuthStateInCookie: true,\r\n },\r\n};\r\nexport const pca = new PublicClientApplication(msalConfig);\r\n\r\nconst baseUrl = environment.apiConfig.baseUrl;\r\nconst accounts = pca.getAllAccounts();\r\nif (accounts.length > 0) {\r\n pca.setActiveAccount(accounts[0]);\r\n}\r\n\r\npca.addEventCallback((event: EventMessage) => {\r\n if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {\r\n const payload = event.payload as AuthenticationResult;\r\n const account = payload.account;\r\n pca.setActiveAccount(account);\r\n }\r\n});\r\n\r\nexport const loginRequest: RedirectRequest = {\r\n scopes: [`api://${environment.authConfig.apiClientId}/.default`],\r\n};\r\n\r\nexport const authService = {\r\n GetToken(): Promise {\r\n const tokenRequest: SilentRequest = {\r\n account: pca.getActiveAccount() as AccountInfo,\r\n scopes: [`api://${environment.authConfig.apiClientId}/.default`],\r\n };\r\n return pca.acquireTokenSilent(tokenRequest);\r\n },\r\n};\r\n\r\nexport const msalApiFetch = async (\r\n relativeUrl: string,\r\n options: RequestInit = {}\r\n): Promise => {\r\n if (options && options.method !== \"post\")\r\n options.headers = {\r\n ...options.headers,\r\n ...{ pragma: \"no-cache\", \"cache-control\": \"no-cache\" },\r\n };\r\n if (options && options.method !== \"get\")\r\n options.headers = {\r\n ...options.headers,\r\n \"Content-Type\": \"application/json\",\r\n };\r\n const url = `${baseUrl}${relativeUrl}`;\r\n return await authService\r\n .GetToken()\r\n .then((r: AuthenticationResult) => {\r\n return {\r\n ...options,\r\n headers: {\r\n ...options.headers,\r\n Authorization: `Bearer ${r.accessToken}`,\r\n },\r\n };\r\n })\r\n .then((opt) => fetch(url, opt))\r\n .then(\r\n (res: Response) => {\r\n const response = res.clone();\r\n if (!response.ok) {\r\n return response\r\n .json()\r\n .then(\r\n (problem) =>\r\n Promise.reject(problem.message || JSON.stringify(problem)), // api error\r\n () => Promise.reject(`${response.status}${response.statusText}`)\r\n ) // server error\r\n .catch((reason) => {\r\n throw new Error(reason);\r\n });\r\n }\r\n return res;\r\n },\r\n (reason) => {\r\n throw new Error(reason.message);\r\n }\r\n );\r\n};\r\n","import { msalApiFetch } from \"../authConfig\";\r\n\r\nexport interface Certificate {\r\n certificateNumber: string;\r\n sku: number | null;\r\n store: string;\r\n}\r\n\r\nexport interface CreateCertificate {\r\n gradingCompany: string;\r\n certificateNumber: string;\r\n sku: string;\r\n shapeCut: string;\r\n measurements: string;\r\n weight: string;\r\n colourGrade: string;\r\n clarityGrade: string;\r\n polishSymmetry: string;\r\n cutGrade: string;\r\n treatment: string;\r\n comments: string;\r\n}\r\n\r\nexport interface CertificateDetailsResponse {\r\n totalCount: number;\r\n certificates: CertificateDetails[];\r\n}\r\n\r\nexport interface CertificateDetails {\r\n id: number;\r\n sku: number;\r\n certificateNumber: string;\r\n clarity: string;\r\n colour: string;\r\n comments: string;\r\n cutGrade: string;\r\n measurements: string;\r\n polish: string;\r\n shape: string;\r\n treatment: string;\r\n weight: number;\r\n created: Date;\r\n createdBy: string;\r\n modified: Date | undefined;\r\n modifiedBy: string | undefined;\r\n}\r\n\r\nexport interface CertificateSkuPair {\r\n certificateNumber: string;\r\n sku: number;\r\n}\r\nexport interface CertificateQuery {\r\n certificateNumber: string;\r\n sku: string;\r\n}\r\n\r\nexport enum GradingCompany {\r\n GSI,\r\n ADGL,\r\n IGI,\r\n}\r\n\r\nconst Api = {\r\n createCertificate: (req: CreateCertificate): Promise =>\r\n msalApiFetch(`/card-certificates`, {\r\n method: \"POST\",\r\n body: JSON.stringify(req),\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n }),\r\n getCertificate: (certificateNumber: string): Promise =>\r\n msalApiFetch(`/grading-company-certificates/${certificateNumber}`, {\r\n method: \"GET\",\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n const content: Certificate = await response.json();\r\n return content;\r\n }),\r\n getCertificateList: (\r\n page: number,\r\n pageSize: number,\r\n certificateNumberFilter?: string\r\n ): Promise =>\r\n msalApiFetch(\r\n `/grading-company-certificates?page=${page}&pageSize=${pageSize}${\r\n certificateNumberFilter\r\n ? `&certificateNumberFilter=${certificateNumberFilter}`\r\n : \"\"\r\n }`,\r\n {\r\n method: \"GET\",\r\n }\r\n ).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n const content: CertificateDetailsResponse = await response.json();\r\n return content;\r\n }),\r\n getCertificates: (certificates: string[]): Promise =>\r\n msalApiFetch(`/card-certificate-validation`, {\r\n method: \"POST\",\r\n body: JSON.stringify(certificates),\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n const content: Certificate[] = await response.json();\r\n return content;\r\n }),\r\n bulkPrintCertificates: (certificateNumbers: string[]): Promise =>\r\n msalApiFetch(`/pdf`, {\r\n method: \"POST\",\r\n body: JSON.stringify(certificateNumbers),\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n return await response.blob();\r\n }),\r\n updateSku: (certificateNumber: string, sku: number): Promise =>\r\n msalApiFetch(`/grading-company-certificates/${certificateNumber}`, {\r\n body: JSON.stringify({ sku: sku, certificateNumber: certificateNumber }),\r\n method: \"PUT\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n }),\r\n bulkUpdateSkus: (\r\n pairs: CertificateSkuPair[]\r\n ): Promise =>\r\n msalApiFetch(`/grading-company-certificates`, {\r\n body: JSON.stringify(pairs),\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n return await response.json();\r\n }),\r\n getCertificateFromIgi: (certificateNumber: string): Promise =>\r\n msalApiFetch(`/igi/${certificateNumber}`, {\r\n method: \"GET\",\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n }),\r\n};\r\n\r\nexport default Api;\r\n","import {\r\n Backdrop,\r\n Button,\r\n CircularProgress,\r\n createStyles,\r\n Grid,\r\n makeStyles,\r\n TextField,\r\n Theme,\r\n} from \"@material-ui/core\";\r\nimport * as React from \"react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport Api from \"../../api/DiamondCertificateApi\";\r\nimport { environment } from \"../../environments/environment\";\r\nimport CheckCircle from \"@material-ui/icons/CheckCircle\";\r\nimport { Help } from \"@material-ui/icons\";\r\nimport { useSnackbar } from \"notistack\";\r\n\r\nconst pdfBaseUrl = environment.apiConfig.baseUrl + \"/pdf?certificate=\";\r\ntype ChangeEvent = React.ChangeEvent;\r\n\r\ninterface Props {\r\n setTitle: (title: string) => void;\r\n}\r\n\r\ninterface QuickPrintState {\r\n certificateNumber: string;\r\n validCertificateNumber: boolean | null;\r\n sku: string;\r\n formIsValid: boolean;\r\n isLoading: boolean;\r\n igiCheckDone: boolean;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#fff\",\r\n },\r\n })\r\n);\r\n\r\nfunction QuickPrint(props: Props): JSX.Element {\r\n const classes = useStyles();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [state, setState] = useState({\r\n certificateNumber: \"\",\r\n validCertificateNumber: null,\r\n sku: \"\",\r\n formIsValid: false,\r\n isLoading: false,\r\n igiCheckDone: false,\r\n });\r\n\r\n const skuInputRef = useRef(null);\r\n const printButtonRef = useRef(null);\r\n\r\n useEffect(() => {\r\n props.setTitle(\"Quick Print\");\r\n });\r\n\r\n const modifyCertificateNumber = (e: ChangeEvent) => {\r\n setState({\r\n ...state,\r\n certificateNumber: e.target.value,\r\n validCertificateNumber: null,\r\n formIsValid: false,\r\n sku: \"\",\r\n igiCheckDone: false,\r\n });\r\n };\r\n\r\n const modifySku = (e: ChangeEvent) => {\r\n setState({\r\n ...state,\r\n formIsValid: false,\r\n sku: e.target.value,\r\n });\r\n };\r\n\r\n const saveSku = () => {\r\n setState({ ...state, isLoading: true });\r\n return Api.updateSku(state.certificateNumber, parseInt(state.sku))\r\n .then(() => {\r\n setState({\r\n ...state,\r\n formIsValid: true,\r\n isLoading: false,\r\n });\r\n\r\n if (printButtonRef.current) {\r\n printButtonRef.current.focus();\r\n }\r\n })\r\n .catch((e) => {\r\n setState({ ...state, isLoading: false });\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n const loadSku = () => {\r\n setState({ ...state, isLoading: true });\r\n return Api.getCertificate(state.certificateNumber)\r\n .then((cert) => {\r\n setState({\r\n ...state,\r\n validCertificateNumber: true,\r\n sku: cert.sku ? cert.sku.toString() : \"\",\r\n formIsValid: !!cert.sku,\r\n isLoading: false,\r\n });\r\n if (skuInputRef.current) {\r\n skuInputRef.current.focus();\r\n }\r\n })\r\n .catch((e) => {\r\n setState({\r\n ...state,\r\n formIsValid: false,\r\n validCertificateNumber: false,\r\n isLoading: false,\r\n });\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n const loadCertFromIGI = () => {\r\n setState({ ...state, isLoading: true });\r\n return Api.getCertificateFromIgi(state.certificateNumber)\r\n .then(() => setState({ ...state, igiCheckDone: true }))\r\n .then(loadSku)\r\n .catch((e) => {\r\n setState({\r\n ...state,\r\n formIsValid: false,\r\n validCertificateNumber: false,\r\n isLoading: false,\r\n igiCheckDone: true,\r\n });\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n const onSubmit = (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (state.formIsValid) {\r\n window.open(pdfBaseUrl + state.certificateNumber, \"_blank\");\r\n } else if (!!state.sku && !!state.certificateNumber) {\r\n saveSku();\r\n } else if (\r\n !!state.certificateNumber &&\r\n state.validCertificateNumber === null\r\n ) {\r\n loadSku();\r\n } else if (\r\n !!state.certificateNumber &&\r\n !state.validCertificateNumber &&\r\n !state.igiCheckDone\r\n ) {\r\n loadCertFromIGI();\r\n }\r\n };\r\n\r\n const onKeyDown = (event: React.KeyboardEvent): void => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onSubmit();\r\n }\r\n };\r\n\r\n const printPdf = () => {\r\n setState({ ...state, isLoading: true });\r\n Api.bulkPrintCertificates([state.certificateNumber])\r\n .then((blob) => {\r\n setState({ ...state, isLoading: false });\r\n const dataUrl = window.URL.createObjectURL(blob);\r\n const pdfWindow = window.open(dataUrl);\r\n pdfWindow?.print();\r\n })\r\n .catch((e) => {\r\n setState({ ...state, isLoading: false });\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {state.formIsValid ? (\r\n \r\n ) : state.validCertificateNumber && !state.formIsValid ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n \r\n \r\n \r\n {state.formIsValid ? (\r\n \r\n Print\r\n \r\n ) : state.validCertificateNumber &&\r\n !!state.sku &&\r\n !state.formIsValid ? (\r\n \r\n Save Sku\r\n \r\n ) : state.validCertificateNumber === false && !state.igiCheckDone ? (\r\n \r\n Load from IGI\r\n \r\n ) : (\r\n \r\n Load Sku\r\n \r\n )}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default QuickPrint;\r\n","import { msalApiFetch } from \"../authConfig\";\r\nimport { Warehouse } from \"../context/WarehouseContext\";\r\n\r\nexport interface A4CertificateRequest {\r\n requestID: number;\r\n certificateNumber: string;\r\n sku: number;\r\n store: string;\r\n dateRequested: Date;\r\n status: CertificateRequestStatus;\r\n certificateVendor: string;\r\n}\r\n\r\nexport enum CertificateRequestStatus {\r\n OrderReceived = 1,\r\n PrintedAwaitingDespatch = 2,\r\n OnOrderFromSupplier = 3,\r\n Despatched = 4,\r\n OrderComplete = 5,\r\n Cancelled = 6,\r\n}\r\n\r\nexport interface A4CertificateUpdate {\r\n requestID: number;\r\n status: CertificateRequestStatus;\r\n}\r\n\r\nexport const A4CertificateRequestApi = {\r\n get: (\r\n warehouse: Warehouse,\r\n show: \"open\" | \"closed\"\r\n ): Promise =>\r\n msalApiFetch(\r\n `/a4-certificate-requests?warehouse=${warehouse}&show=${show}`,\r\n {\r\n method: \"GET\",\r\n }\r\n ).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n const content: A4CertificateRequest[] = await response.json();\r\n return content;\r\n }),\r\n update: (req: A4CertificateUpdate): Promise =>\r\n msalApiFetch(\"/a4-certificate-requests\", {\r\n method: \"PUT\",\r\n body: JSON.stringify(req),\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n }),\r\n};\r\n","import { createContext, useContext } from \"react\";\r\n\r\nexport enum Warehouse {\r\n None = \"None\",\r\n AU = \"AU\",\r\n CA = \"CA\",\r\n}\r\n\r\nexport type WarehouseContextType = {\r\n warehouse: Warehouse;\r\n setWarehouse: (warehouse: Warehouse) => void;\r\n};\r\n\r\nexport const WarehouseContext = createContext({\r\n warehouse: Warehouse.AU,\r\n setWarehouse: (warehouse) => console.warn(\"warehouse provider not set\"),\r\n});\r\nexport const useWarehouse = (): WarehouseContextType =>\r\n useContext(WarehouseContext);\r\n","export function stableSort(\r\n array: T[],\r\n comparator: (a: T, b: T) => number\r\n): T[] {\r\n const stabilizedThis = array.map((el, index) => [el, index] as [T, number]);\r\n stabilizedThis.sort((a, b) => {\r\n const order = comparator(a[0], b[0]);\r\n if (order !== 0) return order;\r\n return a[1] - b[1];\r\n });\r\n return stabilizedThis.map((el) => el[0]);\r\n}\r\n\r\nfunction descendingComparator(a: T, b: T, orderBy: keyof T) {\r\n if (b[orderBy] < a[orderBy]) {\r\n return -1;\r\n }\r\n if (b[orderBy] > a[orderBy]) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\n\r\nexport type Order = \"asc\" | \"desc\";\r\n\r\nexport function getComparator(\r\n order: Order,\r\n orderBy: Key\r\n): (\r\n a: { [key in Key]: number | string | Date | boolean },\r\n b: { [key in Key]: number | string | Date | boolean }\r\n) => number {\r\n return order === \"desc\"\r\n ? (a, b) => descendingComparator(a, b, orderBy)\r\n : (a, b) => -descendingComparator(a, b, orderBy);\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport {\r\n createStyles,\r\n lighten,\r\n makeStyles,\r\n Theme,\r\n} from \"@material-ui/core/styles\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport TablePagination from \"@material-ui/core/TablePagination\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport TableSortLabel from \"@material-ui/core/TableSortLabel\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport SaveIcon from \"@material-ui/icons/Save\";\r\nimport {\r\n A4CertificateRequestApi,\r\n CertificateRequestStatus,\r\n} from \"../../api/A4CertificateRequestApi\";\r\nimport { useWarehouse } from \"../../context/WarehouseContext\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport {\r\n getComparator,\r\n stableSort,\r\n Order,\r\n} from \"../EnhancedTable/EnhancedTable\";\r\nimport {\r\n Backdrop,\r\n CircularProgress,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n Select,\r\n} from \"@material-ui/core\";\r\nimport { ToggleButton, ToggleButtonGroup } from \"@material-ui/lab\";\r\n\r\ninterface Data {\r\n requestID: number;\r\n certificateNumber: string;\r\n store: string;\r\n createdDate: Date;\r\n status: string;\r\n prevStatus: string;\r\n certificateVendor: string;\r\n}\r\n\r\nfunction createData(\r\n requestID: number,\r\n certificateNumber: string,\r\n store: string,\r\n createdDate: Date,\r\n status: CertificateRequestStatus,\r\n certificateVendor: string\r\n): Data {\r\n return {\r\n requestID,\r\n certificateNumber,\r\n store,\r\n createdDate,\r\n status: status.toString(),\r\n prevStatus: status.toString(),\r\n certificateVendor,\r\n };\r\n}\r\n\r\ninterface HeadCell {\r\n disablePadding: boolean;\r\n id: keyof Data;\r\n label: string;\r\n numeric: boolean;\r\n}\r\n\r\nconst headCells: HeadCell[] = [\r\n {\r\n id: \"certificateNumber\",\r\n numeric: false,\r\n disablePadding: true,\r\n label: \"Certificate Number\",\r\n },\r\n { id: \"store\", numeric: false, disablePadding: false, label: \"Store\" },\r\n {\r\n id: \"certificateVendor\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Grading Company\",\r\n },\r\n {\r\n id: \"createdDate\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Created Date\",\r\n },\r\n {\r\n id: \"status\",\r\n numeric: true,\r\n disablePadding: false,\r\n label: \"Status\",\r\n },\r\n];\r\n\r\ninterface EnhancedTableProps {\r\n classes: ReturnType;\r\n onRequestSort: (\r\n event: React.MouseEvent,\r\n property: keyof Data\r\n ) => void;\r\n order: Order;\r\n orderBy: string;\r\n rowCount: number;\r\n}\r\n\r\nfunction EnhancedTableHead(props: EnhancedTableProps) {\r\n const { classes, order, orderBy, onRequestSort } = props;\r\n const createSortHandler =\r\n (property: keyof Data) => (event: React.MouseEvent) => {\r\n onRequestSort(event, property);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {headCells.map((headCell) => (\r\n \r\n \r\n {headCell.label}\r\n {orderBy === headCell.id ? (\r\n \r\n {order === \"desc\" ? \"sorted descending\" : \"sorted ascending\"}\r\n \r\n ) : null}\r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n\r\nconst useToolbarStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(1),\r\n },\r\n highlight:\r\n theme.palette.type === \"light\"\r\n ? {\r\n color: theme.palette.secondary.main,\r\n backgroundColor: lighten(theme.palette.secondary.light, 0.85),\r\n }\r\n : {\r\n color: theme.palette.text.primary,\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n title: {\r\n flex: \"1 1 100%\",\r\n },\r\n })\r\n);\r\n\r\ninterface EnhancedTableToolbarProps {\r\n toggleOpenClosed: () => void;\r\n openClosedStatus: \"open\" | \"closed\";\r\n}\r\n\r\nconst EnhancedTableToolbar = (props: EnhancedTableToolbarProps) => {\r\n const classes = useToolbarStyles();\r\n const { openClosedStatus, toggleOpenClosed } = props;\r\n\r\n return (\r\n \r\n \r\n Requests\r\n \r\n \r\n \r\n \r\n Open\r\n \r\n \r\n Closed\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: \"100%\",\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#fff\",\r\n },\r\n formControl: {\r\n margin: theme.spacing(0),\r\n minWidth: 120,\r\n },\r\n paper: {\r\n width: \"100%\",\r\n marginBottom: theme.spacing(2),\r\n },\r\n table: {\r\n minWidth: 750,\r\n },\r\n editableCell: {\r\n padding: 0,\r\n },\r\n visuallyHidden: {\r\n border: 0,\r\n clip: \"rect(0 0 0 0)\",\r\n height: 1,\r\n margin: -1,\r\n overflow: \"hidden\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 20,\r\n width: 1,\r\n },\r\n })\r\n);\r\n\r\ninterface Props {\r\n setTitle: (title: string) => void;\r\n}\r\n\r\ninterface A4CertificateRequestsState {\r\n order: Order;\r\n orderBy: keyof Data;\r\n page: number;\r\n rowsPerPage: number;\r\n showOpenOrClosed: \"open\" | \"closed\";\r\n}\r\n\r\nexport default function EnhancedTable(props: Props): JSX.Element {\r\n const [state, setState] = useState({\r\n order: \"asc\",\r\n orderBy: \"createdDate\",\r\n page: 0,\r\n rowsPerPage: 10,\r\n showOpenOrClosed: \"open\",\r\n });\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [rows, setRows] = useState([]);\r\n const { warehouse } = useWarehouse();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n useEffect(() => {\r\n props.setTitle(\"A4 Certificate Requests\");\r\n });\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n A4CertificateRequestApi.get(warehouse, state.showOpenOrClosed)\r\n .then((res) => {\r\n setRows(\r\n res.map((r) =>\r\n createData(\r\n r.requestID,\r\n r.certificateNumber,\r\n r.store,\r\n r.dateRequested,\r\n r.status,\r\n r.certificateVendor\r\n )\r\n )\r\n );\r\n setIsLoading(false);\r\n })\r\n .catch((e) => {\r\n setIsLoading(false);\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n }, [warehouse, state.showOpenOrClosed, enqueueSnackbar]);\r\n\r\n const classes = useStyles();\r\n\r\n const handleRequestSort = (\r\n event: React.MouseEvent,\r\n property: keyof Data\r\n ) => {\r\n const isAsc = state.orderBy === property && state.order === \"asc\";\r\n setState({\r\n ...state,\r\n order: isAsc ? \"desc\" : \"asc\",\r\n orderBy: property,\r\n });\r\n };\r\n\r\n const save = (row: Data) => {\r\n const upd = {\r\n requestID: row.requestID,\r\n status:\r\n CertificateRequestStatus[\r\n row.status as keyof typeof CertificateRequestStatus\r\n ],\r\n };\r\n\r\n setIsLoading(true);\r\n\r\n A4CertificateRequestApi.update(upd)\r\n .then(() =>\r\n A4CertificateRequestApi.get(warehouse, state.showOpenOrClosed)\r\n )\r\n .then((res) => {\r\n setRows(\r\n res.map((r) =>\r\n createData(\r\n r.requestID,\r\n r.certificateNumber,\r\n r.store,\r\n r.dateRequested,\r\n r.status,\r\n r.certificateVendor\r\n )\r\n )\r\n );\r\n setIsLoading(false);\r\n })\r\n .catch((e) => {\r\n setIsLoading(false);\r\n });\r\n };\r\n\r\n const toggleOpenClosed = () => {\r\n setState({\r\n ...state,\r\n showOpenOrClosed: state.showOpenOrClosed === \"open\" ? \"closed\" : \"open\",\r\n });\r\n };\r\n\r\n const handleChangePage = (event: unknown, newPage: number) => {\r\n setState({\r\n ...state,\r\n page: newPage,\r\n });\r\n };\r\n\r\n const handleChange = (\r\n event: React.ChangeEvent<{ value: unknown }>,\r\n row: Data\r\n ) => {\r\n const index = rows.findIndex((r) => r.requestID === row.requestID);\r\n\r\n const update = rows.map((item, idx) => {\r\n if (idx === index) {\r\n return {\r\n ...item,\r\n status: event.target.value as string,\r\n };\r\n } else {\r\n return item;\r\n }\r\n });\r\n\r\n setRows(update);\r\n };\r\n\r\n const handleChangeRowsPerPage = (\r\n event: React.ChangeEvent\r\n ) => {\r\n setState({\r\n ...state,\r\n page: 0,\r\n rowsPerPage: parseInt(event.target.value, 10),\r\n });\r\n };\r\n\r\n const emptyRows =\r\n state.rowsPerPage -\r\n Math.min(state.rowsPerPage, rows.length - state.page * state.rowsPerPage);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {stableSort(rows, getComparator(state.order, state.orderBy))\r\n .slice(\r\n state.page * state.rowsPerPage,\r\n state.page * state.rowsPerPage + state.rowsPerPage\r\n )\r\n .map((row, index) => {\r\n const labelId = `enhanced-table-checkbox-${index}`;\r\n const isChanged = row.status !== row.prevStatus;\r\n\r\n return (\r\n \r\n \r\n \r\n {row.certificateNumber}\r\n \r\n {row.store}\r\n \r\n {row.certificateVendor}\r\n \r\n \r\n {new Date(row.createdDate).toLocaleString(\"en-AU\")}\r\n \r\n \r\n \r\n \r\n Status\r\n \r\n handleChange(event, row)}\r\n >\r\n \r\n Received\r\n \r\n \r\n Ordered\r\n \r\n \r\n Complete\r\n \r\n {state.showOpenOrClosed === \"closed\"\r\n ? [\r\n \r\n Despatched\r\n ,\r\n \r\n Printed\r\n ,\r\n \r\n Cancelled\r\n ,\r\n ]\r\n : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n save(row)}\r\n disabled={!isChanged}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n {emptyRows > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import { msalApiFetch } from \"../authConfig\";\r\nimport { Warehouse } from \"../context/WarehouseContext\";\r\n\r\nexport interface CardCertificateRequest {\r\n requestID: number;\r\n certificateNumber: string;\r\n storeSku: number;\r\n systemSku: number | undefined;\r\n store: string;\r\n dateRequested: Date;\r\n status: string;\r\n certificateVendor: string;\r\n}\r\n\r\nexport const CardCertificateRequestApi = {\r\n get: (\r\n warehouse: Warehouse,\r\n show: \"open\" | \"closed\"\r\n ): Promise =>\r\n msalApiFetch(\r\n `/card-certificate-requests?warehouse=${warehouse}&show=${show}`,\r\n {\r\n method: \"GET\",\r\n }\r\n ).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n const content: CardCertificateRequest[] = await response.json();\r\n return content;\r\n }),\r\n printCertificates: (certificateNumbers: string[]): Promise =>\r\n msalApiFetch(`/card-certificate-requests/print`, {\r\n method: \"POST\",\r\n body: JSON.stringify(certificateNumbers),\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n return await response.blob();\r\n }),\r\n cancel: (requestId: number): Promise =>\r\n msalApiFetch(`/card-certificate-requests/${requestId}/cancel`, {\r\n method: \"PUT\",\r\n }).then(async (response) => {\r\n if (!response.ok) {\r\n return response\r\n .text()\r\n .then((text) => Promise.reject(JSON.parse(text).message));\r\n }\r\n }),\r\n};\r\n","import React from \"react\";\r\nimport TableHead from \"@material-ui/core/TableHead\";\r\nimport { Order } from \"../EnhancedTable/EnhancedTable\";\r\nimport {\r\n Checkbox,\r\n createStyles,\r\n makeStyles,\r\n TableCell,\r\n TableRow,\r\n TableSortLabel,\r\n Theme,\r\n} from \"@material-ui/core\";\r\nimport TableData from \"./TableData\";\r\n\r\ninterface HeadCell {\r\n disablePadding: boolean;\r\n id: keyof TableData;\r\n label: string;\r\n numeric: boolean;\r\n}\r\n\r\nconst headCells: HeadCell[] = [\r\n {\r\n id: \"certificateNumber\",\r\n numeric: false,\r\n disablePadding: true,\r\n label: \"Certificate Number\",\r\n },\r\n {\r\n id: \"systemSku\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"System SKU\",\r\n },\r\n { id: \"storeSku\", numeric: true, disablePadding: false, label: \"Store SKU\" },\r\n { id: \"store\", numeric: false, disablePadding: false, label: \"Store\" },\r\n {\r\n id: \"certificateVendor\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Grading Company\",\r\n },\r\n { id: \"status\", numeric: false, disablePadding: false, label: \"Status\" },\r\n {\r\n id: \"createdDate\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Created Date\",\r\n },\r\n];\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n visuallyHidden: {\r\n border: 0,\r\n clip: \"rect(0 0 0 0)\",\r\n height: 1,\r\n margin: -1,\r\n overflow: \"hidden\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 20,\r\n width: 1,\r\n },\r\n })\r\n);\r\n\r\nexport interface EnhancedTableProps {\r\n numSelected: number;\r\n onRequestSort: (\r\n event: React.MouseEvent,\r\n property: keyof TableData\r\n ) => void;\r\n onSelectAllClick: (event: React.ChangeEvent) => void;\r\n order: Order;\r\n orderBy: string;\r\n rowCount: number;\r\n disableSelectAll: boolean;\r\n}\r\n\r\nexport default function EnhancedTableHead(\r\n props: EnhancedTableProps\r\n): JSX.Element {\r\n const {\r\n onSelectAllClick,\r\n order,\r\n orderBy,\r\n numSelected,\r\n rowCount,\r\n onRequestSort,\r\n disableSelectAll,\r\n } = props;\r\n const createSortHandler =\r\n (property: keyof TableData) => (event: React.MouseEvent) => {\r\n onRequestSort(event, property);\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n 0 && numSelected < rowCount}\r\n checked={rowCount > 0 && numSelected === rowCount}\r\n onChange={onSelectAllClick}\r\n inputProps={{ \"aria-label\": \"select all certificates\" }}\r\n disabled={disableSelectAll}\r\n />\r\n \r\n {headCells.map((headCell) => (\r\n \r\n \r\n {headCell.label}\r\n {orderBy === headCell.id ? (\r\n \r\n {order === \"desc\" ? \"sorted descending\" : \"sorted ascending\"}\r\n \r\n ) : null}\r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport {\r\n createStyles,\r\n lighten,\r\n makeStyles,\r\n Theme,\r\n} from \"@material-ui/core/styles\";\r\nimport { Toolbar, Typography, Tooltip, IconButton } from \"@material-ui/core\";\r\nimport { ToggleButtonGroup, ToggleButton } from \"@material-ui/lab\";\r\nimport TableData from \"./TableData\";\r\nimport PrintIcon from \"@material-ui/icons/Print\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useToolbarStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(1),\r\n },\r\n highlight:\r\n theme.palette.type === \"light\"\r\n ? {\r\n color: theme.palette.secondary.main,\r\n backgroundColor: lighten(theme.palette.secondary.light, 0.85),\r\n }\r\n : {\r\n color: theme.palette.text.primary,\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n title: {\r\n flex: \"1 1 100%\",\r\n },\r\n })\r\n);\r\n\r\nexport interface EnhancedTableToolbarProps {\r\n numSelected: number;\r\n printSelection: () => void;\r\n toggleOpenClosed: () => void;\r\n openClosedStatus: \"open\" | \"closed\";\r\n selectedCertificates: TableData[];\r\n}\r\n\r\nexport const EnhancedTableToolbar = (\r\n props: EnhancedTableToolbarProps\r\n): JSX.Element => {\r\n const classes = useToolbarStyles();\r\n const { numSelected, openClosedStatus, toggleOpenClosed } = props;\r\n\r\n return (\r\n 0,\r\n })}\r\n >\r\n {numSelected > 0 ? (\r\n \r\n {numSelected} selected\r\n \r\n ) : (\r\n \r\n Requests\r\n \r\n )}\r\n \r\n \r\n \r\n Open\r\n \r\n \r\n Closed\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport { Backdrop, CircularProgress, TextField } from \"@material-ui/core\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TablePagination from \"@material-ui/core/TablePagination\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport CancelIcon from \"@material-ui/icons/Cancel\";\r\nimport SaveIcon from \"@material-ui/icons/Save\";\r\nimport EditIcon from \"@material-ui/icons/Edit\";\r\nimport {\r\n CardCertificateRequest,\r\n CardCertificateRequestApi,\r\n} from \"../../api/CardCertificateRequestApi\";\r\nimport { printDocket } from \"./Docket\";\r\nimport { useWarehouse } from \"../../context/WarehouseContext\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport {\r\n getComparator,\r\n stableSort,\r\n Order,\r\n} from \"../EnhancedTable/EnhancedTable\";\r\nimport Api from \"../../api/DiamondCertificateApi\";\r\nimport TableData from \"./TableData\";\r\nimport EnhancedTableHead from \"./EnhancedTableHead\";\r\nimport { EnhancedTableToolbar } from \"./EnhancedTableToolbar\";\r\n\r\nfunction createTableData(req: CardCertificateRequest): TableData {\r\n return {\r\n requestID: req.requestID,\r\n certificateNumber: req.certificateNumber,\r\n storeSku: req.storeSku,\r\n store: req.store,\r\n createdDate: req.dateRequested,\r\n status: req.status,\r\n systemSku: req.systemSku?.toString() || \"\",\r\n editSku: false,\r\n validSku: true,\r\n originalSystemSku: req.systemSku?.toString() || \"\",\r\n skuError: \"\",\r\n certificateVendor: req.certificateVendor,\r\n };\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: \"100%\",\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#fff\",\r\n },\r\n paper: {\r\n width: \"100%\",\r\n marginBottom: theme.spacing(2),\r\n },\r\n table: {\r\n minWidth: 750,\r\n },\r\n visuallyHidden: {\r\n border: 0,\r\n clip: \"rect(0 0 0 0)\",\r\n height: 1,\r\n margin: -1,\r\n overflow: \"hidden\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 20,\r\n width: 1,\r\n },\r\n skuContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n width: \"250px\",\r\n },\r\n sku: {\r\n minWidth: \"180px\",\r\n marginRight: \"5px\",\r\n },\r\n skuButtons: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n width: \"100px\",\r\n },\r\n })\r\n);\r\n\r\ninterface CardCertificateRequestsState {\r\n order: Order;\r\n orderBy: keyof TableData;\r\n page: number;\r\n rowsPerPage: number;\r\n selected: number[];\r\n showOpenOrClosed: \"open\" | \"closed\";\r\n}\r\n\r\ninterface Props {\r\n setTitle: (title: string) => void;\r\n}\r\n\r\nexport default function CardCertificateRequests(props: Props): JSX.Element {\r\n const [state, setState] = useState({\r\n order: \"asc\",\r\n orderBy: \"createdDate\",\r\n page: 0,\r\n rowsPerPage: 10,\r\n selected: [],\r\n showOpenOrClosed: \"open\",\r\n });\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [rows, setRows] = useState([]);\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n useEffect(() => {\r\n props.setTitle(\"Card Certificate Requests\");\r\n });\r\n\r\n const { warehouse } = useWarehouse();\r\n\r\n const loadRequests = () => {\r\n setIsLoading(true);\r\n\r\n CardCertificateRequestApi.get(warehouse, state.showOpenOrClosed)\r\n .then((res) => {\r\n setRows(res.map((r) => createTableData(r)));\r\n setIsLoading(false);\r\n })\r\n .catch((e) => {\r\n setIsLoading(false);\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n useEffect(loadRequests, [warehouse, state.showOpenOrClosed, enqueueSnackbar]);\r\n\r\n const classes = useStyles();\r\n\r\n const handleRequestSort = (\r\n event: React.MouseEvent,\r\n property: keyof TableData\r\n ) => {\r\n const isAsc = state.orderBy === property && state.order === \"asc\";\r\n setState({\r\n ...state,\r\n order: isAsc ? \"desc\" : \"asc\",\r\n orderBy: property,\r\n });\r\n };\r\n\r\n const handleSelectAllClick = (event: React.ChangeEvent) => {\r\n let selected: number[] = [];\r\n if (event.target.checked) {\r\n selected = rows.map((n) => n.requestID);\r\n }\r\n setState({\r\n ...state,\r\n selected: selected,\r\n });\r\n };\r\n\r\n const handleClick = (event: React.MouseEvent, requestID: number) => {\r\n const selectedIndex = state.selected.indexOf(requestID);\r\n let newSelected: number[] = [];\r\n\r\n if (\r\n rows.find(\r\n (r) => r.requestID === requestID && r.status !== \"Order Received\"\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n if (selectedIndex === -1) {\r\n newSelected = newSelected.concat(state.selected, requestID);\r\n } else if (selectedIndex === 0) {\r\n newSelected = newSelected.concat(state.selected.slice(1));\r\n } else if (selectedIndex === state.selected.length - 1) {\r\n newSelected = newSelected.concat(state.selected.slice(0, -1));\r\n } else if (selectedIndex > 0) {\r\n newSelected = newSelected.concat(\r\n state.selected.slice(0, selectedIndex),\r\n state.selected.slice(selectedIndex + 1)\r\n );\r\n }\r\n\r\n setState({\r\n ...state,\r\n selected: newSelected,\r\n });\r\n };\r\n\r\n const handleChangePage = (event: unknown, newPage: number) => {\r\n setState({\r\n ...state,\r\n page: newPage,\r\n });\r\n };\r\n\r\n const handleChangeRowsPerPage = (\r\n event: React.ChangeEvent\r\n ) => {\r\n setState({\r\n ...state,\r\n page: 0,\r\n rowsPerPage: parseInt(event.target.value, 10),\r\n });\r\n };\r\n\r\n const isSelected = (requestID: number) =>\r\n state.selected.indexOf(requestID) !== -1;\r\n\r\n const emptyRows =\r\n state.rowsPerPage -\r\n Math.min(state.rowsPerPage, rows.length - state.page * state.rowsPerPage);\r\n\r\n const selectedCertificates = rows.filter((r) => isSelected(r.requestID));\r\n\r\n const toggleOpenClosed = () => {\r\n setState({\r\n ...state,\r\n showOpenOrClosed: state.showOpenOrClosed === \"open\" ? \"closed\" : \"open\",\r\n });\r\n };\r\n\r\n const printSelection = () => {\r\n setIsLoading(true);\r\n CardCertificateRequestApi.printCertificates(\r\n selectedCertificates.map((c) => c.certificateNumber)\r\n )\r\n .then((blob) => {\r\n const TableDataUrl = window.URL.createObjectURL(blob);\r\n const pdfWindow = window.open(TableDataUrl);\r\n pdfWindow?.print();\r\n setTimeout(() => {\r\n printDocket(selectedCertificates);\r\n }, 2000);\r\n })\r\n .then(loadRequests)\r\n .catch((e) => {\r\n setIsLoading(false);\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n const cancelCertificateRequest = (requestId: number) => {\r\n setIsLoading(true);\r\n CardCertificateRequestApi.cancel(requestId).then(loadRequests);\r\n };\r\n\r\n const toggleEditSku = (\r\n requestId: number,\r\n event?: React.MouseEvent\r\n ) => {\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n if (state.showOpenOrClosed === \"closed\") {\r\n return;\r\n }\r\n\r\n const rs = [...rows];\r\n const index = rs.findIndex((r) => r.requestID === requestId);\r\n if (index === -1) return;\r\n rs[index].editSku = !rs[index].editSku;\r\n rs[index].systemSku = rs[index].originalSystemSku;\r\n rs[index].skuError = \"\";\r\n setRows(rs);\r\n };\r\n\r\n const saveSkus = (\r\n requestId: number,\r\n certificateNumber: string,\r\n sku: string\r\n ) => {\r\n setIsLoading(true);\r\n return Api.updateSku(certificateNumber, parseInt(sku))\r\n .then(() => {\r\n const rs = [...rows];\r\n const index = rs.findIndex((r) => r.requestID === requestId);\r\n if (index === -1) return;\r\n rs[index].editSku = !rs[index].editSku;\r\n rs[index].originalSystemSku = sku;\r\n setRows(rs);\r\n setIsLoading(false);\r\n })\r\n .catch((e) => {\r\n setIsLoading(false);\r\n const rs = [...rows];\r\n const index = rs.findIndex((r) => r.requestID === requestId);\r\n if (index === -1) return;\r\n rs[index].skuError = e.toString();\r\n setRows(rs);\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n const modifySku = (value: string, index: number) => {\r\n const rs = [...rows];\r\n rs[index].systemSku = value;\r\n rs[index].skuError = \"\";\r\n setRows(rs);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {stableSort(rows, getComparator(state.order, state.orderBy))\r\n .slice(\r\n state.page * state.rowsPerPage,\r\n state.page * state.rowsPerPage + state.rowsPerPage\r\n )\r\n .map((row, index) => {\r\n const isItemSelected = isSelected(row.requestID);\r\n const labelId = `enhanced-table-checkbox-${index}`;\r\n\r\n return (\r\n \r\n handleClick(event, row.requestID)}\r\n >\r\n \r\n \r\n handleClick(event, row.requestID)}\r\n >\r\n {row.certificateNumber}\r\n \r\n \r\n {row.editSku ? (\r\n
\r\n modifySku(e.target.value, index)}\r\n type={\"number\"}\r\n error={!!row.skuError}\r\n helperText={row.skuError}\r\n >\r\n \r\n \r\n \r\n saveSkus(\r\n row.requestID,\r\n row.certificateNumber,\r\n row.systemSku\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n toggleEditSku(row.requestID, e)\r\n }\r\n >\r\n \r\n \r\n
\r\n ) : (\r\n toggleEditSku(row.requestID, e)}\r\n >\r\n {row.systemSku}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n {row.storeSku}\r\n {row.store}\r\n \r\n {row.certificateVendor}\r\n \r\n {row.status}\r\n \r\n {new Date(row.createdDate).toLocaleString(\"en-AU\")}\r\n \r\n \r\n \r\n \r\n \r\n cancelCertificateRequest(row.requestID)\r\n }\r\n disabled={row.status !== \"Order Received\"}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n {emptyRows > 0 && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n","export interface Certificate {\r\n certificateNumber: string;\r\n storeSku: number;\r\n systemSku: string;\r\n store: string;\r\n}\r\n\r\nexport interface Grouping {\r\n [key: string]: Certificate[];\r\n}\r\n\r\nexport const printDocket = (certificates: Certificate[]): void => {\r\n const stores = certificates.reduce((prev: Grouping, curr) => {\r\n prev[curr.store] = [...(prev[curr.store] || []), curr];\r\n return prev;\r\n }, {});\r\n\r\n const printWindow = window.open(\"\", \"\", \"height=500,width=600\");\r\n\r\n if (!printWindow) {\r\n return;\r\n }\r\n\r\n printWindow.document.write(\"Docket\");\r\n printWindow.document.write(\r\n ''\r\n );\r\n printWindow.document.write(\r\n Object.keys(stores)\r\n .map((key) => {\r\n return (\r\n '

Certificate Numbers

' +\r\n `

Store ${key}

    ` +\r\n `
  • CertificateSKU
  • ` +\r\n stores[key]\r\n .map(\r\n (c) =>\r\n `
  • ${c.certificateNumber}${c.storeSku}
  • `\r\n )\r\n .join(\"\") +\r\n `
Printed on: ${new Date().toLocaleString()}
` +\r\n `
` +\r\n `
-
`\r\n );\r\n })\r\n .join(\"\")\r\n );\r\n\r\n printWindow.document.close();\r\n printWindow.onafterprint = window.close;\r\n printWindow.print();\r\n};\r\n","import { ListItem, ListItemIcon, ListItemText } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport {\r\n Link as RouterLink,\r\n LinkProps as RouterLinkProps,\r\n} from \"react-router-dom\";\r\n\r\ninterface ListItemLinkProps {\r\n icon?: React.ReactElement;\r\n primary: string;\r\n to: string;\r\n}\r\n\r\nfunction ListItemLink(props: ListItemLinkProps): JSX.Element {\r\n const { icon, primary, to } = props;\r\n\r\n const renderLink = React.useMemo(\r\n () =>\r\n React.forwardRef>((itemProps, ref) => (\r\n \r\n )),\r\n [to]\r\n );\r\n\r\n return (\r\n
  • \r\n \r\n {icon ? {icon} : null}\r\n \r\n \r\n
  • \r\n );\r\n}\r\n\r\nexport default ListItemLink;\r\n","import {\r\n Backdrop,\r\n Button,\r\n CircularProgress,\r\n createStyles,\r\n Fab,\r\n Grid,\r\n makeStyles,\r\n TextField,\r\n Theme,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport * as React from \"react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport Api, { CertificateSkuPair } from \"../../api/DiamondCertificateApi\";\r\nimport Delete from \"@material-ui/icons/Delete\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { Add } from \"@material-ui/icons\";\r\n\r\ninterface Props {\r\n setTitle: (title: string) => void;\r\n}\r\n\r\ninterface Certificate {\r\n certificateNumber: string;\r\n sku: string;\r\n isValid: boolean;\r\n}\r\n\r\ninterface BulkPrintState {\r\n isLoading: boolean;\r\n certificates: Certificate[];\r\n invalidCertificateNumber: boolean;\r\n igiCheckDone: boolean;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n control: {\r\n padding: `${theme.spacing(2)}px 0`,\r\n },\r\n\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#fff\",\r\n },\r\n })\r\n);\r\n\r\nfunction BulkPrint(props: Props): JSX.Element {\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n certificates: [],\r\n invalidCertificateNumber: false,\r\n isLoading: false,\r\n igiCheckDone: false,\r\n });\r\n\r\n const newCertificateRef = useRef(null);\r\n\r\n useEffect(() => {\r\n props.setTitle(\"Bulk Print\");\r\n });\r\n\r\n const addNewCertificate = (value: string) => {\r\n if (value) {\r\n setState({ ...state, isLoading: true });\r\n Api.getCertificate(value)\r\n .then((cert) => {\r\n const newCert = {\r\n certificateNumber: cert.certificateNumber,\r\n validCertificateNumber: true,\r\n sku: cert.sku ? cert.sku.toString() : \"\",\r\n isValid: !!cert.sku,\r\n };\r\n setState({\r\n ...state,\r\n isLoading: false,\r\n invalidCertificateNumber: false,\r\n certificates: [...state.certificates, newCert],\r\n });\r\n if (newCertificateRef.current) {\r\n newCertificateRef.current.value = \"\";\r\n }\r\n })\r\n .catch((e) => {\r\n setState({\r\n ...state,\r\n isLoading: false,\r\n invalidCertificateNumber: true,\r\n });\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n }\r\n };\r\n\r\n const deleteCertificate = (index: number) => {\r\n const certs = [...state.certificates];\r\n certs.splice(index, 1);\r\n setState({ ...state, certificates: certs });\r\n };\r\n\r\n const modifySku = (value: string, index: number) => {\r\n const certs = [...state.certificates];\r\n const cert = certs[index];\r\n\r\n certs[index] = {\r\n isValid: true,\r\n certificateNumber: cert.certificateNumber,\r\n sku: value,\r\n };\r\n\r\n setState({ ...state, certificates: certs });\r\n };\r\n\r\n const applyValidation = (invalidSkus: CertificateSkuPair[]) => {\r\n const certs = [...state.certificates];\r\n\r\n certs.forEach((cert) => {\r\n cert.isValid =\r\n !!cert.sku &&\r\n invalidSkus.every(\r\n (s) => cert.certificateNumber !== s.certificateNumber\r\n );\r\n });\r\n\r\n setState({ ...state, certificates: certs });\r\n };\r\n\r\n const saveSkus = () => {\r\n setState({ ...state, isLoading: true });\r\n return Api.bulkUpdateSkus(\r\n state.certificates\r\n .filter((c) => !!c.sku)\r\n .map((c) => ({\r\n certificateNumber: c.certificateNumber,\r\n sku: parseInt(c.sku),\r\n }))\r\n ).then((invalidSkus) => {\r\n setState({ ...state, isLoading: false });\r\n applyValidation(invalidSkus);\r\n if (invalidSkus.length) {\r\n return Promise.reject(\"All certificates require a valid SKU\");\r\n }\r\n });\r\n };\r\n\r\n const onKeyDown = (event: React.KeyboardEvent): void => {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (newCertificateRef.current?.value) {\r\n addNewCertificate(newCertificateRef.current?.value);\r\n }\r\n }\r\n };\r\n\r\n const printPdf = () => {\r\n setState({ ...state, isLoading: true });\r\n return saveSkus()\r\n .then((e) => {\r\n return Api.bulkPrintCertificates(\r\n state.certificates.map((c) => c.certificateNumber)\r\n );\r\n })\r\n .then((blob) => {\r\n const dataUrl = window.URL.createObjectURL(blob);\r\n const pdfWindow = window.open(dataUrl);\r\n pdfWindow?.print();\r\n })\r\n .catch((e) => {\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n })\r\n .finally(() => setState({ ...state, isLoading: false }));\r\n };\r\n\r\n const handleFileSelect = (e: React.ChangeEvent) => {\r\n const files = e.target.files;\r\n const reader = new FileReader();\r\n\r\n if (files?.length) {\r\n reader.onload = (() => (e: ProgressEvent) => {\r\n handleCsvContent(e.target?.result?.toString());\r\n })();\r\n\r\n reader.readAsText(files[0]);\r\n }\r\n };\r\n\r\n const handleCsvContent = (data: string | undefined) => {\r\n if (!data) return;\r\n\r\n const certRegEx = /^[a-z0-9]{1,20}$/i;\r\n const skuRegEx = /^\\d+$/;\r\n const newLineRegEx = /\\r?\\n|\\n/g;\r\n let certData: Certificate[] = [];\r\n try {\r\n certData = data\r\n .split(newLineRegEx)\r\n .reduce((result, row, idx) => {\r\n const cells = row.split(\",\");\r\n switch (cells.length) {\r\n case 0:\r\n break;\r\n case 1: {\r\n const certificateNumber = cells[0].trim();\r\n if (!!certificateNumber) {\r\n if (!certRegEx.test(certificateNumber)) {\r\n throw new Error(\r\n `Invalid certificate number '${certificateNumber}' in row ${idx}`\r\n );\r\n }\r\n result.push({ certificateNumber, sku: \"\", isValid: false });\r\n }\r\n break;\r\n }\r\n case 2: {\r\n const certificateNumber = cells[0].trim();\r\n if (!certRegEx.test(certificateNumber)) {\r\n throw new Error(\r\n `Invalid certificate number '${\r\n certificateNumber || \"empty\"\r\n }' in row ${idx}`\r\n );\r\n }\r\n const sku = cells[1].trim();\r\n if (sku && !skuRegEx.test(sku)) {\r\n throw new Error(`Invalid SKU '${sku}' in row ${idx}`);\r\n }\r\n result.push({ certificateNumber, sku, isValid: false });\r\n break;\r\n }\r\n default: {\r\n throw new Error(`Invalid data in row ${idx}: '${row}'`);\r\n }\r\n }\r\n return result;\r\n }, []);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n } catch (ex: any) {\r\n enqueueSnackbar(ex.toString(), { variant: \"error\" });\r\n return;\r\n }\r\n\r\n if (!certData || certData.length === 0) {\r\n enqueueSnackbar(\"Invalid or Empty Data\", { variant: \"error\" });\r\n return;\r\n }\r\n\r\n Api.getCertificates(certData.map((c) => c.certificateNumber))\r\n .then((response) => {\r\n const errors: string[] = [];\r\n const newCerts = certData.reduce((acc, cur) => {\r\n const match = response.find(\r\n (r) => r.certificateNumber === cur.certificateNumber\r\n );\r\n if (match) {\r\n acc.push({\r\n certificateNumber: cur.certificateNumber,\r\n sku: cur.sku,\r\n isValid: !!cur.sku,\r\n });\r\n } else {\r\n errors.push(cur.certificateNumber);\r\n }\r\n return acc;\r\n }, []);\r\n setState({\r\n ...state,\r\n certificates: [...state.certificates, ...newCerts],\r\n });\r\n if (errors.length > 0) {\r\n enqueueSnackbar(\r\n `Invalid certificate numbers: '${errors.join(\", \")}'`,\r\n { variant: \"error\" }\r\n );\r\n }\r\n })\r\n .catch((e) => {\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n };\r\n\r\n const loadCertFromIGI = () => {\r\n if (newCertificateRef.current?.value) {\r\n setState({ ...state, isLoading: true });\r\n return Api.getCertificateFromIgi(newCertificateRef.current?.value)\r\n .then(() => setState({ ...state, igiCheckDone: true }))\r\n .then(() => {\r\n if (newCertificateRef.current?.value) {\r\n addNewCertificate(newCertificateRef.current?.value);\r\n } else {\r\n setState({ ...state, isLoading: false });\r\n }\r\n })\r\n .catch((e) => {\r\n setState({\r\n ...state,\r\n igiCheckDone: true,\r\n invalidCertificateNumber: true,\r\n isLoading: false,\r\n });\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n Manual Entry\r\n \r\n {state.certificates.map((cert, index) => (\r\n \r\n \r\n \r\n \r\n\r\n \r\n modifySku(e.target.value, index)}\r\n autoFocus={\r\n !cert.isValid && index === state.certificates.length - 1\r\n }\r\n />\r\n \r\n deleteCertificate(index)} />\r\n \r\n ))}\r\n \r\n \r\n setState({ ...state, igiCheckDone: false })}\r\n error={state.invalidCertificateNumber}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n printPdf()}\r\n disabled={\r\n !state.certificates.length ||\r\n !state.certificates.every((c) => !!c.sku) ||\r\n state.isLoading\r\n }\r\n >\r\n Print\r\n \r\n \r\n {!state.igiCheckDone && state.invalidCertificateNumber ? (\r\n \r\n \r\n Load from IGI\r\n \r\n \r\n ) : (\r\n <> \r\n )}\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n}\r\n\r\nexport default BulkPrint;\r\n","export type AutoCompleteOption = { title: string; value: string };\r\n\r\nexport const None = { title: \"\", value: \"\" };\r\n\r\nexport const GradingCompanyOptions = [\"ADGL\", \"GSI\", \"IGI\"].map((value) => {\r\n return { title: value, value };\r\n});\r\n\r\nexport const ColourGradeOptions = [\r\n \"D\",\r\n \"D-E\",\r\n \"E\",\r\n \"E-F\",\r\n \"F\",\r\n \"F-G\",\r\n \"G\",\r\n \"G-H\",\r\n \"H\",\r\n \"H-I\",\r\n \"I\",\r\n \"I-J\",\r\n \"J\",\r\n \"J-K\",\r\n \"K\",\r\n \"K-L\",\r\n \"L\",\r\n \"L-M\",\r\n \"M\",\r\n \"M-N\",\r\n \"N\",\r\n \"N-O\",\r\n \"O\",\r\n \"O-P\",\r\n \"Other\",\r\n].map((value) => {\r\n return { title: value, value };\r\n});\r\n\r\nexport const ClarityGradeOptions = [\r\n \"F\",\r\n \"IF\",\r\n \"VVS1\",\r\n \"VVS2\",\r\n \"VS1\",\r\n \"VS2\",\r\n \"SI1\",\r\n \"SI2\",\r\n \"I1\",\r\n \"I2\",\r\n \"I3\",\r\n].map((value) => {\r\n return { title: value, value };\r\n});\r\n","import {\r\n Backdrop,\r\n Button,\r\n CircularProgress,\r\n createStyles,\r\n Grid,\r\n makeStyles,\r\n TextField,\r\n Theme,\r\n} from \"@material-ui/core\";\r\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\r\nimport * as React from \"react\";\r\nimport { useEffect, useState } from \"react\";\r\nimport Api from \"../../api/DiamondCertificateApi\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport {\r\n AutoCompleteOption,\r\n ClarityGradeOptions,\r\n ColourGradeOptions,\r\n GradingCompanyOptions,\r\n None,\r\n} from \"./AddCardCertificateOptions\";\r\n\r\ntype ChangeEvent = React.ChangeEvent;\r\n\r\ninterface AutoCompleteState {\r\n gradingCompanyInput: string;\r\n colourGradeInput: string;\r\n clarityGradeInput: string;\r\n}\r\n\r\ninterface Values {\r\n gradingCompanyOption: AutoCompleteOption;\r\n certificateNumber: string;\r\n sku: string;\r\n shapeCut: string;\r\n measurements: string;\r\n weight: string;\r\n colourGradeOption: AutoCompleteOption;\r\n clarityGradeOption: AutoCompleteOption;\r\n polishSymmetry: string;\r\n cutGrade: string;\r\n treatment: string;\r\n comments: string;\r\n isLoading: boolean;\r\n}\r\n\r\nconst defaultAutoCompleteState = (): AutoCompleteState => {\r\n return {\r\n gradingCompanyInput: \"\",\r\n colourGradeInput: \"\",\r\n clarityGradeInput: \"\",\r\n };\r\n};\r\n\r\nconst defaultValues = (): Values => {\r\n return {\r\n gradingCompanyOption: None,\r\n certificateNumber: \"\",\r\n sku: \"\",\r\n shapeCut: \"\",\r\n measurements: \"\",\r\n weight: \"\",\r\n colourGradeOption: None,\r\n clarityGradeOption: None,\r\n polishSymmetry: \"\",\r\n cutGrade: \"\",\r\n treatment: \"\",\r\n comments: \"\",\r\n isLoading: false,\r\n };\r\n};\r\n\r\ninterface Errors {\r\n gradingCompany: string;\r\n certificateNumber: string;\r\n sku: string;\r\n shapeCut: string;\r\n measurements: string;\r\n weight: string;\r\n colourGrade: string;\r\n clarityGrade: string;\r\n polishSymmetry: string;\r\n cutGrade: string;\r\n treatment: string;\r\n comments: string;\r\n}\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n \"& .MuiTextField-root\": {\r\n width: 600,\r\n },\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#fff\",\r\n },\r\n paper: {\r\n width: \"100%\",\r\n marginBottom: theme.spacing(2),\r\n padding: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\ninterface Props {\r\n setTitle: (title: string) => void;\r\n}\r\n\r\nexport default function AddCardCertificate(props: Props): JSX.Element {\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [state, setState] = useState(defaultValues());\r\n const [autoCompleteState, setAutoCompleteState] = useState(\r\n defaultAutoCompleteState()\r\n );\r\n const [errors, setErrors] = useState({} as Errors);\r\n\r\n const [formIsValid, setFormIsValid] = useState(false);\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n props.setTitle(\"Add Card Certificate\");\r\n });\r\n\r\n const validate = (values: Values) => {\r\n const certNumberRegEx = /^[a-z0-9]{1,20}$/i;\r\n const skuRegex = /^[0-9]{6,8}$/i;\r\n const alpha20Regex = /^[a-z,\\s]{1,20}$/i;\r\n const alphaSlash20Regex = /^[a-z,\\s,/]{1,20}$/i;\r\n const weightRegex = /^[0-9]{1,2}\\.[0-9]{1,2}$/i;\r\n const error = {} as Errors;\r\n\r\n if (!values.gradingCompanyOption || values.gradingCompanyOption === None) {\r\n error.gradingCompany = \"must not be empty\";\r\n }\r\n\r\n if (\r\n !values.certificateNumber ||\r\n !certNumberRegEx.test(values.certificateNumber)\r\n ) {\r\n error.certificateNumber =\r\n \"must be between 1 and 20 alphanumeric characters\";\r\n }\r\n\r\n if (!values.sku || !skuRegex.test(values.sku)) {\r\n error.sku = \"must be between 6 and 8 numbers\";\r\n }\r\n\r\n if (!values.shapeCut || !alpha20Regex.test(values.shapeCut)) {\r\n error.shapeCut = \"must be between 1 and 20 letters\";\r\n }\r\n\r\n if (!values.measurements) {\r\n error.measurements = \"must not be empty\";\r\n }\r\n\r\n if (!values.weight || !weightRegex.test(values.weight)) {\r\n error.weight = \"must be a number of the format ##.##\";\r\n }\r\n\r\n if (!values.colourGradeOption || values.colourGradeOption === None) {\r\n error.colourGrade = \"must not be empty\";\r\n }\r\n\r\n if (!values.clarityGradeOption || values.clarityGradeOption === None) {\r\n error.clarityGrade = \"must not be empty\";\r\n }\r\n\r\n if (\r\n !values.polishSymmetry ||\r\n !alphaSlash20Regex.test(values.polishSymmetry)\r\n ) {\r\n error.polishSymmetry = \"must be between 1 and 20 letters\";\r\n }\r\n\r\n if (!values.cutGrade || !alphaSlash20Regex.test(values.cutGrade)) {\r\n error.cutGrade = \"must be between 1 and 20 letters\";\r\n }\r\n\r\n if (!values.treatment || !alpha20Regex.test(values.treatment)) {\r\n error.treatment = \"must be between 1 and 20 letters\";\r\n }\r\n\r\n if (values.comments && values.comments.length > 150) {\r\n error.comments = \"must be 150 characters or less\";\r\n }\r\n\r\n setErrors(error);\r\n setFormIsValid(\r\n Object.entries(error).every(([_, err]) => !err || err === \"\")\r\n );\r\n };\r\n\r\n const handleSubmit = (e?: React.FormEvent) => {\r\n e?.preventDefault();\r\n if (formIsValid) {\r\n setState({\r\n ...state,\r\n isLoading: true,\r\n });\r\n const req = {\r\n gradingCompany: state.gradingCompanyOption.value,\r\n certificateNumber: state.certificateNumber,\r\n sku: state.sku,\r\n shapeCut: state.shapeCut,\r\n measurements: state.measurements,\r\n weight: state.weight,\r\n colourGrade: state.colourGradeOption.value,\r\n clarityGrade: state.clarityGradeOption.value,\r\n polishSymmetry: state.polishSymmetry,\r\n cutGrade: state.cutGrade,\r\n treatment: state.treatment,\r\n comments: state.comments,\r\n };\r\n\r\n Api.createCertificate(req)\r\n .then(() => {\r\n enqueueSnackbar(\"certificate created\", { variant: \"success\" });\r\n setState(defaultValues());\r\n setFormIsValid(false);\r\n })\r\n .catch((ex) => {\r\n setState({\r\n ...state,\r\n isLoading: false,\r\n });\r\n setAutoCompleteState(defaultAutoCompleteState());\r\n enqueueSnackbar(ex.toString(), { variant: \"error\" });\r\n });\r\n }\r\n };\r\n\r\n const onChange = (e: ChangeEvent) => {\r\n const next = { ...state, [e.target.name]: e.target.value };\r\n setState(next);\r\n validate(next);\r\n };\r\n\r\n const onAutoCompleteChange = (name: string, opt: AutoCompleteOption) => {\r\n const next = { ...state, [name]: opt };\r\n setState(next);\r\n validate(next);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n option.title}\r\n onChange={(_, newValue: AutoCompleteOption | null) => {\r\n onAutoCompleteChange(\r\n \"gradingCompanyOption\",\r\n newValue || None\r\n );\r\n }}\r\n value={state.gradingCompanyOption}\r\n inputValue={autoCompleteState.gradingCompanyInput}\r\n onInputChange={(_, gradingCompanyInput) => {\r\n setAutoCompleteState({\r\n ...autoCompleteState,\r\n gradingCompanyInput,\r\n });\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n option.title}\r\n onChange={(_, newValue: AutoCompleteOption | null) => {\r\n onAutoCompleteChange(\"colourGradeOption\", newValue || None);\r\n }}\r\n value={state.colourGradeOption}\r\n inputValue={autoCompleteState.colourGradeInput}\r\n onInputChange={(_, colourGradeInput) => {\r\n setAutoCompleteState({\r\n ...autoCompleteState,\r\n colourGradeInput,\r\n });\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n \r\n option.title}\r\n onChange={(_, newValue: AutoCompleteOption | null) => {\r\n onAutoCompleteChange(\"clarityGradeOption\", newValue || None);\r\n console.log(\"test\");\r\n }}\r\n value={state.clarityGradeOption}\r\n inputValue={autoCompleteState.clarityGradeInput}\r\n onInputChange={(_, clarityGradeInput) => {\r\n setAutoCompleteState({\r\n ...autoCompleteState,\r\n clarityGradeInput,\r\n });\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Submit\r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n}\r\n","import { TableHead, TableRow, TableCell } from \"@material-ui/core\";\r\nimport { CertificateDetails } from \"../../api/DiamondCertificateApi\";\r\nimport { Order } from \"../EnhancedTable/EnhancedTable\";\r\n\r\ninterface HeadCell {\r\n disablePadding: boolean;\r\n id: keyof CertificateDetails;\r\n label: string;\r\n numeric: boolean;\r\n}\r\n\r\nconst headCells: HeadCell[] = [\r\n {\r\n id: \"certificateNumber\",\r\n numeric: false,\r\n disablePadding: true,\r\n label: \"Certificate #\",\r\n },\r\n { id: \"sku\", numeric: true, disablePadding: false, label: \"Sku\" },\r\n { id: \"clarity\", numeric: false, disablePadding: false, label: \"Clarity\" },\r\n { id: \"colour\", numeric: false, disablePadding: false, label: \"Colour\" },\r\n { id: \"comments\", numeric: false, disablePadding: false, label: \"Comments\" },\r\n { id: \"cutGrade\", numeric: false, disablePadding: false, label: \"Cut Grade\" },\r\n {\r\n id: \"measurements\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Measurements\",\r\n },\r\n { id: \"polish\", numeric: false, disablePadding: false, label: \"Polish\" },\r\n { id: \"shape\", numeric: false, disablePadding: false, label: \"Shape\" },\r\n {\r\n id: \"treatment\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Treatment\",\r\n },\r\n { id: \"weight\", numeric: true, disablePadding: false, label: \"Weight\" },\r\n {\r\n id: \"created\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Created\",\r\n },\r\n {\r\n id: \"createdBy\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Created By\",\r\n },\r\n {\r\n id: \"modified\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Modified\",\r\n },\r\n {\r\n id: \"modifiedBy\",\r\n numeric: false,\r\n disablePadding: false,\r\n label: \"Modified By\",\r\n },\r\n];\r\n\r\nexport interface EnhancedTableHeadProps {\r\n onRequestSort: (\r\n event: React.MouseEvent,\r\n property: keyof CertificateDetails\r\n ) => void;\r\n order: Order;\r\n orderBy: string;\r\n rowCount: number;\r\n}\r\n\r\nconst EnhancedTableHead = (props: EnhancedTableHeadProps): JSX.Element => {\r\n const { order, orderBy } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {headCells.map((headCell) => (\r\n \r\n {headCell.label}\r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default EnhancedTableHead;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport {\r\n createStyles,\r\n lighten,\r\n makeStyles,\r\n Theme,\r\n} from \"@material-ui/core/styles\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport TableContainer from \"@material-ui/core/TableContainer\";\r\nimport TablePagination from \"@material-ui/core/TablePagination\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { Order } from \"../EnhancedTable/EnhancedTable\";\r\nimport {\r\n Backdrop,\r\n Button,\r\n CircularProgress,\r\n InputBase,\r\n} from \"@material-ui/core\";\r\nimport EnhancedTableHead from \"./EnhancedTableHead\";\r\nimport DiamondCertificateApi, {\r\n CertificateDetails,\r\n} from \"../../api/DiamondCertificateApi\";\r\nimport FilterIcon from \"@material-ui/icons/FilterList\";\r\n\r\nconst useToolbarStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(1),\r\n flex: \"1 1 100%\",\r\n },\r\n highlight:\r\n theme.palette.type === \"light\"\r\n ? {\r\n color: theme.palette.secondary.main,\r\n backgroundColor: lighten(theme.palette.secondary.light, 0.85),\r\n }\r\n : {\r\n color: theme.palette.text.primary,\r\n backgroundColor: theme.palette.secondary.dark,\r\n },\r\n title: {\r\n marginRight: \"200px\",\r\n },\r\n search: {\r\n position: \"relative\",\r\n display: \"flex\",\r\n },\r\n searchButton: {\r\n \"&:hover\": {\r\n backgroundColor: lighten(theme.palette.primary.main, 0.3),\r\n },\r\n },\r\n inputRoot: {\r\n color: \"inherit\",\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 1, 1, 0),\r\n paddingLeft: \"10px\",\r\n width: \"100%\",\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: lighten(theme.palette.secondary.light, 0.7),\r\n \"&:hover\": {\r\n backgroundColor: lighten(theme.palette.secondary.light, 0.5),\r\n },\r\n marginRight: theme.spacing(2),\r\n },\r\n })\r\n);\r\n\r\nexport interface EnhancedToolBarProps {\r\n filter: (filterString: string) => void;\r\n}\r\n\r\nconst EnhancedTableToolbar = ({ filter }: EnhancedToolBarProps) => {\r\n const classes = useToolbarStyles();\r\n const [filterString, setFilterString] = useState(\"\");\r\n\r\n return (\r\n \r\n \r\n Certificates\r\n \r\n {\r\n e.preventDefault();\r\n filter(filterString);\r\n }}\r\n >\r\n setFilterString(e.currentTarget.value)}\r\n />\r\n filter(filterString)}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: \"100%\",\r\n },\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#fff\",\r\n },\r\n formControl: {\r\n margin: theme.spacing(0),\r\n minWidth: 120,\r\n },\r\n paper: {\r\n width: \"100%\",\r\n marginBottom: theme.spacing(2),\r\n },\r\n table: {\r\n minWidth: 750,\r\n },\r\n editableCell: {\r\n padding: 0,\r\n },\r\n visuallyHidden: {\r\n border: 0,\r\n clip: \"rect(0 0 0 0)\",\r\n height: 1,\r\n margin: -1,\r\n overflow: \"hidden\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 20,\r\n width: 1,\r\n },\r\n })\r\n);\r\n\r\ninterface Props {\r\n setTitle: (title: string) => void;\r\n}\r\n\r\ninterface CertificatesState {\r\n order: Order;\r\n orderBy: keyof CertificateDetails;\r\n page: number;\r\n rowsPerPage: number;\r\n certificateNumberFilter: string;\r\n}\r\n\r\nexport default function EnhancedTable(props: Props): JSX.Element {\r\n const [state, setState] = useState({\r\n order: \"asc\",\r\n orderBy: \"created\",\r\n page: 0,\r\n rowsPerPage: 10,\r\n certificateNumberFilter: \"\",\r\n });\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [rows, setRows] = useState([]);\r\n const [numberOfCertififcates, setNumberOfCertififcates] = useState(0);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n useEffect(() => {\r\n props.setTitle(\"Certificates\");\r\n });\r\n\r\n useEffect(() => {\r\n setIsLoading(true);\r\n DiamondCertificateApi.getCertificateList(\r\n state.page,\r\n state.rowsPerPage,\r\n state.certificateNumberFilter\r\n )\r\n .then((res) => {\r\n setRows(res.certificates);\r\n setNumberOfCertififcates(res.totalCount);\r\n setIsLoading(false);\r\n })\r\n .catch((e) => {\r\n setIsLoading(false);\r\n enqueueSnackbar(e.toString(), { variant: \"error\" });\r\n });\r\n }, [\r\n state.certificateNumberFilter,\r\n enqueueSnackbar,\r\n state.page,\r\n state.rowsPerPage,\r\n ]);\r\n\r\n const classes = useStyles();\r\n\r\n const handleRequestSort = (\r\n event: React.MouseEvent,\r\n property: keyof CertificateDetails\r\n ) => {\r\n const isAsc = state.orderBy === property && state.order === \"asc\";\r\n setState({\r\n ...state,\r\n order: isAsc ? \"desc\" : \"asc\",\r\n orderBy: property,\r\n });\r\n };\r\n\r\n const handleChangePage = (event: unknown, newPage: number) => {\r\n setState({\r\n ...state,\r\n page: newPage,\r\n });\r\n };\r\n\r\n const handleChangeRowsPerPage = (\r\n event: React.ChangeEvent\r\n ) => {\r\n setState({\r\n ...state,\r\n page: 0,\r\n rowsPerPage: parseInt(event.target.value, 10),\r\n });\r\n };\r\n\r\n const shortenString = (length: number, str?: string) =>\r\n str && str.length > length ? str.slice(0, length - 3) + \"...\" : str;\r\n\r\n const emptyRows =\r\n state.rowsPerPage - Math.min(state.rowsPerPage, rows.length);\r\n\r\n const filterRows = (filterString: string) => {\r\n console.log(\"filterRows\", filterString);\r\n setState({ ...state, page: 0, certificateNumberFilter: filterString });\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rows.map((row, index) => {\r\n const labelId = `enhanced-table-checkbox-${index}`;\r\n\r\n return (\r\n \r\n \r\n \r\n {row.certificateNumber}\r\n \r\n {row.sku}\r\n {row.clarity}\r\n {row.colour}\r\n \r\n {row.comments}\r\n \r\n \r\n {row.cutGrade}\r\n \r\n {row.measurements}\r\n \r\n {row.polish}\r\n \r\n \r\n {row.shape}\r\n \r\n {row.treatment}\r\n {row.weight}\r\n \r\n {new Date(row.created).toLocaleString(\"en-AU\")}\r\n \r\n \r\n {shortenString(15, row.createdBy)}\r\n \r\n \r\n {row.modified\r\n ? new Date(row.modified).toLocaleString(\"en-AU\")\r\n : \"\"}\r\n \r\n \r\n {shortenString(15, row.modifiedBy)}\r\n \r\n \r\n );\r\n })}\r\n {emptyRows > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n );\r\n}\r\n","import \"./App.css\";\r\nimport clsx from \"clsx\";\r\nimport { Switch, Route, withRouter } from \"react-router-dom\";\r\nimport QuickPrint from \"./components/QuickPrint/QuickPrint\";\r\nimport {\r\n AppBar,\r\n Button,\r\n createMuiTheme,\r\n createStyles,\r\n CssBaseline,\r\n Divider,\r\n Drawer,\r\n IconButton,\r\n List,\r\n makeStyles,\r\n Menu,\r\n MenuItem,\r\n Theme,\r\n ThemeProvider,\r\n Toolbar,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport MenuIcon from \"@material-ui/icons/Menu\";\r\nimport React from \"react\";\r\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\r\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\r\nimport FlashOnIcon from \"@material-ui/icons/FlashOn\";\r\nimport PrintIcon from \"@material-ui/icons/Print\";\r\nimport PostAddIcon from \"@material-ui/icons/PostAdd\";\r\nimport CertificateIcon from \"@material-ui/icons/Payment\";\r\nimport CardMembershipIcon from \"@material-ui/icons/CardMembership\";\r\nimport VerifiedUserOutlinedIcon from \"@material-ui/icons/VerifiedUserOutlined\";\r\nimport { SnackbarProvider } from \"notistack\";\r\nimport { MsalAuthenticationTemplate } from \"@azure/msal-react\";\r\nimport { InteractionType } from \"@azure/msal-browser\";\r\nimport { loginRequest } from \"./authConfig\";\r\nimport A4CertificateRequests from \"./components/A4CertificateRequests/A4CertificateRequests\";\r\nimport CardCertificateRequests from \"./components/CardCertificateRequests/CardCertificateRequests\";\r\nimport ListItemLink from \"./components/ListItemLink/ListItemLink\";\r\nimport { Warehouse, WarehouseContext } from \"./context/WarehouseContext\";\r\nimport BulkPrint from \"./components/BulkPrint/BulkPrint\";\r\nimport AddCardCertificate from \"./components/AddCardCertificate/AddCardCertificate\";\r\nimport CardCertificates from \"./components/CardCertificates/CardCertificates\";\r\n\r\nconst drawerWidth = 256;\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n light: \"#41173F\",\r\n main: \"#41173F\",\r\n dark: \"#41173F\",\r\n },\r\n secondary: {\r\n light: \"#BCA1CC\",\r\n main: \"#BCA1CC\",\r\n dark: \"#BCA1CC\",\r\n },\r\n },\r\n});\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: \"flex\",\r\n },\r\n appBar: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n },\r\n appBarShift: {\r\n marginLeft: drawerWidth,\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create([\"width\", \"margin\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n menuButton: {\r\n marginRight: 36,\r\n },\r\n hide: {\r\n display: \"none\",\r\n },\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n whiteSpace: \"nowrap\",\r\n },\r\n drawerOpen: {\r\n width: drawerWidth,\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n drawerClose: {\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n overflowX: \"hidden\",\r\n width: theme.spacing(7) + 1,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: theme.spacing(9) + 1,\r\n },\r\n },\r\n title: {\r\n flexGrow: 1,\r\n },\r\n toolbar: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n },\r\n })\r\n);\r\n\r\nfunction App() {\r\n const classes = useStyles();\r\n\r\n const [open, setOpen] = React.useState(true);\r\n const [title, setTitle] = React.useState(\"\");\r\n const [warehouse, setWarehouse] = React.useState(Warehouse.AU);\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const menuOpen = Boolean(anchorEl);\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleClick = (warehouse: Warehouse) => {\r\n setWarehouse(warehouse);\r\n handleClose();\r\n };\r\n\r\n const handleDrawerOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleDrawerClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const handleMenu = (event: React.MouseEvent) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n
    \r\n \r\n {warehouse}\r\n \r\n \r\n handleClick(Warehouse.AU)}>\r\n AU\r\n \r\n handleClick(Warehouse.CA)}>\r\n CA\r\n \r\n handleClick(Warehouse.None)}>\r\n None\r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n {theme.direction === \"rtl\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n
    \r\n \r\n \r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n \r\n \r\n \r\n }\r\n />\r\n }\r\n />\r\n }\r\n />\r\n \r\n \r\n
    \r\n
    \r\n \r\n (\r\n \r\n )}\r\n />\r\n (\r\n \r\n )}\r\n />\r\n (\r\n \r\n )}\r\n />\r\n (\r\n \r\n )}\r\n />\r\n (\r\n \r\n )}\r\n />\r\n (\r\n \r\n )}\r\n />\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n}\r\n\r\nexport default withRouter(App);\r\n","import { ReportHandler } from \"web-vitals\";\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler): void => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./index.css\";\r\nimport App from \"./App\";\r\nimport reportWebVitals from \"./reportWebVitals\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport { MsalProvider } from \"@azure/msal-react\";\r\nimport { pca } from \"./authConfig\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}