{"version":3,"sources":["model/reduxClientSlice.js","model/pathLink.js","model/client.js","model/userRoles.js","component/Alert.js","component/Textbox.js","page/signin.js","component/Loading.js","component/Selector.js","component/LabelledCheckbox.js","component/Modalbox.js","component/AutoQuerybox.js","component/Numbox.js","model/dataFilter.js","page/modalQueryFilter.js","page/modalSave.js","page/reviewHeader.js","page/reviewTable.js","page/modalBrandAutosetProposal.js","model/constants.js","model/stats.js","model/mixinBase.js","model/mixinReviewer.js","model/mixinCorrector.js","model/mixinSelection.js","model/mixinModels.js","model/paginator.js","page/reviewPage.js","page/correctionHeader.js","page/correctionTable.js","model/brand.js","page/modalBrandChange.js","model/taxonomy.js","page/modalTaxonomyChange.js","page/modalBrandProposal.js","page/correctionPage.js","App.js","reportWebVitals.js","model/reduxStore.js","index.js"],"names":["clientSlice","createSlice","name","initialState","initialized","signedIn","error","message","loading","user","roles","email","taxonomy","reducers","setInitialized","state","action","payload","setSignIn","setError","setMessage","clearMessage","setSignOut","setTaxonomy","console","log","actions","showMessage","dispatch","setTimeout","showError","selectInitialized","client","selectSignedIn","selectUser","selectError","selectMessage","selectTaxonomy","BASE_PATH","PathLink","text","replace","paths","reduce","prev","cur","url","curPath","a","split","map","x","idx","rawString","length","charAt","toUpperCase","slice","path","SIGNIN_PATH","BRAND_REVIEW_PATH","encodeText","BRAND_CORRECTION_PATH","CATEGORY_REVIEW_PATH","CATEGORY_CORRECTION_PATH","SIGNEDIN_COOKIE","AUTH_API_URL","ANNOTATION_API_URL","token","Client","password","mail","trim","pass","data","axios","post","withCredentials","res","setCookie","response","undefined","cookie","parse","document","put","include_roles","dropCookie","localStorage","clear","delete","headers","authorization","authorizedRequest","this","request","method","params","shouldRefresh","exp","JwtDecode","Date","now","UserRoles","includes","Alert","props","elevation","variant","Textbox","label","small","value","onChange","autoFocus","TextField","id","size","fullWidth","type","style","marginBottom","e","target","useStyles","makeStyles","theme","createStyles","root","margin","width","height","padding","borderRadius","border","field","color","SignInPage","classes","useDispatch","useState","setEmail","setPassword","className","noValidate","autoComplete","onSubmit","preventDefault","signIn","Button","float","Loading","CircularProgress","formControl","spacing","minWidth","selectEmpty","marginTop","Selector","selections","disabled","formWidth","FormControl","InputLabel","Select","labelId","event","current","i","MenuItem","textAlign","LabelledCheckbox","FormControlLabel","control","Checkbox","checked","paper","backgroundColor","palette","background","boxShadow","shadows","buttonSection","paddingTop","button","cancel","marginLeft","Modalbox","open","title","children","onClose","onSave","disableSave","saveText","cancelText","Modal","onClick","AutoQuerybox","options","onDebounce","debounced","useDebouncedCallback","Autocomplete","freeSolo","_event","reason","renderInput","callback","Numbox","test","DATA_FILTER_RSD","DATA_FILTER_MERCHANT","DATA_FILTER_SALES","DATA_FILTER_CATEGORY","DATA_FILTER_RSD_CHAR_ID","DATA_FILTER_RSD_CHAR","DataFilter","prefix","rsdFilter","getItem","parm","merchantFilter","salesFilter","categoryFilter","rsdCharFilterId","parseInt","rsdCharFilter","numFilteredDataIds","setRSDFilter","setMerchantFilter","setSalesFilter","setCategoryFilter","setRSDCharFilter","setItem","rsdCharFilterList","filterList","forEach","rsd","receipt_short_description","char","push","sort","splice","join","hasFilters","Array","keys","toLowerCase","merchant","sales","category","rsdChar","filteredDataIds","valid","merchant_name","num_sales","filterType","filterString","filter","caseInsensitiveList","postfix","fontWeight","ModalQueryFilter","dataFilter","setDisableSave","receiptShortDescription","setReceiptShortDescription","merchantName","setMerchantName","numSales","setNumSales","setCategory","rsdOptions","setRsdOptions","merchantOptions","setMerchantOptions","categoryOptions","setCategoryOptions","unchanged","categoryFitler","setOptions","suggestions","filterSuggestions","Grid","container","item","xs","ModalSave","content","statsLabel","statsDivider","editCorrections","save","editButton","marginRight","ReviewHeader","rows","reviewer","paginator","numApproved","numRejected","stats","filterCount","onReload","onFilter","onSort","onPageBack","onPageForward","onPageConfirmed","rsdOverride","setRSDOverride","filterLabel","setFilterLabel","queryOrderBy","sortBy","setSortBy","queryDesc","orderBy","setOrderBy","openFilter","setOpenFilter","openSave","setOpenSave","useEffect","setQueryOrderBy","setQueryDesc","startIcon","Chip","PageNavigationButton","numPages","curPage","pagePosition","allConfirmed","pageConfirmed","queryNoBrand","check","setQueryNoBrand","BrandCount","Divider","orientation","dataLength","IconButton","aria-label","brandList","count","Tooltip","row","position","cursor","borderTop","rowApproved","rowRejected","rowCellBold","divider","hoverButtons","top","right","bottom","ReviewTable","isBrand","onRowClick","onAutoset","columns","setCellHeaderProps","appendBrandColumns","appendCategoryColumns","search","print","download","viewColumns","customToolbar","pagination","selectableRows","responsive","customRowRender","renderBrandRow","renderCategoryRow","_data","dataIndex","_rowIndex","BrandReviewRow","cellClick","approved","data_id","TableRow","TableCell","output","current_brand","TruncatedString","string","predicted_product_name","limit","TaxonomyPath","sector","current_sector","department","current_department","current_category","isBlank","TaxonomyRow","brand_autoset_override_id","predicted_brand","arrow","substring","ModalBrandAutosetProposal","annotation","setPrefix","confirm","setConfirm","Stats","annotations","getBrandStats","getTaxonomyStats","ids","idString","current_brand_id","blankList","authGet","taxonomyId","current_taxonomy_id","num_reviewed_annotations","num_total_annotations","ord","dsc","nbr","mixinBase","obj","baseUrl","queryOrderById","queryString","sortData","key","desc","sorted","b","getData","reviews","getDataCount","mixinReviewer","setApproved","dataId","delta","confirmRows","_idx","saveReviews","rejected","no_brand","authPut","confirmed","sendBrandAutosetProposal","authPost","review_key","removeAnnotationsByRSDPrefix","p","mixinCorrector","getCorrection","dataIdValid","correction","numCorrections","saveCorrections","changeMap","annotation_keys","changes","Object","values","removeCorrectedAnnotations","changeMaps","annotationKeys","concat","setBrandCorrections","dataIds","catalogBrandId","brandName","catalog_brand_id","catalog_brand","saveBrandProposal","proposals","setCategoryCorrections","taxonomy_id","mixinSelection","selected","numSelected","_cur","setSelected","isArray","clearSelected","allSelected","BrandReviewer","CategoryReviewer","BrandCorrector","CategoryCorrector","Paginator","reset","pageId","Math","floor","startId","endId","d","prevPageId","pageRows","nextPageId","headerRoot","borderBottom","headerContent","removeSpacing","switches","reviewCheckbox","editSection","ReviewPage","brandPrefix","categoryPrefix","useRef","setStats","setLoading","autosetData","setAutosetData","setRows","setNumApproved","setNumRejected","setFilterCount","setRSDCharFilterList","setPage","setDataIds","getStats","loadPage","prevRows","prevPageRows","nextRows","nextPageRows","result","CorrectionHeader","corrector","numCorrected","onEdit","onEditClear","displayStats","rowEdited","left","CorrectionTable","onRowChecked","onAllRowsChecked","allChecked","customHeadRender","index","cbColStyle","cbStyle","BrandRow","showButtons","setShowButtons","onHover","show","onMouseEnter","onMouseLeave","CategoryPath","visibility","EditButton","CategoryRow","component","paddingLeft","Brand","filterValue","ModalBrandChange","setBrandName","catalogBrands","setCatalogBrands","catalogBrandMap","setCatalogBrandMap","dontKnow","setDontKnow","brandValue","catalogBrand","brand","getCatalogBrands","Taxonomy","sectorList","sectors","departmentMap","departments","categoryMap","categories","searchKeyMap","search_key_map","hasOwnProperty","sectorDepartment","searchKey","_theme","ModalTaxonomyChange","useSelector","oSectorId","setOSectorId","oDepartmentId","setODepartmentId","oCategoryId","setOCategoryId","sectorId","setSectorId","departmentId","setDepartmentId","categoryId","setCategoryId","sectorUnresolved","setSectorUnresolved","departmentUnresolved","setDepartmentUnresolved","categoryUnresolved","setCategoryUnresolved","sectorValue","departmentValue","categoryValue","sectId","indexOf","deptId","catId","getTaxonomy","t","loadTaxonomy","idFromSelection","ModalBrandProposal","brandProposals","brandNames","prompt","CorrectionPage","setNumSelected","setNumCorrected","modalAnnotation","setModalAnnotation","modalBrandProposals","setModalBrandProposals","unprocessed","processed","display","fontFamily","drawer","flexShrink","whiteSpace","drawerHeader","alignItems","justifyContent","mixins","toolbar","drawerOpen","transition","transitions","create","easing","sharp","duration","enteringScreen","drawerClose","leavingScreen","overflowX","breakpoints","up","drawerItemInactive","drawerItemActive","drawerIconInactive","drawerIconActive","drawerUserCard","drawerUserName","fontSize","letterSpacing","drawerUserEmail","overflow","textOverflow","drawerUserDetails","drawAvatarOpen","drawAvatarClose","drawerLogout","flexGrow","pages","overflowY","pageView","alert","App","CssBaseline","AppDrawer","AppToolbar","isSupervisor","isBrandReviewer","exact","isBrandCorrector","isCategoryReviewer","isCategoryCorrector","RouteRedirect","severity","to","AppInitializer","refresh","history","useHistory","setOpen","handleClick","route","Drawer","clsx","Avatar","alt","src","List","AppDrawerOption","icon","tooltip","signOut","location","useLocation","ListItem","pathname","ListItemIcon","ListItemText","primary","decode","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","configureStore","reducer","clientReducer","ReactDOM","render","StrictMode","store","getElementById"],"mappings":"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","file":"static/js/main.844597a2.chunk.js","sourcesContent":["import { createSlice } from \"@reduxjs/toolkit\";\n\nfunction newUser() {\n return { roles: [], name: \"\", email: \"\" };\n}\n\nexport const clientSlice = createSlice({\n name: \"client\",\n initialState: {\n initialized: false,\n signedIn: false,\n error: null,\n message: null,\n loading: false,\n user: newUser(),\n taxonomy: null,\n },\n reducers: {\n setInitialized: (state, action) => {\n state.initialized = true;\n state.user = action.payload.user;\n },\n setSignIn: (state, action) => {\n state.signedIn = true;\n if (action.payload.user) state.user = action.payload.user;\n if (!state.initialized) state.initialized = true;\n },\n setError: (state, action) => {\n state.error = action.payload.error;\n state.message = null;\n },\n setMessage: (state, action) => {\n state.message = action.payload.message;\n state.error = null;\n },\n clearMessage: (state, action) => {\n state.message = null;\n state.error = null;\n },\n setSignOut: (state, action) => {\n state.signedIn = false;\n state.user = newUser();\n },\n setTaxonomy: (state, action) => {\n state.taxonomy = action.payload.taxonomy;\n console.log(action.payload.taxonomy);\n },\n },\n});\n\nexport const { setSignIn, setInitialized, setSignOut, setTaxonomy } = clientSlice.actions;\nconst { setError, setMessage, clearMessage } = clientSlice.actions;\n\nexport const showMessage = (message, dispatch) => {\n dispatch(setMessage({ message }));\n setTimeout(() => { dispatch(clearMessage()); }, 2000);\n};\n\nexport const showError = (error, dispatch) => {\n dispatch(setError({ error }));\n setTimeout(() => { dispatch(clearMessage()); }, 2000);\n};\n\nexport const selectInitialized = (state) => state.client.initialized;\nexport const selectSignedIn = (state) => state.client.signedIn;\nexport const selectUser = (state) => state.client.user;\nexport const selectError = (state) => state.client.error;\nexport const selectMessage = (state) => state.client.message;\nexport const selectTaxonomy = (state) => state.client.taxonomy;\nexport default clientSlice.reducer;\n","const BASE_PATH = '/dashboard';\n\nexport default class PathLink {\n static encodeText(text) {\n return `${BASE_PATH}/${text.replace(\" \", \"-\")}`;\n }\n\n static encodePaths(paths) {\n return paths.reduce((prev, cur) => {\n return `${prev}/${cur.replace(\" \", \"-\")}`;\n }, BASE_PATH);\n }\n\n static decode(url) {\n let curPath = `${BASE_PATH}`;\n const a = url\n .replace(`${BASE_PATH}/`, \"\")\n .split(\"/\");\n\n return a.map((x, idx) => {\n const rawString = x.replace(\"-\", \" \");\n if (idx === a.length - 1) return { text: `${rawString.charAt(0).toUpperCase()}${rawString.slice(1)}`, path: \"\" };\n curPath = `${curPath}/${x}`;\n return { text: `${rawString.charAt(0).toUpperCase()}${rawString.slice(1)}`, path: curPath };\n });\n }\n}\n\nexport const SIGNIN_PATH = \"/signin\";\nexport const BRAND_REVIEW_PATH = PathLink.encodeText(\"brand-check\");\nexport const BRAND_REVIEW_AUTOSET_PATH = PathLink.encodeText(\"brand-check-autoset\");\nexport const BRAND_CORRECTION_PATH = PathLink.encodeText(\"brand-correction\");\nexport const CATEGORY_REVIEW_PATH = PathLink.encodeText(\"taxonomy-check\");\nexport const CATEGORY_CORRECTION_PATH = PathLink.encodeText(\"taxonomy-correction\");\n","import axios from \"axios\";\nimport cookie from \"cookie\";\nimport JwtDecode from \"jwt-decode\";\n\nimport { showError, setSignIn, setInitialized, setSignOut } from \"./reduxClientSlice\";\n\nconst SIGNEDIN_COOKIE = \"sic\";\nconst AUTH_API_URL = \"https://pirt-staging.blinkreceipt.com\";\nconst ANNOTATION_API_URL = \"https://pirt-staging.blinkreceipt.com\";\n\nlet token = null;\n\nexport default class Client {\n static async signIn(email, password, dispatch) {\n const mail = email.trim();\n const pass = password.trim();\n if (mail.length === 0 || pass.length === 0) {\n showError(\"All fields are required\", dispatch);\n return;\n }\n const url = `${AUTH_API_URL}/api/session`;\n const data = { email: mail, password: pass };\n try {\n const res = await axios.post(url, data, { withCredentials: true });\n token = res.data.token;\n setCookie();\n dispatch(setSignIn({ user: res.data }));\n } catch (err) {\n let error =\n err && err.response && err.response.data ? err.response.data : `${err}`;\n showError(error, dispatch);\n }\n }\n\n static refresh() {\n return async (dispatch) => {\n const cookies = cookie.parse(document.cookie);\n if (cookies[SIGNEDIN_COOKIE] === undefined) {\n dispatch(setInitialized({}));\n return;\n }\n\n const url = `${AUTH_API_URL}/api/session`;\n try {\n const res = await axios.put(url, { include_roles: true }, { withCredentials: true });\n token = res.data.token;\n dispatch(setSignIn({ user: res.data }));\n setCookie();\n } catch (err) {\n dropCookie();\n let error =\n err && err.response && err.response.data\n ? err.response.data\n : `${err}`;\n console.log(error);\n dispatch(setInitialized({}));\n }\n };\n }\n\n static async signOut(dispatch) {\n if (token === null) {\n localStorage.clear();\n dropCookie();\n dispatch(setSignOut({}));\n return;\n }\n\n const cookies = cookie.parse(document.cookie);\n if (cookies[SIGNEDIN_COOKIE] === undefined) {\n token = null;\n localStorage.clear();\n dispatch(setSignOut({}));\n return;\n }\n\n const url = `${AUTH_API_URL}/api/session`;\n try {\n await axios.delete(url, {\n withCredentials: true,\n headers: { authorization: `Bearer ${token}` },\n });\n } catch (err) { }\n token = null;\n localStorage.clear();\n dispatch(setSignOut({}));\n dropCookie();\n }\n\n static async authPost(path, data, dispatch) {\n return authorizedRequest(this, \"post\", path, data, dispatch);\n }\n\n static async authPut(path, data, dispatch) {\n return authorizedRequest(this, \"put\", path, data, dispatch);\n }\n\n static async authGet(path, dispatch) {\n return authorizedRequest(this, \"get\", path, null, dispatch);\n }\n\n static async authDelete(path, dispatch) {\n return authorizedRequest(this, \"delete\", path, null, dispatch);\n }\n\n static async post(token, path, data, dispatch) {\n return request(token, \"post\", path, data, dispatch);\n }\n\n static async put(token, path, data, dispatch) {\n return request(token, \"put\", path, data, dispatch);\n }\n\n static async get(token, path, data, dispatch) {\n return request(token, \"get\", path, data, dispatch);\n }\n}\n\nasync function request(token, method, path, data, dispatch) {\n const url = `${ANNOTATION_API_URL}/api/${path}`;\n try {\n const payload = {\n method,\n url,\n };\n if (token) {\n payload.headers = { authorization: `Bearer ${token}` };\n }\n if (data) {\n if (method === \"get\") {\n payload.params = data;\n } else {\n payload.data = data;\n }\n }\n let res = await axios(payload);\n return res.data;\n } catch (err) {\n const error = err && err.response && err.response.data ? err.response.data : `${err}`;\n showError(error, dispatch);\n return null;\n }\n}\n\nasync function authorizedRequest(client, method, path, data, dispatch) {\n\n if (shouldRefresh(client)) {\n const cookies = cookie.parse(document.cookie);\n if (cookies[SIGNEDIN_COOKIE] === undefined) {\n dispatch(setSignOut({}));\n showError(\"Not authorized\", dispatch);\n return;\n }\n\n const url = `${AUTH_API_URL}/api/session`;\n try {\n const res = await axios.put(url, { include_roles: false }, { withCredentials: true });\n if (!token) dispatch(setSignIn({ user: null }));\n token = res.data.token;\n setCookie();\n } catch (err) {\n dropCookie();\n dispatch(setSignOut({}));\n showError(\"Not authorized\", dispatch);\n return;\n }\n }\n\n const url = `${ANNOTATION_API_URL}/api${path}`;\n try {\n let res = await axios({\n method,\n url,\n data,\n headers: { authorization: `Bearer ${token}` },\n });\n return res.data;\n } catch (err) {\n const error = err && err.response && err.response.data ? err.response.data : `${err}`;\n showError(error, dispatch);\n throw error;\n }\n}\n\nfunction setCookie() {\n document.cookie = `${SIGNEDIN_COOKIE}=true; path=/;`;\n}\n\nfunction dropCookie() {\n document.cookie = `${SIGNEDIN_COOKIE}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\n}\n\nfunction shouldRefresh(client) {\n if (token === null) return true;\n try {\n const { exp } = JwtDecode(token);\n return Date.now() > exp * 1000;\n } catch {\n return true;\n }\n}\n","export default class UserRoles {\n static isAdmin(user) {\n return user.roles.includes(\"admin\");\n }\n\n static isSupervisor(user) {\n return user.roles.includes(\"supervisor\");\n }\n\n static isBrandReviewer(user) {\n return user.roles.includes(\"brand_checker\");\n }\n\n static isBrandCorrector(user) {\n return user.roles.includes(\"brand_corrector\");\n }\n \n static isCategoryReviewer(user) {\n return user.roles.includes(\"taxonomy_checker\");\n }\n\n static isCategoryCorrector(user) {\n return user.roles.includes(\"taxonomy_corrector\");\n }\n}\n","import MuiAlert from \"@material-ui/lab/Alert\";\n\nexport default function Alert(props) {\n return ;\n}\n","import React from \"react\";\nimport TextField from \"@material-ui/core/TextField\";\n\nexport default function Textbox({\n name,\n label,\n small,\n value,\n password,\n onChange,\n autoFocus,\n}) {\n const handleChange = (e) => {\n onChange(e.target.value);\n };\n\n return (\n \n );\n}\n","import React, { useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\n\nimport Client from \"../model/client\";\n\nimport Textbox from \"../component/Textbox\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n root: {\n margin: \"100px auto 0 auto\",\n width: 400,\n height: 300,\n padding: \"30px 50px\",\n borderRadius: 15,\n border: \"2px solid lightgrey\",\n },\n field: {\n marginBottom: 20,\n },\n error: {\n color: \"#A50209\",\n },\n })\n);\n\nexport default function SignInPage() {\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n return (\n
\n

Please sign in

\n {\n e.preventDefault();\n await Client.signIn(email, password, dispatch);\n }}\n >\n {\n setEmail(value);\n }}\n autoFocus\n />\n\n {\n setPassword(value);\n }}\n />\n\n \n \n
\n );\n}\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: 100,\n margin: \"150px auto\",\n padding: 20,\n },\n}));\n\nexport default function Loading({ size = 40 }) {\n const classes = useStyles();\n\n return (\n
\n \n
\n );\n}\n","import React from \"react\";\n\nimport {\n createStyles,\n FormControl,\n InputLabel,\n makeStyles,\n MenuItem,\n} from \"@material-ui/core\";\nimport { Select } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n formControl: {\n margin: theme.spacing(1),\n minWidth: 120,\n },\n selectEmpty: {\n marginTop: theme.spacing(2),\n },\n })\n);\n\nexport default function Selector({\n id,\n label,\n value,\n selections,\n onChange,\n width = null,\n disabled = null,\n}) {\n const classes = useStyles();\n const formWidth = width ? width : 100;\n\n return (\n \n {label}\n onChange(event.target.value)}\n value={value}\n label={label}\n >\n {selections.map((current, i) => {\n return (\n \n {current.length === 0 ? \"None\" : current}\n \n );\n })}\n \n \n );\n}\n","import React from \"react\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport { Checkbox, createStyles, makeStyles } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n root: {\n textAlign: \"left\",\n },\n })\n);\n\nexport default function LabelledCheckbox({ name, label, value, onChange, width, style = { } }) {\n const classes = useStyles();\n\n return (\n {\n onChange(e.target.checked);\n }}\n name={name}\n color=\"primary\"\n />\n }\n label={label}\n />\n );\n}\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Modal from \"@material-ui/core/Modal\";\nimport Button from \"@material-ui/core/Button\";\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n width: 500,\n backgroundColor: theme.palette.background.paper,\n boxShadow: theme.shadows[5],\n padding: \"15px 20px\",\n borderRadius: 5,\n margin: \"100px auto\",\n },\n buttonSection: {\n height: 40,\n paddingTop: 5,\n },\n button: {\n float: \"right\",\n },\n cancel: {\n marginLeft: 10,\n },\n}));\n\nexport default function Modalbox({\n open,\n title,\n children,\n onClose,\n onSave,\n disableSave,\n saveText = null,\n cancelText = null,\n}) {\n const classes = useStyles();\n\n return (\n
\n \n
\n

{title}

\n {children}\n
\n \n {cancelText ? cancelText : \"Cancel\"}\n \n \n {saveText ? saveText : \"Save\"}\n \n
\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport { TextField } from \"@material-ui/core\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\n\nexport default function AutoQuerybox({\n value,\n label,\n small,\n options,\n onChange,\n onDebounce,\n autoFocus,\n disabled = false,\n\n}) {\n const debounced = useDebouncedCallback(\n (value) => {\n onDebounce(value);\n },\n 200 // delay in ms\n );\n\n const style = { marginBottom: small ? 10 : 20 };\n if (small) style.width = 192;\n\n return (\n {\n if (reason === \"select-option\") onChange(value);\n else if (reason === \"clear\") onChange(\"\");\n }}\n renderInput={(params) => (\n {\n onChange(e.target.value);\n debounced.callback(e.target.value);\n }}\n autoFocus={autoFocus}\n />\n )}\n />\n );\n}\n","import React from \"react\";\nimport TextField from \"@material-ui/core/TextField\";\n\nexport default function Numbox({ name, label, value, small, onChange }) {\n const handleChange = (e) => {\n const re = /^[0-9]*$/g;\n if (e.target.value === \"\" || re.test(e.target.value)) {\n onChange(e.target.value);\n }\n };\n\n return (\n \n );\n}\n","export const DATA_FILTER_RSD = \"rsd\";\nexport const DATA_FILTER_MERCHANT = \"merchant\";\nconst DATA_FILTER_SALES = \"sales\";\nexport const DATA_FILTER_CATEGORY = \"category\";\nconst DATA_FILTER_RSD_CHAR_ID = \"rsd_char_id\";\nconst DATA_FILTER_RSD_CHAR = \"rsd_char\";\n\nexport default class DataFilter {\n constructor(prefix) {\n this.prefix = prefix;\n this.rsdFilter = localStorage.getItem(parm(prefix, DATA_FILTER_RSD)) || \"\";\n this.merchantFilter = localStorage.getItem(parm(prefix, DATA_FILTER_MERCHANT)) || \"\";\n this.salesFilter = localStorage.getItem(parm(prefix, DATA_FILTER_SALES)) || \"\";\n this.categoryFilter = localStorage.getItem(parm(prefix, DATA_FILTER_CATEGORY)) || \"\";\n this.rsdCharFilterId = parseInt(localStorage.getItem(parm(prefix, DATA_FILTER_RSD_CHAR_ID)) || \"0\");\n this.rsdCharFilter = localStorage.getItem(parm(prefix, DATA_FILTER_RSD_CHAR)) || \"\";\n this.numFilteredDataIds = 0;\n }\n\n clear() {\n this.setRSDFilter(\"\");\n this.setMerchantFilter(\"\");\n this.setSalesFilter(\"\");\n this.setCategoryFilter(\"\");\n this.setRSDCharFilter(\"\", []);\n this.numFilteredDataIds = 0;\n }\n\n setRSDFilter(value) {\n this.rsdFilter = value;\n localStorage.setItem(parm(this.prefix, DATA_FILTER_RSD), value);\n }\n\n setMerchantFilter(value) {\n this.merchantFilter = value;\n localStorage.setItem(parm(this.prefix, DATA_FILTER_MERCHANT), value);\n }\n\n setSalesFilter(value) {\n this.salesFilter = value;\n localStorage.setItem(parm(this.prefix, DATA_FILTER_SALES), value);\n }\n\n setCategoryFilter(value) {\n this.categoryFilter = value;\n localStorage.setItem(parm(this.prefix, DATA_FILTER_CATEGORY), value);\n }\n\n setRSDCharFilter(id, rsdCharFilterList) {\n if (rsdCharFilterList.length === 0) {\n this.rsdCharFilterId = 0;\n this.rsdCharFilter = \"\";\n localStorage.setItem(parm(this.prefix, DATA_FILTER_RSD_CHAR_ID), \"0\");\n localStorage.setItem(parm(this.prefix, DATA_FILTER_RSD_CHAR), \"\");\n return;\n }\n\n if (id <= 0 || id >= rsdCharFilterList.length) {\n this.rsdCharFilterId = 0;\n this.rsdCharFilter = \"\";\n localStorage.setItem(parm(this.prefix, DATA_FILTER_RSD_CHAR_ID), \"0\");\n localStorage.setItem(parm(this.prefix, DATA_FILTER_RSD_CHAR), \"\");\n return;\n }\n\n this.rsdCharFilterId = id;\n this.rsdCharFilter = rsdCharFilterList[id];\n localStorage.setItem(parm(this.prefix, DATA_FILTER_RSD_CHAR_ID), `${id}`);\n localStorage.setItem(parm(this.prefix, DATA_FILTER_RSD_CHAR), rsdCharFilterList[id]);\n }\n\n rsdCharFilterList(data) {\n if (!data) return null;\n const filterList = [];\n\n data.forEach(x => {\n const rsd = x.receipt_short_description;\n if (rsd.length === 0) return;\n const char = rsd.charAt(0).toUpperCase();\n if (filterList.includes(char)) return;\n filterList.push(char);\n });\n\n if (filterList.length < 2)\n return null;\n\n filterList.sort();\n filterList.splice(0, 0, \"\");\n return filterList;\n }\n\n hasFilters() {\n return (\n this.rsdFilter.length > 0 ||\n this.merchantFilter.length > 0 ||\n this.salesFilter.length > 0 ||\n this.categoryFilter.length > 0 ||\n this.rsdCharFilterId > 0\n );\n }\n\n filterLabel() {\n const a = [];\n if (this.rsdFilter.length > 0) a.push(\"RSD\");\n if (this.merchantFilter.length > 0) a.push(\"Merchant\");\n if (this.salesFilter.length > 0) a.push(\"Count\");\n if (this.categoryFilter.length > 0) a.push(\"Category\");\n if (a.length === 0) return \"ADD FILTER\";\n return `FILTERED BY ${a.join(\",\")}`;\n }\n\n filter(data) {\n this.numFilteredDataIds = 0;\n if (data.length === 0)\n return [];\n\n if (!this.hasFilters())\n return [...Array(data.length).keys()];\n\n const rsd = this.rsdFilter.toLowerCase();\n const merchant = this.merchantFilter.toLowerCase();\n const sales = parseInt(this.salesFilter.length > 0 ? this.salesFilter : \"0\");\n const category = this.categoryFilter.toLowerCase();\n const rsdChar = this.rsdCharFilter;\n\n const filteredDataIds = data.reduce((prev, cur, idx) => {\n if (rsdChar.length > 0) {\n if (cur.receipt_short_description.charAt(0).toUpperCase() === rsdChar) prev.push(idx);\n return prev;\n }\n\n let valid = true;\n if (rsd.length > 0 && !cur.receipt_short_description.toLowerCase().includes(rsd))\n valid = false;\n\n if (merchant.length > 0 && !cur.merchant_name.toLowerCase().includes(merchant))\n valid = false;\n\n if (sales > 0 && cur.num_sales < sales)\n valid = false;\n\n if (category.length > 0 && !cur.category.toLowerCase().includes(category))\n valid = false;\n\n if (valid) prev.push(idx);\n return prev;\n }, []);\n\n this.numFilteredDataIds = filteredDataIds.length;\n return filteredDataIds;\n }\n\n filterSuggestions(data, filterType, filterString) {\n if (![DATA_FILTER_RSD, DATA_FILTER_MERCHANT, DATA_FILTER_CATEGORY].includes(filterType))\n return [];\n\n const filter = filterString.toLowerCase();\n const caseInsensitiveList = [];\n return data\n .filter(x => {\n let value;\n if (filterType === DATA_FILTER_RSD)\n value = x.receipt_short_description.toLowerCase();\n else if (filterType === DATA_FILTER_MERCHANT)\n value = x.merchant_name.toLowerCase();\n else if (filterType === DATA_FILTER_CATEGORY)\n value = x.category.toLowerCase();\n else\n return false;\n\n if (!value.includes(filter))\n return false;\n\n if (caseInsensitiveList.includes(value))\n return false;\n\n caseInsensitiveList.push(value);\n return true;\n })\n .map(x => {\n switch (filterType) {\n case DATA_FILTER_RSD:\n return x.receipt_short_description;\n case DATA_FILTER_MERCHANT:\n return x.merchant_name;\n case DATA_FILTER_CATEGORY:\n return x.category;\n default:\n return \"\";\n }\n });\n }\n\n filterCount() {\n return this.hasFilters() ? this.numFilteredDataIds : null;\n }\n}\n\nfunction parm(prefix, postfix) {\n return `${prefix}_${postfix}`;\n}","import React, { useState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\n\nimport Modalbox from \"../component/Modalbox\";\nimport AutoQuerybox from \"../component/AutoQuerybox\";\nimport Numbox from \"../component/Numbox\";\nimport { DATA_FILTER_RSD, DATA_FILTER_MERCHANT, DATA_FILTER_CATEGORY } from \"../model/dataFilter\";\n\nconst useStyles = makeStyles((theme) => {\n return createStyles({\n root: {\n width: \"100%\",\n },\n label: {\n textAlign: \"right\",\n float: \"right\",\n margin: 10,\n fontWeight: \"bold\",\n },\n value: {\n textAlign: \"left\",\n },\n });\n});\n\nexport default function ModalQueryFilter({ data, dataFilter, open, onClose, onSave }) {\n const classes = useStyles();\n const [disableSave, setDisableSave] = useState(true);\n\n const [receiptShortDescription, setReceiptShortDescription] = useState(dataFilter.rsdFilter);\n const [merchantName, setMerchantName] = useState(dataFilter.merchantFilter);\n const [numSales, setNumSales] = useState(dataFilter.salesFilter);\n const [category, setCategory] = useState(dataFilter.categoryFilter);\n\n const [rsdOptions, setRsdOptions] = useState([]);\n const [merchantOptions, setMerchantOptions] = useState([]);\n const [categoryOptions, setCategoryOptions] = useState([]);\n\n const labelWidth = 5;\n function unchanged(receiptShortDescription, merchantName, numSales, category) {\n const unchanged =\n receiptShortDescription === dataFilter.rsdFilter &&\n merchantName === dataFilter.merchantFilter &&\n numSales === dataFilter.salesFilter &&\n category === dataFilter.categoryFitler;\n return unchanged;\n }\n\n function onDebounce(filterType, setOptions) {\n return async (value) => {\n try {\n if (value.length === 0) {\n setOptions([]);\n return;\n }\n const suggestions = dataFilter.filterSuggestions(data, filterType, value);\n setOptions(suggestions);\n } catch (err) {\n console.log(err);\n }\n };\n }\n\n return (\n {\n if (unchanged()) return;\n onSave(receiptShortDescription, merchantName, numSales, category);\n }}\n disableSave={disableSave}\n >\n \n \n
RSD:
\n
\n \n {\n if (value.length === 0) setRsdOptions([]);\n setReceiptShortDescription(value);\n setDisableSave(\n unchanged(value, merchantName, numSales, category)\n );\n }}\n onDebounce={onDebounce(DATA_FILTER_RSD, setRsdOptions)}\n autoFocus\n />\n \n\n \n
Merchant:
\n
\n \n {\n setMerchantName(value);\n setDisableSave(unchanged(receiptShortDescription, value, numSales, category));\n }}\n onDebounce={onDebounce(DATA_FILTER_MERCHANT, setMerchantOptions)}\n />\n \n\n \n
Purchase count:
\n
\n \n {\n setNumSales(value);\n setDisableSave(unchanged(receiptShortDescription, merchantName, value, category));\n }}\n />\n \n\n \n
Major Category:
\n
\n \n {\n setCategory(value);\n setDisableSave(unchanged(receiptShortDescription, merchantName, numSales, value));\n }}\n onDebounce={onDebounce(DATA_FILTER_CATEGORY, setCategoryOptions)}\n />\n \n
\n \n );\n}\n","import React from \"react\";\nimport Modalbox from \"../component/Modalbox\";\n\nexport default function ModalSave({ open, onClose, onSave }) {\n return (\n \n Are you sure you want to save your changes?\n \n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport FilterListRoundedIcon from \"@material-ui/icons/FilterListRounded\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Chip from \"@material-ui/core/Chip\";\nimport CheckIcon from '@material-ui/icons/Check';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowLeftIcon from '@material-ui/icons/ArrowLeft';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Selector from \"../component/Selector\";\nimport LabelledCheckbox from \"../component/LabelledCheckbox\";\n\nimport ModalQueryFilter from \"./modalQueryFilter\";\nimport ModalSave from \"./modalSave\";\n\nconst useStyles = makeStyles((theme) => {\n const padding = 10;\n return createStyles({\n root: {\n width: \"100%\",\n },\n\n content: {\n width: \"100%\",\n },\n\n statsLabel: {\n float: \"left\",\n fontWeight: 600,\n color: \"gray\",\n marginTop: 5,\n },\n\n statsDivider: {\n float: \"left\",\n margin: \"0 10px\",\n },\n\n editCorrections: {\n float: \"right\",\n margin: \"-5px 12px 0 0\",\n width: 200,\n },\n\n save: {\n float: \"right\",\n margin: \"-5px 18px 0 0\",\n width: 119,\n },\n\n editButton: {\n marginRight: padding,\n float: \"left\",\n },\n });\n});\n\nexport default function ReviewHeader({\n rows,\n reviewer,\n dataFilter,\n paginator,\n numApproved,\n numRejected,\n stats,\n filterCount,\n rsdCharFilterList,\n onReload,\n onFilter,\n onSort,\n onSave,\n onPageBack,\n onPageForward,\n onPageConfirmed\n}) {\n const classes = useStyles();\n\n const [rsdOverride, setRSDOverride] = useState(dataFilter.rsdCharFilterId);\n const [filterLabel, setFilterLabel] = useState(dataFilter.filterLabel());\n\n const [sortBy, setSortBy] = useState(reviewer.queryOrderBy);\n const [orderBy, setOrderBy] = useState(reviewer.queryDesc);\n\n // modal\n const [openFilter, setOpenFilter] = useState(false);\n const [openSave, setOpenSave] = useState(false);\n\n useEffect(() => {\n onReload();\n }, []);\n\n return (\n
\n
\n
\n {\n reviewer.setQueryOrderBy(id);\n setSortBy(id);\n onSort();\n }}\n />\n
\n\n
\n {\n reviewer.setQueryDesc(id);\n setOrderBy(id);\n onSort();\n }}\n />\n
\n\n }\n onClick={() => {\n setOpenFilter(true);\n }}\n style={{ float: \"left\", marginTop: 9 }}\n >\n {filterLabel}\n \n\n {\n rsdCharFilterList ?\n
\n {\n dataFilter.setRSDCharFilter(id, rsdCharFilterList);\n setRSDOverride(id);\n onFilter();\n }}\n />\n
: undefined\n }\n\n {filterCount ? (\n \n ) : undefined}\n \n {\n reviewer.setQueryNoBrand(check ? 1 : 0);\n onReload();\n }}\n color=\"primary\"\n width={60}\n style={{ float: \"right\", marginTop: 8, marginRight: 10 }}\n />\n
\n\n
\n
\n \n \n
Correct: {numApproved}
\n \n
Incorrect: {numRejected}
\n \n
\n Total: {`${numApproved + numRejected} / ${reviewer.dataLength()}`}\n
\n
\n
\n \n \n \n\n \n \n \n\n
\n {/*
\n {`${paginator.numConfirmedPages()} / ${paginator.numPages} Pages confirmed`}\n
\n */}\n
\n {`Page ${paginator.pagePosition()} of ${paginator.numPages}`}\n
\n
\n\n\n
\n\n
\n\n {\n openFilter ? (\n {\n dataFilter.setRSDFilter(receiptShortDescription);\n dataFilter.setMerchantFilter(merchantName);\n dataFilter.setSalesFilter(numSales);\n dataFilter.setCategoryFilter(category);\n setFilterLabel(dataFilter.filterLabel());\n onFilter();\n setOpenFilter(false);\n }}\n onClose={() => {\n setOpenFilter(false);\n }}\n />\n ) : undefined\n }\n\n {\n openSave ? (\n {\n onSave();\n setOpenSave(false);\n }}\n onClose={() => {\n setOpenSave(false);\n }}\n />\n ) : undefined\n }\n
\n );\n}\n\nfunction BrandCount({ stats, classes }) {\n if (stats.length > 1) {\n const brandList = stats.map((cur, idx) => {\n if (idx === 0) return null;\n return
{cur.name.length === 0 ? \"N/A\" : `${cur.name}: ${cur.count}`}
;\n }, null);\n\n return \n
\n {stats[0].name.length === 0 ? \"N/A\" : stats[0].name}: {stats[0].count}\n
\n
;\n }\n\n return
\n {stats[0].name.length === 0 ? \"N/A\" : stats[0].name}: {stats[0].count}\n
\n}\n\nfunction PageNavigationButton({\n numPages, curPage, onPageBack, onPageForward, onPageConfirmed, setOpenSave, allConfirmed, pageConfirmed\n}) {\n if (allConfirmed) {\n return }\n onClick={(e) => {\n setOpenSave(true);\n }}\n style={{ float: \"right\", marginTop: 9 }}\n >\n Finish batch\n \n }\n\n if (pageConfirmed) {\n return }\n onClick={() => { curPage === numPages ? onPageBack() : onPageForward(); }}\n style={{ float: \"right\", marginTop: 9, marginRight: 10 }}\n >\n {curPage === numPages ? \"Previous page\" : \"Next page\"}\n \n\n }\n\n return }\n onClick={() => {\n onPageConfirmed();\n }}\n style={{ float: \"right\", marginTop: 9, marginRight: 10 }}\n >\n Confirm page\n \n}","// brand autoset start\n// import React, { useState } from \"react\";\n// import Button from \"@material-ui/core/Button\";\nimport React from \"react\";\n// brand autoset end\n\nimport MuiDataTable from \"mui-datatables\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => {\n return createStyles({\n row: {\n position: \"relative\",\n cursor: \"pointer\",\n borderTop: \"1px solid #E4E4E4\",\n },\n rowApproved: {\n position: \"relative\",\n cursor: \"pointer\",\n borderTop: \"1px solid #E4E4E4\",\n backgroundColor: \"#E8FCF4\",\n },\n rowRejected: {\n position: \"relative\",\n cursor: \"pointer\",\n borderTop: \"1px solid #E4E4E4\",\n backgroundColor: \"#FFEEEB\",\n },\n rowCellBold: {\n fontWeight: \"bold\",\n color: \"#474749\",\n },\n divider: {\n float: \"left\",\n margin: \"0 5px\",\n height: 20,\n background: \"#212121\",\n },\n taxonomy: {\n float: \"left\",\n },\n hoverButtons: {\n position: \"absolute\",\n top: 10,\n right: 15,\n bottom: 10,\n },\n });\n});\n\n// REVIEW TABLE\n\nexport default function ReviewTable({ rows, isBrand, onRowClick, onAutoset }) {\n const columns = [\n {\n name: \"merchant_name\",\n label: \"Retailer\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n },\n {\n name: \"receipt_short_description\",\n label: \"RSD\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n },\n {\n name: \"current_brand\",\n label: \"Brand\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n },\n ];\n\n isBrand ? appendBrandColumns(columns) : appendCategoryColumns(columns);\n\n columns.push({\n name: \"num_sales\",\n label: \"Count\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n\n return (\n \n );\n}\n\n// BRAND ROWS\n\nfunction appendBrandColumns(columns) {\n columns.push({\n name: \"product_name\",\n label: \"Product\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"sector\",\n label: \"Taxonomy\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n}\n\nfunction renderBrandRow(rows, onClick, onAutoset) {\n return (_data, dataIndex, _rowIndex) => {\n return dataIndex >= rows.length ?\n
:\n ;\n };\n}\n\n// row => { data_id, approved, ... annotation data }\n// data_id => index of annotation in data array\n// approved => undefined = not reviewed, true = approved, false = rejected\nfunction BrandReviewRow({ row, onClick, onAutoset }) {\n const classes = useStyles();\n // brand autoset start\n // const [showButtons, setShowButtons] = useState(false);\n // brand autoset end\n\n const cellClick = () => {\n const value = typeof row.approved === \"undefined\" ? false : !row.approved;\n onClick(row.data_id, value);\n };\n\n // brand autoset start\n // const onHover = (show) => {\n // return () => { if (onAutoset) setShowButtons(show); };\n // };\n // brand autoset end\n\n return (\n \n {output(row.merchant_name)}\n {output(row.receipt_short_description)}\n \n {output(row.current_brand)}\n \n \n \n \n \n \n \n \n {output(row.num_sales)}\n {/* brand autoset start
\n {output(row.num_sales)}\n
\n {\n onAutoset && showButtons ?\n { onAutoset(row.data_id); }} />\n : undefined\n } brand autoset end */}\n
\n \n );\n}\n\n// function AutoSetButton({ classes, onClick }) {\n// return (\n//
\n// \n// Autoset\n// \n//
\n// );\n// }\n\nfunction TaxonomyPath({ classes, sector, department, category }) {\n if (isBlank(sector)) {\n return
;\n }\n\n if (isBlank(department)) {\n return (\n
\n
{sector}
\n
\n );\n }\n\n if (isBlank(category)) {\n return (\n
\n
{sector}
\n \n
{department}
\n
\n );\n }\n\n return (\n
\n
{sector}
\n \n
{department}
\n \n
{category}
\n
\n );\n}\n\n// CATEGORY ROWS\n\nfunction appendCategoryColumns(columns) {\n columns.push({\n name: \"product_name\",\n label: \"Product\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"current_sector\",\n label: \"Sector\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"current_department\",\n label: \"Department\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"current_category\",\n label: \"Major Category\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n}\n\nfunction renderCategoryRow(rows, onClick) {\n return (_data, dataIndex, _rowIndex) => {\n return dataIndex >= rows.length ?\n
:\n ;\n };\n}\n\n// row => { data_id, approved, ... annotation data }\n// data_id => index of annotation in data array\n// approved => undefined = not reviewed, true = approved, false = rejected\nfunction TaxonomyRow({ row, onClick }) {\n const classes = useStyles();\n\n const cellClick = () => {\n const value = typeof row.approved === \"undefined\" ? false : !row.approved;\n onClick(row.data_id, value);\n };\n\n return (\n \n {output(row.merchant_name)}\n {output(row.receipt_short_description)}\n \n {output(row.brand_autoset_override_id ? row.predicted_brand : row.current_brand)}\n \n \n \n \n \n {output(row.current_sector)}\n \n \n {output(row.current_department)}\n \n \n {output(row.current_category)}\n \n {output(row.num_sales)}\n \n );\n}\n\n// HELPERS\n\nfunction isBlank(string) {\n return string === undefined || string === null || string.length === 0;\n}\n\nfunction output(string) {\n return isBlank(string) ? \"N/A\" : string;\n}\n\nfunction TruncatedString({ string, limit }) {\n if (string.length > limit)\n return (\n \n
{`${string.substring(0, limit + 1)} ..`}
\n
\n );\n return output(string);\n}\n\nfunction setCellHeaderProps(value) {\n return {\n style: {\n fontWeight: \"bold\",\n color: \"#212121\",\n },\n };\n};","import React, { useState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\n\nimport Textbox from \"../component/Textbox\";\nimport Modalbox from \"../component/Modalbox\";\n\nconst useStyles = makeStyles((theme) => {\n return createStyles({\n root: {\n width: \"100%\",\n },\n label: {\n textAlign: \"left\",\n float: \"left\",\n marginRight: 5,\n fontWeight: \"bold\",\n },\n value: {\n textAlign: \"left\",\n },\n });\n});\n\nexport default function ModalBrandAutosetProposal({ open, onClose, onSave, annotation }) {\n const classes = useStyles();\n const [disableSave, setDisableSave] = useState(false);\n const [prefix, setPrefix] = useState(annotation.receipt_short_description.split(\" \")[0]);\n const [confirm, setConfirm] = useState(false);\n\n return (\n confirm ? setConfirm(false) : onClose()}\n onSave={() => confirm ? onSave(annotation) : setConfirm(true)}\n disableSave={disableSave}\n saveText={confirm ? \"Yes\" : null}\n cancelText={confirm ? \"No\" : null}\n >\n {confirm ?\n \n
\n Approve all RSDs that begin with {prefix} at {annotation.merchant_name}?\n
\n
:\n \n \n
Merchant:{annotation.merchant_name}
\n
Brand:{annotation.predicted_brand}
\n
\n \n {\n setPrefix(value);\n setDisableSave(value === \"\");\n }}\n autoFocus\n />\n \n
\n }\n \n );\n}","export const STATE_BRAND_CHECK = 2;\nexport const STATE_BRAND_CORRECTION = 6;\nexport const STATE_TAXONOMY_CHECK = 12;\nexport const STATE_TAXONOMY_CORRECTION = 16;\n\nexport const QUERY_ORDER_BY_RSD_ID = 0;\nexport const QUERY_ORDER_BY_CATEGORY_ID = 1;\nexport const QUERY_ORDER_BY_COUNT_ID = 2;\nexport const QUERY_ORDER_BY_BRAND_ID = 3;","\nimport Client from \"./client\";\nimport { STATE_BRAND_CORRECTION, STATE_BRAND_CHECK } from \"./constants\";\n\nexport default class Stats {\n static async getStats(annotations, state, dispatch) {\n return state === STATE_BRAND_CHECK || state === STATE_BRAND_CORRECTION ?\n await Stats.getBrandStats(annotations, state, dispatch) :\n await Stats.getTaxonomyStats(annotations, state, dispatch);\n }\n\n static async getBrandStats(annotations, state, dispatch) {\n try {\n const ids = annotations.reduce((prev, cur) => {\n const idString = `${cur.current_brand_id}`;\n if (!prev.includes(idString)) prev.push(idString);\n return prev;\n }, []);\n if (ids.length === 0) return Stats.blankList();\n return await Client.authGet(`/brand/count?state=${state}&ids=${ids.join(\",\")}`, dispatch);\n } catch (err) {\n console.log(`getBrandStats error: ${err}`);\n return Stats.blankList();\n }\n }\n\n static async getTaxonomyStats(annotations, state, dispatch) {\n try {\n if (annotations.length === 0) return Stats.blankList();\n const taxonomyId = annotations[0].current_taxonomy_id;\n const stats = await Client.authGet(`/taxonomy/count?state=${state}&txid=${taxonomyId}`, dispatch);\n const name = `${stats.sector === \"\" ? \"N/A\" : stats.sector} / ${stats.department === \"\" ? \"N/A\" : stats.department} / ${stats.category === \"\" ? \"N/A\" : stats.category}`;\n return [{ name, count: stats.count }];\n } catch (err) {\n console.log(`getTaxonomyStats error: ${err}`);\n return Stats.blankList();\n }\n }\n\n static blankList() {\n return [{ name: \"\", num_reviewed_annotations: 0, num_total_annotations: 0 }];\n }\n}","import Client from \"./client\";\n\nconst ord = \"order_by\";\nconst dsc = \"desc\";\nconst nbr = \"no_brand\";\n\nexport default function mixinBase(obj, prefix, state, baseUrl, queryOrderById, queryDesc) {\n obj.state = state;\n obj.baseUrl = baseUrl;\n obj.data = [];\n\n // ------------ //\n // query mixins //\n // ------------ //\n\n obj.queryOrderBy = parseInt(localStorage.getItem(parm(prefix, ord)) || `${queryOrderById}`);\n obj.queryDesc = parseInt(localStorage.getItem(parm(prefix, dsc)) || `${queryDesc ? 1 : 0}`);\n obj.queryNoBrand = parseInt(localStorage.getItem(parm(prefix, nbr)) || \"0\");\n\n obj.setQueryOrderBy = (id) => {\n obj.queryOrderBy = id;\n localStorage.setItem(parm(prefix, ord), id);\n };\n\n obj.setQueryDesc = (id) => {\n obj.queryDesc = id;\n localStorage.setItem(parm(prefix, dsc), id);\n };\n\n obj.setQueryNoBrand = (value) => {\n obj.queryNoBrand = value;\n localStorage.setItem(parm(prefix, nbr), value);\n };\n\n obj.queryString = () => {\n return `?nbd=${obj.queryNoBrand === 1}&ord=${obj.queryOrderBy}&dsc=${obj.queryDesc === 1}&rsd=&mch=&pct=0&ctg=&sid=0`;\n }\n\n obj.sortData = () => {\n if (obj.data.length === 0) return false;\n\n const keys = [\"receipt_short_description\", \"current_category\", \"num_sales\", \"current_brand\"];\n if (obj.queryOrderBy < 0 || obj.queryOrderBy >= keys.length) return false;\n \n const key = keys[obj.queryOrderBy]\n const desc = obj.queryDesc === 1;\n\n let sorted = false;\n obj.data.sort((a, b) => {\n if (a[key] === b[key]) return 0;\n sorted = true;\n if (a[key] > b[key]) return desc ? -1 : 1;\n return desc ? 1 : -1;\n });\n\n return sorted;\n };\n\n // ----------- //\n // data mixins //\n // ----------- //\n\n obj.getData = async (dispatch) => {\n try {\n const path = `${obj.baseUrl}${obj.queryString()}`;\n const data = await Client.authGet(path, dispatch);\n obj.data = data.reviews;\n return data.reviews;\n } catch (err) {\n console.log(`fetchData error: ${err}`);\n return null;\n }\n };\n\n obj.getDataCount = async (dispatch) => {\n try {\n let data = await Client.authGet(`${obj.baseUrl}/count${obj.queryString()}`, dispatch);\n return data.count;\n } catch (err) {\n console.log(`fetchData error: ${err}`);\n return null;\n }\n };\n\n obj.dataLength = () => {\n return obj.data.length;\n };\n}\n\nfunction parm(prefix, postfix) {\n return `${prefix}_${postfix}`;\n}","import Client from \"./client\";\n\n// notes:\n// obj.data comes from base mixin\n// obj.baseUrl comes from base mixin\n\n// mixin introduces following properties into data annotation\n// approved: boolean\n\nexport default function mixinReviewer(obj, isBrand) {\n obj.setApproved = (dataId, value) => {\n const delta = { numApproved: 0, numRejected: 0 };\n\n if (obj.data.length === 0 || dataId < 0 || dataId >= obj.data.length)\n return delta;\n\n if (typeof obj.data[dataId].approved === \"undefined\") {\n delta.numApproved = value ? 1 : 0;\n delta.numRejected = value ? 0 : 1;\n } else if (obj.data[dataId].approved) {\n delta.numApproved = value ? 0 : -1;\n delta.numRejected = value ? 0 : 1;\n } else {\n delta.numApproved = value ? 1 : 0;\n delta.numRejected = value ? -1 : 0;\n }\n\n obj.data[dataId].approved = value;\n return delta;\n };\n\n obj.confirmRows = (rows) => {\n if (obj.data.length === 0) return;\n rows.forEach(row => {\n if (row.data_id < 0 || row.data_id >= obj.data.length) return;\n if (typeof obj.data[row.data_id].approved !== \"undefined\" && !obj.data[row.data_id].approved) return;\n obj.data[row.data_id].approved = true;\n });\n };\n\n obj.numApproved = () => {\n return obj.data.reduce((prev, cur, _idx) => {\n return prev + (typeof cur.approved !== \"undefined\" && cur.approved ? 1 : 0);\n }, 0);\n };\n\n obj.numRejected = () => {\n return obj.data.reduce((prev, cur, _idx) => {\n return prev + (typeof cur.approved !== \"undefined\" && !cur.approved ? 1 : 0);\n }, 0);\n };\n\n obj.saveReviews = async (dispatch) => {\n const approved = obj.data.reduce((prev, cur, _idx) => {\n if (typeof cur.approved !== \"undefined\" && cur.approved)\n prev.push(cur.key);\n return prev\n }, []);\n\n const rejected = obj.data.reduce((prev, cur, _idx) => {\n if (typeof cur.approved !== \"undefined\" && !cur.approved)\n prev.push(cur.key);\n return prev\n }, []);\n\n if (approved.length === 0 && rejected.length === 0)\n return false;\n\n try {\n console.log({ no_brand: obj.queryNoBrand === 1, approved, rejected });\n await Client.authPut(obj.baseUrl, { no_brand: obj.queryNoBrand === 1, approved, rejected }, dispatch);\n return true;\n } catch (err) {\n console.log(`setReviews error: ${err}`);\n return false;\n }\n };\n\n obj.pageConfirmed = (rows) => {\n let confirmed = true;\n for (let i = 0; i < rows.length; i++) {\n if (typeof rows[i].approved === \"undefined\") {\n confirmed = false;\n break;\n }\n }\n return confirmed;\n };\n\n obj.allConfirmed = () => {\n if (obj.data.length === 0)\n return false;\n\n let confirmed = true;\n for (let i = 0; i < obj.data.length; i++) {\n if (typeof obj.data[i].approved === \"undefined\") {\n confirmed = false;\n break;\n }\n }\n\n return confirmed;\n };\n\n if (!isBrand) return;\n\n obj.sendBrandAutosetProposal = async (annotation, dispatch) => {\n try {\n await Client.authPost(\"/brand-autoset\", { review_key: annotation.key }, dispatch);\n const prefix = annotation.receipt_short_description.split(\" \")[0];\n const merchant = annotation.merchant_name;\n return { prefix, merchant }\n } catch (err) {\n console.log(`sendBrandAutosetProposal error: ${err}`);\n return null;\n }\n }\n\n obj.removeAnnotationsByRSDPrefix = (prefix, merchant) => {\n const p = prefix.toLowerCase();\n const a = obj.data.filter(x => {\n return !(x.receipt_short_description.split(\" \")[0].toLowerCase() === p && x.merchant_name === merchant);\n });\n obj.data = a;\n };\n}","import Client from \"./client\";\n\n// notes:\n// obj.data comes from base mixin\n// obj.baseUrl comes from base mixin\n\n// mixin introduces following properties into data annotation\n// correction: object\n\nexport default function mixinCorrector(obj, isBrand) {\n obj.getCorrection = (dataId) => {\n if (!dataIdValid(obj, dataId)) return null;\n const correction = obj.data[dataId].correction;\n return typeof correction === 'undefined' ? null : correction;\n };\n\n obj.numCorrections = () => {\n return obj.data.reduce((prev, cur, _idx) => {\n return prev + (typeof cur.correction === \"undefined\" ? 0 : 1);\n }, 0);\n };\n\n obj.saveCorrections = async (dispatch) => {\n const changeMap = obj.data.reduce((prev, cur, _idx) => {\n if (typeof cur.correction === \"undefined\")\n return prev;\n\n if (typeof prev[cur.correction.key] === \"undefined\") {\n const correction = { ...cur.correction, annotation_keys: [cur.key] };\n delete correction.key;\n prev[cur.correction.key] = correction;\n } else {\n prev[cur.correction.key].annotation_keys.push(cur.key);\n }\n\n return prev;\n }, {});\n\n const changes = Object.values(changeMap);\n try {\n console.log({ no_brand: obj.queryNoBrand === 1, changes });\n const res = await Client.authPut(obj.baseUrl, { no_brand: obj.queryNoBrand === 1, changes }, dispatch);\n return res === null ? changes : res;\n } catch (err) {\n console.log(`saveAnnotationChanges error: ${err}`);\n return null;\n }\n };\n\n obj.removeCorrectedAnnotations = (changeMaps) => {\n const annotationKeys = changeMaps.reduce((prev, cur, _idx) => prev.concat(cur.annotation_keys), []);\n const a = obj.data.filter(x => !annotationKeys.includes(x.key));\n obj.data = a;\n };\n\n if (isBrand) {\n obj.setBrandCorrections = (dataIds, catalogBrandId, brandName) => {\n dataIds.forEach(dataId => {\n if (!dataIdValid(obj, dataId)) return;\n const key = `${catalogBrandId ? catalogBrandId : \"x\"}|${brandName ? brandName : \"x\"}`;\n obj.data[dataId].correction = {\n key, catalog_brand_id: catalogBrandId, catalog_brand: brandName\n };\n });\n };\n\n obj.saveBrandProposal = async (proposals, dispatch) => {\n try {\n return await Client.authPost(`${obj.baseUrl}/proposal`, { proposals }, dispatch);\n } catch (err) {\n console.log(`saveBrandProposal error: ${err}`);\n return null;\n }\n }\n return;\n }\n\n obj.setCategoryCorrections = (dataIds, taxonomyId, sector, department, category) => {\n dataIds.forEach(dataId => {\n if (!dataIdValid(obj, dataId)) return;\n const key = `${taxonomyId ? taxonomyId : \"x\"}|${sector ? sector : \"x\"}|${department ? department : \"x\"}|${category ? category : \"x\"}`;\n obj.data[dataId].correction = {\n key, taxonomy_id: taxonomyId, sector: sector, department: department, category: category\n };\n });\n };\n}\n\nfunction dataIdValid(obj, dataId) {\n return obj.data.length > 0 && dataId >= 0 && dataId < obj.data.length;\n}","// notes:\n// obj.data comes from base mixin\n// mixin introduces following properties into data annotation\n// selected: boolean => always true. however, not selected = undefined & selected = true.\n\nexport default function mixinSelection(obj) {\n obj.selected = (dataId) => {\n return dataIdValid(obj, dataId) && typeof obj.data[dataId].selected !== \"undefined\";\n };\n\n obj.numSelected = () => {\n if (obj.data.length === 0)\n return 0;\n return obj.data.reduce((prev, _cur, idx) => {\n return prev + (obj.selected(idx) ? 1 : 0);\n }, 0);\n };\n\n obj.setSelected = (checked, dataIds) => {\n const a = Array.isArray(dataIds) ? dataIds : [dataIds];\n let delta = 0;\n a.forEach(dataId => {\n if (!dataIdValid(obj, dataId))\n return;\n\n if (checked) {\n if (typeof obj.data[dataId].selected === \"undefined\") {\n delta += 1;\n obj.data[dataId].selected = true;\n }\n return;\n }\n\n if (typeof obj.data[dataId].selected !== \"undefined\") {\n delta -= 1;\n delete obj.data[dataId].selected;\n }\n });\n return delta;\n };\n\n obj.clearSelected = () => {\n obj.data.forEach(x => delete x.selected);\n };\n\n obj.allSelected = () => {\n return obj.data.reduce((prev, cur, idx) => {\n if (typeof cur.selected !== \"undefined\")\n prev.push(idx);\n return prev;\n }, []);\n };\n}\n\nfunction dataIdValid(obj, dataId) {\n return obj.data.length > 0 && dataId >= 0 && dataId < obj.data.length;\n}","import mixinBase from \"./mixinBase\";\nimport mixinReviewer from \"./mixinReviewer\";\nimport mixinCorrector from \"./mixinCorrector\";\nimport mixinSelection from \"./mixinSelection\";\n\nimport {\n STATE_BRAND_CHECK, STATE_TAXONOMY_CHECK,\n STATE_BRAND_CORRECTION, STATE_TAXONOMY_CORRECTION,\n QUERY_ORDER_BY_RSD_ID, QUERY_ORDER_BY_COUNT_ID\n} from \"./constants\";\n\nexport class BrandReviewer {\n constructor(prefix) {\n mixinBase(\n this, prefix, STATE_BRAND_CHECK,\n \"/brand-check\", QUERY_ORDER_BY_COUNT_ID, true\n );\n mixinReviewer(this, true);\n }\n}\n\nexport class CategoryReviewer {\n constructor(prefix) {\n mixinBase(\n this, prefix, STATE_TAXONOMY_CHECK,\n \"/taxonomy-check\", QUERY_ORDER_BY_COUNT_ID, true\n );\n mixinReviewer(this, false);\n }\n}\n\nexport class BrandCorrector {\n constructor(prefix) {\n mixinBase(\n this, prefix, STATE_BRAND_CORRECTION,\n \"/brand-correction\", QUERY_ORDER_BY_RSD_ID, false\n );\n mixinSelection(this);\n mixinCorrector(this, true);\n }\n}\n\nexport class CategoryCorrector {\n constructor(prefix) {\n mixinBase(\n this, prefix, STATE_TAXONOMY_CORRECTION,\n \"/taxonomy-correction\", QUERY_ORDER_BY_COUNT_ID, true\n );\n mixinSelection(this);\n mixinCorrector(this, false);\n }\n}","const MAX_PAGE_ROWS = 10;\n\n// page = current page of annotations\n// page id = id of current page.\n// row id = id within the current page (0 to page length - 1).\n// data id = id withing the entire set of annotation data (0 to length of all the annotations - 1).\n\nexport default class Paginator {\n constructor() {\n this.reset();\n }\n\n reset() {\n this.dataIds = [];\n this.pageId = -1;\n this.numPages = 0;\n }\n\n setDataIds(filteredDataIds) {\n this.dataIds = filteredDataIds;\n this.numPages = Math.floor(filteredDataIds.length / MAX_PAGE_ROWS);\n this.pageId = this.pageId < 0 || this.numPages === 0 ?\n 0 : (this.pageId < this.numPages ? this.pageId : (this.numPages - 1));\n if (filteredDataIds.length % MAX_PAGE_ROWS > 0) this.numPages += 1;\n }\n\n pageRows(data) {\n if (data.length === 0)\n return [];\n\n const startId = this.pageId * MAX_PAGE_ROWS;\n const endId = startId + (this.pageId < this.numPages - 1 ? MAX_PAGE_ROWS : (this.dataIds.length - startId));\n const dataIds = this.dataIds.slice(startId, endId);\n\n return dataIds.map(dataId => {\n const d = data[dataId];\n return { ...d, data_id: dataId };\n });\n }\n\n prevPageRows(data) {\n const prevPageId = this.pageId - 1;\n if (prevPageId < 0 || prevPageId >= this.numPages) return null;\n this.pageId = prevPageId;\n return this.pageRows(data);\n }\n\n nextPageRows(data) {\n const nextPageId = this.pageId + 1;\n if (nextPageId < 0 || nextPageId >= this.numPages) return null;\n console.log(nextPageId);\n this.pageId = nextPageId;\n return this.pageRows(data);\n }\n\n pagePosition() {\n return this.pageId + 1;\n }\n}","import React, { useRef, useState } from \"react\";\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nimport { useDispatch } from \"react-redux\";\n\nimport Loading from \"../component/Loading\";\nimport ReviewHeader from \"./reviewHeader\";\nimport ReviewTable from \"./reviewTable\";\nimport ModalBrandAutosetProposal from \"./modalBrandAutosetProposal\";\nimport Stats from \"../model/stats\";\nimport { BrandReviewer, CategoryReviewer } from \"../model/mixinModels\";\nimport DataFilter from \"../model/dataFilter\";\nimport Paginator from \"../model/paginator\";\nimport { showError, showMessage } from \"../model/reduxClientSlice\";\n\nconst useStyles = makeStyles((theme) => {\n const padding = 10;\n return createStyles({\n root: {\n width: \"100%\"\n },\n headerRoot: {\n width: \"100%\",\n height: 125,\n borderBottom: \"1px solid lightgray\",\n },\n headerContent: {\n height: 60,\n },\n filter: {\n float: \"left\",\n marginTop: 19,\n },\n filterCount: {\n float: \"left\",\n marginTop: 23,\n marginLeft: -5,\n backgroundColor: \"rgb(33, 150, 243)\",\n color: \"white\",\n },\n removeSpacing: {\n marginLeft: -20,\n },\n switches: {\n marginTop: padding,\n },\n title: {\n fontWeight: \"bold\",\n },\n reviewCheckbox: {\n marginTop: 10,\n marginRight: -15,\n },\n stats: {\n float: \"left\",\n marginLeft: 20,\n marginTop: 5,\n height: 25,\n },\n statsLabel: {\n float: \"left\",\n fontWeight: 600,\n marginTop: 2,\n },\n statsDivider: {\n float: \"left\",\n margin: \"0 10px\",\n },\n editCorrections: {\n float: \"right\",\n margin: \"-5px 12px 0 0\",\n width: 200,\n },\n save: {\n float: \"right\",\n margin: \"-5px 18px 0 0\",\n width: 119,\n },\n editSection: {\n float: \"left\",\n marginLeft: 8,\n padding: 1,\n },\n editButton: {\n marginLeft: padding,\n },\n });\n});\n\nexport default function ReviewPage({ isBrand }) {\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const brandPrefix = \"brand_review\";\n const categoryPrefix = \"category_review\";\n\n const reviewer = useRef(isBrand ? new BrandReviewer(brandPrefix) : new CategoryReviewer(categoryPrefix));\n const dataFilter = useRef(new DataFilter(isBrand ? brandPrefix : categoryPrefix));\n const paginator = useRef(new Paginator());\n\n const [stats, setStats] = useState(Stats.blankList());\n const [loading, setLoading] = useState(false);\n const [autosetData, setAutosetData] = useState(null);\n\n const [rows, setRows] = useState([]);\n const [numApproved, setNumApproved] = useState(0);\n const [numRejected, setNumRejected] = useState(0);\n const [filterCount, setFilterCount] = useState(null);\n const [rsdCharFilterList, setRSDCharFilterList] = useState(null);\n\n async function setPage(data) {\n paginator.current.setDataIds(dataFilter.current.filter(data));\n setRows(paginator.current.pageRows(reviewer.current.data));\n setStats(await Stats.getStats(reviewer.current.data, reviewer.current.state, dispatch));\n setNumApproved(reviewer.current.numApproved());\n setNumRejected(reviewer.current.numRejected());\n setFilterCount(dataFilter.current.filterCount());\n setRSDCharFilterList(dataFilter.current.rsdCharFilterList(data));\n }\n\n async function loadPage() {\n setLoading(true);\n const data = await reviewer.current.getData(dispatch);\n setLoading(false);\n if (!data) return;\n paginator.current.reset();\n setPage(data);\n }\n\n return (\n
\n {\n paginator.current.setDataIds(dataFilter.current.filter(reviewer.current.data));\n setRows(paginator.current.pageRows(reviewer.current.data));\n setFilterCount(dataFilter.current.filterCount());\n }}\n onSort={() => {\n if (reviewer.current.dataLength() === 0) {\n loadPage();\n return;\n }\n const sorted = reviewer.current.sortData();\n if (!sorted) return;\n paginator.current.setDataIds(dataFilter.current.filter(reviewer.current.data));\n setRows(paginator.current.pageRows(reviewer.current.data));\n }}\n onSave={async () => {\n setLoading(true);\n const success = await reviewer.current.saveReviews(dispatch);\n if (success) {\n loadPage();\n return;\n }\n setLoading(false);\n }}\n onPageBack={() => {\n const prevRows = paginator.current.prevPageRows(reviewer.current.data);\n if (prevRows) setRows(prevRows);\n }}\n onPageForward={() => {\n const nextRows = paginator.current.nextPageRows(reviewer.current.data);\n if (nextRows) setRows(nextRows);\n }}\n onPageConfirmed={() => {\n reviewer.current.confirmRows(rows);\n setNumApproved(reviewer.current.numApproved());\n setNumRejected(reviewer.current.numRejected());\n setRows(paginator.current.pageRows(reviewer.current.data));\n }}\n />\n\n {loading ? (\n \n ) : (\n {\n const delta = reviewer.current.setApproved(dataId, value);\n setNumApproved(numApproved + delta.numApproved);\n setNumRejected(numRejected + delta.numRejected);\n setRows(paginator.current.pageRows(reviewer.current.data));\n }}\n onAutoset={isBrand ? dataId => setAutosetData(reviewer.current.data[dataId]) : null}\n />\n )}\n\n {autosetData ? (\n {\n const result = await reviewer.current.sendBrandAutosetProposal(annotation, dispatch);\n if (!result) {\n showError(\"Autoset failed\", dispatch);\n return;\n }\n reviewer.current.removeAnnotationsByRSDPrefix(result.prefix, result.merchant);\n\n await reviewer.current.data.length === 0 ? loadPage() : setPage(reviewer.current.data);\n setAutosetData(null);\n showMessage(\"Autoset successful\", dispatch);\n }}\n onClose={() => {\n setAutosetData(null);\n }}\n />\n ) : undefined}\n\n
\n );\n}","import React, { useState, useEffect } from \"react\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport FilterListRoundedIcon from \"@material-ui/icons/FilterListRounded\";\nimport Divider from \"@material-ui/core/Divider\";\nimport Chip from \"@material-ui/core/Chip\";\nimport CheckIcon from '@material-ui/icons/Check';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport ArrowLeftIcon from '@material-ui/icons/ArrowLeft';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Selector from \"../component/Selector\";\nimport LabelledCheckbox from \"../component/LabelledCheckbox\";\n\nimport ModalQueryFilter from \"./modalQueryFilter\";\nimport ModalSave from \"./modalSave\";\n\nconst useStyles = makeStyles((theme) => {\n const padding = 10;\n return createStyles({\n root: {\n width: \"100%\",\n },\n\n content: {\n width: \"100%\",\n },\n\n statsLabel: {\n float: \"left\",\n fontWeight: 600,\n color: \"gray\",\n marginTop: 5,\n },\n\n statsDivider: {\n float: \"left\",\n margin: \"0 10px\",\n },\n\n editCorrections: {\n float: \"right\",\n margin: \"-5px 12px 0 0\",\n width: 200,\n },\n\n save: {\n float: \"right\",\n margin: \"-5px 18px 0 0\",\n width: 119,\n },\n\n editButton: {\n marginRight: padding,\n float: \"left\",\n },\n });\n});\n\nexport default function CorrectionHeader({\n corrector,\n dataFilter,\n paginator,\n stats,\n numSelected,\n numCorrected,\n filterCount,\n rsdCharFilterList,\n onReload,\n onFilter,\n onSort,\n onEdit,\n onEditClear,\n onPageBack,\n onPageForward,\n onSave,\n}) {\n const classes = useStyles();\n\n const [rsdOverride, setRSDOverride] = useState(dataFilter.rsdCharFilterId);\n const [filterLabel, setFilterLabel] = useState(dataFilter.filterLabel());\n\n const [sortBy, setSortBy] = useState(corrector.queryOrderBy);\n const [orderBy, setOrderBy] = useState(corrector.queryDesc);\n\n // modal\n const [openFilter, setOpenFilter] = useState(false);\n const [openSave, setOpenSave] = useState(false);\n\n useEffect(() => {\n onReload();\n }, []);\n\n return (\n
\n
\n
\n {\n corrector.setQueryOrderBy(id);\n onSort();\n setSortBy(id);\n }}\n />\n
\n\n
\n {\n corrector.setQueryDesc(id);\n onSort();\n setOrderBy(id)\n }}\n />\n
\n\n }\n onClick={() => {\n setOpenFilter(true);\n }}\n style={{ float: \"left\", marginTop: 9 }}\n >\n {filterLabel}\n \n\n {rsdCharFilterList ?\n
\n {\n dataFilter.setRSDCharFilter(id, rsdCharFilterList);\n setRSDOverride(id);\n onFilter();\n }}\n />\n
: undefined}\n\n {filterCount ? (\n \n ) : undefined}\n \n {\n corrector.setQueryNoBrand(check ? 1 : 0);\n onReload();\n }}\n color=\"primary\"\n width={60}\n style={{ float: \"right\", marginTop: 8, marginRight: 10 }}\n />\n
\n\n
\n {numSelected === 0 ?\n
\n {stats.length > 1 ?\n \n
\n {stats[0].name.length === 0 ? \"N/A\" : stats[0].name}: {stats[0].count}\n
\n
:\n
\n {stats[0].name.length === 0 ? \"N/A\" : stats[0].name}: {stats[0].count}\n
\n }\n \n
Selected: {numSelected}
\n \n
Changed: {numCorrected}
\n \n
\n Total: {`${numCorrected} / ${corrector.dataLength()}`}\n
\n
:\n
\n {stats.length > 1 ?\n \n
\n {stats[0].name.length === 0 ? \"N/A\" : stats[0].name}: {stats[0].count}\n
\n
:\n
\n {stats[0].name.length === 0 ? \"N/A\" : stats[0].name}: {stats[0].count}\n
\n }\n \n \n Edit\n \n \n Clear\n \n
Selected: {numSelected}
\n \n
Changed: {numCorrected}
\n \n
\n Total: {`${numCorrected} / ${corrector.dataLength()}`}\n
\n
\n }\n\n
\n \n \n \n\n \n \n \n\n
\n
\n {`Page ${paginator.pagePosition()} of ${paginator.numPages}`}\n
\n
\n
\n\n
\n\n {\n openFilter ? (\n {\n dataFilter.setRSDFilter(receiptShortDescription);\n dataFilter.setMerchantFilter(merchantName);\n dataFilter.setSalesFilter(numSales);\n dataFilter.setCategoryFilter(category);\n setFilterLabel(dataFilter.filterLabel());\n onFilter();\n setOpenFilter(false);\n }}\n onClose={() => {\n setOpenFilter(false);\n }}\n />\n ) : undefined\n }\n\n {\n openSave ? (\n {\n onSave(corrector.queryString());\n setOpenSave(false);\n }}\n onClose={() => {\n setOpenSave(false);\n }}\n />\n ) : undefined\n }\n
\n );\n}\n\nfunction displayStats(stats) {\n return stats.map((cur, idx) => {\n if (idx === 0) return null;\n return
{cur.name.length === 0 ? \"N/A\" : `${cur.name}: ${cur.count}`}
;\n }, null);\n}\n\nfunction PageNavigationButton({ corrector, paginator, onPageBack, onPageForward, setOpenSave }) {\n if (corrector.numCorrections() > 0) {\n return }\n onClick={() => { setOpenSave(true); }}\n style={{ float: \"right\", marginTop: 9 }}\n >\n Save changes\n \n }\n return }\n onClick={() => {\n paginator.pagePosition() === paginator.numPages ? onPageBack() : onPageForward();\n }}\n style={{ float: \"right\", marginTop: 9, marginRight: 10 }}\n >\n {paginator.numPages > 1 && paginator.pagePosition() === paginator.numPages ? \"Previous page\" : \"Next page\"}\n \n}","import React, { useState } from \"react\";\nimport MuiDataTable from \"mui-datatables\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport { Checkbox } from \"@material-ui/core\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { Button } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => {\n return createStyles({\n row: {\n cursor: \"default\",\n borderTop: \"1px solid #E4E4E4\",\n },\n rowEdited: {\n cursor: \"default\",\n borderTop: \"1px solid #E4E4E4\",\n backgroundColor: \"#E8FBFB\",\n },\n rowCellBold: {\n fontWeight: \"bold\",\n color: \"#474749\",\n },\n divider: {\n float: \"left\",\n margin: \"0 5px\",\n height: 20,\n background: \"#212121\",\n },\n taxonomy: {\n float: \"left\",\n },\n hoverButtons: {\n position: \"absolute\",\n top: 10,\n left: 5,\n bottom: 10,\n },\n });\n});\n\nexport default function CorrectionTable({ rows, isBrand, onEdit, onRowChecked, onAllRowsChecked }) {\n let allChecked = true;\n for (let i = 0; i < rows.length; i++) {\n if (typeof rows[i].selected === \"undefined\") {\n allChecked = false;\n break;\n }\n }\n\n const columns = [\n {\n name: \"id\",\n label: \"\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n customHeadRender: ({ index, ...column }) => {\n return (\n \n {\n onAllRowsChecked(e.target.checked);\n }}\n style={cbStyle}\n color=\"primary\"\n />\n \n );\n },\n },\n },\n {\n name: \"merchant_name\",\n label: \"Retailer\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n },\n {\n name: \"receipt_short_description\",\n label: \"RSD\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n },\n {\n name: \"current_brand\",\n label: \"Brand\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n },\n ];\n\n isBrand ? appendBrandColumns(columns) : appendCategoryColumns(columns);\n\n columns.push({\n name: \"num_sales\",\n label: \"Count\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n\n return (\n \n );\n}\n\n// BRAND ROWS\n\nfunction appendBrandColumns(columns) {\n columns.push({\n name: \"product_name\",\n label: \"Product\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"sector\",\n label: \"Taxonomy\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n}\n\nfunction renderBrandRow(rows, onEdit, onRowChecked) {\n return (_data, dataIndex, _rowIndex) => {\n return dataIndex >= rows.length ?\n
:\n ;\n };\n}\n\nfunction BrandRow({ row, onEdit, onRowChecked }) {\n const classes = useStyles();\n const [showButtons, setShowButtons] = useState(false);\n const onHover = (show) => () => setShowButtons(show);\n\n return (\n \n \n onRowChecked(e.target.checked, row.data_id)}\n style={cbStyle}\n color=\"primary\"\n />\n \n {output(row.merchant_name)}\n {output(row.receipt_short_description)}\n \n {typeof row.correction === \"undefined\" ? (\n \n
{output(row.current_brand)}
\n
\n ) : (\n \n
{output(row.correction.catalog_brand)}*
\n
\n )}\n
\n \n \n \n \n \n \n \n
\n {output(row.num_sales)}\n
\n {showButtons ? onEdit(row)} /> : undefined}\n
\n \n );\n}\n\nfunction CategoryPath({ classes, sector, department, category }) {\n if (isBlank(sector)) {\n return
;\n }\n\n if (isBlank(department)) {\n return (\n
\n
{sector}
\n
\n );\n }\n\n if (isBlank(category)) {\n return (\n
\n
{sector}
\n \n
{department}
\n
\n );\n }\n\n return (\n
\n
{sector}
\n \n
{department}
\n \n
{category}
\n
\n );\n}\n\n// CATEGORY ROWS\n\nfunction appendCategoryColumns(columns) {\n columns.push({\n name: \"product_name\",\n label: \"Product\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"current_sector\",\n label: \"Sector\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"current_department\",\n label: \"Department\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n columns.push({\n name: \"current_category\",\n label: \"Major Category\",\n options: {\n filter: false,\n sort: false,\n setCellHeaderProps,\n },\n });\n}\n\nfunction renderCategoryRow(rows, onEdit, onRowChecked) {\n return (_data, dataIndex, _rowIndex) => {\n return dataIndex >= rows.length ?\n
:\n ;\n };\n}\n\nfunction CategoryRow({ row, onEdit, onRowChecked }) {\n const classes = useStyles();\n const [showButtons, setShowButtons] = useState(false);\n const onHover = (show) => () => setShowButtons(show);\n\n return (\n \n \n onRowChecked(e.target.checked, row.data_id)}\n style={cbStyle}\n color=\"primary\"\n />\n \n {output(row.merchant_name)}\n {output(row.receipt_short_description)}\n {output(row.current_brand)}\n \n \n \n \n {typeof row.correction === \"undefined\" ? (\n
{output(row.current_sector)}
\n ) : (\n \n
{output(row.correction.sector)}*
\n
\n )}\n
\n \n {typeof row.correction === \"undefined\" ? (\n
{output(row.current_department)}
\n ) : (\n \n
{output(row.correction.department)}*
\n
\n )}\n
\n \n {typeof row.correction === \"undefined\" ? (\n
{output(row.current_category)}
\n ) : (\n \n
{output(row.correction.category)}*
\n
\n )}\n
\n \n
\n {output(row.num_sales)}\n
\n {showButtons ? onEdit(row)} /> : undefined}\n
\n \n );\n}\n\n// HELPERS\n\nfunction isBlank(string) {\n return string === undefined || string === null || string.length === 0;\n}\n\nfunction output(string) {\n return isBlank(string) ? \"N/A\" : string;\n}\n\nfunction TruncatedString({ string, limit }) {\n if (string.length > limit)\n return (\n \n
{`${string.substring(0, limit + 1)} ..`}
\n
\n );\n return output(string);\n}\n\nfunction setCellHeaderProps(value) {\n return {\n style: {\n fontWeight: \"bold\",\n color: \"#212121\",\n },\n };\n};\n\nfunction EditButton({ classes, onClick }) {\n return (\n
\n \n Edit\n \n
\n );\n}\n\nconst cbColStyle = {\n width: 0,\n padding: 0,\n};\n\nconst cbStyle = {\n padding: 10,\n paddingLeft: 15,\n};","import Client from \"./client\";\n\nexport default class Brand {\n static async getCatalogBrands(filterValue, dispatch) {\n try {\n return await Client.authGet(`/brand/catalog?brd=${filterValue}`, dispatch);\n } catch (err) {\n console.log(`fetchData error: ${err}`);\n return [];\n }\n }\n}\n","import React, { useState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport { useDispatch } from \"react-redux\";\n\nimport AutoQuerybox from \"../component/AutoQuerybox\";\nimport Modalbox from \"../component/Modalbox\";\nimport LabelledCheckbox from \"../component/LabelledCheckbox\";\nimport Brand from \"../model/brand\";\n\nconst useStyles = makeStyles((theme) => {\n return createStyles({\n root: {\n width: \"100%\",\n },\n label: {\n textAlign: \"right\",\n float: \"right\",\n margin: 10,\n fontWeight: \"bold\",\n },\n value: {\n textAlign: \"left\",\n },\n });\n});\n\nexport default function ModalBrandChange({ annotation, open, onClose, onSave }) {\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const [brandName, setBrandName] = useState(annotation.current_brand);\n const [catalogBrands, setCatalogBrands] = useState([]);\n const [catalogBrandMap, setCatalogBrandMap] = useState({});\n\n const [dontKnow, setDontKnow] = useState(false);\n const [disableSave, setDisableSave] = useState(true);\n\n const title = annotation.data_id !== null ? `Brand editing row ${annotation.data_id + 1}` : `Brand editing checked rows`;\n\n function unchanged(brandValue) {\n return brandValue === annotation.current_brand || brandValue === \"\";\n }\n\n return (\n {\n if (dontKnow) {\n onSave(annotation.data_id, null, null);\n return;\n }\n const catalogBrand = catalogBrandMap[brandName.toLowerCase()];\n catalogBrand ?\n onSave(annotation.data_id, catalogBrand.id, catalogBrand.brand) :\n onSave(annotation.data_id, null, brandName);\n }}\n disableSave={disableSave}\n >\n \n \n
Brand:
\n
\n \n {\n if (value.length === 0) setCatalogBrands([]);\n setBrandName(value);\n setDisableSave(unchanged(value));\n }}\n onDebounce={async (value) => {\n try {\n if (value.length === 0) {\n setCatalogBrands([]);\n return;\n }\n\n const res = await Brand.getCatalogBrands(value, dispatch);\n const data = res.reduce((prev, cur) => {\n prev.values.push(cur.brand);\n prev.map[cur.brand.toLowerCase()] = cur;\n return prev;\n }, { values: [], map: {} });\n\n setCatalogBrands(data.values);\n setCatalogBrandMap(data.map);\n } catch (err) {\n console.log(err);\n }\n }}\n autoFocus\n disabled={dontKnow}\n />\n {\n setDontKnow(check);\n check ? setDisableSave(!check) : setDisableSave(unchanged(brandName));\n }}\n color=\"primary\"\n width={60}\n style={{ float: \"left\", marginTop: -8 }}\n />\n \n
\n \n );\n}","import Client from \"./client\";\n\nexport default class Taxonomy {\n constructor(taxonomy) {\n console.log(taxonomy);\n this.sectorList = taxonomy.sectors;\n this.departmentMap = taxonomy.departments;\n this.categoryMap = taxonomy.categories;\n this.searchKeyMap = taxonomy.search_key_map;\n }\n\n sectors() {\n return this.sectorList;\n }\n\n departments(sector) {\n return this.departmentMap.hasOwnProperty(sector) ? this.departmentMap[sector] : [];\n }\n\n categories(sector, department) {\n const sectorDepartment = `${sector}|${department}`;\n return this.categoryMap.hasOwnProperty(sectorDepartment) ? this.categoryMap[sectorDepartment] : [];\n }\n\n idFromSelection(sector, department, category) {\n const searchKey = `${sector}|${department}|${category}`.toLowerCase();\n return this.searchKeyMap.hasOwnProperty(searchKey) ? this.searchKeyMap[searchKey] : -1;\n }\n\n static async getTaxonomy(dispatch) {\n try {\n const res = await Client.authGet(\"/taxonomy\", dispatch);\n return new Taxonomy(res.taxonomy);\n } catch (err) {\n console.log(`getTaxonomy error: ${err}`);\n return null;\n }\n }\n}\n","import React, { useState, useEffect } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport Selector from \"../component/Selector\";\nimport Modalbox from \"../component/Modalbox\";\nimport LabelledCheckbox from \"../component/LabelledCheckbox\";\n\nimport Taxonomy from \"../model/taxonomy\";\nimport { selectTaxonomy, setTaxonomy } from \"../model/reduxClientSlice\";\nimport Loading from \"../component/Loading\";\n\nconst SELECTOR_WIDTH = 240;\nconst SELECTOR_GRID_SIZE = 7;\nconst CHECKBOX_MARGIN_TOP = 3;\n\nconst useStyles = makeStyles((_theme) => {\n return createStyles({\n root: {\n width: \"100%\",\n },\n label: {\n textAlign: \"right\",\n float: \"right\",\n margin: 10,\n fontWeight: \"bold\",\n },\n value: {\n textAlign: \"left\",\n },\n });\n});\n\nexport default function ModalTaxonomyChange({ annotation, open, onClose, onSave }) {\n const dispatch = useDispatch();\n const classes = useStyles();\n const taxonomy = useSelector(selectTaxonomy);\n\n const [oSectorId, setOSectorId] = useState(0);\n const [oDepartmentId, setODepartmentId] = useState(0);\n const [oCategoryId, setOCategoryId] = useState(0);\n\n const [sectorId, setSectorId] = useState(0);\n const [departmentId, setDepartmentId] = useState(0);\n const [categoryId, setCategoryId] = useState(0);\n\n const [sectorUnresolved, setSectorUnresolved] = useState(false);\n const [departmentUnresolved, setDepartmentUnresolved] = useState(false);\n const [categoryUnresolved, setCategoryUnresolved] = useState(false);\n\n const [disableSave, setDisableSave] = useState(true);\n\n const limit = 40;\n const string = annotation.receipt_short_description;\n const title = string ? (string.length > limit ? `${string.substring(0, limit + 1)} ..` : string) : \"Editing checked rows\";\n\n function unchanged(sectorValue, departmentValue, categoryValue) {\n return sectorValue === oSectorId && departmentValue === oDepartmentId && categoryValue === oCategoryId;\n }\n\n async function loadTaxonomy() {\n if (taxonomy) {\n const sectId = taxonomy.sectors().indexOf(annotation.current_sector);\n const deptId = taxonomy.departments(annotation.current_sector).indexOf(annotation.current_department);\n const catId = taxonomy.categories(annotation.current_sector, annotation.current_department).indexOf(annotation.current_category)\n\n setSectorId(sectId < 0 ? 0 : sectId);\n setDepartmentId(deptId < 0 ? 0 : deptId);\n setCategoryId(catId < 0 ? 0 : catId);\n\n setOSectorId(sectId < 0 ? 0 : sectId);\n setODepartmentId(deptId < 0 ? 0 : deptId);\n setOCategoryId(catId < 0 ? 0 : catId);\n return;\n }\n\n const t = await Taxonomy.getTaxonomy(dispatch);\n if (t) dispatch(setTaxonomy({ taxonomy: t }));\n\n const sectId = t.sectors().indexOf(annotation.current_sector);\n const deptId = t.departments(annotation.current_sector).indexOf(annotation.current_department);\n const catId = t.categories(annotation.current_sector, annotation.current_department).indexOf(annotation.current_category)\n\n setSectorId(sectId < 0 ? 0 : sectId);\n setDepartmentId(deptId < 0 ? 0 : deptId);\n setCategoryId(catId < 0 ? 0 : catId);\n\n setOSectorId(sectId < 0 ? 0 : sectId);\n setODepartmentId(deptId < 0 ? 0 : deptId);\n setOCategoryId(catId < 0 ? 0 : catId);\n }\n\n useEffect(() => { loadTaxonomy(); }, []);\n\n return (\n {\n if (sectorUnresolved) {\n onSave(annotation.data_id, null, null, null, null);\n return;\n }\n\n if (departmentUnresolved) {\n const sector = taxonomy.sectors()[sectorId];\n onSave(annotation.data_id, null, sector, null, null);\n return;\n }\n\n if (categoryUnresolved) {\n const sector = taxonomy.sectors()[sectorId];\n const department = taxonomy.departments(sector)[departmentId];\n onSave(annotation.data_id, null, sector, department, null);\n return;\n }\n\n const sector = taxonomy.sectors()[sectorId];\n const department = taxonomy.departments(sector)[departmentId];\n const category = taxonomy.categories(sector, department)[categoryId];\n const id = taxonomy.idFromSelection(sector, department, category);\n onSave(annotation.data_id, id, sector, department, category);\n }}\n disableSave={disableSave}\n >\n {taxonomy ?\n\n \n \n {\n setSectorId(id);\n setDepartmentId(0);\n setCategoryId(0);\n setDisableSave(unchanged(id, departmentId, categoryId));\n }}\n width={SELECTOR_WIDTH}\n disabled={sectorUnresolved}\n />\n \n \n {\n setSectorUnresolved(check);\n setDepartmentUnresolved(check);\n setCategoryUnresolved(check);\n check ?\n setDisableSave(false) :\n setDisableSave(unchanged(sectorId, departmentId, categoryId));\n }}\n color=\"primary\"\n width={60}\n style={{ float: \"left\", marginTop: CHECKBOX_MARGIN_TOP }}\n />\n \n\n \n {\n setDepartmentId(id);\n setCategoryId(0);\n setDisableSave(unchanged(sectorId, id, 0));\n }}\n width={SELECTOR_WIDTH}\n disabled={departmentUnresolved}\n />\n \n \n {\n console.log('department change');\n if (check) {\n setDisableSave(false);\n } else {\n setSectorUnresolved(false);\n setDisableSave(unchanged(sectorId, departmentId, categoryId));\n }\n setDepartmentUnresolved(check);\n setCategoryUnresolved(check);\n }}\n color=\"primary\"\n width={60}\n style={{ float: \"left\", marginTop: CHECKBOX_MARGIN_TOP }}\n />\n \n\n \n {\n setCategoryId(id);\n setDisableSave(unchanged(sectorId, departmentId, id));\n }}\n width={SELECTOR_WIDTH}\n disabled={categoryUnresolved}\n />\n \n \n {\n if (check) {\n setDisableSave(false);\n } else {\n setSectorUnresolved(false);\n setDepartmentUnresolved(false);\n setDisableSave(unchanged(sectorId, departmentId, categoryId));\n }\n setCategoryUnresolved(check);\n }}\n color=\"primary\"\n width={60}\n style={{ float: \"left\", marginTop: CHECKBOX_MARGIN_TOP }}\n />\n \n\n :\n \n }\n \n );\n}","import React from \"react\";\nimport Modalbox from \"../component/Modalbox\";\n\nexport default function ModalBrandProposal({ open, brandProposals, onClose, onSave }) {\n const brandNames = brandProposals.map(x => x.catalog_brand);\n console.log(brandNames);\n const prompt = brandNames.length > 1 ?\n \"The following brands are not in our system:\" :\n \"The following brand is not in our system:\";\n\n return (\n \n
{prompt}
\n
    \n {brandNames.map(x =>
  • {x}
  • )}\n
\n
Would you like to recommend them to be added?
\n \n );\n}\n","import React, { useRef, useState } from \"react\";\nimport { makeStyles, createStyles } from '@material-ui/core/styles';\nimport { useDispatch } from \"react-redux\";\n\nimport Loading from \"../component/Loading\";\nimport CorrectionHeader from \"./correctionHeader\";\nimport CorrectionTable from \"./correctionTable\";\nimport ModalBrandChange from \"./modalBrandChange\";\nimport ModalTaxonomyChange from \"./modalTaxonomyChange\";\nimport ModalBrandProposal from \"./modalBrandProposal\";\nimport { showMessage, showError } from \"../model/reduxClientSlice\";\nimport Stats from \"../model/stats\";\nimport { BrandCorrector, CategoryCorrector } from \"../model/mixinModels\";\nimport DataFilter from \"../model/dataFilter\";\nimport Paginator from \"../model/paginator\";\n\nconst useStyles = makeStyles((theme) => {\n const padding = 10;\n return createStyles({\n root: {\n width: \"100%\"\n },\n headerRoot: {\n width: \"100%\",\n height: 125,\n borderBottom: \"1px solid lightgray\",\n },\n headerContent: {\n height: 60,\n },\n filter: {\n float: \"left\",\n marginTop: 19,\n },\n filterCount: {\n float: \"left\",\n marginTop: 23,\n marginLeft: -5,\n backgroundColor: \"rgb(33, 150, 243)\",\n color: \"white\",\n },\n removeSpacing: {\n marginLeft: -20,\n },\n switches: {\n marginTop: padding,\n },\n title: {\n fontWeight: \"bold\",\n },\n reviewCheckbox: {\n marginTop: 10,\n marginRight: -15,\n },\n stats: {\n float: \"left\",\n marginLeft: 20,\n marginTop: 5,\n height: 25,\n },\n statsLabel: {\n float: \"left\",\n fontWeight: 600,\n marginTop: 2,\n },\n statsDivider: {\n float: \"left\",\n margin: \"0 10px\",\n },\n editCorrections: {\n float: \"right\",\n margin: \"-5px 12px 0 0\",\n width: 200,\n },\n save: {\n float: \"right\",\n margin: \"-5px 18px 0 0\",\n width: 119,\n },\n editSection: {\n float: \"left\",\n marginLeft: 8,\n padding: 1,\n },\n editButton: {\n marginLeft: padding,\n },\n });\n});\n\nexport default function CorrectionPage({ isBrand }) {\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const brandPrefix = \"brand_correction\";\n const categoryPrefix = \"category_correction\";\n\n const corrector = useRef(isBrand ? new BrandCorrector(brandPrefix) : new CategoryCorrector(categoryPrefix));\n const dataFilter = useRef(new DataFilter(isBrand ? brandPrefix : categoryPrefix));\n const paginator = useRef(new Paginator());\n\n const [stats, setStats] = useState(Stats.blankList());\n const [loading, setLoading] = useState(false);\n\n const [rows, setRows] = useState([]);\n const [numSelected, setNumSelected] = useState(0);\n const [numCorrected, setNumCorrected] = useState(0);\n const [filterCount, setFilterCount] = useState(null);\n const [rsdCharFilterList, setRSDCharFilterList] = useState(null);\n\n const [modalAnnotation, setModalAnnotation] = useState(null);\n const [modalBrandProposals, setModalBrandProposals] = useState(null);\n\n async function setPage(data) {\n paginator.current.setDataIds(dataFilter.current.filter(data));\n setRows(paginator.current.pageRows(corrector.current.data));\n setStats(await Stats.getStats(corrector.current.data, corrector.current.state, dispatch));\n setNumSelected(corrector.current.numSelected());\n setNumCorrected(corrector.current.numCorrections());\n setFilterCount(dataFilter.current.filterCount());\n setRSDCharFilterList(dataFilter.current.rsdCharFilterList(data));\n }\n\n async function loadPage() {\n setLoading(true);\n const data = await corrector.current.getData(dispatch);\n setLoading(false);\n if (!data) return;\n paginator.current.reset();\n setPage(data);\n }\n\n return (\n
\n {\n paginator.current.setDataIds(dataFilter.current.filter(corrector.current.data));\n setRows(paginator.current.pageRows(corrector.current.data));\n setFilterCount(dataFilter.current.filterCount());\n }}\n onSort={() => {\n if (corrector.current.dataLength() === 0) {\n loadPage();\n return;\n }\n const sorted = corrector.current.sortData();\n if (!sorted) return;\n paginator.current.setDataIds(dataFilter.current.filter(corrector.current.data));\n setRows(paginator.current.pageRows(corrector.current.data));\n }}\n onPageBack={() => {\n const prevRows = paginator.current.prevPageRows(corrector.current.data);\n if (prevRows) setRows(prevRows);\n }}\n onPageForward={() => {\n const nextRows = paginator.current.nextPageRows(corrector.current.data);\n if (nextRows) setRows(nextRows);\n }}\n onEdit={() => setModalAnnotation({ data_id: null })}\n onEditClear={() => {\n corrector.current.clearSelected();\n setNumSelected(0);\n setRows(paginator.current.pageRows(corrector.current.data));\n }}\n onSave={async () => {\n const res = await corrector.current.saveCorrections(dispatch);\n if (isBrand) {\n if (res.unprocessed.length > 0) {\n if (res.processed.length > 0) {\n corrector.current.removeCorrectedAnnotations(res.processed);\n await setPage(corrector.current.data);\n }\n setModalBrandProposals(res.unprocessed);\n return;\n }\n\n if (res.processed.length > 0) {\n corrector.current.removeCorrectedAnnotations(res.processed);\n await corrector.current.data.length === 0 ? loadPage() : setPage(corrector.current.data);\n showMessage(\"Brand change successful\", dispatch);\n return;\n }\n\n showError(\"Brand change failed\", dispatch);\n return;\n }\n\n if (res) {\n corrector.current.removeCorrectedAnnotations(res);\n await corrector.current.data.length === 0 ? loadPage() : setPage(corrector.current.data);\n showMessage(\"Category change successful\", dispatch);\n return;\n }\n\n showError(\"Category change failed\", dispatch);\n }}\n />\n\n {loading ? (\n \n ) : (\n
\n setModalAnnotation(annotation)}\n onRowChecked={(checked, dataId) => {\n const delta = corrector.current.setSelected(checked, dataId);\n setNumSelected(numSelected + delta);\n setRows(paginator.current.pageRows(corrector.current.data));\n }}\n onAllRowsChecked={(checked) => {\n const dataIds = rows.map(x => x.data_id);\n const delta = corrector.current.setSelected(checked, dataIds);\n setNumSelected(numSelected + delta);\n setRows(paginator.current.pageRows(corrector.current.data));\n }}\n />\n
\n )}\n\n {\n modalAnnotation ? (isBrand ?\n {\n const dataIds = dataId !== null ? [dataId] : corrector.current.allSelected();\n corrector.current.setBrandCorrections(dataIds, catalogBrandId, catalogBrand);\n setModalAnnotation(null);\n setRows(paginator.current.pageRows(corrector.current.data));\n setNumCorrected(corrector.current.numCorrections());\n }}\n onClose={() => {\n setModalAnnotation(null);\n }}\n /> :\n {\n const dataIds = dataId !== null ? [dataId] : corrector.current.allSelected();\n corrector.current.setCategoryCorrections(dataIds, taxonomyId, sector, department, category);\n setModalAnnotation(null);\n setRows(paginator.current.pageRows(corrector.current.data));\n setNumCorrected(corrector.current.numCorrections());\n }}\n onClose={() => {\n setModalAnnotation(null);\n }}\n />)\n : undefined\n }\n\n {\n modalBrandProposals ?\n {\n const res = await corrector.current.saveBrandProposal(modalBrandProposals, dispatch);\n if (res.processed.length > 0) {\n corrector.current.removeCorrectedAnnotations(res.processed);\n await corrector.current.data.length === 0 ? loadPage() : setPage(corrector.current.data);\n setModalBrandProposals(null);\n res.unprocessed.length > 0 ?\n showMessage(\"Brand proposal partially successful\", dispatch) :\n showMessage(\"Brand proposal successful\", dispatch);\n return;\n }\n setModalBrandProposals(null);\n showError(\"Brand proposal failed\", dispatch);\n }}\n onClose={() => {\n setModalBrandProposals(null);\n }}\n />\n : undefined\n }\n
\n );\n}","import React, { useState } from \"react\";\nimport { Switch, Route, Redirect, BrowserRouter, useHistory, useLocation } from \"react-router-dom\";\nimport clsx from \"clsx\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport List from \"@material-ui/core/List\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Divider from \"@material-ui/core/Divider\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ChevronLeftIcon from \"@material-ui/icons/ChevronLeft\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Avatar from '@material-ui/core/Avatar';\nimport ExitToAppIcon from \"@material-ui/icons/ExitToApp\";\nimport LocalOfferIcon from \"@material-ui/icons/LocalOffer\";\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport AppsIcon from \"@material-ui/icons/Apps\";\nimport AssignmentTurnedInIcon from '@material-ui/icons/AssignmentTurnedIn';\n\nimport { selectSignedIn, selectInitialized, selectError, selectMessage, selectUser } from \"./model/reduxClientSlice\";\n\n// brand autoset start\n// import AutorenewIcon from '@material-ui/icons/Autorenew';\n// import PathLink, {\n// SIGNIN_PATH, BRAND_REVIEW_PATH, BRAND_CORRECTION_PATH, CATEGORY_REVIEW_PATH,\n// BRAND_REVIEW_AUTOSET_PATH, CATEGORY_CORRECTION_PATH\n// } from \"./model/pathLink\";\nimport PathLink, {\n SIGNIN_PATH, BRAND_REVIEW_PATH, BRAND_CORRECTION_PATH, CATEGORY_REVIEW_PATH, CATEGORY_CORRECTION_PATH\n} from \"./model/pathLink\";\n// brand autoset end\n\nimport Client from \"./model/client\";\nimport UserRoles from \"./model/userRoles\";\n\nimport Alert from \"./component/Alert\";\nimport SignInPage from \"./page/signin\";\n// brand autoset start\n// import BrandAutosetProposals from \"./page/brandAutosetProposals\";\n// brand autoset end\nimport ReviewPage from \"./page/reviewPage\";\nimport CorrectionPage from \"./page/correctionPage\";\n\nconst DRAWER_WIDTH = 240;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n fontFamily: [\"Roboto\", \"Arial\", \"Helvetica\", \"sans-serif\"].join(\",\"),\n },\n\n // drawer\n drawer: {\n width: DRAWER_WIDTH,\n flexShrink: 0,\n whiteSpace: \"nowrap\",\n position: \"relative\",\n },\n\n drawerHeader: {\n height: 100,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n },\n\n drawerOpen: {\n width: DRAWER_WIDTH,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n\n drawerClose: {\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: \"hidden\",\n width: theme.spacing(5) + 1,\n [theme.breakpoints.up(\"sm\")]: { width: theme.spacing(7) + 1 },\n },\n\n drawerItemInactive: {\n background: \"white\",\n color: \"#212121 !important\",\n },\n\n drawerItemActive: {\n background: \"#1976d21f\",\n color: \"#1976d2 !important\",\n },\n\n drawerIconInactive: {\n color: \"#0000008A !important\",\n },\n\n drawerIconActive: {\n color: \"#1976D2 !important\",\n },\n\n drawerUserCard: {\n width: 200,\n marginTop: theme.spacing(1),\n },\n\n drawerUserName: {\n fontSize: 20,\n marginLeft: 16,\n width: \"100%\",\n letterSpacing: 0.26,\n marginTop: -5,\n },\n\n drawerUserEmail: {\n fontSize: 14,\n width: \"100%\",\n marginLeft: 16,\n letterSpacing: 0.24,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n\n drawerUserDetails: {\n float: \"left\",\n width: 130,\n },\n\n drawAvatarOpen: {\n width: theme.spacing(5),\n height: theme.spacing(5),\n float: \"left\",\n },\n\n drawAvatarClose: {\n width: theme.spacing(4),\n height: theme.spacing(4),\n marginRight: 2,\n },\n\n drawerLogout: {\n position: \"absolute\",\n bottom: 20,\n },\n\n content: {\n flexGrow: 1,\n },\n\n // toolbar\n toolbar: {\n width: \"100%\",\n height: 50,\n padding: theme.spacing(2),\n backgroundColor: \"#FAFAFA\",\n fontWeight: \"bold\",\n fontSize: 18,\n borderBottom: \"1px solid lightgray\",\n },\n\n // pages\n pages: {\n flexGrow: 1,\n // maxHeight: 200,\n overflowY: \"scroll\",\n padding: theme.spacing(2),\n },\n pageView: {\n width: \"100%\",\n },\n\n alert: {\n position: \"absolute\",\n bottom: 50,\n width: 250,\n left: \"50%\",\n marginLeft: -125,\n },\n}));\n\nexport default function App() {\n const user = useSelector(selectUser);\n const classes = useStyles();\n const signedIn = useSelector(selectSignedIn);\n const initialized = useSelector(selectInitialized);\n const error = useSelector(selectError);\n const message = useSelector(selectMessage);\n\n if (!initialized) {\n return (\n
\n \n
\n LOADING..\n
\n
\n );\n }\n\n if (signedIn) {\n return (\n
\n \n \n \n
\n \n
\n
\n \n {/* brand autoset start {\n UserRoles.isSupervisor(user) ?\n \n \n \n : undefined\n } brand autoset end */}\n {\n UserRoles.isSupervisor(user) || UserRoles.isBrandReviewer(user) ?\n \n \n : undefined\n }\n {\n UserRoles.isSupervisor(user) || UserRoles.isBrandCorrector(user) ?\n \n \n : undefined\n }\n {\n UserRoles.isSupervisor(user) || UserRoles.isCategoryReviewer(user) ?\n \n \n : undefined\n }\n {\n UserRoles.isSupervisor(user) || UserRoles.isCategoryCorrector(user) ?\n \n \n : undefined\n }\n \n \n
\n
\n
\n
\n {error ? (\n \n {error}\n \n ) : undefined}\n {message ? (\n \n {message}\n \n ) : undefined}\n
\n );\n }\n\n return (\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n
\n {error ? (\n \n {error}\n \n ) : undefined}\n\n
\n );\n}\n\nexport function AppInitializer() {\n const dispatch = useDispatch();\n dispatch(Client.refresh());\n return (\n
\n );\n}\n\nfunction AppDrawer() {\n const classes = useStyles();\n const dispatch = useDispatch();\n const history = useHistory();\n const user = useSelector(selectUser);\n const [open, setOpen] = useState(false);\n\n function handleClick(route) {\n return () => { history.push(route); };\n }\n\n return (\n \n
\n {open ?
\n \n
\n
{user.name.split(\" \")[0]}
\n
{user.email}
\n
\n
: undefined}\n { setOpen(!open); }} size=\"small\">\n {open ?\n :\n \n }\n \n
\n \n \n {\n UserRoles.isSupervisor(user) || UserRoles.isBrandReviewer(user) ?\n }\n text=\"Brand check\"\n path={BRAND_REVIEW_PATH}\n classes={classes}\n tooltip=\"Brand check\"\n onClick={handleClick(BRAND_REVIEW_PATH)}\n /> : undefined\n }\n {\n UserRoles.isSupervisor(user) || UserRoles.isBrandCorrector(user) ?\n }\n text=\"Brand correction\"\n path={BRAND_CORRECTION_PATH}\n classes={classes}\n tooltip=\"Brand correction\"\n onClick={handleClick(BRAND_CORRECTION_PATH)}\n /> : undefined\n }\n {/* brand autoset start {\n UserRoles.isSupervisor(user) ?\n }\n text=\"Brand autoset\"\n path={BRAND_REVIEW_AUTOSET_PATH}\n classes={classes}\n tooltip=\"Brand autoset\"\n onClick={handleClick(BRAND_REVIEW_AUTOSET_PATH)}\n />\n : undefined\n } brand autoset end */}\n \n \n \n {\n UserRoles.isSupervisor(user) || UserRoles.isCategoryReviewer(user) ?\n }\n text=\"Category check\"\n path={CATEGORY_REVIEW_PATH}\n classes={classes}\n tooltip=\"Category check\"\n onClick={handleClick(CATEGORY_REVIEW_PATH)}\n /> : undefined\n }\n {\n UserRoles.isSupervisor(user) || UserRoles.isCategoryCorrector(user) ?\n }\n text=\"Category correction\"\n path={CATEGORY_CORRECTION_PATH}\n classes={classes}\n tooltip=\"Category correction\"\n onClick={handleClick(CATEGORY_CORRECTION_PATH)}\n /> : undefined\n }\n \n
\n }\n text=\"Logout\"\n path=\"\"\n classes={classes}\n tooltip=\"Logout\"\n onClick={async () => { await Client.signOut(dispatch); }}\n />\n
\n \n );\n}\n\nfunction AppDrawerOption({ icon, text, onClick, path, classes, tooltip }) {\n const location = useLocation();\n return (\n \n \n \n {icon}\n \n \n \n \n );\n}\n\nfunction AppToolbar() {\n const classes = useStyles();\n const location = useLocation();\n // todo: add links\n return (\n
\n {PathLink.decode(location.pathname)[0].text}\n
\n );\n}\n\nfunction RouteRedirect({ user }) {\n if (UserRoles.isSupervisor(user) || UserRoles.isBrandReviewer(user))\n return ;\n\n if (UserRoles.isBrandCorrector(user))\n return ;\n\n if (UserRoles.isCategoryReviewer(user))\n return ;\n\n if (UserRoles.isCategoryCorrector(user))\n return ;\n\n return User role has not been set. Please contact site admin.\n}","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport clientReducer from \"./reduxClientSlice\";\n\nexport default configureStore({\n reducer: {\n client: clientReducer,\n },\n});\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App, { AppInitializer } from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport { Provider } from \"react-redux\";\n\nimport store from \"./model/reduxStore\";\n\nReactDOM.render(\n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}