{"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":""}