{"version":3,"sources":["components/common/Loading.js","contexts/authContext.js","hooks/useQueryString.js","contexts/branchContext.js","contexts/dialogContext.js","contexts/snackbarContext.js","utils/withRouter.js","styles/components/DrawerHeader.js","components/common/CombineProviders.js","components/common/ErrorBoundary.js","components/common/Meta.js","components/page/Dialog.js","images/logos/logo-light-bg.png","components/page/NavLinks.js","utils/stringMethods.js","components/page/Drawer.js","hooks/useDateFilter.js","styles/components/AdminListContainer.js","utils/iterateObjectValuesNullToBlank.js","components/common/DataTable.js","components/common/DateFilter.js","components/common/Pagination.js","components/common/Search.js","components/admin/attendance/AttendancesPage.js","utils/formatMoney.js","components/common/NestedTable.js","components/common/DataTableAccordion.js","components/admin/billings/SalesSummary.js","components/admin/billings/BillingsPage.js","components/admin/branches/BranchesPage.js","components/admin/discount_cards/DiscountCardsPage.js","components/admin/employees/EmployeesPage.js","hooks/useInputChange.js","components/common/FormContainer.js","components/admin/employees/EmployeeForm.js","components/admin/employees/ViewEmployeePage.js","components/admin/ingredients/IngredientsPage.js","components/admin/inventories/InventoriesPage.js","components/admin/items/ItemsPage.js","components/admin/item_categories/ItemCategoriesPage.js","components/admin/items/ItemForm.js","components/admin/items/ViewItemPage.js","components/admin/menu_items/MenuItemsPage.js","components/admin/pending_bills/PendingBillsPage.js","components/admin/products/ProductsPage.js","components/admin/product_categories/ProductCategoriesPage.js","components/admin/purchase_orders/PurchaseOrdersPage.js","components/admin/reports/ErrorlogsPage.js","components/admin/reports/InventoryReportPage.js","components/admin/reports/SalesReportPage.js","components/admin/reports/TipCalculatorPage.js","utils/handleNestedInputChange.js","components/admin/suppliers/SuppliersPage.js","components/admin/transfer_slips/TransferSlipsPage.js","components/admin/users/UsersPage.js","components/admin/wastages/WastagesPage.js","images/logos/logo-white.png","components/authentication/SigninPage.js","components/HomePage.js","components/OrderItemsPage.js","components/page/ProtectedRoute.js","components/page/Routes.js","components/page/Snackbar.js","hooks/usePopper.js","components/authentication/SignoutButton.js","components/common/Popper.js","components/page/TopNav.js","images/logos/logo-dark-bg.png","components/page/Page.js","libs/apolloClient.js","styles/theme.js","App.js","reportWebVitals.js","index.js"],"names":["Loading","Box","sx","m","display","flexDirection","alignItems","CircularProgress","Typography","variant","mt","AuthContext","React","createContext","displayName","CURRENT_USER","gql","AuthProvider","children","useQuery","fetchPolicy","notifyOnNetworkStatusChange","data","currentUser","currentUserLoading","loading","Provider","value","useAuthContext","useContext","useQueryString","field","callback","navigate","useNavigate","location","useLocation","parsed","queryString","parse","search","initialQueryStringValue","undefined","useState","queryStringValue","setQueryStringValue","handleChangeQueryString","e","newValue","target","parseValue","pathname","stringify","handleSubmitQueryString","type","preventDefault","BranchContext","BranchProvider","handleSubmitBranchFilter","branchFilterQueryString","useBranchContext","DialogContext","DialogProvider","dialogOpen","setDialogOpen","dialogComponent","setDialogComponent","handleDialogOpen","component","handleDialogClose","event","reason","SnackbarContext","Component","SnackbarProvider","snackbarOpen","setSnackbarOpen","snackbarMessage","setSnackbarMessage","snackbarSeverity","setSnackbarSeverity","handleSnackbarOpen","message","severity","handleSnackbarClose","useSnackbarContext","DrawerHeader","styled","theme","mixins","toolbar","justifyContent","CombineProviders","props","providers","reduceRight","acc","ExpandMore","expand","other","IconButton","transform","marginLeft","transition","transitions","create","duration","shortest","ErrorBoundary","state","hasError","error","errorInfo","expanded","handleExpandClick","bind","prevProps","this","setState","console","log","Card","margin","width","breakpoints","values","sm","CardHeader","title","avatar","color","disableTypography","CardContent","padding","Grid","container","justify","onClick","Collapse","in","timeout","unmountOnExit","componentStack","toString","withRouter","history","Meta","description","meta","htmlAttributes","lang","name","content","Dialog","open","onClose","minWidth","links","group","routes","NavLinks","handleDrawerClose","onKeyDown","List","map","link","idx","ListSubheader","backgroundColor","palette","primary","main","common","white","textTransform","fontWeight","route","ListItemButton","string","append","toLowerCase","replace","stringToUrl","ListItemText","inset","Drawer","drawerOpen","toggleDrawer","anchor","displayPrint","Link","src","logoLightBg","alt","height","spacing","Divider","useDateFilter","paramsObj","startDateQueryString","startDate","endDateQueryString","endDate","setStartDate","dateQueryString","date","setEndDate","setDate","handleChangeStartDate","formatValue","format","handleChangeEndDate","isDate","handleClearDateFilters","handleChangeDate","AdminListContainer","flex","overflowX","overflowY","iterateObjectValuesNullToBlank","obj","Object","keys","reduce","cur","Array","isArray","item","getNestedValue","path","split","descendingComparator","a","b","orderBy","getComparator","order","stableSort","array","comparator","stabilizedThis","el","index","sort","DataTable","columns","tableSummary","setOrder","setOrderBy","length","Table","size","TableHead","TableRow","header","accessor","TableCell","align","TableSortLabel","active","direction","property","TableBody","Fragment","Cell","id","colSpan","style","borderBottom","my","DateFilter","LocalizationProvider","dateAdapter","AdapterDateFns","Stack","xs","md","DatePicker","label","onChange","disableMaskedInput","inputProps","readOnly","renderInput","params","TextField","InputLabelProps","shrink","borderRadius","Button","Pagination","query","skip","variables","page","perPage","currentPage","setCurrentPage","count","Math","ceil","pt","mx","newSearch","Search","handleSubmitSearch","handleChangeSearch","searchTerm","onSubmit","placeholder","fullWidth","InputProps","startAdornment","InputAdornment","position","TIMELOG_TYPES","ATTENDANCES","ATTENDANCES_COUNT","AttendancesPage","parseInt","csvLink","useRef","exportData","setExportData","searchQueryString","__type","timelogTypes","enumValues","timelogTypesLoading","where","branch","equals","dateTime","gte","startOfDay","Date","lte","endOfDay","timelogType","OR","employee","firstName","contains","mode","lastName","take","attendances","refetch","handleDownload","attendance","current","click","rel","href","process","headers","filter","column","key","filename","now","ref","startIcon","gutterBottom","FormControl","InputLabel","Select","labelId","MenuItem","Paper","className","Number","formatMoney","amount","currency","options","currencyDisplay","minimumFractionDigits","formatter","Intl","NumberFormat","NestedTable","DataTableAccordion","collapse","setCollapse","includes","Portal","document","querySelector","SalesSummary","salesSummaryPerProduct","salesSummaryTotal","salesSummaryPerModeOfPayment","salesSummaryPerProductColumns","toLocaleString","salesSummaryPerModeOfPaymentColumns","p","overflow","serviceCharge","discount","totalSales","productCategoryType","BILLINGS","SALES_SUMMARY_PER_PRODUCT","SALES_SUMMARY_TOTAL","SALES_SUMMARY_PER_MODE_OF_PAYMENT","BILLINGS_COUNT","BillingsPage","createdAt","tableNumber","billings","branchId","salesSummaryPerProductLoading","salesSummaryTotalLoading","salesSummaryPerModeOfPaymentLoading","billingItemsColumns","gridTemplateColumns","gap","BRANCHES","BranchesPage","branches","operatingHoursColumns","DISCOUNT_CARD_TYPES","DISCOUNT_CARDS","DISCOUNT_CARDS_COUNT","DiscountCardsPage","handleSubmitFilter","filterQueryString","discountCardType","number","discountCards","discountCardTypes","discountCardTypesLoading","EMPLOYMENT_TYPES","SALARY_TYPES","EMPLOYEES","EMPLOYEES_COUNT","EmployeesPage","employmentTypeHandleSubmitFilter","employmentTypeFilterQueryString","salaryTypeHandleSubmitFilter","salaryTypeFilterQueryString","employmentType","salaryType","employees","employmentTypes","employmentTypesLoading","salaryTypes","salaryTypesLoading","Tooltip","actionTypes","inputReducer","checked","files","is","NaN","parseFloat","useInputChange","reducer","initialState","useReducer","dispatch","useCallback","handleChange","filterCriteria","find","arrayItem","FormContainer","maxWidth","Container","EmployeeForm","handleSubmit","mutationLoading","disabled","mb","required","middleName","mobileNumber","address","dateHired","wage","emergencyContactPerson","emergencyContactNumber","emergencyContactRelationship","EMPLOYEE","ViewEmployeePage","useParams","useEffect","RECIPES","RECIPES_COUNT","IngredientsPage","menuItem","menuItemId","ingredients","toFixed","INVENTORIES","INVENTORIES_COUNT","InventoriesPage","inventories","INVENTORY_SCHEDULES","ITEMS","ITEMS_COUNT","ItemsPage","inventorySchedule","items","inventorySchedules","inventorySchedulesLoading","ITEM_CATEGORIES","ITEM_CATEGORIES_COUNT","ItemCategoriesPage","itemCategories","LATEST_PURCHASE_ORDER_ITEMS","ItemForm","itemCategoriesLoading","itemId","latestPurchaseOrderItems","latestPurchaseOrderItemsLoading","latestPurchaseOrderItemsColumns","itemCategory","inventoryOrderNumber","autoComplete","unit","threshold","ITEM","ViewItemPage","MENU_ITEM_CATEGORIES","MENU_ITEMS","MENU_ITEMS_COUNT","MenuItemsPage","menuItemCategory","discontinued","menuItems","menuItemCategories","menuItemCategoriesLoading","PENDING_BILLS","PendingBillsPage","pendingBills","pendingBillItemsColumns","pendingBillsTotalNumberOfPax","totalNumberOfPax","PRODUCTS","PRODUCTS_COUNT","ProductsPage","productCategory","products","PRODUCT_CATEGORY_TYPES","PRODUCT_CATEGORIES","PRODUCT_CATEGORIES_COUNT","ProductCategoriesPage","productCategories","productCategoryTypes","productCategoryTypesLoading","PURCHASE_ORDERS","PURCHASE_ORDERS_COUNT","PurchaseOrdersPage","reimbursedTo","remarks","supplier","requestedBy","username","purchaseOrderItems","some","purchaseOrders","purchaseOrderItemsColumns","ERRORLOGS","ErrorlogsPage","errorlogs","branchesLoading","INVENTORY_REPORT_ITEMS","InventoryReportPage","handleSubmitItemCategoryFilter","itemCategoryFilterQueryString","skipCriteria","itemCategoryId","inventoryReportItems","inventoryReportItem","SALES_REPORT_ITEMS","SalesReportPage","salesReportItems","salesReportItem","TIP_CALCULATOR_ITEMS","TipCalculatorPage","tipCalculatorItemsState","tipCalculatorItemsSetState","useMemo","tipCalculatorItems","handleChangeItem","nidx","handleNestedChange","tipPerDay","floor","totalTip","deductions","carryOverPrevious","numberOfDays","totalTipDistributed","carryOverNext","tip","justifyItems","tipCalculatorItem","SUPPLIERS","SUPPLIERS_COUNT","SuppliersPage","contactPerson","suppliers","TRANSFER_SLIPS","TRANSFER_SLIPS_COUNT","TRANSFER_SLIPS_TOTAL","TransferSlipsPage","dateBorrowed","destination","transferSlipItems","transferSlips","transferSlipsTotal","transferSlipItemsColumns","USERGROUPS","USERS","USERS_COUNT","UsersPage","usergroup","users","usergroups","usergroupsLoading","WASTAGES","WASTAGES_COUNT","WASTAGES_TOTAL","WastagesPage","wastages","wastagesTotal","SIGN_IN","SigninPage","showPassword","setShowPassword","useMutation","awaitRefetchQueries","refetchQueries","onError","charAt","toUpperCase","slice","onCompleted","signin","flexGrow","logoWhite","htmlFor","OutlinedInput","endAdornment","edge","secondary","left","right","top","bottom","marginRight","HomePage","px","letterSpacing","ORDER_ITEMS","ORDER_ITEMS_COUNT","OrderItemsPage","handleSubmitIsCooked","isCookedQueryString","handleSubmitIsServed","isServedQueryString","isCooked","isServed","user","orderItems","orderItem","cookedAt","servedAt","ProtectedRoute","redirectPath","to","Routes","element","exact","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","elevation","usePopper","anchorEl","setAnchorEl","setOpen","placement","setPlacement","handleClick","newPlacement","currentTarget","prevState","SIGNOUT","SignoutButton","signout","Popper","zIndex","TransitionProps","Fade","TopNav","useTheme","AppBar","Toolbar","fontSize","Autocomplete","disablePortal","getOptionLabel","option","ClickAwayListener","onClickAway","ml","Avatar","bgcolor","Page","setDrawerOpen","lg","createUploadLink","uri","credentials","apolloClient","ApolloClient","cache","InMemoryCache","createTheme","typography","h3","h4","h5","background","default","grey","components","MuiCssBaseline","styleOverrides","responsiveFontSizes","App","ApolloProvider","client","CssBaseline","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.f21ca088.chunk.js","sourcesContent":["import { Box } from \"@mui/material\";\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport Typography from \"@mui/material/Typography\";\nimport React from \"react\";\n\nconst Loading = () => {\n return (\n <Box\n sx={{\n m: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n <CircularProgress />\n <Typography variant=\"h6\" sx={{ mt: 2 }}>\n Loading...\n </Typography>\n </Box>\n );\n};\n\nexport default Loading;\n","import { gql, useQuery } from \"@apollo/client\";\nimport React from \"react\";\nimport Loading from \"../components/common/Loading\";\n\nconst AuthContext = React.createContext();\n\nAuthContext.displayName = \"AuthContext\";\n\nexport const CURRENT_USER = gql`\n query CurrentUser {\n currentUser {\n id\n username\n }\n }\n`;\n\nconst AuthProvider = ({ children }) => {\n const { data: { currentUser } = {}, loading: currentUserLoading } = useQuery(\n CURRENT_USER,\n {\n fetchPolicy: \"network-only\",\n notifyOnNetworkStatusChange: true,\n }\n );\n if (currentUserLoading) return <Loading />;\n\n return (\n <AuthContext.Provider\n value={{\n currentUser,\n currentUserLoading,\n }}\n >\n {children}\n </AuthContext.Provider>\n );\n};\n\nconst useAuthContext = () => {\n return React.useContext(AuthContext);\n};\n\nexport { AuthProvider, useAuthContext };\n","import { useState } from \"react\";\nimport queryString from \"query-string\";\nimport { useNavigate, useLocation } from \"react-router\";\n\nconst useQueryString = (field = \"\", callback = () => {}) => {\n let navigate = useNavigate();\n let location = useLocation();\n const parsed = queryString.parse(location.search);\n const initialQueryStringValue = parsed[field] || undefined;\n\n const [queryStringValue, setQueryStringValue] = useState(\n initialQueryStringValue\n );\n\n const handleChangeQueryString = (e, newValue = null) => {\n const value = newValue || e.target.value;\n setQueryStringValue(value);\n };\n const parseValue = (field, value) => {\n if (!value) {\n delete parsed[field];\n navigate({\n pathname: location.pathname,\n search: queryString.stringify({ ...parsed }),\n });\n } else {\n navigate({\n pathname: location.pathname,\n search: queryString.stringify({ ...parsed, [field]: value }),\n });\n }\n };\n\n const handleSubmitQueryString =\n (type = \"indirect\", newValue = null) =>\n (e) => {\n e.preventDefault();\n const value = newValue || e.target.value;\n if (type === \"direct\") {\n setQueryStringValue(value);\n parseValue(field, value);\n callback();\n } else {\n delete parsed[\"page\"];\n parseValue(field, queryStringValue);\n }\n };\n\n return {\n handleChangeQueryString,\n handleSubmitQueryString,\n queryStringValue,\n initialQueryStringValue,\n };\n};\n\nexport default useQueryString;\n","import React from \"react\";\nimport useQueryString from \"../hooks/useQueryString\";\n\nconst BranchContext = React.createContext();\n\nBranchContext.displayName = \"BranchContext\";\n\nconst BranchProvider = ({ children }) => {\n const {\n handleSubmitQueryString: handleSubmitBranchFilter,\n initialQueryStringValue: branchFilterQueryString,\n } = useQueryString(\"branchId\");\n\n return (\n <BranchContext.Provider\n value={{\n branchFilterQueryString,\n handleSubmitBranchFilter,\n }}\n >\n {children}\n </BranchContext.Provider>\n );\n};\n\nconst useBranchContext = () => {\n return React.useContext(BranchContext);\n};\n\nexport { BranchProvider, useBranchContext };\n","import React, { useState } from \"react\";\n\nconst DialogContext = React.createContext();\n\nDialogContext.displayName = \"DialogContext\";\n\nconst DialogProvider = ({ children }) => {\n const [dialogOpen, setDialogOpen] = useState(false);\n const [dialogComponent, setDialogComponent] = useState(<></>);\n\n const handleDialogOpen = (component = <></>) => {\n setDialogComponent(component);\n setDialogOpen(true);\n };\n\n const handleDialogClose = (event, reason) => {\n if (reason === \"clickaway\") {\n return;\n }\n setDialogOpen(false);\n };\n return (\n <DialogContext.Provider\n value={{\n dialogOpen,\n dialogComponent,\n handleDialogOpen,\n handleDialogClose,\n }}\n >\n {children}\n </DialogContext.Provider>\n );\n};\n\nconst useDialogContext = () => {\n return React.useContext(DialogContext);\n};\n\nexport { DialogProvider, useDialogContext };\n","import React, { useState } from \"react\";\n\nconst SnackbarContext = React.createContext();\n\nSnackbarContext.displayName = \"SnackbarContext\";\n\nconst SnackbarProvider = ({ children }) => {\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState(undefined);\n const [snackbarSeverity, setSnackbarSeverity] = useState(\"success\");\n\n const handleSnackbarOpen = ({ message, severity }) => {\n setSnackbarMessage(message);\n setSnackbarSeverity(severity);\n setSnackbarOpen(true);\n };\n const handleSnackbarClose = (event, reason) => {\n if (reason === \"clickaway\") {\n return;\n }\n setSnackbarOpen(false);\n };\n return (\n <SnackbarContext.Provider\n value={{\n handleSnackbarOpen,\n handleSnackbarClose,\n snackbarOpen,\n snackbarSeverity,\n snackbarMessage,\n }}\n >\n {children}\n </SnackbarContext.Provider>\n );\n};\n\nconst useSnackbarContext = () => {\n return React.useContext(SnackbarContext);\n};\n\nexport { SnackbarProvider, useSnackbarContext };\n","import { useNavigate } from \"react-router\";\nexport const withRouter = (Component) => {\n const Wrapper = (props) => {\n const history = useNavigate();\n return <Component history={history} {...props} />;\n };\n return Wrapper;\n};\n","import { styled } from \"@mui/material\";\n\nconst DrawerHeader = styled(\"div\")(({ theme }) => ({\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n \"@media print\": { display: \"none\" },\n}));\n\nexport default DrawerHeader;\n","import React from \"react\";\n\nconst CombineProviders = (props) => {\n const { providers = [], children } = props;\n return (\n <>\n {providers.reduceRight((acc, Provider) => {\n return <Provider>{acc}</Provider>;\n }, children)}\n </>\n );\n};\n\nexport default CombineProviders;\n","import ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport WarningIcon from \"@mui/icons-material/Warning\";\nimport {\n Card,\n CardContent,\n CardHeader,\n Collapse,\n Grid,\n IconButton,\n Typography,\n} from \"@mui/material\";\nimport { styled } from \"@mui/system\";\nimport React, { Component } from \"react\";\nimport { withRouter } from \"../../utils/withRouter\";\n\nconst ExpandMore = styled((props) => {\n const { expand, ...other } = props;\n return <IconButton {...other} />;\n})(({ theme, expand }) => ({\n transform: !expand ? \"rotate(0deg)\" : \"rotate(180deg)\",\n marginLeft: \"auto\",\n transition: theme.transitions.create(\"transform\", {\n duration: theme.transitions.duration.shortest,\n }),\n}));\n\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false, error: \"\", errorInfo: \"\", expanded: false };\n this.handleExpandClick = this.handleExpandClick.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n const locationChanged = this.props.location !== prevProps.location;\n if (locationChanged && this.state.hasError) {\n this.setState({\n hasError: false,\n error: \"\",\n errorInfo: \"\",\n });\n }\n }\n\n componentDidCatch(error, errorInfo) {\n console.log(error, errorInfo);\n this.setState({ errorInfo });\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true, error };\n }\n\n handleExpandClick() {\n this.setState({ expanded: !this.state.expanded });\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Card\n sx={{\n margin: \"0 auto\",\n width: (theme) => theme.breakpoints.values.sm,\n }}\n >\n <CardHeader\n title={\n <Typography variant=\"h6\">\n There was an error loading this page.\n </Typography>\n }\n avatar={<WarningIcon color=\"secondary\" />}\n disableTypography={true}\n />\n <CardContent color=\"textSecondary\" sx={{ padding: \"8px 16px\" }}>\n <Grid container justify=\"space-between\" alignItems=\"center\">\n Click for error details\n <ExpandMore\n expand={this.state.expanded}\n onClick={this.handleExpandClick}\n aria-expanded={this.state.expanded}\n aria-label=\"show more\"\n >\n <ExpandMoreIcon />\n </ExpandMore>\n </Grid>\n </CardContent>\n <Collapse in={this.state.expanded} timeout=\"auto\" unmountOnExit>\n <CardContent>\n <Typography variant=\"subtitle2\">\n {this.state.error.message}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {this.state.errorInfo &&\n this.state.errorInfo.componentStack.toString()}\n </Typography>\n </CardContent>\n </Collapse>\n </Card>\n );\n }\n return this.props.children;\n }\n}\n\nexport default withRouter(ErrorBoundary);\n","import React from \"react\";\nimport { Helmet } from \"react-helmet-async\";\nconst Meta = ({ title, description, meta = [] }) => {\n return (\n <Helmet\n htmlAttributes={{ lang: \"en\" }}\n title={title}\n meta={[{ name: `description`, content: description }, ...meta]}\n />\n );\n};\n\nexport default Meta;\n","import MuiDialog from \"@mui/material/Dialog\";\nimport React from \"react\";\nimport { useDialogContext } from \"../../contexts/dialogContext\";\n\nconst Dialog = () => {\n const { dialogOpen, handleDialogClose, dialogComponent } = useDialogContext();\n return (\n <>\n <MuiDialog\n open={dialogOpen}\n onClose={handleDialogClose}\n aria-describedby=\"dialog\"\n sx={{\n \"& .MuiDialog-paper\": {\n minWidth: \"300px\",\n },\n }}\n >\n {dialogComponent}\n </MuiDialog>\n </>\n );\n};\n\nexport default Dialog;\n","export default \"data:image/png;base64,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\"","import {\n Box,\n List,\n ListItemButton,\n ListItemText,\n ListSubheader,\n} from \"@mui/material\";\nimport React from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { stringToUrl } from \"../../utils/stringMethods\";\n\nconst links = [\n {\n group: \"General\",\n routes: [\n { name: \"Branches\" },\n { name: \"Users\" },\n { name: \"Product Categories\" },\n { name: \"Products\" },\n { name: \"Menu Items\" },\n ],\n },\n {\n group: \"Sales\",\n routes: [\n { name: \"Pending Bills\" },\n { name: \"Billings\" },\n { name: \"Discount Cards\" },\n { name: \"Order Items\" },\n ],\n },\n {\n group: \"Staffs\",\n routes: [{ name: \"Employees\" }, { name: \"Attendances\" }],\n },\n {\n group: \"Back Office\",\n routes: [\n { name: \"Item Categories\" },\n { name: \"Items\" },\n { name: \"Suppliers\" },\n { name: \"Purchase Orders\" },\n { name: \"Transfer Slips\" },\n { name: \"Wastages\" },\n { name: \"Inventories\" },\n { name: \"Ingredients\" },\n ],\n },\n {\n group: \"Reports\",\n routes: [\n { name: \"Inventory Report\" },\n { name: \"Tip Calculator\" },\n { name: \"Sales Report\" },\n { name: \"Error Logs\" },\n ],\n },\n];\nconst NavLinks = ({ handleDrawerClose }) => {\n const navigate = useNavigate();\n\n return (\n <Box\n sx={{ width: 300 }}\n onClick={handleDrawerClose}\n onKeyDown={handleDrawerClose}\n >\n <List component=\"nav\">\n {links.map((link, idx) => (\n <div key={idx}>\n <ListSubheader\n sx={{\n backgroundColor: (theme) => theme.palette.primary.main,\n color: (theme) => theme.palette.common.white,\n textTransform: \"uppercase\",\n fontWeight: \"bold\",\n }}\n >\n {link.group}\n </ListSubheader>\n {link.routes.map((route, idx) => (\n <ListItemButton\n key={idx}\n onClick={() => navigate(stringToUrl(route.name))}\n >\n <ListItemText disableTypography inset>\n {route.name}\n </ListItemText>\n </ListItemButton>\n ))}\n </div>\n ))}\n </List>\n </Box>\n );\n};\n\nexport default NavLinks;\n","const stringToUrl = (string, prepend = \"\", append = \"\") => {\n return (\n prepend +\n \"/\" +\n string\n .toLowerCase()\n .replace(/[^a-zA-z ]/g, \" \")\n .replace(/\\s+/g, \"-\") +\n append\n );\n};\n\nconst stringToSlug = (string) =>\n string.toLowerCase().replace(/[^a-zA-Z0-9]+/g, \"-\");\n\nexport { stringToUrl, stringToSlug };\n","import { Divider, Drawer as MuiDrawer, Link } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport React from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport logoLightBg from \"../../images/logos/logo-light-bg.png\";\nimport DrawerHeader from \"../../styles/components/DrawerHeader\";\nimport Nav from \"./NavLinks\";\n\nconst Drawer = ({ drawerOpen, toggleDrawer }) => {\n const navigate = useNavigate();\n\n return (\n <>\n <MuiDrawer\n anchor=\"left\"\n open={drawerOpen}\n onClose={toggleDrawer(false)}\n sx={{ displayPrint: \"none\" }}\n >\n <DrawerHeader>\n <Link\n component=\"button\"\n onClick={(e) => {\n toggleDrawer(false)(e);\n navigate(\"/admin\");\n }}\n >\n <Box\n component=\"img\"\n src={logoLightBg}\n alt=\"logo\"\n sx={{\n height: \"40px\",\n marginLeft: (theme) => theme.spacing(1),\n }}\n />\n </Link>\n </DrawerHeader>\n <Divider />\n <Nav handleDrawerClose={toggleDrawer(false)} />\n </MuiDrawer>\n </>\n );\n};\n\nexport default Drawer;\n","import { useState } from \"react\";\nimport queryString from \"query-string\";\nimport { format, isDate } from \"date-fns\";\nimport { useNavigate, useLocation } from \"react-router\";\n\nconst useDateFilter = () => {\n let navigate = useNavigate();\n let location = useLocation();\n const paramsObj = queryString.parse(location.search);\n const startDateQueryString = paramsObj.startDate;\n const endDateQueryString = paramsObj.endDate;\n const [startDate, setStartDate] = useState(startDateQueryString);\n const dateQueryString = paramsObj.date || \"\";\n const [endDate, setEndDate] = useState(endDateQueryString);\n\n const [date, setDate] = useState(dateQueryString);\n const handleChangeStartDate = (value) => {\n const formatValue = format(value, \"yyyy-MM-dd\");\n setStartDate(formatValue);\n if (endDate) {\n delete paramsObj[\"page\"];\n navigate({\n pathname: location.pathname,\n search: queryString.stringify({\n ...paramsObj,\n startDate: formatValue,\n endDate: endDate,\n }),\n });\n }\n };\n\n const handleChangeEndDate = (value) => {\n if (isDate(value)) {\n const formatValue = format(value, \"yyyy-MM-dd\");\n setEndDate(formatValue);\n if (startDate) {\n delete paramsObj[\"page\"];\n navigate({\n pathname: location.pathname,\n search: queryString.stringify({\n ...paramsObj,\n startDate: startDate,\n endDate: formatValue,\n }),\n });\n }\n }\n };\n\n const handleChangeDate = (value) => {\n const formatValue = format(value, \"yyyy-MM-dd\");\n setDate(formatValue);\n delete paramsObj[\"page\"];\n navigate({\n pathname: location.pathname,\n search: queryString.stringify({\n ...paramsObj,\n date: formatValue,\n }),\n });\n };\n\n const handleClearDateFilters = () => {\n delete paramsObj[\"startDate\"];\n delete paramsObj[\"endDate\"];\n delete paramsObj[\"date\"];\n navigate({\n pathname: location.pathname,\n search: queryString.stringify({ ...paramsObj }),\n });\n setStartDate(\"\");\n setEndDate(\"\");\n setDate(\"\");\n };\n\n return {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n dateQueryString,\n date,\n handleChangeDate,\n };\n};\n\nexport default useDateFilter;\n","import { styled } from \"@mui/material\";\n\nconst AdminListContainer = styled(\"div\")(({ theme }) => ({\n margin: theme.spacing(1, 0),\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n\n \"& .actionButton\": {\n marginLeft: \"auto\",\n fontWeight: \"bold\",\n },\n\n \"& .dataTableContainer\": {\n overflowX: \"auto\",\n overflowY: \"hidden\",\n margin: theme.spacing(2, 0),\n },\n}));\n\nexport default AdminListContainer;\n","// iterate through object and change null values to empty object\n\nconst iterateObjectValuesNullToBlank = (obj) => {\n return Object.keys(obj).reduce((acc, cur) => {\n if (Array.isArray(obj[cur])) {\n return {\n ...acc,\n [cur]: obj[cur].map((item) => iterateObjectValuesNullToBlank(item)),\n };\n }\n if (typeof obj[cur] === \"object\") {\n // double check bec typeof null === obj (weird thing about javascript)\n if (obj[cur] === null) {\n return { ...acc, [cur]: \"\" };\n } else {\n return { ...acc, [cur]: iterateObjectValuesNullToBlank(obj[cur]) };\n }\n }\n return { ...acc, [cur]: obj[cur] };\n }, {});\n};\n\nexport default iterateObjectValuesNullToBlank;\n","import React, { useState } from \"react\";\nimport TableSortLabel from \"@mui/material/TableSortLabel\";\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport Typography from \"@mui/material/Typography\";\n\nconst getNestedValue = (obj, path) =>\n path.split(\".\").reduce((acc, cur) => {\n return acc && acc[cur];\n }, obj);\n\nconst descendingComparator = (a, b, orderBy) => {\n if (getNestedValue(b, orderBy) < getNestedValue(a, orderBy)) {\n return -1;\n }\n if (getNestedValue(b, orderBy) > getNestedValue(a, orderBy)) {\n return 1;\n }\n return 0;\n};\n\nconst getComparator = (order, orderBy) => {\n return order === \"desc\"\n ? (a, b) => descendingComparator(a, b, orderBy)\n : (a, b) => -descendingComparator(a, b, orderBy);\n};\n\nconst stableSort = (array, comparator) => {\n const stabilizedThis = array.map((el, index) => [el, index]);\n\n stabilizedThis.sort((a, b) => {\n const order = comparator(a[0], b[0]);\n if (order !== 0) return order;\n return a[1] - b[1];\n });\n\n return stabilizedThis.map((el) => el[0]);\n};\nconst DataTable = ({ data = [], columns = [], tableSummary = <></> }) => {\n const [order, setOrder] = useState(\"asc\");\n const [orderBy, setOrderBy] = useState(\"calories\");\n\n const handleRequestSort = (event, property) => {\n const isAsc = orderBy === property && order === \"asc\";\n setOrder(isAsc ? \"desc\" : \"asc\");\n setOrderBy(property);\n };\n\n return (\n <>\n {data.length > 0 ? (\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n {columns.map(({ header, accessor }) => (\n <TableCell align=\"center\" key={header}>\n <TableSortLabel\n active={orderBy === accessor}\n direction={orderBy === accessor ? order : \"asc\"}\n onClick={(event) => handleRequestSort(event, accessor)}\n >\n {header}\n </TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {stableSort(data, getComparator(order, orderBy)).map(\n (item, index) => {\n return (\n <React.Fragment key={index}>\n <TableRow>\n {columns.map(({ accessor, Cell = (children) => <>\n {children}\n </> }, idx) => (\n <TableCell align=\"center\" key={idx}>\n {Cell(getNestedValue(item, accessor), index)}\n </TableCell>\n ))}\n </TableRow>\n <TableRow>\n <TableCell\n id={`portal-${index}`}\n colSpan={columns.length}\n padding=\"none\"\n style={{ borderBottom: 0 }}\n ></TableCell>\n </TableRow>\n </React.Fragment>\n );\n }\n )}\n {tableSummary}\n </TableBody>\n </Table>\n ) : (\n <Typography variant=\"h6\" align=\"center\" sx={{ my: 2 }}>\n No items here\n </Typography>\n )}\n </>\n );\n};\n\nexport default DataTable;\n","import Button from \"@mui/material/Button\";\nimport AdapterDateFns from \"@mui/lab/AdapterDateFns\";\nimport DatePicker from \"@mui/lab/DatePicker\";\nimport LocalizationProvider from \"@mui/lab/LocalizationProvider\";\nimport { Grid, Stack, TextField } from \"@mui/material\";\n\nconst DateFilter = ({\n startDate,\n endDate,\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n}) => {\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <Stack direction={{ xs: \"column\", md: \"row\" }} spacing={1}>\n <DatePicker\n id=\"startDate\"\n name=\"startDate\"\n label=\"Start Date\"\n value={startDate || null}\n onChange={handleChangeStartDate}\n disableMaskedInput\n inputProps={{ readOnly: true }}\n renderInput={(params) => (\n <TextField\n {...params}\n InputLabelProps={{\n shrink: true,\n }}\n size=\"small\"\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n }}\n />\n )}\n />\n <DatePicker\n id=\"endDate\"\n name=\"endDate\"\n label=\"End Date\"\n value={endDate || null}\n onChange={handleChangeEndDate}\n inputProps={{ readOnly: true }}\n renderInput={(params) => (\n <TextField\n {...params}\n InputLabelProps={{\n shrink: true,\n }}\n size=\"small\"\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n borderRadius: \"4px\",\n }}\n />\n )}\n />\n <Button onClick={handleClearDateFilters}>Clear</Button>\n </Stack>\n </LocalizationProvider>\n );\n};\n\nexport default DateFilter;\n","import React from \"react\";\nimport queryString from \"query-string\";\nimport { useNavigate, useLocation } from \"react-router-dom\";\nimport MUIPagination from \"@mui/material/Pagination\";\nimport Stack from \"@mui/material/Stack\";\nimport { useQuery } from \"@apollo/client\";\n\nconst Pagination = ({\n query,\n skip = false,\n variables = {},\n page,\n perPage,\n sx = {},\n}) => {\n let navigate = useNavigate();\n let location = useLocation();\n const paramsObj = queryString.parse(location.search);\n const [currentPage, setCurrentPage] = React.useState(page);\n const { data, loading, error } = useQuery(query, {\n fetchPolicy: \"network-only\",\n skip,\n variables,\n });\n if (loading || error || !data) return null;\n const count = Math.ceil(data[Object.keys(data)[0]] / perPage);\n const handleChange = (event, value) => {\n setCurrentPage(value);\n const newSearch = { ...paramsObj, page: value };\n navigate({\n pathname: `${location.pathname}`,\n search: queryString.stringify(newSearch),\n });\n };\n\n return (\n <Stack spacing={2} sx={{ mt: \"auto\", pt: 2, mx: \"auto\", ...sx }}>\n <MUIPagination\n count={count}\n page={currentPage}\n onChange={handleChange}\n color=\"secondary\"\n />\n </Stack>\n );\n};\n\nexport default Pagination;\n","import InputAdornment from \"@mui/material/InputAdornment\";\nimport TextField from \"@mui/material/TextField\";\nimport SearchIcon from \"@mui/icons-material/Search\";\n\nconst Search = ({ handleSubmitSearch, handleChangeSearch, searchTerm }) => {\n return (\n <>\n <form onSubmit={handleSubmitSearch}>\n <TextField\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n borderRadius: \"4px\",\n minWidth: \"200px\",\n }}\n value={searchTerm || \"\"}\n onChange={handleChangeSearch}\n id=\"search\"\n size=\"small\"\n placeholder=\"Search...\"\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n }}\n />\n </form>\n </>\n );\n};\n\nexport default Search;\n","import { gql, useQuery } from \"@apollo/client\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport {\n Button,\n FormControl,\n InputLabel,\n Link,\n MenuItem,\n Paper,\n Select,\n Stack,\n Typography,\n} from \"@mui/material\";\nimport { endOfDay, format, startOfDay } from \"date-fns\";\nimport queryString from \"query-string\";\nimport React, { useRef, useState } from \"react\";\nimport { CSVLink } from \"react-csv\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport iterateObjectValuesNullToBlank from \"../../../utils/iterateObjectValuesNullToBlank\";\nimport DataTable from \"../../common/DataTable\";\nimport DateFilter from \"../../common/DateFilter\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const TIMELOG_TYPES = gql`\n query TimelogType {\n __type(name: \"TimelogType\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const ATTENDANCES = gql`\n query Attendances(\n $skip: Int\n $take: Int\n $where: AttendanceWhereInput\n $orderBy: [AttendanceOrderByInput!]\n ) {\n attendances(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n branch {\n id\n name\n }\n employee {\n firstName\n lastName\n middleName\n }\n photo\n timelogType\n dateTime\n }\n }\n`;\n\nconst ATTENDANCES_COUNT = gql`\n query AttendancesCount($where: AttendanceWhereInput) {\n attendancesCount(where: $where)\n }\n`;\n\nconst AttendancesPage = () => {\n const title = `Attendances`;\n const location = useLocation();\n\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n const csvLink = useRef(null);\n const [exportData, setExportData] = useState([]);\n\n const { branchFilterQueryString } = useBranchContext();\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const { handleSubmitQueryString, initialQueryStringValue } =\n useQueryString(\"timelogType\");\n const {\n data: { __type: { enumValues: timelogTypes } = {} } = {},\n loading: timelogTypesLoading,\n } = useQuery(TIMELOG_TYPES, {\n fetchPolicy: \"network-only\",\n });\n\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(startDate &&\n endDate && {\n dateTime: {\n gte: startOfDay(new Date(startDateQueryString)),\n lte: endOfDay(new Date(endDateQueryString)),\n },\n }),\n ...(initialQueryStringValue && {\n timelogType: {\n equals: initialQueryStringValue,\n },\n }),\n\n ...(searchQueryString && {\n OR: [\n {\n employee: {\n firstName: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n {\n employee: {\n lastName: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n ],\n }),\n };\n const {\n data: { attendances } = {},\n loading,\n refetch,\n } = useQuery(ATTENDANCES, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ dateTime: \"desc\" }],\n },\n });\n\n const handleDownload = async () => {\n const { data: { attendances } = {} } = await refetch({\n skip: null,\n take: null,\n where,\n });\n\n setExportData(\n attendances.map((attendance) => {\n return {\n ...iterateObjectValuesNullToBlank({\n ...attendance,\n dateTime: format(\n new Date(attendance.dateTime),\n \"dd MMM yyyy hh:mm:ss a\"\n ),\n }),\n };\n })\n );\n csvLink.current.link.click();\n };\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Last Name\",\n accessor: \"employee.lastName\",\n },\n {\n header: \"Firs Name\",\n accessor: \"employee.firstName\",\n },\n {\n header: \"Middle Name\",\n accessor: \"employee.middleName\",\n },\n {\n header: \"Timelog Type\",\n accessor: \"timelogType\",\n Cell: (children) => children && children.replace(/_/g, \" \"),\n },\n {\n header: \"Date Time\",\n accessor: \"dateTime\",\n Cell: (children) =>\n children && format(new Date(children), \"dd MMM yyyy hh:mm:ss a\"),\n },\n {\n header: \"Photo\",\n accessor: \"photo\",\n Cell: (children) =>\n children && (\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`${process.env.REACT_APP_BACKEND_URI}/${children}`}\n >\n Photo\n </Link>\n ),\n },\n ];\n\n if (loading || timelogTypesLoading) return <Loading />;\n return (\n <>\n <CSVLink\n component=\"button\"\n headers={columns\n .filter(({ accessor }) => accessor !== \"id\")\n .map((column) => {\n return { label: column.header, key: column.accessor };\n })}\n filename={`${location.pathname}-${\n searchQueryString ? searchQueryString + \"-\" : \"\"\n }${format(Date.now(), \"yyyy-MM-dd-HH:mm:ss\")}.csv`}\n data={exportData}\n ref={csvLink}\n />\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Button\n onClick={handleDownload}\n variant=\"contained\"\n startIcon={<DownloadIcon />}\n sx={{ marginLeft: \"auto\" }}\n >\n Download\n </Button>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n\n <Stack direction={{ xs: \"column\", md: \"row\" }} spacing={1}>\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"timelogTypes-label\">Timelog Type</InputLabel>\n <Select\n labelId=\"timelogTypes-label\"\n label=\"Timelog Type\"\n id=\"timelogTypes\"\n name=\"timelogTypes\"\n value={initialQueryStringValue ?? \"\"}\n onChange={(e) => {\n handleSubmitQueryString(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"300px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {timelogTypes?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={attendances} columns={columns} />\n </Paper>\n <Pagination\n query={ATTENDANCES_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default AttendancesPage;\n","const formatMoney = function (amount, currency = \"PHP\") {\n const options = {\n style: \"currency\",\n currency,\n currencyDisplay: \"narrowSymbol\",\n minimumFractionDigits: 2,\n };\n\n // if (amount % 1 === 0) options.minimumFractionDigits = 0;\n const formatter = new Intl.NumberFormat(\"en-PH\", options);\n return formatter.format(amount);\n};\n\nexport default formatMoney;\n","import React from \"react\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from \"@mui/material\";\n\nconst getNestedValue = (obj, path) =>\n path.split(\".\").reduce((acc, cur) => {\n return acc && acc[cur];\n }, obj);\n\nconst NestedTable = ({ data, columns, tableSummary = <></> }) => {\n return (\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n {columns.map(({ header }) => (\n <TableCell align=\"center\" key={header}>\n {header}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {data.map((item, idx) => (\n <TableRow key={idx}>\n {columns.map(({ accessor, Cell = (children) => <>\n {children}\n </> }, idx) => (\n <TableCell align=\"center\" key={idx} size=\"medium\">\n {Cell(getNestedValue(item, accessor))}\n </TableCell>\n ))}\n </TableRow>\n ))}\n {tableSummary}\n </TableBody>\n </Table>\n );\n};\n\nexport default NestedTable;\n","import { Button, Collapse, Portal } from \"@mui/material\";\nimport React, { useState } from \"react\";\nimport NestedTable from \"./NestedTable\";\n\nconst DataTableAccordion = ({ title, data, index, columns }) => {\n const [collapse, setCollapse] = useState([]);\n return (\n <div>\n {collapse?.includes(index) ? (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n setCollapse(collapse.filter((item) => item !== index));\n }}\n >\n {title}\n </Button>\n ) : (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => {\n setCollapse([...collapse, index]);\n }}\n >\n {title}\n </Button>\n )}\n <Portal container={document.querySelector(`#portal-${index}`)}>\n <Collapse in={collapse.includes(index)} timeout=\"auto\" unmountOnExit>\n <NestedTable columns={columns} data={data} />\n </Collapse>\n </Portal>\n </div>\n );\n};\n\nexport default DataTableAccordion;\n","import { Grid, Paper, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport NestedTable from \"../../common/NestedTable\";\n\nconst SalesSummary = ({\n salesSummaryPerProduct = [],\n salesSummaryTotal = [],\n salesSummaryPerModeOfPayment = [],\n}) => {\n const salesSummaryPerProductColumns = [\n { header: \"Product\", accessor: \"product\" },\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Subtotal\",\n accessor: \"subtotal\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n\n const salesSummaryPerModeOfPaymentColumns = [\n { header: \"Mode of Payment\", accessor: \"modeOfPayment\" },\n\n {\n header: \"Net Total\",\n accessor: \"netTotal\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n\n return (\n <Paper sx={{ my: 2, p: 1, overflow: \"auto\" }}>\n <Typography variant=\"body1\" sx={{ fontWeight: \"bold\" }}>\n Sales Summary Per Product\n </Typography>\n <NestedTable\n columns={salesSummaryPerProductColumns}\n data={salesSummaryPerProduct}\n />\n <Typography variant=\"body1\" sx={{ fontWeight: \"bold\", mt: 1 }}>\n Sales Summary Per MOP\n </Typography>\n <NestedTable\n columns={salesSummaryPerModeOfPaymentColumns}\n data={salesSummaryPerModeOfPayment}\n />\n <Typography variant=\"body1\" sx={{ fontWeight: \"bold\", mt: 1 }}>\n Sales Summary Total\n </Typography>\n <Grid container>\n <Grid item xs={7}>\n <Typography align=\"right\">Service Charge:</Typography>\n </Grid>\n <Grid item xs={5}>\n <Typography align=\"right\">\n {formatMoney(\n salesSummaryTotal.reduce((acc, cur) => {\n if (!cur.serviceCharge) return acc;\n return acc + cur.serviceCharge;\n }, 0)\n )}\n </Typography>\n </Grid>\n <Grid item xs={7}>\n <Typography align=\"right\">Discount:</Typography>\n </Grid>\n <Grid item xs={5}>\n <Typography align=\"right\">\n {formatMoney(\n salesSummaryTotal.reduce((acc, cur) => {\n if (!cur.discount) return acc;\n return acc + cur.discount;\n }, 0)\n )}\n </Typography>\n </Grid>\n <Grid item xs={7}>\n <Typography align=\"right\" sx={{ fontWeight: \"bold\" }}>\n Total Sales:\n </Typography>\n </Grid>\n <Grid item xs={5}>\n <Typography align=\"right\" sx={{ fontWeight: \"bold\" }}>\n {formatMoney(\n salesSummaryTotal.reduce((acc, cur) => {\n if (!cur.totalSales) return acc;\n return acc + cur.totalSales;\n }, 0)\n )}\n </Typography>\n </Grid>\n <Grid item xs={7}>\n <Typography align=\"right\">Total Dine-in:</Typography>\n </Grid>\n <Grid item xs={5}>\n <Typography align=\"right\">\n {formatMoney(\n salesSummaryTotal.reduce((acc, cur) => {\n if (!cur.totalSales || cur.productCategoryType === \"TAKE_OUT\")\n return acc;\n return acc + cur.totalSales;\n }, 0)\n )}\n </Typography>\n </Grid>\n <Grid item xs={7}>\n <Typography align=\"right\">Total Takeout:</Typography>\n </Grid>\n <Grid item xs={5}>\n <Typography align=\"right\">\n {formatMoney(\n salesSummaryTotal.reduce((acc, cur) => {\n if (!cur.totalSales || cur.productCategoryType === \"DINE_IN\")\n return acc;\n return acc + cur.totalSales;\n }, 0)\n )}\n </Typography>\n </Grid>\n </Grid>\n </Paper>\n );\n};\n\nexport default SalesSummary;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Box, Paper, Stack, Typography } from \"@mui/material\";\nimport { endOfDay, startOfDay } from \"date-fns\";\nimport format from \"date-fns/format\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport DataTable from \"../../common/DataTable\";\nimport DataTableAccordion from \"../../common/DataTableAccordion\";\nimport DateFilter from \"../../common/DateFilter\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\nimport SalesSummary from \"./SalesSummary\";\nexport const BILLINGS = gql`\n query Billings(\n $skip: Int\n $take: Int\n $where: BillingWhereInput\n $orderBy: [BillingOrderByInput!]\n ) {\n billings(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n number\n tableNumber\n billingItems {\n id\n quantity\n product\n price\n }\n modeOfPayment\n subtotal\n serviceCharge\n discount\n netTotal\n amountReceived\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst SALES_SUMMARY_PER_PRODUCT = gql`\n query SalesSummaryPerProduct(\n $searchTerm: String\n $startDate: String\n $endDate: String\n $branchId: String\n ) {\n salesSummaryPerProduct(\n searchTerm: $searchTerm\n startDate: $startDate\n endDate: $endDate\n branchId: $branchId\n ) {\n product\n quantity\n subtotal\n }\n }\n`;\n\nconst SALES_SUMMARY_TOTAL = gql`\n query SalesSummaryTotal(\n $searchTerm: String\n $startDate: String\n $endDate: String\n $branchId: String\n ) {\n salesSummaryTotal(\n searchTerm: $searchTerm\n startDate: $startDate\n endDate: $endDate\n branchId: $branchId\n ) {\n serviceCharge\n discount\n totalSales\n productCategoryType\n }\n }\n`;\n\nconst SALES_SUMMARY_PER_MODE_OF_PAYMENT = gql`\n query SalesSummaryPerModeOfPayment(\n $searchTerm: String\n $startDate: String\n $endDate: String\n $branchId: String\n ) {\n salesSummaryPerModeOfPayment(\n searchTerm: $searchTerm\n startDate: $startDate\n endDate: $endDate\n branchId: $branchId\n ) {\n modeOfPayment\n netTotal\n }\n }\n`;\n\nconst BILLINGS_COUNT = gql`\n query BillingsCount($where: BillingWhereInput) {\n billingsCount(where: $where)\n }\n`;\n\nconst BillingsPage = () => {\n const title = `Billings`;\n\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n createdAt: {\n gte: startOfDay(new Date()),\n lte: endOfDay(new Date()),\n },\n ...(startDate &&\n endDate && {\n createdAt: {\n gte: startOfDay(new Date(startDateQueryString)),\n lte: endOfDay(new Date(endDateQueryString)),\n },\n }),\n\n ...(searchQueryString && {\n OR: [\n {\n tableNumber: {\n equals: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n id: {\n equals: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { billings } = {}, loading } = useQuery(BILLINGS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ createdAt: \"desc\" }],\n },\n });\n\n const variables = {\n ...(startDate && endDate\n ? {\n startDate: format(\n startOfDay(new Date(startDateQueryString)),\n \"yyyy-MM-dd\"\n ),\n endDate: format(endOfDay(new Date(endDateQueryString)), \"yyyy-MM-dd\"),\n }\n : {\n startDate: format(startOfDay(new Date()), \"yyyy-MM-dd\"),\n endDate: format(endOfDay(new Date()), \"yyyy-MM-dd\"),\n }),\n ...(searchQueryString && {\n searchTerm: searchQueryString,\n }),\n ...(branchFilterQueryString && {\n branchId: branchFilterQueryString,\n }),\n };\n\n const {\n data: { salesSummaryPerProduct } = {},\n loading: salesSummaryPerProductLoading,\n } = useQuery(SALES_SUMMARY_PER_PRODUCT, {\n fetchPolicy: \"network-only\",\n variables,\n });\n\n const {\n data: { salesSummaryTotal } = {},\n loading: salesSummaryTotalLoading,\n } = useQuery(SALES_SUMMARY_TOTAL, {\n fetchPolicy: \"network-only\",\n variables,\n });\n\n const {\n data: { salesSummaryPerModeOfPayment } = {},\n loading: salesSummaryPerModeOfPaymentLoading,\n } = useQuery(SALES_SUMMARY_PER_MODE_OF_PAYMENT, {\n fetchPolicy: \"network-only\",\n variables,\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Number\",\n accessor: \"id\",\n },\n {\n header: \"Table Number\",\n accessor: \"tableNumber\",\n },\n {\n header: \"Subotal\",\n accessor: \"subtotal\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Service Charge\",\n accessor: \"serviceCharge\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Discount\",\n accessor: \"discount\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Net Total\",\n accessor: \"netTotal\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Amount Received\",\n accessor: \"amountReceived\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Mode of Payment\",\n accessor: \"modeOfPayment\",\n Cell: (children) => children && children.replace(/_/g, \" \"),\n },\n {\n header: \"Items\",\n accessor: \"billingItems\",\n Cell: (children, collapse, setCollapse, index) => {\n const billingItemsColumns = [\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Product\",\n accessor: \"product\",\n },\n {\n header: \"Price\",\n accessor: \"price\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n return (\n <DataTableAccordion\n title=\"Items\"\n data={children}\n index={index}\n columns={billingItemsColumns}\n />\n );\n },\n },\n ];\n if (\n loading ||\n salesSummaryPerProductLoading ||\n salesSummaryTotalLoading ||\n salesSummaryPerModeOfPaymentLoading\n )\n return <Loading />;\n\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent={{ xs: \"flex-end\", md: \"space-between\" }}\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: {\n xs: \"1fr\",\n md: \"1fr 3fr\",\n },\n gap: 1,\n alignItems: \"flex-start\",\n }}\n >\n <SalesSummary\n salesSummaryPerProduct={salesSummaryPerProduct}\n salesSummaryPerModeOfPayment={salesSummaryPerModeOfPayment}\n salesSummaryTotal={salesSummaryTotal}\n />\n\n <Paper className=\"dataTableContainer\">\n <DataTable data={billings} columns={columns} />\n </Paper>\n </Box>\n\n <Pagination\n query={BILLINGS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default BillingsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Link, Paper, Typography } from \"@mui/material\";\nimport { format, parse } from \"date-fns\";\nimport React from \"react\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport DataTableAccordion from \"../../common/DataTableAccordion\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\n\nexport const BRANCHES = gql`\n query Branches($where: BranchWhereInput) {\n branches(where: $where) {\n id\n name\n companyName\n address\n mobileNumber\n\n operatingHours {\n id\n dayOfTheWeek\n openingHour\n closingHour\n }\n seatPlanPhotoUrl\n }\n }\n`;\n\nconst BranchesPage = () => {\n const title = `Branches`;\n const { branchFilterQueryString } = useBranchContext();\n\n const where = {\n ...(branchFilterQueryString && {\n id: {\n equals: branchFilterQueryString,\n },\n }),\n };\n const { data: { branches } = {}, loading } = useQuery(BRANCHES, {\n fetchPolicy: \"network-only\",\n variables: {\n where,\n },\n });\n\n const columns = [\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Company Name\",\n accessor: \"companyName\",\n },\n {\n header: \"Address\",\n accessor: \"address\",\n },\n {\n header: \"Mobile Number\",\n accessor: \"mobileNumber\",\n },\n {\n header: \"Seat Plan\",\n accessor: \"seatPlanPhotoUrl\",\n Cell: (children) =>\n children && (\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`${process.env.REACT_APP_BACKEND_URI}/${children}`}\n >\n File\n </Link>\n ),\n },\n {\n header: \"Operating Hours\",\n accessor: \"operatingHours\",\n Cell: (children, index) => {\n const operatingHoursColumns = [\n {\n header: \"Day of the Week\",\n accessor: \"dayOfTheWeek\",\n // Cell: (children) =>\n // children &&\n // children.replace(\n // /(?:^\\w|[A-Z]|\\b\\w|\\s+)/g,\n // function (match, index) {\n // if (+match === 0) return \"\";\n // return index === 0\n // ? match.toUpperCase()\n // : match.toLowerCase();\n // }\n // ),\n },\n {\n header: \"Opening Hour\",\n accessor: \"openingHour\",\n Cell: (children) =>\n children &&\n format(parse(children, \"HH:mm\", new Date()), \"hh:mm:aa\"),\n },\n {\n header: \"Closing Hour\",\n accessor: \"closingHour\",\n Cell: (children) =>\n children &&\n format(parse(children, \"HH:mm\", new Date()), \"hh:mm:aa\"),\n },\n ];\n return (\n <DataTableAccordion\n title=\"Hours\"\n data={children}\n index={index}\n columns={operatingHoursColumns}\n />\n );\n },\n },\n ];\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\">\n {title}\n </Typography>\n <Paper className=\"dataTableContainer\">\n <DataTable data={branches} columns={columns} />\n </Paper>\n </AdminListContainer>\n </>\n );\n};\n\nexport default BranchesPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport {\n FormControl,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Typography,\n} from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const DISCOUNT_CARD_TYPES = gql`\n query DiscountCardType {\n __type(name: \"DiscountCardType\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const DISCOUNT_CARDS = gql`\n query DiscountCards($skip: Int, $take: Int, $where: DiscountCardWhereInput) {\n discountCards(skip: $skip, take: $take, where: $where) {\n id\n discountCardType\n name\n number\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst DISCOUNT_CARDS_COUNT = gql`\n query DiscountCardsCount($where: DiscountCardWhereInput) {\n discountCardsCount(where: $where)\n }\n`;\n\nconst DiscountCardsPage = () => {\n const title = `Discount Cards`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: handleSubmitFilter,\n initialQueryStringValue: filterQueryString,\n } = useQueryString(\"filter\");\n\n const where = {\n ...(filterQueryString && {\n discountCardType: {\n equals: filterQueryString,\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n number: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { discountCards } = {}, loading } = useQuery(DISCOUNT_CARDS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n });\n\n const {\n data: { __type: { enumValues: discountCardTypes } = {} } = {},\n loading: discountCardTypesLoading,\n } = useQuery(DISCOUNT_CARD_TYPES, {\n fetchPolicy: \"network-only\",\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Number\",\n accessor: \"number\",\n },\n {\n header: \"Discount Card Type\",\n accessor: \"discountCardType\",\n Cell: (children) => children && children.replace(/_/g, \" \"),\n },\n ];\n if (loading || discountCardTypesLoading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"discountCardType-label\">\n Discount Card Type\n </InputLabel>\n <Select\n labelId=\"discountCardType-label\"\n label=\"Discount Card Type\"\n id=\"discountCardType\"\n name=\"discountCardType\"\n value={filterQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"300px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {discountCardTypes?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n\n <Paper className=\"dataTableContainer\">\n <DataTable data={discountCards} columns={columns} />\n </Paper>\n <Pagination\n query={DISCOUNT_CARDS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default DiscountCardsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport PageviewIcon from \"@mui/icons-material/Pageview\";\nimport {\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const EMPLOYMENT_TYPES = gql`\n query EmploymentTypes {\n __type(name: \"EmploymentType\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const SALARY_TYPES = gql`\n query SalaryTypes {\n __type(name: \"SalaryType\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const EMPLOYEES = gql`\n query Employees($skip: Int, $take: Int, $where: EmployeeWhereInput) {\n employees(skip: $skip, take: $take, where: $where) {\n id\n lastName\n firstName\n middleName\n mobileNumber\n address\n employmentType\n dateHired\n salaryType\n wage\n emergencyContactPerson\n emergencyContactNumber\n emergencyContactRelationship\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst EMPLOYEES_COUNT = gql`\n query EmployeesCount($where: EmployeeWhereInput) {\n employeesCount(where: $where)\n }\n`;\n\nconst EmployeesPage = () => {\n const title = `Employees`;\n const { branchFilterQueryString } = useBranchContext();\n const location = useLocation();\n const navigate = useNavigate();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: employmentTypeHandleSubmitFilter,\n initialQueryStringValue: employmentTypeFilterQueryString,\n } = useQueryString(\"filterEmploymentType\");\n const {\n handleSubmitQueryString: salaryTypeHandleSubmitFilter,\n initialQueryStringValue: salaryTypeFilterQueryString,\n } = useQueryString(\"filterSalaryType\");\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(employmentTypeFilterQueryString && {\n employmentType: {\n equals: employmentTypeFilterQueryString,\n },\n }),\n ...(salaryTypeFilterQueryString && {\n salaryType: {\n equals: salaryTypeFilterQueryString,\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n lastName: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n firstName: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { employees } = {}, loading } = useQuery(EMPLOYEES, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n });\n\n const {\n data: { __type: { enumValues: employmentTypes } = {} } = {},\n loading: employmentTypesLoading,\n } = useQuery(EMPLOYMENT_TYPES, {\n fetchPolicy: \"network-only\",\n });\n\n const {\n data: { __type: { enumValues: salaryTypes } = {} } = {},\n loading: salaryTypesLoading,\n } = useQuery(SALARY_TYPES, {\n fetchPolicy: \"network-only\",\n });\n\n const handleView = (id) => {\n navigate(`${location.pathname}/${id}`);\n };\n\n const columns = [\n {\n header: \"Actions\",\n accessor: \"id\",\n Cell: (children) =>\n children && (\n <>\n <Tooltip title=\"View\">\n <IconButton\n aria-label=\"view\"\n color=\"secondary\"\n onClick={() => handleView(children)}\n size=\"large\"\n >\n <PageviewIcon />\n </IconButton>\n </Tooltip>\n </>\n ),\n },\n\n { header: \"Last Name\", accessor: \"lastName\" },\n { header: \"First Name\", accessor: \"firstName\" },\n { header: \"Middle Name\", accessor: \"middleName\" },\n { header: \"Mobile No.\", accessor: \"mobileNumber\" },\n { header: \"Branch\", accessor: \"branch.name\" },\n ];\n if (loading || employmentTypesLoading || salaryTypesLoading)\n return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"employmentType-label\">Employment Type</InputLabel>\n <Select\n labelId=\"employmentType-label\"\n label=\"Employment Type\"\n id=\"employmentType\"\n name=\"employmentType\"\n value={employmentTypeFilterQueryString ?? \"\"}\n onChange={(e) => {\n employmentTypeHandleSubmitFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"250px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {employmentTypes?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"salaryType-label\">Salary Type</InputLabel>\n <Select\n labelId=\"salaryType-label\"\n label=\"Salary Type\"\n id=\"salaryType\"\n name=\"salaryType\"\n value={salaryTypeFilterQueryString ?? \"\"}\n onChange={(e) => {\n salaryTypeHandleSubmitFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"250px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {salaryTypes?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={employees} columns={columns} />\n </Paper>\n <Pagination\n query={EMPLOYEES_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default EmployeesPage;\n","import { useCallback, useReducer } from \"react\";\n\nconst actionTypes = {\n text: \"text\",\n number: \"number\",\n checkbox: \"checkbox\",\n file: \"file\",\n setState: \"setState\",\n object: \"object\",\n};\n\nconst inputReducer = (state, { name, value, type, checked, files = [] }) => {\n switch (type) {\n case actionTypes.text || actionTypes.object: {\n return { ...state, [name]: value };\n }\n case actionTypes.number: {\n if (value === \"\") {\n return { ...state, [name]: null };\n } else if (Object.is(NaN, parseFloat(value))) {\n return { ...state, [name]: value };\n } else {\n return { ...state, [name]: parseFloat(value) };\n }\n }\n case actionTypes.checkbox: {\n return { ...state, [name]: checked };\n }\n case actionTypes.file: {\n return { ...state, [name]: files[0] };\n }\n case actionTypes.setState: {\n return value;\n }\n default:\n return { ...state, [name]: value };\n }\n};\n\nconst useInputChange = ({ reducer = inputReducer } = {}, initialState = {}) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const setState = useCallback(\n (state) => {\n dispatch({\n type: actionTypes.setState,\n value: state,\n });\n },\n [dispatch]\n );\n const handleChange = (e, array = [], filterCriteria = \"id\") => {\n if (array.length > 0) {\n const value = array.find(\n (arrayItem) => arrayItem[filterCriteria] === e.target.value\n );\n dispatch({\n type: actionTypes.object,\n value,\n name: e.target.name,\n });\n } else {\n dispatch({\n name: e.target.name,\n value: e.target.value,\n type: e.target.type,\n checked: e.target.checked,\n files: e.target.files,\n });\n }\n };\n return { state, dispatch, setState, handleChange };\n};\n\nexport { useInputChange, actionTypes, inputReducer };\n","import { Container, Paper } from \"@mui/material\";\nimport React from \"react\";\n\nconst FormContainer = ({ children, maxWidth = \"lg\" }) => {\n return (\n <>\n <Container\n maxWidth={maxWidth}\n sx={{\n margin: \"auto\",\n }}\n >\n <Paper\n variant=\"outlined\"\n sx={{ my: { xs: 3, md: 6 }, p: { xs: 2, md: 3 } }}\n >\n {children}\n </Paper>\n </Container>\n </>\n );\n};\n\nexport default FormContainer;\n","import { useQuery } from \"@apollo/client\";\nimport {\n Box,\n Button,\n FormControl,\n Grid,\n InputAdornment,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport React from \"react\";\nimport FormContainer from \"../../common/FormContainer\";\nimport Loading from \"../../common/Loading\";\nimport { EMPLOYMENT_TYPES, SALARY_TYPES } from \"./EmployeesPage\";\n\nconst EmployeeForm = ({\n title = \"\",\n state = {},\n branch = \"\",\n handleChange = () => {},\n handleSubmit = () => {},\n mutationLoading = false,\n disabled,\n}) => {\n const {\n data: { __type: { enumValues: employmentTypes } = {} } = {},\n loading: employmentTypesLoading,\n } = useQuery(EMPLOYMENT_TYPES, {\n fetchPolicy: \"network-only\",\n });\n\n const {\n data: { __type: { enumValues: salaryTypes } = {} } = {},\n loading: salaryTypesLoading,\n } = useQuery(SALARY_TYPES, {\n fetchPolicy: \"network-only\",\n });\n if (employmentTypesLoading || salaryTypesLoading) return <Loading />;\n\n return (\n <FormContainer maxWidth=\"md\">\n <Typography\n component=\"h1\"\n variant=\"h4\"\n sx={{ textTransform: \"uppercase\", fontWeight: \"bold\" }}\n gutterBottom={!branch}\n >\n {title}\n </Typography>\n {branch && (\n <Typography variant=\"subtitle2\" color=\"secondary\" sx={{ mb: 2 }}>\n For {branch.name} branch\n </Typography>\n )}\n <Box component=\"form\" onSubmit={handleSubmit}>\n <Grid container spacing={2} alignItems=\"center\">\n <Grid item xs={12} md={4}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n id=\"lastName\"\n label=\"Last name\"\n name=\"lastName\"\n value={state.lastName ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n name=\"firstName\"\n label=\"First name\"\n type=\"firstName\"\n id=\"firstName\"\n value={state.firstName ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n name=\"middleName\"\n label=\"Middle name\"\n type=\"middleName\"\n id=\"middleName\"\n value={state.middleName ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n name=\"mobileNumber\"\n label=\"Mobile\"\n type=\"mobileNumber\"\n id=\"mobileNumber\"\n value={state.mobileNumber ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n name=\"address\"\n label=\"Address\"\n type=\"address\"\n id=\"address\"\n value={state.address ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <FormControl fullWidth required disabled={disabled}>\n <InputLabel id=\"employmentType-label\">Employment type</InputLabel>\n <Select\n labelId=\"employmentType-label\"\n label=\"Employment type*\"\n id=\"employmentType\"\n name=\"employmentType\"\n value={state.employmentType ?? \"\"}\n onChange={handleChange}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {employmentTypes.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={12} md={3}>\n <TextField\n disabled={disabled}\n required\n id=\"dateHired\"\n label=\"Date hired\"\n name=\"dateHired\"\n value={state.dateHired ?? \"\"}\n onChange={handleChange}\n fullWidth\n type=\"date\"\n InputLabelProps={{\n shrink: true,\n }}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <FormControl fullWidth required disabled={disabled}>\n <InputLabel id=\"salaryType-label\">Salary type</InputLabel>\n <Select\n labelId=\"salaryType-label\"\n label=\"Salary type*\"\n id=\"salaryType\"\n name=\"salaryType\"\n value={state.salaryType ?? \"\"}\n onChange={handleChange}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {salaryTypes.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={12} md={3}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n id=\"wage\"\n label=\"Wage\"\n name=\"wage\"\n value={state.wage ?? \"\"}\n onChange={handleChange}\n type=\"number\"\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">₱</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n id=\"emergencyContactPerson\"\n label=\"Emergency contact person\"\n name=\"emergencyContactPerson\"\n value={state.emergencyContactPerson ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n id=\"emergencyContactNumber\"\n label=\"Emergency contact number\"\n name=\"emergencyContactNumber\"\n value={state.emergencyContactNumber ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n disabled={disabled}\n required\n fullWidth\n id=\"emergencyContactRelationship\"\n label=\"Relationship\"\n name=\"emergencyContactRelationship\"\n value={state.emergencyContactRelationship ?? \"\"}\n onChange={handleChange}\n />\n </Grid>\n </Grid>\n {!disabled && (\n <Button\n type=\"submit\"\n variant=\"contained\"\n fullWidth\n sx={{ mt: 3 }}\n disabled={mutationLoading}\n >\n Submit\n </Button>\n )}\n </Box>\n </FormContainer>\n );\n};\n\nexport default EmployeeForm;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { format } from \"date-fns\";\nimport React, { useEffect } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { useInputChange } from \"../../../hooks/useInputChange\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport EmployeeForm from \"./EmployeeForm\";\n\nexport const EMPLOYEE = gql`\n query Employee($where: EmployeeWhereUniqueInput!) {\n employee(where: $where) {\n id\n lastName\n firstName\n middleName\n mobileNumber\n address\n employmentType\n dateHired\n salaryType\n wage\n emergencyContactPerson\n emergencyContactNumber\n emergencyContactRelationship\n }\n }\n`;\n\nconst ViewEmployeePage = () => {\n const title = `View Employee`;\n let { id } = useParams();\n const { state, setState, handleChange } = useInputChange({});\n\n const { data: { employee } = {}, loading } = useQuery(EMPLOYEE, {\n fetchPolicy: \"network-only\",\n variables: {\n where: { id },\n },\n });\n\n useEffect(() => {\n if (employee) {\n setState({\n ...employee,\n dateHired: format(new Date(employee.dateHired), \"yyyy-MM-dd\"),\n });\n }\n }, [employee, setState]);\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <EmployeeForm\n title={title}\n state={state}\n setState={setState}\n handleChange={handleChange}\n disabled={true}\n />\n </>\n );\n};\n\nexport default ViewEmployeePage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const RECIPES = gql`\n query Ingredients(\n $skip: Int\n $take: Int\n $where: IngredientWhereInput\n $orderBy: [IngredientOrderByInput!]\n ) {\n ingredients(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n item {\n id\n name\n unit\n }\n quantity\n menuItem {\n id\n name\n }\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst RECIPES_COUNT = gql`\n query IngredientsCount($where: IngredientWhereInput) {\n ingredientsCount(where: $where)\n }\n`;\n\nconst IngredientsPage = () => {\n const title = `Ingredients`;\n const { branchFilterQueryString } = useBranchContext();\n\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n menuItem: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n {\n item: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n ],\n }),\n };\n const { data: { ingredients } = {}, loading } = useQuery(RECIPES, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ menuItemId: \"asc\" }],\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Menu Item\",\n accessor: \"menuItem.name\",\n },\n {\n header: \"Item\",\n accessor: \"item.name\",\n },\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n Cell: (children) => children && parseFloat(children).toFixed(6),\n },\n {\n header: \"Unit\",\n accessor: \"item.unit\",\n },\n ];\n\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={ingredients} columns={columns} />\n </Paper>\n <Pagination\n query={RECIPES_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default IngredientsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport { endOfDay, format, startOfDay } from \"date-fns\";\nimport queryString from \"query-string\";\nimport React, { useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport DateFilter from \"../../common/DateFilter\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const INVENTORIES = gql`\n query Inventories(\n $skip: Int\n $take: Int\n $where: InventoryWhereInput\n $orderBy: [InventoryOrderByInput!]\n ) {\n inventories(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n date\n item {\n id\n name\n unit\n }\n quantity\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst INVENTORIES_COUNT = gql`\n query InventoriesCount($where: InventoryWhereInput) {\n inventoriesCount(where: $where)\n }\n`;\n\nconst InventoriesPage = () => {\n const title = `Inventories`;\n const { branchFilterQueryString } = useBranchContext();\n\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(startDate &&\n endDate && {\n date: {\n gte: startOfDay(new Date(startDateQueryString)),\n lte: endOfDay(new Date(endDateQueryString)),\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n item: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n ],\n }),\n };\n const { data: { inventories } = {}, loading } = useQuery(INVENTORIES, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ date: \"desc\" }],\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Date\",\n accessor: \"date\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Unit\",\n accessor: \"item.unit\",\n },\n {\n header: \"Item\",\n accessor: \"item.name\",\n },\n ];\n\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={inventories} columns={columns} />\n </Paper>\n <Pagination\n query={INVENTORIES_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default InventoriesPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport PageviewIcon from \"@mui/icons-material/Pageview\";\nimport {\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const INVENTORY_SCHEDULES = gql`\n query InventorySchedule {\n __type(name: \"InventorySchedule\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const ITEMS = gql`\n query Items(\n $skip: Int\n $take: Int\n $where: ItemWhereInput\n $orderBy: [ItemOrderByInput!]\n ) {\n items(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n name\n unit\n threshold\n inventoryOrderNumber\n inventorySchedule\n previousQuantity\n lastPurchasedPrice\n itemCategory {\n id\n name\n }\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst ITEMS_COUNT = gql`\n query ItemsCount($where: ItemWhereInput) {\n itemsCount(where: $where)\n }\n`;\n\nconst ItemsPage = () => {\n const title = `Items`;\n const { branchFilterQueryString } = useBranchContext();\n const navigate = useNavigate();\n const location = useLocation();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: handleSubmitFilter,\n initialQueryStringValue: filterQueryString,\n } = useQueryString(\"filter\");\n\n const where = {\n ...(filterQueryString && {\n inventorySchedule: {\n equals: filterQueryString,\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { items } = {}, loading } = useQuery(ITEMS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n });\n\n const {\n data: { __type: { enumValues: inventorySchedules } = {} } = {},\n loading: inventorySchedulesLoading,\n } = useQuery(INVENTORY_SCHEDULES, {\n fetchPolicy: \"network-only\",\n });\n\n const handleView = (id) => {\n navigate(`${location.pathname}/${id}`);\n };\n\n const columns = [\n {\n header: \"Actions\",\n accessor: \"id\",\n Cell: (children) =>\n children && (\n <>\n <Tooltip title=\"View\">\n <IconButton\n aria-label=\"view\"\n color=\"secondary\"\n onClick={() => handleView(children)}\n size=\"large\"\n >\n <PageviewIcon />\n </IconButton>\n </Tooltip>\n </>\n ),\n },\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Item Category\",\n accessor: \"itemCategory.name\",\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Unit\",\n accessor: \"unit\",\n },\n {\n header: \"Threshold\",\n accessor: \"threshold\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Inventory Schedule\",\n accessor: \"inventorySchedule\",\n Cell: (children) => children && children.replace(/_/g, \" \"),\n },\n {\n header: \"Inventory Order Number\",\n accessor: \"inventoryOrderNumber\",\n },\n {\n header: \"Last Purchased Price\",\n accessor: \"lastPurchasedPrice\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n if (loading || inventorySchedulesLoading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"inventorySchedule-label\">\n Inventory Schedule\n </InputLabel>\n <Select\n labelId=\"inventorySchedule-label\"\n label=\"Inventory Schedule\"\n id=\"inventorySchedule\"\n name=\"inventorySchedule\"\n value={filterQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"300px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {inventorySchedules?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n\n <Paper className=\"dataTableContainer\">\n <DataTable data={items} columns={columns} />\n </Paper>\n <Pagination\n query={ITEMS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default ItemsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const ITEM_CATEGORIES = gql`\n query ItemCategories($skip: Int, $take: Int, $where: ItemCategoryWhereInput) {\n itemCategories(skip: $skip, take: $take, where: $where) {\n id\n name\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst ITEM_CATEGORIES_COUNT = gql`\n query ItemCategoriesCount($where: ItemCategoryWhereInput) {\n itemCategoriesCount(where: $where)\n }\n`;\n\nconst ItemCategoriesPage = () => {\n const title = `Item Categories`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { itemCategories } = {}, loading } = useQuery(ITEM_CATEGORIES, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n ];\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={itemCategories} columns={columns} />\n </Paper>\n <Pagination\n query={ITEM_CATEGORIES_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default ItemCategoriesPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport {\n Box,\n Button,\n FormControl,\n Grid,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport { format } from \"date-fns\";\nimport React from \"react\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport FormContainer from \"../../common/FormContainer\";\nimport Loading from \"../../common/Loading\";\nimport NestedTable from \"../../common/NestedTable\";\nimport { ITEM_CATEGORIES } from \"../item_categories/ItemCategoriesPage\";\nimport { INVENTORY_SCHEDULES } from \"./ItemsPage\";\n\nconst LATEST_PURCHASE_ORDER_ITEMS = gql`\n query LatestPurchaseOrderItems($itemId: String!) {\n latestPurchaseOrderItems(itemId: $itemId) {\n date\n supplier\n price\n }\n }\n`;\nconst ItemForm = ({\n title = \"\",\n state = {},\n handleChange = () => {},\n handleSubmit = () => {},\n mutationLoading = false,\n readOnly = false,\n}) => {\n const {\n data: { __type: { enumValues: inventorySchedules } = {} } = {},\n loading: inventorySchedulesLoading,\n } = useQuery(INVENTORY_SCHEDULES, {\n fetchPolicy: \"network-only\",\n });\n\n const { data: { itemCategories } = {}, loading: itemCategoriesLoading } =\n useQuery(ITEM_CATEGORIES, {\n fetchPolicy: \"network-only\",\n });\n const {\n data: { latestPurchaseOrderItems } = {},\n loading: latestPurchaseOrderItemsLoading,\n } = useQuery(LATEST_PURCHASE_ORDER_ITEMS, {\n skip: !readOnly || !state.id,\n fetchPolicy: \"network-only\",\n variables: {\n itemId: state?.id,\n },\n });\n\n const latestPurchaseOrderItemsColumns = [\n {\n header: \"Date\",\n accessor: \"date\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n { header: \"Supplier\", accessor: \"supplier\" },\n {\n header: \"Price\",\n accessor: \"price\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n if (\n inventorySchedulesLoading ||\n itemCategoriesLoading ||\n latestPurchaseOrderItemsLoading\n )\n return <Loading />;\n\n return (\n <FormContainer maxWidth=\"sm\">\n <Typography\n component=\"h1\"\n variant=\"h4\"\n sx={{ textTransform: \"uppercase\", fontWeight: \"bold\" }}\n gutterBottom\n >\n {title}\n </Typography>\n <Box component=\"form\" onSubmit={handleSubmit}>\n <Grid container spacing={2} alignItems=\"center\">\n <Grid item xs={6}>\n <FormControl fullWidth required>\n <InputLabel id=\"itemCategory-label\">Item category</InputLabel>\n <Select\n inputProps={{\n readOnly,\n }}\n labelId=\"itemCategory-label\"\n label=\"Item category*\"\n id=\"itemCategory\"\n name=\"itemCategory\"\n value={\n itemCategories.find(\n (itemCategory) =>\n itemCategory?.id === state.itemCategory?.id\n ) ?? \"\"\n }\n onChange={handleChange}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {itemCategories.map((itemCategory) => {\n return (\n <MenuItem key={itemCategory.id} value={itemCategory}>\n {itemCategory.name}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={6}>\n <FormControl fullWidth>\n <InputLabel id=\"inventorySchedule-label\">\n Inventory schedule\n </InputLabel>\n <Select\n inputProps={{\n readOnly,\n }}\n labelId=\"inventorySchedule-label\"\n label=\"Inventory schedule\"\n id=\"inventorySchedule\"\n name=\"inventorySchedule\"\n value={state.inventorySchedule ?? \"\"}\n onChange={handleChange}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {inventorySchedules.map(({ name }) => {\n return (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={6}>\n <TextField\n inputProps={{\n readOnly,\n }}\n fullWidth\n value={state.inventoryOrderNumber ?? \"\"}\n id=\"inventoryOrderNumber\"\n label=\"Inventory order number\"\n name=\"inventoryOrderNumber\"\n autoComplete=\"inventoryOrderNumber\"\n onChange={handleChange}\n type=\"number\"\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n inputProps={{\n readOnly,\n }}\n required\n fullWidth\n value={state.name ?? \"\"}\n id=\"name\"\n label=\"Name\"\n name=\"name\"\n autoComplete=\"name\"\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n inputProps={{\n readOnly,\n }}\n fullWidth\n value={state.unit ?? \"\"}\n id=\"unit\"\n label=\"Unit\"\n name=\"unit\"\n autoComplete=\"unit\"\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n inputProps={{\n readOnly,\n }}\n fullWidth\n value={state.threshold ?? \"\"}\n id=\"threshold\"\n label=\"Threshold\"\n name=\"threshold\"\n autoComplete=\"threshold\"\n onChange={handleChange}\n type=\"number\"\n />\n </Grid>\n </Grid>\n {readOnly && (\n <>\n <Typography sx={{ mt: 1 }} variant=\"h5\">\n Latest Purchase Order Items\n </Typography>\n <NestedTable\n columns={latestPurchaseOrderItemsColumns}\n data={latestPurchaseOrderItems}\n />\n </>\n )}\n {!readOnly && (\n <Button\n type=\"submit\"\n variant=\"contained\"\n fullWidth\n sx={{ mt: 3 }}\n disabled={mutationLoading}\n >\n Submit\n </Button>\n )}\n </Box>\n </FormContainer>\n );\n};\n\nexport default ItemForm;\n","import { gql, useQuery } from \"@apollo/client\";\nimport React, { useEffect } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { useInputChange } from \"../../../hooks/useInputChange\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport ItemForm from \"./ItemForm\";\n\nexport const ITEM = gql`\n query Item($where: ItemWhereUniqueInput!) {\n item(where: $where) {\n id\n name\n unit\n threshold\n inventoryOrderNumber\n inventorySchedule\n itemCategory {\n id\n name\n }\n }\n }\n`;\n\nconst ViewItemPage = () => {\n const title = `View Item`;\n let { id } = useParams();\n\n const { state, setState } = useInputChange({});\n\n const { data: { item } = {}, loading } = useQuery(ITEM, {\n fetchPolicy: \"network-only\",\n variables: {\n where: { id },\n },\n });\n\n useEffect(() => {\n if (item) {\n setState({ ...item });\n }\n }, [item, setState]);\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <ItemForm title={title} state={state} readOnly={true} />\n </>\n );\n};\n\nexport default ViewItemPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport {\n FormControl,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Typography,\n} from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const MENU_ITEM_CATEGORIES = gql`\n query MenuItemCategory {\n __type(name: \"MenuItemCategory\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const MENU_ITEMS = gql`\n query MenuItems(\n $skip: Int\n $take: Int\n $where: MenuItemWhereInput\n $orderBy: [MenuItemOrderByInput!]\n ) {\n menuItems(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n menuItemCategory\n name\n discontinued\n available\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst MENU_ITEMS_COUNT = gql`\n query MenuItemsCount($where: MenuItemWhereInput) {\n menuItemsCount(where: $where)\n }\n`;\n\nconst MenuItemsPage = () => {\n const title = `Menu Items`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: handleSubmitFilter,\n initialQueryStringValue: filterQueryString,\n } = useQueryString(\"filter\");\n\n const where = {\n ...(filterQueryString && {\n menuItemCategory: {\n equals: filterQueryString,\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { menuItems } = {}, loading } = useQuery(MENU_ITEMS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [\n { discontinued: \"asc\" },\n { menuItemCategory: \"asc\" },\n { name: \"asc\" },\n ],\n },\n });\n\n const {\n data: { __type: { enumValues: menuItemCategories } = {} } = {},\n loading: menuItemCategoriesLoading,\n } = useQuery(MENU_ITEM_CATEGORIES, {\n fetchPolicy: \"network-only\",\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Menu Item Category\",\n accessor: \"menuItemCategory\",\n Cell: (children) => children && children.replace(/_/g, \" \"),\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Available?\",\n accessor: \"available\",\n Cell: (children) => (children ? \"Yes\" : \"No\"),\n },\n {\n header: \"Discontinued?\",\n accessor: \"discontinued\",\n Cell: (children) => (children ? \"Yes\" : \"No\"),\n },\n ];\n if (loading || menuItemCategoriesLoading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"menuItemCategory-label\">\n Menu Item Category\n </InputLabel>\n <Select\n labelId=\"menuItemCategory-label\"\n label=\"Menu Item Category\"\n id=\"menuItemCategory\"\n name=\"menuItemCategory\"\n value={filterQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"300px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {menuItemCategories?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n\n <Paper className=\"dataTableContainer\">\n <DataTable data={menuItems} columns={columns} />\n </Paper>\n <Pagination\n query={MENU_ITEMS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default MenuItemsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Typography } from \"@mui/material\";\nimport { format } from \"date-fns\";\nimport queryString from \"query-string\";\nimport React, { useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport DataTable from \"../../common/DataTable\";\nimport DataTableAccordion from \"../../common/DataTableAccordion\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\n\nexport const PENDING_BILLS = gql`\n query PendingBills(\n $skip: Int\n $take: Int\n $where: PendingBillWhereInput\n $orderBy: [PendingBillOrderByInput!]\n ) {\n pendingBills(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n tableNumber\n createdAt\n total\n totalNumberOfPax\n pendingBillItems {\n id\n quantity\n product {\n id\n price\n numberOfPax\n }\n }\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst PendingBillsPage = () => {\n const title = `Pending Bills`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n };\n const { data: { pendingBills } = {}, loading } = useQuery(PENDING_BILLS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ createdAt: \"desc\" }],\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Created At\",\n accessor: \"createdAt\",\n Cell: (children) =>\n children && format(new Date(children), \"dd MMM yyyy hh:mm:ss a\"),\n },\n {\n header: \"Table Number\",\n accessor: \"tableNumber\",\n },\n {\n header: \"Total\",\n accessor: \"total\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"No. of Pax\",\n accessor: \"totalNumberOfPax\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Items\",\n accessor: \"pendingBillItems\",\n Cell: (children, index) => {\n const pendingBillItemsColumns = [\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Product\",\n accessor: \"product.name\",\n },\n {\n header: \"Price\",\n accessor: \"product.price\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"No. of Pax\",\n accessor: \"product.numberOfPax\",\n Cell: (children) => children && children.toLocaleString(),\n },\n ];\n return (\n <DataTableAccordion\n title=\"Items\"\n data={children}\n index={index}\n columns={pendingBillItemsColumns}\n />\n );\n },\n },\n ];\n\n if (loading) return <Loading />;\n const pendingBillsTotalNumberOfPax = pendingBills?.reduce((acc, cur) => {\n if (!cur.totalNumberOfPax) return acc;\n return acc + cur.totalNumberOfPax;\n }, 0);\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\">\n {title}\n </Typography>\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom>\n Total No. of Pax: {pendingBillsTotalNumberOfPax}\n </Typography>\n\n <Paper className=\"dataTableContainer\">\n <DataTable data={pendingBills} columns={columns} />\n </Paper>\n </AdminListContainer>\n </>\n );\n};\n\nexport default PendingBillsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const PRODUCTS = gql`\n query Products($skip: Int, $take: Int, $where: ProductWhereInput) {\n products(skip: $skip, take: $take, where: $where) {\n id\n productCategory {\n id\n name\n productCategoryType\n }\n name\n price\n numberOfPax\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst PRODUCTS_COUNT = gql`\n query ProductsCount($where: ProductWhereInput) {\n productsCount(where: $where)\n }\n`;\n\nconst ProductsPage = () => {\n const title = `Products`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n productCategory: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { products } = {}, loading } = useQuery(PRODUCTS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Product Category\",\n accessor: \"productCategory.name\",\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Price\",\n accessor: \"price\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"No. of Pax\",\n accessor: \"numberOfPax\",\n Cell: (children) => children && children.toLocaleString(),\n },\n ];\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n\n <Paper className=\"dataTableContainer\">\n <DataTable data={products} columns={columns} />\n </Paper>\n <Pagination\n query={PRODUCTS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default ProductsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport {\n FormControl,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Typography,\n} from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const PRODUCT_CATEGORY_TYPES = gql`\n query ProductCategoryType {\n __type(name: \"ProductCategoryType\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const PRODUCT_CATEGORIES = gql`\n query ProductCategories(\n $skip: Int\n $take: Int\n $where: ProductCategoryWhereInput\n ) {\n productCategories(skip: $skip, take: $take, where: $where) {\n id\n productCategoryType\n name\n description\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst PRODUCT_CATEGORIES_COUNT = gql`\n query ProductCategoriesCount($where: ProductCategoryWhereInput) {\n productCategoriesCount(where: $where)\n }\n`;\n\nconst ProductCategoriesPage = () => {\n const title = `Product Categories`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: handleSubmitFilter,\n initialQueryStringValue: filterQueryString,\n } = useQueryString(\"filter\");\n\n const where = {\n ...(filterQueryString && {\n productCategoryType: {\n equals: filterQueryString,\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n description: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { productCategories } = {}, loading } = useQuery(\n PRODUCT_CATEGORIES,\n {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n }\n );\n\n const {\n data: { __type: { enumValues: productCategoryTypes } = {} } = {},\n loading: productCategoryTypesLoading,\n } = useQuery(PRODUCT_CATEGORY_TYPES, {\n fetchPolicy: \"network-only\",\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Product Category Type\",\n accessor: \"productCategoryType\",\n Cell: (children) => children && children.replace(/_/g, \" \"),\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Description\",\n accessor: \"description\",\n },\n ];\n if (loading || productCategoryTypesLoading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"productCategoryType-label\">\n Product Category Type\n </InputLabel>\n <Select\n labelId=\"productCategoryType-label\"\n label=\"Product Category Type\"\n id=\"productCategoryType\"\n name=\"productCategoryType\"\n value={filterQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"300px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {productCategoryTypes?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n\n <Paper className=\"dataTableContainer\">\n <DataTable data={productCategories} columns={columns} />\n </Paper>\n <Pagination\n query={PRODUCT_CATEGORIES_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default ProductCategoriesPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport { endOfDay, format, startOfDay } from \"date-fns\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport DataTable from \"../../common/DataTable\";\nimport DataTableAccordion from \"../../common/DataTableAccordion\";\nimport DateFilter from \"../../common/DateFilter\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const PURCHASE_ORDERS = gql`\n query PurchaseOrders(\n $skip: Int\n $take: Int\n $where: PurchaseOrderWhereInput\n $orderBy: [PurchaseOrderOrderByInput!]\n ) {\n purchaseOrders(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n date\n number\n branch {\n id\n name\n }\n supplier {\n id\n name\n }\n requestedBy {\n id\n username\n }\n total\n datePurchased\n reimbursedTo\n salesDate\n remarks\n purchaseOrderItems {\n id\n quantity\n item {\n id\n unit\n name\n }\n price\n }\n }\n }\n`;\n\nconst PURCHASE_ORDERS_COUNT = gql`\n query PurchaseOrdersCount($where: PurchaseOrderWhereInput) {\n purchaseOrdersCount(where: $where)\n }\n`;\n\nconst PurchaseOrdersPage = () => {\n const title = `Purchase Orders`;\n const { branchFilterQueryString } = useBranchContext();\n\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(startDate &&\n endDate && {\n date: {\n gte: startOfDay(new Date(startDateQueryString)),\n lte: endOfDay(new Date(endDateQueryString)),\n },\n }),\n\n ...(searchQueryString && {\n OR: [\n {\n reimbursedTo: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n remarks: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n number: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n supplier: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n {\n requestedBy: {\n username: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n {\n purchaseOrderItems: {\n some: {\n item: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n },\n },\n ],\n }),\n };\n const { data: { purchaseOrders } = {}, loading } = useQuery(PURCHASE_ORDERS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ number: \"desc\" }],\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Date\",\n accessor: \"date\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n {\n header: \"PO No.\",\n accessor: \"number\",\n },\n {\n header: \"Supplier\",\n accessor: \"supplier.name\",\n },\n {\n header: \"Requested By\",\n accessor: \"requestedBy.username\",\n },\n {\n header: \"Date Purchased\",\n accessor: \"datePurchased\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n {\n header: \"Total\",\n accessor: \"total\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Reimbursed To\",\n accessor: \"reimbursedTo\",\n },\n {\n header: \"Sales Date\",\n accessor: \"salesDate\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n {\n header: \"Remarks\",\n accessor: \"remarks\",\n },\n {\n header: \"Items\",\n accessor: \"purchaseOrderItems\",\n Cell: (children, index) => {\n const purchaseOrderItemsColumns = [\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Unit\",\n accessor: \"item.unit\",\n },\n {\n header: \"Item\",\n accessor: \"item.name\",\n },\n {\n header: \"Price\",\n accessor: \"price\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n return (\n <DataTableAccordion\n title=\"Items\"\n data={children}\n index={index}\n columns={purchaseOrderItemsColumns}\n />\n );\n },\n },\n ];\n\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={purchaseOrders} columns={columns} />\n </Paper>\n <Pagination\n query={PURCHASE_ORDERS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default PurchaseOrdersPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport { format } from \"date-fns\";\nimport React from \"react\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport { BRANCHES } from \"../branches/BranchesPage\";\n\nexport const ERRORLOGS = gql`\n query Errorlogs {\n errorlogs {\n id\n timestamp\n branchId\n message\n }\n }\n`;\n\nconst ErrorlogsPage = () => {\n const title = `Error Logs`;\n\n const { data: { errorlogs } = {}, loading } = useQuery(ERRORLOGS, {\n fetchPolicy: \"network-only\",\n });\n\n const { data: { branches } = {}, loading: branchesLoading } = useQuery(\n BRANCHES,\n {\n fetchPolicy: \"network-only\",\n }\n );\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branchId\",\n Cell: (children) =>\n children && (\n <Typography>\n {branches?.find(({ id }) => id === children)?.name}\n </Typography>\n ),\n },\n {\n header: \"Timestamp\",\n accessor: \"timestamp\",\n Cell: (children) =>\n children && format(new Date(children), \"dd MMM yyyy hh:mm:ss a\"),\n },\n {\n header: \"Message\",\n accessor: \"message\",\n },\n ];\n if (loading || branchesLoading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n mt={1}\n mb={1}\n >\n <Typography variant=\"h3\" color=\"primary\">\n {title}\n </Typography>\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={errorlogs} columns={columns} />\n </Paper>\n </AdminListContainer>\n </>\n );\n};\n\nexport default ErrorlogsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport AdapterDateFns from \"@mui/lab/AdapterDateFns\";\nimport DatePicker from \"@mui/lab/DatePicker\";\nimport LocalizationProvider from \"@mui/lab/LocalizationProvider\";\nimport {\n Button,\n FormControl,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport React, { useRef, useState } from \"react\";\nimport { CSVLink } from \"react-csv\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport iterateObjectValuesNullToBlank from \"../../../utils/iterateObjectValuesNullToBlank\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Search from \"../../common/Search\";\nimport { ITEM_CATEGORIES } from \"../item_categories/ItemCategoriesPage\";\n\nexport const INVENTORY_REPORT_ITEMS = gql`\n query InventoryReportItems(\n $where: ItemWhereInput\n $branchId: String!\n $itemCategoryId: String!\n $date: DateTime!\n ) {\n inventoryReportItems(\n where: $where\n branchId: $branchId\n itemCategoryId: $itemCategoryId\n date: $date\n ) {\n item\n unit\n beginning\n purchased\n consumed\n transferred\n estimated\n actual\n variance\n phpValue\n lowOnStock\n inventoryPhpValue\n }\n }\n`;\n\nconst InventoryReportPage = () => {\n const title = `Inventory Report`;\n const location = useLocation();\n const [exportData, setExportData] = useState([]);\n const csvLink = useRef(null);\n const { dateQueryString, date, handleChangeDate } = useDateFilter();\n const { branchFilterQueryString } = useBranchContext();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: handleSubmitItemCategoryFilter,\n initialQueryStringValue: itemCategoryFilterQueryString,\n } = useQueryString(\"itemCategoryId\");\n\n const where = {\n ...(searchQueryString && {\n OR: [\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n\n const skipCriteria =\n !itemCategoryFilterQueryString ||\n !branchFilterQueryString ||\n !dateQueryString;\n const {\n data: { inventoryReportItems } = {},\n loading,\n refetch,\n } = useQuery(INVENTORY_REPORT_ITEMS, {\n fetchPolicy: \"network-only\",\n skip: skipCriteria,\n variables: {\n where,\n ...(dateQueryString && {\n date: new Date(dateQueryString),\n }),\n ...(itemCategoryFilterQueryString && {\n itemCategoryId: itemCategoryFilterQueryString,\n }),\n ...(branchFilterQueryString && {\n branchId: branchFilterQueryString,\n }),\n },\n });\n\n const { data: { itemCategories } = {}, loading: itemCategoriesLoading } =\n useQuery(ITEM_CATEGORIES, {\n fetchPolicy: \"network-only\",\n skip: !branchFilterQueryString,\n variables: {\n where: {\n branchId: {\n equals: branchFilterQueryString,\n },\n },\n },\n });\n\n const handleDownload = async () => {\n const { data: { inventoryReportItems } = {} } = await refetch({\n skip: null,\n take: null,\n where,\n });\n\n setExportData(\n inventoryReportItems.map((inventoryReportItem) => {\n return {\n ...iterateObjectValuesNullToBlank({\n ...inventoryReportItem,\n }),\n };\n })\n );\n csvLink.current.link.click();\n };\n\n const columns = [\n {\n header: \"Low on Stock\",\n accessor: \"lowOnStock\",\n Cell: (children) =>\n children && (\n <Typography variant=\"h6\" color=\"error\">\n !\n </Typography>\n ),\n },\n {\n header: \"Item\",\n accessor: \"item\",\n },\n {\n header: \"Unit\",\n accessor: \"unit\",\n },\n {\n header: \"Beginning\",\n accessor: \"beginning\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Purchased\",\n accessor: \"purchased\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Consumed\",\n accessor: \"consumed\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Transferred\",\n accessor: \"transferred\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Estimated\",\n accessor: \"estimated\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Actual\",\n accessor: \"actual\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Variance\",\n accessor: \"variance\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Variance Php Value\",\n accessor: \"phpValue\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Inventory Php Value\",\n accessor: \"inventoryPhpValue\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n if (loading || itemCategoriesLoading) return <Loading />;\n return (\n <>\n <CSVLink\n component=\"button\"\n headers={columns\n .filter(({ accessor }) => accessor !== \"id\")\n .map((column) => {\n return { label: column.header, key: column.accessor };\n })}\n filename={`${location.pathname}-${\n searchQueryString ? searchQueryString + \"-\" : \"\"\n }${dateQueryString}.csv`}\n data={exportData}\n ref={csvLink}\n />\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Button\n disabled={skipCriteria}\n onClick={handleDownload}\n variant=\"contained\"\n startIcon={<DownloadIcon />}\n sx={{ marginLeft: \"auto\" }}\n >\n Download\n </Button>\n\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n id=\"date\"\n name=\"date\"\n label=\"Date\"\n value={date || null}\n onChange={handleChangeDate}\n disableMaskedInput\n inputProps={{ readOnly: true }}\n renderInput={(params) => (\n <TextField\n {...params}\n InputLabelProps={{\n shrink: true,\n }}\n size=\"small\"\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n }}\n />\n )}\n />\n </LocalizationProvider>\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"itemCategory-label\">Item Category</InputLabel>\n <Select\n labelId=\"itemCategory-label\"\n label=\"Item Category\"\n id=\"itemCategory\"\n name=\"itemCategory\"\n value={itemCategoryFilterQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitItemCategoryFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"300px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {itemCategories?.map(({ id, name }) => (\n <MenuItem key={name} value={id}>\n {name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={inventoryReportItems} columns={columns} />\n </Paper>\n </AdminListContainer>\n </>\n );\n};\n\nexport default InventoryReportPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport { Button, Paper, Stack, Typography } from \"@mui/material\";\nimport { format } from \"date-fns\";\nimport React, { useRef, useState } from \"react\";\nimport { CSVLink } from \"react-csv\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport iterateObjectValuesNullToBlank from \"../../../utils/iterateObjectValuesNullToBlank\";\nimport DataTable from \"../../common/DataTable\";\nimport DateFilter from \"../../common/DateFilter\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\n\nexport const SALES_REPORT_ITEMS = gql`\n query SalesReportItems(\n $startDate: DateTime\n $endDate: DateTime\n $branchId: String\n ) {\n salesReportItems(\n startDate: $startDate\n endDate: $endDate\n branchId: $branchId\n ) {\n date\n dineIn\n takeOut\n total\n numberOfPax\n vatableTransaction\n scVatExempt\n pwdVatExempt\n sc\n pwd\n }\n }\n`;\n\nconst SalesReportPage = () => {\n const title = `Sales Report`;\n const location = useLocation();\n const csvLink = useRef(null);\n const [exportData, setExportData] = useState([]);\n const { branchFilterQueryString } = useBranchContext();\n\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n\n const variables = {\n ...(branchFilterQueryString && {\n branchId: branchFilterQueryString,\n }),\n ...(startDate && {\n startDate: new Date(startDateQueryString),\n }),\n ...(endDate && { endDate: new Date(endDateQueryString) }),\n };\n const skipCriteria = !branchFilterQueryString || !(startDate && endDate);\n const {\n data: { salesReportItems } = {},\n loading,\n refetch,\n } = useQuery(SALES_REPORT_ITEMS, {\n skip: skipCriteria,\n fetchPolicy: \"network-only\",\n variables,\n });\n\n const handleDownload = async () => {\n const { data: { salesReportItems } = {} } = await refetch({\n skip: null,\n take: null,\n });\n\n setExportData(\n salesReportItems.map((salesReportItem) => {\n return {\n ...iterateObjectValuesNullToBlank({\n ...salesReportItem,\n }),\n };\n })\n );\n csvLink.current.link.click();\n };\n\n const columns = [\n {\n header: \"Date\",\n accessor: \"date\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n {\n header: \"Dine In\",\n accessor: \"dineIn\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Take Out\",\n accessor: \"takeOut\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Total\",\n accessor: \"total\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"No. of Pax\",\n accessor: \"numberOfPax\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Vatable Transaction\",\n accessor: \"vatableTransaction\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"SC VE\",\n accessor: \"scVatExempt\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"PWD VE\",\n accessor: \"pwdVatExempt\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"SC\",\n accessor: \"sc\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"PWD\",\n accessor: \"pwd\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n if (loading) return <Loading />;\n return (\n <>\n <CSVLink\n component=\"button\"\n headers={columns\n .filter(({ accessor }) => accessor !== \"id\")\n .map((column) => {\n return { label: column.header, key: column.accessor };\n })}\n filename={`${location.pathname}-${format(\n Date.now(),\n \"yyyy-MM-dd-HH:mm:ss\"\n )}.csv`}\n data={exportData}\n ref={csvLink}\n />\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Button\n disabled={skipCriteria}\n onClick={handleDownload}\n variant=\"contained\"\n startIcon={<DownloadIcon />}\n sx={{ marginLeft: \"auto\" }}\n >\n Download\n </Button>\n\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={salesReportItems} columns={columns} />\n </Paper>\n </AdminListContainer>\n </>\n );\n};\n\nexport default SalesReportPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport {\n Box,\n Button,\n FormControl,\n Grid,\n InputAdornment,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport { startOfDay } from \"date-fns\";\nimport { endOfDay } from \"date-fns/esm\";\nimport React, { useEffect, useMemo } from \"react\";\nimport { useInputChange } from \"../../../hooks/useInputChange\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport { handleNestedChange } from \"../../../utils/handleNestedInputChange\";\nimport FormContainer from \"../../common/FormContainer\";\nimport Loading from \"../../common/Loading\";\nimport { BRANCHES } from \"../branches/BranchesPage\";\n\nconst TIP_CALCULATOR_ITEMS = gql`\n query TipCalculatorItems($where: AttendanceWhereInput) {\n tipCalculatorItems(where: $where) {\n firstName\n lastName\n middleName\n numberOfDays\n }\n }\n`;\nconst TipCalculatorPage = ({ title = \"Tip Calculator\" }) => {\n const { state, setState, handleChange } = useInputChange();\n const {\n state: tipCalculatorItemsState,\n setState: tipCalculatorItemsSetState,\n } = useInputChange({}, []);\n\n const { data: { branches } = {}, loading: branchesLoading } = useQuery(\n BRANCHES,\n {\n fetchPolicy: \"network-only\",\n }\n );\n const where = useMemo(() => {\n return {\n dateTime: {\n gte: startOfDay(new Date(state?.startDate)),\n lte: endOfDay(new Date(state?.endDate)),\n },\n branchId: {\n equals: state?.branch?.id,\n },\n };\n }, [state.startDate, state.endDate, state.branch?.id]);\n\n const { data: { tipCalculatorItems } = {}, refetch } = useQuery(\n TIP_CALCULATOR_ITEMS,\n {\n fetchPolicy: \"network-only\",\n skip: !state.startDate || !state.endDate || !state.branch,\n variables: {\n where,\n },\n }\n );\n\n const handleChangeItem = (e, idx) =>\n handleNestedChange(\n tipCalculatorItemsState,\n tipCalculatorItemsSetState,\n e,\n idx\n );\n\n const handleSubmit = (e) => {\n e.preventDefault();\n const tipPerDay = Math.floor(\n (state.totalTip - state.deductions + state.carryOverPrevious) /\n tipCalculatorItemsState.reduce((acc, cur) => {\n if (!cur.numberOfDays) return acc;\n return acc + cur.numberOfDays;\n }, 0)\n );\n\n const totalTipDistributed = tipCalculatorItemsState.reduce((acc, cur) => {\n if (!tipPerDay || !cur.numberOfDays) return acc;\n return acc + tipPerDay * cur.numberOfDays;\n }, 0);\n\n const carryOverNext =\n state.totalTip -\n state.deductions +\n state.carryOverPrevious -\n totalTipDistributed;\n setState({ ...state, tipPerDay, totalTipDistributed, carryOverNext });\n tipCalculatorItemsSetState(\n tipCalculatorItemsState.map((item) => {\n return { ...item, tip: tipPerDay * item.numberOfDays };\n })\n );\n };\n useEffect(() => {\n if (state.startDate && state.endDate && state.branch) {\n refetch({\n where,\n });\n }\n }, [state.startDate, state.endDate, state.branch, refetch, where]);\n useEffect(() => {\n if (tipCalculatorItems) {\n tipCalculatorItemsSetState(tipCalculatorItems);\n }\n }, [tipCalculatorItemsSetState, tipCalculatorItems]);\n if (branchesLoading) return <Loading />;\n\n return (\n <FormContainer maxWidth=\"md\">\n <Typography\n component=\"h1\"\n variant=\"h4\"\n sx={{ textTransform: \"uppercase\", fontWeight: \"bold\" }}\n gutterBottom\n >\n {title}\n </Typography>\n <Box component=\"form\" onSubmit={handleSubmit}>\n <Grid container spacing={2} alignItems=\"center\">\n <Grid item xs={12} md={4}>\n <TextField\n required\n id=\"startDate\"\n label=\"Start date\"\n name=\"startDate\"\n value={state.startDate ?? \"\"}\n onChange={handleChange}\n fullWidth\n type=\"date\"\n InputLabelProps={{\n shrink: true,\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n required\n id=\"endDate\"\n label=\"End date\"\n name=\"endDate\"\n value={state.endDate ?? \"\"}\n onChange={handleChange}\n fullWidth\n type=\"date\"\n InputLabelProps={{\n shrink: true,\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <FormControl fullWidth required>\n <InputLabel id=\"branch-label\">Branch</InputLabel>\n <Select\n labelId=\"branch-label\"\n label=\"Branch\"\n id=\"branch\"\n name=\"branch\"\n value={state.branch ?? \"\"}\n onChange={handleChange}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {branches?.map((branch) => (\n <MenuItem key={branch.name} value={branch}>\n {branch.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n required\n fullWidth\n id=\"totalTip\"\n label=\"Total tip\"\n name=\"totalTip\"\n value={state.totalTip ?? \"\"}\n onChange={handleChange}\n type=\"number\"\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">₱</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n required\n fullWidth\n id=\"deductions\"\n label=\"Deductions\"\n name=\"deductions\"\n value={state.deductions ?? \"\"}\n onChange={handleChange}\n type=\"number\"\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">₱</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n required\n fullWidth\n id=\"carryOverPrevious\"\n label=\"Previous month carry over\"\n name=\"carryOverPrevious\"\n value={state.carryOverPrevious ?? \"\"}\n onChange={handleChange}\n type=\"number\"\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">₱</InputAdornment>\n ),\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n id=\"tipPerDay\"\n label=\"Tip per day\"\n name=\"tipPerDay\"\n value={state?.tipPerDay ?? \"\"}\n fullWidth\n InputProps={{\n readOnly: true,\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n id=\"totalTipDistributed\"\n label=\"Total tip distributed\"\n name=\"totalTipDistributed\"\n value={state?.totalTipDistributed ?? \"\"}\n fullWidth\n InputProps={{\n readOnly: true,\n }}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextField\n id=\"carryOverNext\"\n label=\"Next month carry over\"\n name=\"carryOverNext\"\n value={state?.carryOverNext ?? \"\"}\n fullWidth\n InputProps={{\n readOnly: true,\n }}\n />\n </Grid>\n </Grid>\n <Typography variant=\"h5\" sx={{ my: 1 }} gutterBottom>\n Employees\n </Typography>\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(5, minmax(150px, 1fr))\",\n alignItems: \"center\",\n justifyItems: \"center\",\n gap: 1,\n overflow: \"auto\",\n }}\n >\n <Typography align=\"center\" variant=\"h6\">\n Last Name\n </Typography>\n\n <Typography align=\"center\" variant=\"h6\">\n First Name\n </Typography>\n\n <Typography align=\"center\" variant=\"h6\">\n Middle Name\n </Typography>\n\n <Typography align=\"center\" variant=\"h6\">\n Number of Days\n </Typography>\n\n <Typography align=\"center\" variant=\"h6\">\n Tip\n </Typography>\n\n {tipCalculatorItemsState?.map((tipCalculatorItem, idx) => {\n return (\n <React.Fragment key={idx}>\n <Typography align=\"center\">\n {tipCalculatorItem?.lastName ?? \"\"}\n </Typography>\n\n <Typography align=\"center\">\n {tipCalculatorItem?.firstName ?? \"\"}\n </Typography>\n\n <Typography align=\"center\">\n {tipCalculatorItem?.middleName ?? \"\"}\n </Typography>\n\n <TextField\n size=\"small\"\n required\n fullWidth\n id=\"numberOfDays\"\n name=\"numberOfDays\"\n value={tipCalculatorItem.numberOfDays ?? \"\"}\n onChange={(e) => handleChangeItem(e, idx)}\n type=\"number\"\n />\n\n <Typography align=\"center\">\n {tipCalculatorItem?.tip\n ? formatMoney(tipCalculatorItem?.tip)\n : \"\"}\n </Typography>\n </React.Fragment>\n );\n })}\n </Box>\n\n <Button type=\"submit\" variant=\"contained\" fullWidth sx={{ mt: 3 }}>\n Submit\n </Button>\n </Box>\n </FormContainer>\n );\n};\n\nexport default TipCalculatorPage;\n","const handleNestedAdd = (state, setState, value) => {\n setState(state.concat(value));\n};\nconst handleNestedSubtract = (state, setState, idx) => {\n setState(state.filter((item, nidx) => idx !== nidx));\n};\nconst handleNestedChange = (state, setState, e, idx) => {\n const target = e.target;\n const name = target.name;\n let value;\n\n switch (target.type) {\n case \"number\":\n if (target.value === \"\") {\n value = null;\n } else if (Object.is(NaN, parseFloat(target.value))) {\n value = target.value;\n } else {\n value = parseFloat(target.value);\n }\n break;\n default:\n value = target.value;\n }\n\n const newItems = state.map((item, nidx) => {\n if (idx !== nidx) return item;\n return { ...item, [name]: value };\n });\n\n setState(newItems);\n};\n\nexport { handleNestedAdd, handleNestedSubtract, handleNestedChange };\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const SUPPLIERS = gql`\n query Suppliers($skip: Int, $take: Int, $where: SupplierWhereInput) {\n suppliers(skip: $skip, take: $take, where: $where) {\n id\n name\n contactNumber\n contactPerson\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst SUPPLIERS_COUNT = gql`\n query SuppliersCount($where: SupplierWhereInput) {\n suppliersCount(where: $where)\n }\n`;\n\nconst SuppliersPage = () => {\n const title = `Suppliers`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n contactPerson: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { suppliers } = {}, loading } = useQuery(SUPPLIERS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Contact Person\",\n accessor: \"contactPerson\",\n },\n {\n header: \"Contact Number\",\n accessor: \"contactNumber\",\n },\n ];\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n mt={1}\n mb={1}\n >\n <Typography variant=\"h3\" color=\"primary\">\n {title}\n </Typography>\n <Stack direction=\"row\" spacing={1}>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={suppliers} columns={columns} />\n </Paper>\n <Pagination\n query={SUPPLIERS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default SuppliersPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport { endOfDay, format, startOfDay } from \"date-fns\";\nimport queryString from \"query-string\";\nimport React, { useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport formatMoney from \"../../../utils/formatMoney\";\nimport DataTable from \"../../common/DataTable\";\nimport DataTableAccordion from \"../../common/DataTableAccordion\";\nimport DateFilter from \"../../common/DateFilter\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const TRANSFER_SLIPS = gql`\n query TransferSlips(\n $skip: Int\n $take: Int\n $where: TransferSlipWhereInput\n $orderBy: [TransferSlipOrderByInput!]\n ) {\n transferSlips(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n dateBorrowed\n number\n originBranch {\n id\n name\n }\n destination\n dateReturned\n remarks\n total\n transferSlipItems {\n id\n quantity\n item {\n id\n unit\n name\n }\n price\n }\n }\n }\n`;\n\nconst TRANSFER_SLIPS_COUNT = gql`\n query TransferSlipsCount($where: TransferSlipWhereInput) {\n transferSlipsCount(where: $where)\n }\n`;\n\nconst TRANSFER_SLIPS_TOTAL = gql`\n query TransferSlipsTotal($where: TransferSlipWhereInput) {\n transferSlipsTotal(where: $where)\n }\n`;\n\nconst TransferSlipsPage = () => {\n const title = `Transfer Slips`;\n const { branchFilterQueryString } = useBranchContext();\n\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(startDate &&\n endDate && {\n dateBorrowed: {\n gte: startOfDay(new Date(startDateQueryString)),\n lte: endOfDay(new Date(endDateQueryString)),\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n remarks: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n number: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n destination: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n transferSlipItems: {\n some: {\n item: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n },\n },\n ],\n }),\n };\n const { data: { transferSlips } = {}, loading } = useQuery(TRANSFER_SLIPS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ number: \"desc\" }],\n },\n });\n\n const { data: { transferSlipsTotal } = {} } = useQuery(TRANSFER_SLIPS_TOTAL, {\n fetchPolicy: \"network-only\",\n variables: {\n where,\n },\n });\n\n const columns = [\n {\n header: \"Date Borrwed\",\n accessor: \"dateBorrowed\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n {\n header: \"Transfer Slip No.\",\n accessor: \"number\",\n },\n {\n header: \"Origin Branch\",\n accessor: \"originBranch.name\",\n },\n {\n header: \"Destination\",\n accessor: \"destination\",\n },\n {\n header: \"Date Returned\",\n accessor: \"dateReturned\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n {\n header: \"Total\",\n accessor: \"total\",\n Cell: (children) => children && formatMoney(children),\n },\n {\n header: \"Remarks\",\n accessor: \"remarks\",\n },\n {\n header: \"Items\",\n accessor: \"transferSlipItems\",\n Cell: (children, index) => {\n const transferSlipItemsColumns = [\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Unit\",\n accessor: \"item.unit\",\n },\n {\n header: \"Item\",\n accessor: \"item.name\",\n },\n {\n header: \"Price\",\n accessor: \"price\",\n Cell: (children) => children && formatMoney(children),\n },\n ];\n return (\n <DataTableAccordion\n title=\"Items\"\n data={children}\n index={index}\n columns={transferSlipItemsColumns}\n />\n );\n },\n },\n ];\n\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\">\n {title}\n </Typography>\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom>\n Total Amount: {transferSlipsTotal && formatMoney(transferSlipsTotal)}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={transferSlips} columns={columns} />\n </Paper>\n <Pagination\n query={TRANSFER_SLIPS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default TransferSlipsPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport {\n FormControl,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Typography,\n} from \"@mui/material\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const USERGROUPS = gql`\n query Usergroups {\n __type(name: \"Usergroup\") {\n enumValues {\n name\n }\n }\n }\n`;\n\nexport const USERS = gql`\n query Users($skip: Int, $take: Int, $where: UserWhereInput) {\n users(skip: $skip, take: $take, where: $where) {\n id\n username\n usergroup\n employee {\n id\n lastName\n firstName\n middleName\n }\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst USERS_COUNT = gql`\n query UsersCount($where: UserWhereInput) {\n usersCount(where: $where)\n }\n`;\n\nconst UsersPage = () => {\n const title = `Users`;\n const { branchFilterQueryString } = useBranchContext();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: handleSubmitFilter,\n initialQueryStringValue: filterQueryString,\n } = useQueryString(\"filter\");\n\n const where = {\n ...(filterQueryString && {\n usergroup: {\n equals: filterQueryString,\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n username: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n employee: {\n lastName: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n {\n employee: {\n firstName: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n ],\n }),\n };\n const { data: { users } = {}, loading } = useQuery(USERS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n },\n });\n\n const {\n data: { __type: { enumValues: usergroups } = {} } = {},\n loading: usergroupsLoading,\n } = useQuery(USERGROUPS, {\n fetchPolicy: \"network-only\",\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Username\",\n accessor: \"username\",\n },\n {\n header: \"Name\",\n accessor: \"employee\",\n Cell: (children) =>\n children &&\n `${children?.firstName} ${children?.middleName} ${children?.lastName}`,\n },\n {\n header: \"Usergroup\",\n accessor: \"usergroup\",\n Cell: (children) => children && children.replace(/_/g, \" \"),\n },\n ];\n if (loading || usergroupsLoading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"flex-end\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"usergroup-label\">Usergroup</InputLabel>\n <Select\n labelId=\"usergroup-label\"\n label=\"Description\"\n id=\"usergroup\"\n name=\"usergroup\"\n value={filterQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitFilter(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"300px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n {usergroups?.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name.replace(/_/g, \" \")}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={users} columns={columns} />\n </Paper>\n <Pagination\n query={USERS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default UsersPage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport { Paper, Stack, Typography } from \"@mui/material\";\nimport { endOfDay, format, startOfDay } from \"date-fns\";\nimport queryString from \"query-string\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../../../contexts/branchContext\";\nimport useDateFilter from \"../../../hooks/useDateFilter\";\nimport useQueryString from \"../../../hooks/useQueryString\";\nimport AdminListContainer from \"../../../styles/components/AdminListContainer\";\nimport DataTable from \"../../common/DataTable\";\nimport DateFilter from \"../../common/DateFilter\";\nimport Loading from \"../../common/Loading\";\nimport Meta from \"../../common/Meta\";\nimport Pagination from \"../../common/Pagination\";\nimport Search from \"../../common/Search\";\n\nexport const WASTAGES = gql`\n query Wastages(\n $skip: Int\n $take: Int\n $where: WastageWhereInput\n $orderBy: [WastageOrderByInput!]\n ) {\n wastages(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n name\n weightInKg\n date\n remarks\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst WASTAGES_COUNT = gql`\n query WastagesCount($where: WastageWhereInput) {\n wastagesCount(where: $where)\n }\n`;\n\nconst WASTAGES_TOTAL = gql`\n query WastagesTotal($where: WastageWhereInput) {\n wastagesTotal(where: $where)\n }\n`;\n\nconst WastagesPage = () => {\n const title = `Wastages`;\n const { branchFilterQueryString } = useBranchContext();\n\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n\n const where = {\n ...(startDate &&\n endDate && {\n date: {\n gte: startOfDay(new Date(startDateQueryString)),\n lte: endOfDay(new Date(endDateQueryString)),\n },\n }),\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n remarks: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n ],\n }),\n };\n const { data: { wastages } = {}, loading } = useQuery(WASTAGES, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ date: \"desc\" }],\n },\n });\n const { data: { wastagesTotal } = {} } = useQuery(WASTAGES_TOTAL, {\n fetchPolicy: \"network-only\",\n variables: {\n where,\n },\n });\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"Date\",\n accessor: \"date\",\n Cell: (children) => children && format(new Date(children), \"dd MMM yyyy\"),\n },\n {\n header: \"Name\",\n accessor: \"name\",\n },\n {\n header: \"Weight (kg)\",\n accessor: \"weightInKg\",\n Cell: (children) => children && children.toLocaleString(),\n },\n {\n header: \"Remarks\",\n accessor: \"remarks\",\n },\n ];\n\n if (loading) return <Loading />;\n return (\n <>\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Typography variant=\"h3\" color=\"primary\">\n {title}\n </Typography>\n <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom>\n Total Weight:{\" \"}\n {wastagesTotal && `${wastagesTotal.toLocaleString()} kg`}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={wastages} columns={columns} />\n </Paper>\n <Pagination\n query={WASTAGES_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default WastagesPage;\n","export default __webpack_public_path__ + \"static/media/logo-white.d9382be0.png\";","import { gql, useMutation } from \"@apollo/client\";\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\nimport VisibilityOffIcon from \"@mui/icons-material/VisibilityOff\";\nimport {\n Box,\n Button,\n Container,\n FormControl,\n Grid,\n IconButton,\n InputAdornment,\n InputLabel,\n OutlinedInput,\n Paper,\n TextField,\n} from \"@mui/material\";\nimport React, { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { CURRENT_USER } from \"../../contexts/authContext\";\nimport { useSnackbarContext } from \"../../contexts/snackbarContext\";\nimport { useInputChange } from \"../../hooks/useInputChange\";\nimport logoWhite from \"../../images/logos/logo-white.png\";\n\nconst SIGN_IN = gql`\n mutation Signin($username: String!, $password: String!) {\n signin(username: $username, password: $password) {\n id\n username\n }\n }\n`;\n\nconst SigninPage = () => {\n const title = `Sign In`;\n const navigate = useNavigate();\n const { state, handleChange } = useInputChange();\n const { handleSnackbarOpen } = useSnackbarContext();\n const [showPassword, setShowPassword] = useState(false);\n\n const [signin, { loading: mutationLoading }] = useMutation(SIGN_IN, {\n awaitRefetchQueries: true,\n refetchQueries: [{ query: CURRENT_USER }],\n\n onError: (error) =>\n handleSnackbarOpen({\n message:\n title.charAt(0).toUpperCase() +\n title.slice(1).toLowerCase() +\n \" error! \" +\n error,\n severity: \"error\",\n }),\n onCompleted: () => {\n navigate(\"/\");\n },\n });\n\n const handleSubmit = (e) => {\n e.preventDefault();\n signin({\n variables: {\n ...state,\n },\n });\n };\n\n return (\n <Container maxWidth=\"xs\" sx={{ display: \"flex\", flexGrow: 1 }}>\n <Paper sx={{ m: \"auto\" }}>\n <Box sx={{ padding: (theme) => theme.spacing(2) }}>\n <Box\n component=\"img\"\n src={logoWhite}\n alt=\"logo\"\n sx={{\n height: \"80px\",\n display: \"block\",\n margin: (theme) => `${theme.spacing(1)} auto`,\n }}\n />\n <Box component=\"form\" onSubmit={handleSubmit}>\n <Grid container spacing={2} alignItems=\"center\">\n <Grid item xs={12}>\n <TextField\n required\n fullWidth\n id=\"username\"\n label=\"Username\"\n name=\"username\"\n autoComplete=\"username\"\n onChange={handleChange}\n />\n </Grid>\n <Grid item xs={12}>\n <FormControl variant=\"outlined\" fullWidth required>\n <InputLabel htmlFor=\"password\">Password</InputLabel>\n <OutlinedInput\n name=\"password\"\n label=\"Password*\"\n type={showPassword ? \"text\" : \"password\"}\n id=\"password\"\n onChange={handleChange}\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n size=\"large\"\n >\n {showPassword ? (\n <VisibilityOffIcon />\n ) : (\n <VisibilityIcon />\n )}\n </IconButton>\n </InputAdornment>\n }\n />\n </FormControl>\n </Grid>\n </Grid>\n <Button\n type=\"submit\"\n fullWidth\n variant=\"contained\"\n size=\"large\"\n sx={{ mt: 3, color: (theme) => theme.palette.secondary.main }}\n disabled={mutationLoading}\n >\n Log In\n </Button>\n </Box>\n </Box>\n </Paper>\n </Container>\n );\n};\n\nexport default SigninPage;\n","import { Typography } from \"@mui/material\";\nimport { Box, styled } from \"@mui/system\";\nimport React from \"react\";\nimport logoLightBg from \"../images/logos/logo-light-bg.png\";\n\nconst Container = styled(\"div\")(({ theme }) => ({\n position: \"absolute\",\n width: \"100vw\",\n height: \"100vh\",\n left: \"50%\",\n right: \"50%\",\n top: \"0\",\n bottom: \"0\",\n marginLeft: \"-50vw\",\n marginRight: \"-50vw\",\n}));\n\nconst HomePage = () => {\n return (\n <Container>\n <Box\n component=\"div\"\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100%\",\n width: \"100%\",\n px: 2,\n }}\n >\n <Box\n component=\"img\"\n src={logoLightBg}\n alt=\"logo\"\n sx={{\n height: \"80px\",\n maxWidth: \"100%\",\n display: \"block\",\n }}\n />\n <Typography variant=\"h6\" sx={{ letterSpacing: \"5px\" }}>\n Management System\n </Typography>\n </Box>\n </Container>\n );\n};\n\nexport default HomePage;\n","import { gql, useQuery } from \"@apollo/client\";\nimport DownloadIcon from \"@mui/icons-material/Download\";\nimport {\n Button,\n FormControl,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n Typography,\n} from \"@mui/material\";\nimport { endOfDay, format, startOfDay } from \"date-fns\";\nimport queryString from \"query-string\";\nimport React, { useRef, useState } from \"react\";\nimport { CSVLink } from \"react-csv\";\nimport { useLocation } from \"react-router-dom\";\nimport { useBranchContext } from \"../contexts/branchContext\";\nimport useDateFilter from \"../hooks/useDateFilter\";\nimport useQueryString from \"../hooks/useQueryString\";\nimport AdminListContainer from \"../styles/components/AdminListContainer\";\nimport iterateObjectValuesNullToBlank from \"../utils/iterateObjectValuesNullToBlank\";\nimport DataTable from \"./common/DataTable\";\nimport DateFilter from \"./common/DateFilter\";\nimport Loading from \"./common/Loading\";\nimport Meta from \"./common/Meta\";\nimport Pagination from \"./common/Pagination\";\nimport Search from \"./common/Search\";\n\nexport const ORDER_ITEMS = gql`\n query OrderItems(\n $skip: Int\n $take: Int\n $where: OrderItemWhereInput\n $orderBy: [OrderItemOrderByInput!]\n ) {\n orderItems(skip: $skip, take: $take, where: $where, orderBy: $orderBy) {\n id\n user {\n id\n username\n }\n createdAt\n tableNumber\n quantity\n menuItem {\n id\n name\n menuItemCategory\n }\n\n cookedAt\n isCooked\n servedAt\n isServed\n branch {\n id\n name\n }\n }\n }\n`;\n\nconst ORDER_ITEMS_COUNT = gql`\n query OrderItemsCount($where: OrderItemWhereInput) {\n orderItemsCount(where: $where)\n }\n`;\n\nconst OrderItemsPage = () => {\n const title = `Order Items`;\n const location = useLocation();\n const paramsObj = queryString.parse(useLocation().search);\n const page = parseInt(paramsObj.page) || 1;\n const perPage = 50;\n const csvLink = useRef(null);\n const [exportData, setExportData] = useState([]);\n const { branchFilterQueryString } = useBranchContext();\n\n const {\n handleChangeStartDate,\n handleChangeEndDate,\n handleClearDateFilters,\n startDate,\n endDate,\n startDateQueryString,\n endDateQueryString,\n } = useDateFilter();\n const {\n handleChangeQueryString: handleChangeSearch,\n handleSubmitQueryString: handleSubmitSearch,\n queryStringValue: searchTerm,\n initialQueryStringValue: searchQueryString,\n } = useQueryString(\"search\");\n const {\n handleSubmitQueryString: handleSubmitIsCooked,\n initialQueryStringValue: isCookedQueryString,\n } = useQueryString(\"isCooked\");\n const {\n handleSubmitQueryString: handleSubmitIsServed,\n initialQueryStringValue: isServedQueryString,\n } = useQueryString(\"isServed\");\n const where = {\n ...(branchFilterQueryString && {\n branch: {\n id: {\n equals: branchFilterQueryString,\n },\n },\n }),\n ...(startDate &&\n endDate && {\n createdAt: {\n gte: startOfDay(new Date(startDateQueryString)),\n lte: endOfDay(new Date(endDateQueryString)),\n },\n }),\n ...(isCookedQueryString && {\n isCooked: {\n equals: isCookedQueryString === \"Yes\" ? true : false,\n },\n }),\n ...(isServedQueryString && {\n isServed: {\n equals: isServedQueryString === \"Yes\" ? true : false,\n },\n }),\n ...(searchQueryString && {\n OR: [\n {\n user: {\n username: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n {\n menuItem: {\n name: {\n contains: searchQueryString,\n mode: \"insensitive\",\n },\n },\n },\n ],\n }),\n };\n const {\n data: { orderItems } = {},\n loading,\n refetch,\n } = useQuery(ORDER_ITEMS, {\n fetchPolicy: \"network-only\",\n variables: {\n skip: page * perPage - perPage,\n take: perPage,\n where,\n orderBy: [{ createdAt: \"desc\" }],\n },\n });\n\n const handleDownload = async () => {\n const { data: { orderItems } = {} } = await refetch({\n skip: null,\n take: null,\n where,\n });\n\n setExportData(\n orderItems.map((orderItem) => {\n return {\n ...iterateObjectValuesNullToBlank({\n ...orderItem,\n createdAt: format(\n new Date(orderItem.createdAt),\n \"dd MMM yyyy hh:mm:ss a\"\n ),\n cookedAt:\n orderItem.cookedAt &&\n format(new Date(orderItem.cookedAt), \"dd MMM yyyy hh:mm:ss a\"),\n servedAt:\n orderItem.servedAt &&\n format(new Date(orderItem.servedAt), \"dd MMM yyyy hh:mm:ss a\"),\n }),\n };\n })\n );\n csvLink.current.link.click();\n };\n\n const columns = [\n {\n header: \"Branch\",\n accessor: \"branch.name\",\n },\n {\n header: \"User\",\n accessor: \"user.username\",\n },\n {\n header: \"Created At\",\n accessor: \"createdAt\",\n Cell: (children) =>\n children && format(new Date(children), \"dd MMM yyyy hh:mm:ss a\"),\n },\n {\n header: \"Table No.\",\n accessor: \"tableNumber\",\n },\n {\n header: \"Quantity\",\n accessor: \"quantity\",\n },\n {\n header: \"Menu Item\",\n accessor: \"menuItem.name\",\n },\n {\n header: \"Cooked At\",\n accessor: \"cookedAt\",\n Cell: (children) =>\n children && format(new Date(children), \"dd MMM yyyy hh:mm:ss a\"),\n },\n {\n header: \"Served At\",\n accessor: \"servedAt\",\n Cell: (children) =>\n children && format(new Date(children), \"dd MMM yyyy hh:mm:ss a\"),\n },\n ];\n if (loading) return <Loading />;\n return (\n <>\n <CSVLink\n component=\"button\"\n headers={columns\n .filter(({ accessor }) => accessor !== \"id\")\n .map((column) => {\n return { label: column.header, key: column.accessor };\n })}\n filename={`${location.pathname}-${\n searchQueryString ? searchQueryString + \"-\" : \"\"\n }${format(Date.now(), \"yyyy-MM-dd-HH:mm:ss\")}.csv`}\n data={exportData}\n ref={csvLink}\n />\n <Meta title={`${title} | Meatsumo`} />\n <AdminListContainer>\n <Button\n onClick={handleDownload}\n variant=\"contained\"\n startIcon={<DownloadIcon />}\n sx={{ marginLeft: \"auto\" }}\n >\n Download\n </Button>\n\n <Typography variant=\"h3\" color=\"primary\" gutterBottom>\n {title}\n </Typography>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n justifyContent=\"space-between\"\n alignItems={{ xs: null, md: \"flex-end\" }}\n spacing={1}\n >\n <DateFilter\n startDate={startDate}\n endDate={endDate}\n handleChangeStartDate={handleChangeStartDate}\n handleChangeEndDate={handleChangeEndDate}\n handleClearDateFilters={handleClearDateFilters}\n />\n\n <Stack direction={{ xs: \"column\", md: \"row\" }} spacing={1}>\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"isCooked-label\">Is Cooked?</InputLabel>\n <Select\n labelId=\"isCooked-label\"\n label=\"Is Cooked?\"\n id=\"isCooked\"\n name=\"isCooked\"\n value={isCookedQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitIsCooked(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"150px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n <MenuItem value=\"No\">No</MenuItem>\n <MenuItem value=\"Yes\">Yes</MenuItem>\n </Select>\n </FormControl>\n <FormControl variant=\"outlined\" size=\"small\">\n <InputLabel id=\"isServed-label\">Is Served?</InputLabel>\n <Select\n labelId=\"isServed-label\"\n label=\"Is Served?\"\n id=\"isServed\"\n name=\"isServed\"\n value={isServedQueryString ?? \"\"}\n onChange={(e) => {\n handleSubmitIsServed(\"direct\")(e);\n }}\n sx={{\n backgroundColor: (theme) => theme.palette.common.white,\n minWidth: \"150px\",\n }}\n >\n <MenuItem value=\"\">\n <em>None</em>\n </MenuItem>\n <MenuItem value=\"No\">No</MenuItem>\n <MenuItem value=\"Yes\">Yes</MenuItem>\n </Select>\n </FormControl>\n <Search\n handleChangeSearch={handleChangeSearch}\n handleSubmitSearch={handleSubmitSearch()}\n searchTerm={searchTerm}\n />\n </Stack>\n </Stack>\n <Paper className=\"dataTableContainer\">\n <DataTable data={orderItems} columns={columns} />\n </Paper>\n <Pagination\n query={ORDER_ITEMS_COUNT}\n variables={{\n where,\n }}\n perPage={perPage}\n page={Number(page)}\n />\n </AdminListContainer>\n </>\n );\n};\n\nexport default OrderItemsPage;\n","import React from \"react\";\nimport { Navigate, Outlet } from \"react-router-dom\";\n\nconst ProtectedRoute = ({ user, redirectPath = \"/signin\" }) => {\n if (!user) return <Navigate to={redirectPath} replace />;\n return <Outlet />;\n};\n\nexport default ProtectedRoute;\n","import { Navigate, Route, Routes as ReactRouterRoutes } from \"react-router-dom\";\nimport { useAuthContext } from \"../../contexts/authContext\";\nimport AttendancesPage from \"../admin/attendance/AttendancesPage\";\nimport BillingsPage from \"../admin/billings/BillingsPage\";\nimport BranchesPage from \"../admin/branches/BranchesPage\";\nimport DiscountCardsPage from \"../admin/discount_cards/DiscountCardsPage\";\nimport EmployeesPage from \"../admin/employees/EmployeesPage\";\nimport ViewEmployeePage from \"../admin/employees/ViewEmployeePage\";\nimport IngredientsPage from \"../admin/ingredients/IngredientsPage\";\nimport InventoriesPage from \"../admin/inventories/InventoriesPage\";\nimport ItemsPage from \"../admin/items/ItemsPage\";\nimport ViewItemPage from \"../admin/items/ViewItemPage\";\nimport ItemCategoriesPage from \"../admin/item_categories/ItemCategoriesPage\";\nimport MenuItemsPage from \"../admin/menu_items/MenuItemsPage\";\nimport PendingBillsPage from \"../admin/pending_bills/PendingBillsPage\";\nimport ProductsPage from \"../admin/products/ProductsPage\";\nimport ProductCategoriesPage from \"../admin/product_categories/ProductCategoriesPage\";\nimport PurchaseOrdersPage from \"../admin/purchase_orders/PurchaseOrdersPage\";\nimport ErrorlogsPage from \"../admin/reports/ErrorlogsPage\";\nimport InventoryReportPage from \"../admin/reports/InventoryReportPage\";\nimport SalesReportPage from \"../admin/reports/SalesReportPage\";\nimport TipCalculatorPage from \"../admin/reports/TipCalculatorPage\";\nimport SuppliersPage from \"../admin/suppliers/SuppliersPage\";\nimport TransferSlipsPage from \"../admin/transfer_slips/TransferSlipsPage\";\nimport UsersPage from \"../admin/users/UsersPage\";\nimport WastagesPage from \"../admin/wastages/WastagesPage\";\nimport SigninPage from \"../authentication/SigninPage\";\nimport HomePage from \"../HomePage\";\nimport OrderItemsPage from \"../OrderItemsPage\";\nimport ProtectedRoute from \"./ProtectedRoute\";\n\nconst Routes = () => {\n const { currentUser } = useAuthContext();\n return (\n <ReactRouterRoutes>\n <Route path=\"*\" element={<Navigate to=\"/\" />} />\n <Route exact path=\"/\" element={<HomePage />} />\n <Route exact path=\"/signin\" element={<SigninPage />} />\n <Route element={<ProtectedRoute user={currentUser} />}>\n <Route exact path=\"/branches\" element={<BranchesPage />} />\n <Route exact path=\"/users\" element={<UsersPage />} />\n <Route\n exact\n path=\"/product-categories\"\n element={<ProductCategoriesPage />}\n />\n <Route exact path=\"/products\" element={<ProductsPage />} />\n <Route exact path=\"/menu-items\" element={<MenuItemsPage />} />\n <Route exact path=\"/employees\" element={<EmployeesPage />} />\n <Route exact path=\"/employees/:id\" element={<ViewEmployeePage />} />\n <Route exact path=\"/pending-bills\" element={<PendingBillsPage />} />\n <Route exact path=\"/billings\" element={<BillingsPage />} />\n <Route exact path=\"/discount-cards\" element={<DiscountCardsPage />} />\n <Route path=\"/order-items\" element={<OrderItemsPage />} />\n <Route path=\"/attendances\" element={<AttendancesPage />} />\n <Route exact path=\"/item-categories\" element={<ItemCategoriesPage />} />\n <Route exact path=\"/items\" element={<ItemsPage />} />\n <Route exact path=\"/items/:id\" element={<ViewItemPage />} />\n <Route exact path=\"/suppliers\" element={<SuppliersPage />} />\n <Route exact path=\"/purchase-orders\" element={<PurchaseOrdersPage />} />\n <Route exact path=\"/transfer-slips\" element={<TransferSlipsPage />} />\n <Route exact path=\"/wastages\" element={<WastagesPage />} />\n <Route exact path=\"/inventories\" element={<InventoriesPage />} />\n <Route exact path=\"/ingredients\" element={<IngredientsPage />} />\n <Route path=\"/inventory-report\" element={<InventoryReportPage />} />\n <Route path=\"/tip-calculator\" element={<TipCalculatorPage />} />\n <Route path=\"/sales-report\" element={<SalesReportPage />} />\n <Route path=\"/error-logs\" element={<ErrorlogsPage />} />\n </Route>\n </ReactRouterRoutes>\n );\n};\n\nexport default Routes;\n","import MuiSnackbar from \"@mui/material/Snackbar\";\nimport React from \"react\";\nimport MuiAlert from \"@mui/material/Alert\";\nimport { useSnackbarContext } from \"../../contexts/snackbarContext\";\n\nconst Snackbar = () => {\n const {\n snackbarOpen,\n handleSnackbarClose,\n snackbarSeverity,\n snackbarMessage,\n } = useSnackbarContext();\n return (\n <MuiSnackbar\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n open={snackbarOpen}\n autoHideDuration={3000}\n onClose={handleSnackbarClose}\n >\n <MuiAlert\n elevation={6}\n variant=\"filled\"\n onClose={handleSnackbarClose}\n severity={snackbarSeverity}\n >\n {snackbarMessage}\n </MuiAlert>\n </MuiSnackbar>\n );\n};\n\nexport default Snackbar;\n","import { useState } from \"react\";\n\nconst usePopper = () => {\n const [anchorEl, setAnchorEl] = useState(null);\n const [open, setOpen] = useState(false);\n const [placement, setPlacement] = useState();\n const handleClick = (newPlacement) => (e) => {\n setAnchorEl(e.currentTarget);\n setOpen((prevState) => !prevState);\n setPlacement(newPlacement);\n };\n\n return { open, setOpen, anchorEl, placement, handleClick };\n};\n\nexport default usePopper;\n","import { gql, useMutation } from \"@apollo/client\";\nimport { Button } from \"@mui/material\";\nimport React from \"react\";\nimport { CURRENT_USER } from \"../../contexts/authContext\";\nimport { useSnackbarContext } from \"../../contexts/snackbarContext\";\n\nconst SIGNOUT = gql`\n mutation Signout {\n signout\n }\n`;\n\nconst SignoutButton = ({ callback = () => {}, variant = \"text\" }) => {\n const { handleSnackbarOpen } = useSnackbarContext();\n\n const [signout] = useMutation(SIGNOUT, {\n awaitRefetchQueries: true,\n refetchQueries: [{ query: CURRENT_USER }],\n onError: (error) => {\n handleSnackbarOpen({\n message: \"Log out error! \" + error,\n severity: \"error\",\n });\n },\n });\n\n const handleClick = async () => {\n await signout();\n };\n return (\n <Button\n variant={variant}\n sx={{ mt: 1, color: (theme) => theme.palette.secondary.main }}\n fullWidth\n onClick={handleClick}\n >\n Sign Out\n </Button>\n );\n};\n\nexport default SignoutButton;\n","import { Paper } from \"@mui/material\";\nimport Fade from \"@mui/material/Fade\";\nimport MuiPopper from \"@mui/material/Popper\";\nimport React from \"react\";\n\nconst Popper = ({ open, anchorEl, placement, children }) => {\n return (\n <MuiPopper\n open={open}\n anchorEl={anchorEl}\n placement={placement}\n transition\n style={{ zIndex: 3 }}\n >\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={350}>\n <Paper sx={{ p: 2 }}>{children}</Paper>\n </Fade>\n )}\n </MuiPopper>\n );\n};\n\nexport default Popper;\n","import { useQuery } from \"@apollo/client\";\nimport AccountCircleIcon from \"@mui/icons-material/AccountCircle\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport {\n AppBar,\n Autocomplete,\n Avatar,\n Box,\n Button,\n ClickAwayListener,\n IconButton,\n Link,\n Stack,\n TextField,\n Toolbar,\n Typography,\n useTheme,\n} from \"@mui/material\";\nimport React from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { useAuthContext } from \"../../contexts/authContext\";\nimport { useBranchContext } from \"../../contexts/branchContext\";\nimport usePopper from \"../../hooks/usePopper\";\nimport logoDarkBg from \"../../images/logos/logo-dark-bg.png\";\nimport { BRANCHES } from \"../admin/branches/BranchesPage\";\nimport SignoutButton from \"../authentication/SignoutButton\";\nimport Popper from \"../common/Popper\";\n\nconst TopNav = ({ toggleDrawer }) => {\n let location = useLocation();\n const theme = useTheme();\n const navigate = useNavigate();\n const { currentUser } = useAuthContext();\n const { branchFilterQueryString, handleSubmitBranchFilter } =\n useBranchContext();\n\n const { data: { branches } = {}, loading } = useQuery(BRANCHES, {\n fetchPolicy: \"network-only\",\n });\n\n const { handleClick, setOpen, open, anchorEl, placement } = usePopper();\n\n if (loading) return null;\n\n return (\n <>\n <AppBar position=\"fixed\" sx={{ displayPrint: \"none\" }}>\n <Toolbar>\n {currentUser && (\n <IconButton\n aria-label=\"open drawer\"\n onClick={toggleDrawer(true)}\n edge=\"start\"\n color=\"inherit\"\n >\n <MenuIcon fontSize=\"large\" />\n </IconButton>\n )}\n\n <Link\n component=\"button\"\n onClick={() => {\n navigate(\"/\");\n }}\n sx={{ display: { xs: \"none\", sm: \"block\" } }}\n >\n <Box\n component=\"img\"\n src={logoDarkBg}\n alt=\"logo\"\n sx={{\n height: \"40px\",\n marginLeft: (theme) => theme.spacing(1),\n }}\n />\n </Link>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n sx={{\n marginLeft: \"auto\",\n }}\n >\n {currentUser ? (\n <>\n {location.pathname !== \"/tip-calculator\" && (\n <Autocomplete\n disablePortal\n id=\"branch\"\n name=\"branch\"\n sx={{ minWidth: \"250px\" }}\n options={branches}\n getOptionLabel={(option) => option.name}\n value={\n branches?.find(\n ({ id }) => branchFilterQueryString === id\n ) ?? null\n }\n onChange={(event, newValue) =>\n handleSubmitBranchFilter(\"direct\", newValue?.id)(event)\n }\n renderInput={(params) => (\n <TextField\n {...params}\n sx={{\n backgroundColor: (theme) =>\n theme.palette.common.white,\n borderRadius: \"4px\",\n }}\n size=\"small\"\n placeholder=\"Branch\"\n />\n )}\n />\n )}\n <ClickAwayListener onClickAway={() => setOpen(false)}>\n <div>\n <IconButton\n aria-label=\"user avatar\"\n color=\"inherit\"\n onClick={handleClick(\"bottom-end\")}\n sx={{ p: 0, ml: 2 }}\n >\n <Avatar\n sx={{\n bgcolor: (theme) => theme.palette.secondary.main,\n color: (theme) => theme.palette.primary.main,\n fontWeight: \"bold\",\n }}\n >\n {currentUser?.username.charAt(0).toUpperCase()}\n </Avatar>\n </IconButton>\n <Popper\n open={open}\n anchorEl={anchorEl}\n placement={placement}\n >\n <Stack alignItems=\"center\" sx={{ mt: 2 }}>\n <AccountCircleIcon fontSize=\"large\" color=\"primary\" />\n <Typography\n variant=\"body1\"\n color=\"textSecondary\"\n gutterBottom\n >\n {currentUser?.username}\n </Typography>\n <SignoutButton\n variant=\"contained\"\n callback={() => {\n navigate(\"/signin\");\n setOpen(false);\n }}\n />\n </Stack>\n </Popper>\n </div>\n </ClickAwayListener>\n </>\n ) : (\n <Button\n color=\"inherit\"\n sx={{ ml: \"auto\" }}\n size=\"large\"\n onClick={() => navigate(\"/signin\")}\n >\n Sign in\n </Button>\n )}\n </Stack>\n </Toolbar>\n </AppBar>\n </>\n );\n};\n\nexport default TopNav;\n","export default \"data:image/png;base64,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\"","import { Box } from \"@mui/material\";\nimport React, { useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { AuthProvider } from \"../../contexts/authContext\";\nimport { BranchProvider } from \"../../contexts/branchContext\";\nimport { DialogProvider } from \"../../contexts/dialogContext\";\nimport { SnackbarProvider } from \"../../contexts/snackbarContext\";\nimport DrawerHeader from \"../../styles/components/DrawerHeader\";\nimport CombineProviders from \"../common/CombineProviders\";\nimport ErrorBoundary from \"../common/ErrorBoundary\";\nimport Meta from \"../common/Meta\";\nimport Dialog from \"./Dialog\";\nimport Drawer from \"./Drawer\";\nimport Routes from \"./Routes\";\nimport Snackbar from \"./Snackbar\";\nimport TopNav from \"./TopNav\";\n\nconst Page = () => {\n let location = useLocation();\n const [drawerOpen, setDrawerOpen] = useState(false);\n const toggleDrawer = (drawerOpen) => (event) => {\n if (\n event.type === \"keydown\" &&\n (event.key === \"Tab\" || event.key === \"Shift\")\n ) {\n return;\n }\n setDrawerOpen(drawerOpen);\n };\n\n return (\n <>\n <Meta title=\"Meatsumo\" />\n <CombineProviders\n providers={[\n AuthProvider,\n BranchProvider,\n SnackbarProvider,\n DialogProvider,\n ]}\n >\n {location.pathname !== \"/signin\" && (\n <TopNav toggleDrawer={toggleDrawer} />\n )}\n <Drawer drawerOpen={drawerOpen} toggleDrawer={toggleDrawer} />\n <DrawerHeader />\n <Box\n component=\"main\"\n sx={{\n maxWidth: (theme) => theme.breakpoints.values.lg,\n width: \"100%\",\n margin: \"0 auto\",\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n padding: 1,\n }}\n >\n <ErrorBoundary>\n <Routes />\n </ErrorBoundary>\n </Box>\n\n <Dialog />\n <Snackbar />\n </CombineProviders>\n </>\n );\n};\n\nexport default Page;\n","import { ApolloClient, InMemoryCache } from \"@apollo/client\";\nimport { createUploadLink } from \"apollo-upload-client\";\n\nconst link = new createUploadLink({\n uri: `${process.env.REACT_APP_BACKEND_URI}`,\n credentials: \"include\",\n});\n\nconst apolloClient = new ApolloClient({\n cache: new InMemoryCache(),\n link,\n});\n\nexport default apolloClient;\n","import { grey } from \"@mui/material/colors\";\nimport { createTheme, responsiveFontSizes } from \"@mui/material/styles\";\nlet theme = createTheme({\n typography: {\n h3: {\n fontWeight: \"500\",\n },\n h4: {\n fontWeight: \"500\",\n },\n h5: {\n fontWeight: \"500\",\n },\n },\n palette: {\n primary: {\n main: \"#000000\",\n },\n secondary: {\n main: \"#ff0000\",\n },\n background: {\n default: grey[100],\n },\n },\n});\n\ntheme = createTheme(theme, {\n components: {\n MuiCssBaseline: {\n styleOverrides: `\n #root {\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n }\n\n `,\n },\n },\n});\n\nexport default responsiveFontSizes(theme);\n","import { ApolloProvider } from \"@apollo/client\";\nimport { ThemeProvider } from \"@emotion/react\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport { HelmetProvider } from \"react-helmet-async\";\nimport Page from \"./components/page/Page\";\nimport apolloClient from \"./libs/apolloClient\";\nimport theme from \"./styles/theme\";\n\nfunction App() {\n return (\n <>\n <ThemeProvider theme={theme}>\n <ApolloProvider client={apolloClient}>\n <HelmetProvider>\n <Router>\n <CssBaseline />\n <Page />\n </Router>\n </HelmetProvider>\n </ApolloProvider>\n </ThemeProvider>\n </>\n );\n}\n\nexport default App;\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 React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"@fontsource/roboto/300.css\";\nimport \"@fontsource/roboto/400.css\";\nimport \"@fontsource/roboto/500.css\";\nimport \"@fontsource/roboto/700.css\";\n\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\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":""}