{"version":3,"sources":["i18n/en.ts","i18n/i18nProvider.ts","lib/components/layout/themes.ts","lib/components/layout/Logo.tsx","lib/core/auth/UnauthenticatedLayout.tsx","lib/core/auth/LoginPage.tsx","lib/core/auth/ForgotPasswordPage.tsx","lib/core/auth/ResetPasswordPage.tsx","lib/core/constants.ts","lib/core/hooks/usePermissionsCheck.ts","lib/core/providers/restDataProvider.ts","lib/core/helpers/auth.tsx","lib/core/providers/restAuthProvider.ts","lib/core/providers/dataProvider.ts","lib/core/helpers/localStorage.ts","lib/components/buttons/DownloadReportFileButton.tsx","lib/components/buttons/RefetchIconButton.tsx","lib/components/buttons/HistoryBackButton.tsx","lib/components/buttons/ListVerticalActionMenuButton.tsx","lib/components/buttons/ListVerticalActionMenuItemButton.tsx","lib/components/buttons/SecondaryActionLinkButton.tsx","lib/components/controls/fields/TruncatedTextField.tsx","lib/components/controls/fields/LabelField.tsx","lib/components/controls/fields/ResourceLinkedField.tsx","lib/components/controls/fields/AccordionField.tsx","lib/components/controls/fields/DateCountdownField.tsx","lib/components/controls/inputs/date/utils.ts","lib/components/controls/inputs/date/Picker.tsx","lib/components/controls/inputs/date/index.tsx","lib/common/UserFormMessage.tsx","lib/common/ui/filters/QuickFilter.tsx","lib/common/ui/filters/SearchFilter.tsx","lib/common/ui/filters/IdFilter.tsx","lib/common/ui/filters/StatusItem.tsx","lib/common/ui/filters/StatusFilterList.tsx","lib/common/ui/filters/FixedDateRangeFilterList.tsx","lib/common/ui/getTabbedFormProps.ts","lib/common/constants.ts","lib/components/controls/inputs/media/MediaInputField.tsx","lib/components/controls/inputs/media/FilenameField.tsx","lib/components/controls/inputs/media/FileInputPlaceholder.tsx","lib/components/crud/list/listActions/types.ts","lib/components/controls/inputs/media/MediaEmptyState.tsx","lib/modules/profile/validations.ts","lib/modules/profile/style.ts","lib/modules/profile/ProfileActions.tsx","lib/components/crud/list/listActions/SingleListRowAction.tsx","lib/components/crud/list/listActions/ListRowActionButtonsContext.ts","lib/components/crud/list/listActions/actions/RedirectListRowAction.tsx","lib/components/crud/list/listActions/actions/DeleteListRowActionButton.tsx","lib/components/crud/list/listActions/actions/DefaultCrudListRowActions.tsx","lib/components/navigation/CrudActionBreadcrumb.tsx","lib/components/crud/list/listActions/actions/ConfirmListViewActionButton.tsx","lib/components/crud/list/listActions/ListRowActions.tsx","lib/components/crud/list/listActions/listRowActionButtonsReducer.ts","lib/components/crud/list/CustomizableList/LocalStorage.ts","lib/components/navigation/ListActionBreadcrumb.tsx","lib/components/crud/list/CustomizableList/types.ts","lib/components/crud/list/listUtils.ts","lib/components/crud/list/CustomizableList/listUtils.tsx","lib/components/crud/list/CustomizableList/CustomizableListContext.ts","lib/components/crud/list/CustomizableList/customizableListReducer.ts","lib/components/crud/list/DefaultListActions.tsx","lib/components/crud/list/CustomizableList/CustomizableListActions.tsx","lib/components/crud/list/CustomizableList/CustomizableSelectionDialog.tsx","lib/components/crud/list/DefaultPagination.tsx","lib/components/crud/list/DummyListRowComponent.tsx","lib/components/crud/list/CustomizableList/CustomizableList.tsx","lib/components/crud/list/CustomizableList/CustomizableDatagrid.tsx","lib/components/crud/list/DefaultList.tsx","modules/bids/constants.ts","lib/components/ui/SectionTitleSubtitle.tsx","lib/components/crud/actions/DefaultShowAction.tsx","lib/components/crud/actions/DefaultEditAction.tsx","lib/components/crud/actions/DefaultCreateAction.tsx","lib/components/crud/DefaultCreate.tsx","lib/components/crud/DefaultEdit.tsx","lib/components/crud/DefaultShow.tsx","lib/modules/profile/UserPreferences.tsx","lib/modules/profile/ProfileEdit.tsx","lib/modules/profile/ProfileShow.tsx","modules/enquiries/constants.ts","modules/datasetup/items/items/constants.ts","modules/datasetup/items/itemsSegment/constants.ts","lib/modules/accounts/accounts/constants.ts","modules/datasetup/items/itemsClass/constants.ts","modules/datasetup/items/itemsClass/ItemClassList.tsx","modules/datasetup/items/itemsGroup/constants.ts","modules/datasetup/items/itemsClass/ItemClassForm.tsx","modules/datasetup/items/itemsClass/index.ts","modules/datasetup/items/itemsClass/ItemClassCreate.tsx","modules/datasetup/items/itemsClass/ItemClassEdit.tsx","modules/datasetup/items/itemsClass/ItemClassShow.tsx","modules/datasetup/items/itemsSegment/ItemSegmentForm.tsx","modules/datasetup/items/itemsSegment/ItemSegmentList.tsx","modules/datasetup/purchase-groups/constants.ts","modules/datasetup/purchase-groups/PurchaseGroupList.tsx","modules/datasetup/locations/constants.ts","modules/datasetup/purchase-groups/PurchaseGroupForm.tsx","modules/datasetup/purchase-groups/index.ts","modules/datasetup/purchase-groups/PurchaseGroupCreate.tsx","modules/datasetup/purchase-groups/PurchaseGroupEdit.tsx","modules/datasetup/purchase-groups/PurchaseGroupShow.tsx","modules/datasetup/items/itemsGroup/ItemGroupForm.tsx","modules/datasetup/items/itemsGroup/ItemGroupList.tsx","modules/datasetup/items/itemsGroup/index.ts","modules/datasetup/items/itemsGroup/ItemGroupCreate.tsx","modules/datasetup/items/itemsGroup/ItemGroupEdit.tsx","modules/datasetup/items/itemsGroup/ItemGroupShow.tsx","modules/datasetup/items/itemsSegment/index.ts","modules/datasetup/items/itemsSegment/ItemSegmentCreate.tsx","modules/datasetup/items/itemsSegment/ItemSegmentEdit.tsx","modules/datasetup/items/itemsSegment/ItemSegmentShow.tsx","modules/datasetup/category/constants.ts","modules/datasetup/unit-of-measure/constants.ts","modules/datasetup/category/CategoryForm.tsx","modules/datasetup/category/CategoryList.tsx","modules/datasetup/category/index.ts","modules/datasetup/category/CategoryCreate.tsx","modules/datasetup/category/CategoryEdit.tsx","modules/datasetup/category/CategoryShow.tsx","common/constants.ts","modules/datasetup/unit-of-measure/UomForm.tsx","modules/datasetup/unit-of-measure/UomList.tsx","modules/datasetup/unit-of-measure/index.ts","modules/datasetup/unit-of-measure/UomCreate.tsx","modules/datasetup/unit-of-measure/UomEdit.tsx","modules/datasetup/unit-of-measure/UomShow.tsx","modules/datasetup/items/items/styles.ts","modules/datasetup/items/items/ItemForm.tsx","modules/datasetup/items/items/ItemList.tsx","common/components/actions/ApprovalListRowActionButtons.tsx","modules/datasetup/currencies/constants.ts","common/components/fields/ApprovalStatusField.tsx","common/components/fields/RecordStatusField.tsx","common/components/fields/NameEmailField.tsx","modules/datasetup/business-functions/constants.ts","lib/components/validations/validationUtils.ts","lib/components/validations/dateValidations.ts","lib/components/validations/dependents.ts","lib/components/validations/uniqueValidation.ts","lib/components/validations/urlValidations.ts","modules/datasetup/currencies/CurrencyForm.tsx","modules/datasetup/currencies/CurrencyList.tsx","modules/datasetup/currencies/index.ts","modules/datasetup/currencies/CurrencyCreate.tsx","modules/datasetup/currencies/CurrencyEdit.tsx","modules/datasetup/currencies/CurrencyShow.tsx","common/components/fields/AmountField.tsx","common/components/fields/CustomerNameField.tsx","common/components/fields/VendorNameField.tsx","common/components/fields/QuantityField.tsx","common/components/fields/ItemDetailsInputAccordionField.tsx","common/components/fields/ProcureAccountField.tsx","common/components/fields/UserNameEmailField.tsx","modules/datasetup/vendors/constants.ts","modules/datasetup/business-functions/BusinessFunctionForm.tsx","modules/datasetup/business-functions/BusinessFunctionList.tsx","modules/datasetup/business-functions/index.ts","modules/datasetup/business-functions/BusinessFunctionsCreate.tsx","modules/datasetup/business-functions/BusinessFunctionEdit.tsx","modules/datasetup/business-functions/BusinessFunctionShow.tsx","common/components/filters/BusinessFunctionsListFilter.tsx","common/components/filters/ItemsListFilter.tsx","common/components/filters/ProcEntityRecordStatusFilterList.tsx","common/components/filters/ProcureApprovalStatusFilterList.tsx","common/components/filters/ProcureOwnerUserListFilter.tsx","common/components/input/ApprovalActionCommentsForm.tsx","common/utils/PermissionUtils.ts","common/utils/getProcEntityRecordStatusRowStyle.ts","modules/datasetup/locations/LocationForm.tsx","modules/datasetup/locations/LocationList.tsx","modules/datasetup/locations/index.ts","modules/datasetup/locations/LocationCreate.tsx","modules/datasetup/locations/LocationEdit.tsx","modules/datasetup/locations/LocationShow.tsx","modules/datasetup/items/items/components/ItemShowContainer.tsx","modules/datasetup/items/items/components/SingleItemShowContainer.tsx","modules/datasetup/items/items/index.ts","modules/datasetup/items/items/ItemCreate.tsx","modules/datasetup/items/items/ItemEdit.tsx","modules/datasetup/items/items/ItemShow.tsx","modules/datasetup/vendor-group/constants.ts","modules/requisitions/constants.ts","modules/datasetup/vendor-group/VendorGroupForm.tsx","modules/datasetup/vendor-group/VendorGroupList.tsx","modules/datasetup/vendor-group/index.ts","modules/datasetup/vendor-group/VendorGroupCreate.tsx","modules/datasetup/vendor-group/VendorGroupEdit.tsx","modules/datasetup/vendor-group/VendorGroupShow.tsx","modules/datasetup/vendors/components/VendorForm.tsx","modules/datasetup/vendors/components/VendorEditContainer.tsx","modules/datasetup/vendors/components/VendorListRowActionButtons.tsx","modules/datasetup/vendors/components/VendorShowContainer.tsx","modules/datasetup/vendors/components/SingleVendorShowContainer.tsx","modules/datasetup/vendors/VendorList.tsx","modules/datasetup/vendors/index.ts","modules/datasetup/vendors/VendorCreate.tsx","modules/datasetup/vendors/VendorEdit.tsx","modules/datasetup/vendors/VendorShow.tsx","modules/comments/constants.ts","modules/datasetup/org-structure/org-structure/constants.ts","modules/comments/components/CommentToolbar.tsx","modules/comments/components/CommentCreateButton.tsx","modules/comments/components/CommentListActions.tsx","modules/comments/components/CommentListFilters.tsx","modules/comments/components/SingleComment.tsx","modules/comments/components/CommentsIterator.tsx","modules/comments/components/CommentsList.tsx","modules/comments/components/CommentsAccordion.tsx","modules/requisitions/components/validations.ts","modules/datasetup/org-structure/org-structure-types/constants.ts","modules/datasetup/org-structure/org-user-groups/constants.ts","modules/datasetup/org-structure/org-user-groups/validations.ts","modules/bidsComparison/constants.ts","modules/datasetup/org-structure/org-user-groups/OrgUserGroupForm.tsx","modules/datasetup/org-structure/org-user-groups/OrgUserGroupList.tsx","modules/datasetup/org-structure/org-user-groups/index.ts","modules/datasetup/org-structure/org-user-groups/OrgUserGroupCreate.tsx","modules/datasetup/org-structure/org-user-groups/OrgUserGroupEdit.tsx","modules/datasetup/org-structure/org-user-groups/OrgUserGroupShow.tsx","modules/datasetup/org-structure/org-structure/OrgStructureForm.tsx","modules/datasetup/org-structure/org-structure/OrgStructureList.tsx","modules/datasetup/org-structure/org-structure/index.ts","modules/datasetup/org-structure/org-structure/OrgStructureCreate.tsx","modules/datasetup/org-structure/org-structure/OrgStructureEdit.tsx","modules/datasetup/org-structure/org-structure/OrgStructureShow.tsx","modules/datasetup/org-structure/org-structure-types/OrgStructureTypesForm.tsx","modules/datasetup/org-structure/org-structure-types/OrgStructureTypesList.tsx","modules/datasetup/org-structure/org-structure-types/index.js","modules/datasetup/org-structure/org-structure-types/OrgStructureTypesCreate.tsx","modules/datasetup/org-structure/org-structure-types/OrgStructureTypesEdit.tsx","modules/datasetup/org-structure/org-structure-types/OrgStructureTypesShow.tsx","modules/requisitions/components/RequisitionItemInputField.tsx","modules/requisitions/RequisitionForm.tsx","modules/requisitions/components/RequisitionListFilters.tsx","modules/requisitions/components/RequisitionListSideFilters.tsx","modules/requisitions/components/RequisitionListRowActionButtons.tsx","modules/requisitions/RequisitionList.tsx","modules/requisitions/RequisitionShow.tsx","modules/requisitions/index.ts","modules/requisitions/RequisitionCreate.tsx","modules/requisitions/RequisitionEdit.tsx","modules/enquiries/components/RequisitionSummaryContainer.tsx","modules/enquiries/components/EnquiryShowContainer.tsx","modules/enquiries/components/validations.ts","modules/enquiries/components/embeddedDataGridRowStyle.tsx","modules/enquiries/components/EnquiryBulkActionButtons.tsx","modules/enquiries/components/VendorsBulkActionButtons.tsx","modules/enquiries/components/EnquiryVendorsListFilters.tsx","modules/enquiries/components/EnquiryCreateContainer.tsx","modules/enquiries/components/EnquiryEditContainer.tsx","modules/enquiries/components/EnquiryShowBids.tsx","modules/enquiries/components/EnquiryTabbedDatagrid.tsx","modules/bidsComparison/components/types.ts","modules/bidsComparison/components/context/BidComparisonCalculationContext.ts","modules/bidsComparison/components/context/bidComparisonCalculationReducer.ts","modules/bidsComparison/components/BidsComparisonTable.tsx","modules/bidsComparison/components/BidsComparisonHeader.tsx","modules/bidsComparison/components/ManagePriceComponents.tsx","modules/bidsComparison/components/DisplayPriceComponentsTable.tsx","modules/bidsComparison/components/DisplayPriceComponents.tsx","modules/bidsComparison/components/BidsComparisonContainer.tsx","modules/bidsComparison/components/CustomBidComparisonToolbar.tsx","modules/bidsComparison/components/BidsComparisonView.tsx","modules/bidsComparison/index.ts","modules/bidsComparison/BidsComparisonEdit.tsx","modules/enquiries/components/EnquiryShowBidEnquiry.tsx","modules/enquiries/components/actions/EnquiryCrudShowActions.tsx","modules/enquiries/components/actions/EnquiryCrudEditActions.tsx","modules/enquiries/components/EnquiryListRowActionButtons.tsx","modules/enquiries/EnquiryCreate.tsx","modules/enquiries/EnquiryEdit.tsx","modules/enquiries/components/EnquiryListFilters.tsx","modules/enquiries/components/EnquiryListSideFilters.tsx","modules/enquiries/EnquiryShow.tsx","modules/enquiries/index.ts","modules/enquiries/EnquiryList.tsx","modules/bids/components/BidTabbedDatagrid.tsx","modules/bids/components/VendorBidForm.tsx","modules/bids/components/EnquirySummaryContainer.tsx","modules/bids/components/validations.ts","modules/bids/components/BidCreateContent.tsx","modules/bids/components/BidSummaryContainer.tsx","modules/bids/components/BidEditContent.tsx","modules/bids/components/BidShowContent.tsx","modules/bids/components/BidListSideFilters.tsx","lib/modules/utilities/media/constants.ts","modules/bids/components/BidListFilters.tsx","modules/bids/components/BidListRowActionButtons.tsx","modules/bids/components/actions/BidCrudShowActions.tsx","modules/bids/components/actions/BidCrudEditActions.tsx","modules/bids/index.ts","modules/bids/BidList.tsx","modules/bids/BidCreate.tsx","modules/bids/BidEdit.tsx","modules/bids/BidShow.tsx","lib/modules/utilities/media/components/MediaListFilters.tsx","lib/modules/utilities/media/components/MediaListSideFilters.tsx","lib/modules/utilities/media/components/MediaOwnerLinkField.tsx","lib/modules/utilities/media/MediaList.tsx","lib/modules/utilities/media/utils/S3FileUploader.ts","lib/modules/utilities/media/utils/transformAndUploadS3Files.ts","lib/modules/utilities/media/index.ts","lib/components/menu/SubMenu.tsx","lib/components/menu/GatedSubMenu.tsx","lib/components/menu/GatedMenuItemLink.tsx","lib/modules/utilities/UtilitiesMenu.tsx","lib/components/ui/EmptyState.tsx","lib/modules/accounts/permission-groups/constants.ts","lib/components/controls/inputs/media/UploadedFilesField.tsx","lib/components/layout/AppBar.tsx","lib/modules/accounts/permissions/constants.ts","lib/modules/accounts/permission-groups/PermissionGroupsForm.tsx","lib/modules/accounts/permission-groups/PermissionGroupsList.tsx","lib/modules/accounts/permission-groups/index.ts","lib/modules/accounts/permission-groups/PermissionGroupsCreate.tsx","lib/modules/accounts/permission-groups/PermissionGroupsEdit.tsx","lib/modules/accounts/permission-groups/PermissionGroupsShow.tsx","lib/modules/accounts/permissions/permissionsmanager/types.ts","lib/modules/accounts/permissions/PermissionForm.tsx","lib/modules/accounts/permissions/PermissionList.tsx","lib/modules/accounts/permissions/permissionsmanager/utils.ts","lib/modules/accounts/permissions/permissionsmanager/permissionsManagerReducer.ts","lib/modules/accounts/permissions/permissionsmanager/PermissionManagerContext.ts","lib/modules/accounts/roles/constants.ts","lib/modules/accounts/permissions/permissionsmanager/SinglePermission.tsx","lib/modules/accounts/permissions/permissionsmanager/PermissionsGridList.tsx","lib/modules/accounts/permissions/permissionsmanager/PermissionsGroup.tsx","lib/modules/accounts/permissions/permissionsmanager/PermissionsGroupContainer.tsx","lib/modules/accounts/permissions/ModifyRolePermissions.tsx","lib/modules/accounts/permissions/index.ts","lib/modules/accounts/permissions/PermissionEdit.tsx","lib/modules/accounts/permissions/PermissionShow.tsx","lib/modules/accounts/permissions/ShowRolePermissions.tsx","lib/modules/accounts/users/constants.ts","lib/modules/accounts/roles/RoleForm.tsx","lib/modules/accounts/roles/RoleList.tsx","lib/modules/accounts/roles/index.ts","lib/modules/accounts/roles/RoleCreate.tsx","lib/modules/accounts/roles/RoleEdit.tsx","lib/modules/accounts/roles/RoleShow.tsx","lib/modules/accounts/users/UserList.tsx","lib/modules/accounts/users/UserForm.tsx","lib/modules/accounts/users/UserCreate.tsx","lib/modules/accounts/users/index.ts","modules/datasetup/system-data/constants.ts","lib/modules/accounts/users/UserEdit.tsx","lib/modules/accounts/users/UserShow.tsx","lib/modules/accounts/AccountsMenu.tsx","modules/datasetup/system-data/SystemDataList.tsx","modules/datasetup/system-data/SystemDataForm.tsx","modules/datasetup/system-data/index.ts","modules/datasetup/system-data/SystemDataEdit.tsx","modules/datasetup/system-data/SystemDataShow.tsx","modules/datasetup/DatasetupMenu.tsx","common/layout/menu/ProcurementMenu.tsx","common/layout/menu/SalesMenu.tsx","lib/components/layout/AppMenu.tsx","lib/components/layout/Layout.tsx","lib/modules/accounts/accounts/AccountForm.tsx","lib/modules/accounts/accounts/AccountList.tsx","lib/modules/accounts/accounts/index.ts","lib/modules/accounts/accounts/AccountCreate.tsx","lib/modules/accounts/accounts/AccountEdit.tsx","lib/modules/accounts/accounts/AccountShow.tsx","routes.tsx","modules/dashboard/DefaultDashboardCard.tsx","modules/dashboard/Dashboard.tsx","App.tsx","reportWebVitals.ts","index.tsx","lib/core/providers/inMemoryJWTManager.ts"],"names":["customEnglishMessages","englishMessages","en","resources","accounts","datasetup","utilities","common","components","i18nProvider","polyglotI18nProvider","locale","dark","createTheme","merge","defaultTheme","typography","fontFamily","fontSize","palette","primary","main","secondary","type","overrides","MuiAppBar","colorSecondary","color","backgroundColor","MuiButtonBase","root","content","display","width","height","position","top","right","opacity","borderRadius","props","disableRipple","light","join","contrastText","background","default","shape","RaMenuItemLink","borderLeft","active","MuiPaper","elevation1","boxShadow","border","backgroundClip","MuiButton","contained","MuiLinearProgress","colorPrimary","barColorPrimary","MuiFilledInput","MuiSnackbarContent","darkTheme","responsiveFontSizes","lightTheme","Logo","theme","useTheme","viewBox","process","style","lineHeight","fontWeight","letterSpacing","wordSpacing","strokeWidth","fill","transform","id","d","useStyles","makeStyles","flexDirection","minHeight","alignItems","justifyContent","backgroundRepeat","backgroundSize","backgroundImage","appbar","paddingTop","card","minWidth","marginTop","avatar","margin","icon","appBarTitle","flex","textOverflow","whiteSpace","overflow","alignSelf","spacer","title","pxToRem","titleMessage","grey","name","UnauthenticatedLayout","children","classes","containerRef","useRef","muiTheme","useMemo","backgroundImageLoaded","useEffect","lazyLoadBackgroundImage","updateBackgroundImage","current","img","Image","onload","src","ThemeProvider","className","Typography","variant","classnames","ref","Card","Avatar","Notification","LoginPage","LoginForm","url","form","textAlign","padding","input","actions","button","success","marginBottom","SuccessMessage","Button","component","Link","to","InputForm","handleSubmit","isSubmitting","onSubmit","autoFocus","renderInput","label","disabled","CardActions","fullWidth","CircularProgress","size","thickness","meta","touched","error","undefined","rest","TextField","helperText","Alert","elevation","PERMISSION_MODE","loading","noValidate","inputProps","usePermissionsCheck","usePermissions","permissionsLoaded","loaded","permissions","identity","useGetIdentity","hasPermissionAccess","useCallback","permissionNames","permissionMode","ANY","hasResourceAccess","permissionsToCheck","Array","isArray","some","permission","includes","ALL","every","hasOwnOrAccountAccess","accountPermissionNames","ownPermissionNames","targetAccountId","targetOwnerId","doesTargetAccountIdMatch","accountId","doesTargetOwnerIdMatch","isSystemAdmin","isSystemUser","countHeader","toLowerCase","prepareQuery","params","pagination","JSON","stringify","sort","filter","hasAccess","askedPermissions","isPublicUrl","isMatchingResetPath","matchPath","window","location","hash","currentLocation","apiUrl","clearLocalAuthInfo","localStorage","removeItem","restAuthProvider","login","a","username","password","request","Request","method","body","credentials","headers","Headers","fetch","response","status","Error","statusText","json","user","accessToken","refreshValidityTimeStamp","restUser","setItem","inMemoryJWTManager","setToken","checkError","console","log","eraseToken","Promise","reject","redirectTo","message","resolve","checkAuth","waitForTokenRefresh","then","logout","getIdentity","fullName","localUserStr","getItem","localUser","parse","firstName","lastName","isActive","getPermissions","userStr","httpClient","options","Accept","token","getToken","fetchUtils","fetchJson","getRefreshedToken","gotFreshToken","unCachedDataProvider","getList","resource","query","totalValStr","get","totalValue","parseInt","has","data","total","getOne","getMany","ids","getManyReference","target","update","updateMany","all","map","responses","create","catch","errorMessage","HttpError","delete","deleteMany","restDataProvider","dataProvider","cacheDataProviderProxy","LocalUser","getUserId","getLocalUser","readLocalUser","hasDarkTheme","settings","changeLocalTheme","isDarkTheme","themeName","saveLocalUser","saveName","this","COMMON_DATE_TIME_FORMAT","weekday","year","month","day","hour","minute","second","DATE_FORMAT_STANDARD_DAY","DATE_FORMAT_STANDARD_DATE_TIME","DownloadReportFileButton","downloadPath","downloadPermissionName","tooltip","translate","useTranslate","hasDownloadPermission","downloadUrl","Tooltip","href","marginLeft","marginRight","rel","paddingRight","RefetchIconButton","defaultIcon","onClick","buttonClassName","refetch","useListContext","handleClick","event","preventDefault","_","IconButton","spacing","paddingBottom","paddingLeft","HistoryBackButton","history","useHistory","goBack","ListVerticalActionMenuButton","isSmall","useMediaQuery","breakpoints","down","useState","anchorEl","setAnchorEl","handleClose","currentTarget","Menu","keepMounted","open","Boolean","onClose","Children","menuItem","isValidElement","cloneElement","closeMenu","text","ListVerticalActionMenuItemButton","leftIcon","primaryText","handleMenuTap","e","placement","MenuItem","ListItemIcon","titleAccess","SecondaryActionLinkButton","cursor","TruncatedTextField","record","source","truncateLength","showTooltip","fullText","truncateText","length","substring","arrow","customWidth","maxWidth","defaultProps","LabelField","memo","value","emptyText","sanitizeFieldRestProps","displayName","addLabel","stopPropagation","ResourceLinkedField","link","linkedResource","linkedResourceIdSource","basePath","useRecordContext","resourceLinkPath","getResourceLinkPath","reference","StyledAccordionSummary","withStyles","AccordionSummary","AccordionField","headerTooltip","headerlabel","defaultExpanded","detailsClassName","Accordion","TransitionProps","unmountOnExit","expandIcon","AccordionDetails","CompletedTime","renderer","days","hours","minutes","seconds","completed","Box","gridAutoFlow","gridColumnGap","DateCountdownField","gridRowGap","DateField","date","leftPad","nb","repeat","slice","leftPad4","leftPad2","dateTimeRegex","convertDateToString","Date","isNaN","getDate","yy","getFullYear","MM","getMonth","dd","hh","getHours","mm","getMinutes","Picker","PickerComponent","fieldProps","defaultValue","format","initialValue","validate","isRequired","providerOptions","cancelLabel","clearLabel","pickerVariant","stringFormat","useInput","submitError","handleChange","onChange","toISOString","toString","InputLabelProps","shrink","FieldTitle","inputVariant","InputHelperText","onBlur","test","utils","DateFnsUtils","DateInput","DatePicker","DateTimeInput","DateTimePicker","UserFormMessage","line1","line2","mt","chip","SearchFilter","alwaysOn","TextInput","resettable","InputProps","endAdornment","InputAdornment","IdFilter","required","StatusItem","statusLabel","statusValue","statusColor","getColorFromStatus","bgcolor","StatusFilterList","statusFieldName","statusList","FilterList","statusEntry","FilterListItem","FixedDateRangeFilterList","gteSource","lteSource","dateRangeList","dateRange","gte","lte","getTabbedFormProps","initialValues","mutationMode","redirect","sanitizeEmptyValues","save","submitOnEnter","syncWithLocation","tabs","toolbar","undoable","warnWhenUnsavedChanges","DEFAULT_PER_PAGE","MAX_RECORDS_PER_PAGE","DEFAULT_DATE_TIME_OPTIONS","showTodayButton","clearable","ALLOWED_FILE_TYPES","DEFAULT_FILE_FIELD_OPTIONS","MediaInputField","showUploadedFiles","showSectionTitle","sectionTitle","sectionSubtitle","multiple","placeholder","accept","maxSize","fileFieldOptions","subTitle","FileInput","FileField","FilenameField","download","originalFileName","ListRowActionButtonsActionTypes","borderStyle","borderWidth","note","fontStyle","FileInputPlaceholder","fileDescription","maxFileSize","fileDescriptionLabel","maxFileSizeLabel","line3","createStyles","emptyStateContainer","emptyStateIcon","MediaEmptyState","Icon","MediaIcon","iconClassName","validateFirstName","minLength","maxLength","validateLastName","validatePassword","matchPassword","allValues","styles","clearWithFloatLeft","float","clear","floatLeftWithMarginLeft","marginTop20","actionButton","inlineGridWith50PercentWidth","up","ProfileActions","buttonTitle","SingleListRowAction","shouldDisplay","extraDisplayData","permissionKey","permissionName","translatedTooltip","tooltipTitle","shouldShowAction","setShouldShowAction","keyValue","shouldDisplayAction","getShouldDisplay","SpeedDialAction","key","clickEvent","tooltipPlacement","ListRowActionButtonsContext","createContext","fabPrimary","RedirectListRowAction","calculateRedirectPath","useRedirect","useResourceDefinition","actionClassName","canAccess","setCanAccess","actionPermissionName","allowedPermissions","dispatch","useContext","handleRedirectAction","CLOSE_SPEED_DIAL","redirectPath","fabError","DeleteListRowActionButton","deletePermissionName","canDelete","setCanDelete","useDeleteWithConfirmController","handleDialogOpen","handleDialogClose","handleDelete","openConfirmDialog","confirm","onConfirm","CLOSE_CONFIRM","confirmColor","CancelIcon","CancelTwoToneIcon","cancel","OPEN_CONFIRM","payload","DefaultCrudListRowActions","hasEdit","hasShow","showPermissionName","show","editPermissionName","shouldDisplayShow","shouldDisplayEdit","shouldDisplayDelete","calculateShowRedirectPath","calculateEditRedirectPath","extraShowDisplayData","extraEditDisplayData","extraDeleteDisplayData","hasEditPermission","hasShowPermission","displayDeleteButton","keyPrefix","defaultActions","push","linkToRecord","defaultAction","CrudActionType","EMPTY_CONFIRM_HANDLER","ConfirmListViewActionButton","onConfirmHandler","confirmProps","zIndex","flexGrow","speedDial","fabSecondary","ListRowActions","state","overriddenListRowActions","listRowActions","isSpeedDialOpen","setSpeedDialOpen","handleSpeedDialClose","SpeedDial","ariaLabel","SpeedDialIcon","onOpen","OPEN_SPEED_DIAL","direction","openIcon","FabProps","listRowAction","index","isConfirmOpen","Confirm","isOpen","onConfirmClose","handleConfirmClose","prepareListRowActionButtonsInitialState","from","listRowActionButtonsReducer","action","INIT","HANDLE_CONFIRM_ACTION","SET_LIST_ROW_ACTIONS","CUSTOMIZABLE_LIST_STORAGE_KEY","getRootValue","storageKey","compressedValue","setRootValue","isEmpty","stringValue","LocalStorage","set","oldValue","remove","rootValue","ListActionBreadcrumb","resourceLabel","Breadcrumbs","RouterLink","smart_count","CustomizableListActionTypes","actionIcons","CREATE","ContentAddIcon","EDIT","ContentCreateIcon","SHOW","ImageEyeIcon","CrudActionBreadcrumb","listPath","actionType","actionIcon","ActionIcon","prepareModifiedListProps","otherProps","listPermissionName","list","createPermissionName","hasList","hasCreate","prepareColumnKey","columnKey","isDisplayed","arrayToSelection","defaultColumns","column","getInitialCustomizableListSelection","storage","previousSelection","field","getColumnNames","initializeDataGrid","originalFieldsList","selection","fieldsList","targetSelection","sortChildren","sortedNodeChildren","toArray","forEach","child","childKey","displayedColumnKey","hiddenColumnKey","oldDataColumnPosition","shouldColumnBeDisplayed","columnPosition","displayedColumnPosition","lastIndexOf","hiddenColumnPosition","extraAttributes","datacolumnposition","dataisdisplayed","modifiedElement","b","firstDataColumnPosition","secondDataColumnPosition","firstSource","secondSource","recalculateFields","columns","childrenArr","columnsList","prepareColumns","prepareListRowActions","modifiedProps","CustomizableListContext","customizableListReducer","INIT_DATAGRID","SET_COLUMNS","COLUMN_TOGGLED","columnName","isColumnDisplayed","toggledSelection","toggleColumnDisplay","handleToggleColumn","RESET_ALL","resourceName","SAVE_COLUMNS_STATE","newSelection","saveSelectionState","OPEN_DIALOG","CLOSE_DIALOG","DefaultListActions","exporter","filters","currentSort","displayedFilters","filterValues","selectedIds","showFilter","useResourceContext","TopToolbar","sanitizeListRestProps","context","CreateButton","ExportButton","onUnselectItems","CustomizableListActions","donotdrag","drag","Transition","forwardRef","Slide","CustomizableSelectionDialog","selectionLabel","selectionText","refresh","useRefresh","selectionLabelString","selectionTextString","CustomFormGroup","FormGroup","handleColumnToggled","Dialog","TransitionComponent","DialogTitle","DialogContent","DialogContentText","tag","setList","dataIsDisplayed","childClassName","FormControlLabel","control","Checkbox","checked","DialogActions","DefaultPagination","Pagination","rowsPerPageOptions","DummyListRowComponent","defaultListRowActions","newListRowActions","CustomizableList","listContextInitialState","datagridStorage","prepareCustomizableListContextInitialState","listRowActionButtonsInitialState","useReducer","customizableListState","customizableListDispatch","listRowActionButtonsState","listRowActionButtonsDispatch","listContextValue","listRowActionButtonsContextValue","pt","Provider","List","Loading","perPage","CustomizableDatagrid","Datagrid","DefaultList","showBreadcrumbs","PermissionBids","SectionTitleSubtitle","paddingY","gutterBottom","DefaultShowAction","useShowContext","ListButton","EditButton","DefaultEditAction","ShowButton","DefaultCreateAction","DefaultCreate","setHasList","setHasCreate","DefaultEdit","setHasShow","Edit","DefaultShow","setHasEdit","Show","UserPreferences","setDarkTheme","changeTheme","Title","CardContent","startIcon","UserProfileEditTitle","ProfileEdit","userId","SaveProfileButton","notify","useNotify","useUpdate","RESOURCE_NAME_USER","saveProfile","handleSave","values","localUserData","version","onSuccess","SaveButton","onSave","CustomToolbar","Toolbar","restProps","staticContext","FormTab","formClassName","validation","EmailField","path","PasswordInput","autoComplete","UserProfileShowTitle","ProfileShow","SimpleShowLayout","RESOURCE_NAME_BID","PermissionEnquiries","DatagridColors","RESOURCE_NAME_ENQUIRY","RESOURCE_NAME_ENQUIRY_DETAILS","RESOURCE_NAME_ENQUIRY_VENDORS","ItemAbcIndicator","RESOURCE_NAME_ITEM","PermissionItems","ABC_INDICATOR_CHOICES","PermissionItemSegments","RESOURCE_NAME_ITEM_SEGMENTS","PermissionAccounts","RESOURCE_NAME_ACCOUNT","PermissionItemClasses","accountsPermissions","menu","MENU_ACCOUNT","LIST_ACCOUNTS","CREATE_ACCOUNT","EDIT_ACCOUNT","SHOW_ACCOUNT","DELETE_ACCOUNT","RESOURCE_NAME_ITEM_CLASS","PermissionItemGroups","ListFilters","Filter","number","description","ItemClassForm","isEdit","SimpleForm","ReferenceInput","order","excludeIds","parent","AutocompleteInput","optionText","allowEmpty","SectionTitle","MENU_ITEM_CLASSES","LIST_ITEM_CLASSES","CREATE_ITEM_CLASS","EDIT_ITEM_CLASS","SHOW_ITEM_CLASS","DELETE_ITEM_CLASS","import","IMPORT_ITEM_CLASSES","itemsClassResource","optimized","RichTextField","ReferenceField","BooleanField","transformAndUploadS3Files","subFolder","edit","CategoryIcon","class","ItemSegmentForm","group","ReferenceArrayInput","AutocompleteArrayInput","optionValue","RESOURCE_NAME_ITEM_GROUPS","PermissionPurchaseGroups","RESOURCE_NAME_PURCHASE_GROUPS","PermissionLocations","formClass","PurchaseGroupForm","PurchaseGroupPermissions","MENU_PURCHASE_GROUP","LIST_PURCHASE_GROUPS","CREATE_PURCHASE_GROUP","EDIT_PURCHASE_GROUP","SHOW_PURCHASE_GROUP","DELETE_PURCHASE_GROUP","purchaseGroupResource","GroupIcon","ItemGroupForm","MENU_ITEM_GROUPS","LIST_ITEM_GROUPS","CREATE_ITEM_GROUP","EDIT_ITEM_GROUP","SHOW_ITEM_GROUP","DELETE_ITEM_GROUP","IMPORT_ITEM_GROUPS","itemsGroupResource","sortable","ReferenceArrayField","SpeakerGroupIcon","MENU_ITEM_SEGMENTS","LIST_ITEM_SEGMENTS","CREATE_ITEM_SEGMENT","EDIT_ITEM_SEGMENT","SHOW_ITEM_SEGMENT","DELETE_ITEM_SEGMENT","IMPORT_ITEM_SEGMENTS","itemsSegmentResource","StraightenIcon","RESOURCE_NAME_LOCATION","CategoryTypes","RESOURCE_NAME_CATEGORY","PermissionCategory","CATEGORY_TYPE_CHOICES","PermissionUoms","CategoryForm","RadioButtonGroupInput","choices","SelectInput","CategoryPermissions","MENU_CATEGORY","LIST_CATEGORIES","CREATE_CATEGORY","EDIT_CATEGORY","SHOW_CATEGORY","DELETE_CATEGORY","categoryResource","SelectField","RESOURCE_NAME_UOM","FILTER_DIRECTION","account","unitType","unitSystem","UomForm","fullWid","UOM_MENU","LIST_UOMS","CREATE_UOM","EDIT_UOM","SHOW_UOM","DELETE_UOM","IMPORT_UOMS","uomResource","DonutLargeIcon","useFormStyles","generalTab","gap","gridTemplateColumns","gridTemplateAreas","gridArea","procurementTab","validateNumber","ItemForm","contentClassName","categoryType","ITEM","NumberInput","ApprovalListRowActionButtons","translationResourceName","procureStatus","procureApprovalStatus","canUserAccess","canUserLevel1Approve","canLevel1Approve","canUserLevel2Approve","canLevel2Approve","isStatusDraft","ProcEntityRecordStatus","DRAFT","isStatusWaitingForApproval","WAITING_FOR_APPROVAL","isStatusInProgress","IN_PROGRESS","isApprovalStatusPendingSubmission","ProcureApprovalStatus","PENDING_SUBMISSION","isApprovalStatusLevel1ApprovalPending","LEVEL_1_APPROVAL_PENDING","isApprovalStatusLevel2ApprovalPending","LEVEL_2_APPROVAL_PENDING","isApprovalStatusApprovalPending","canUserApprove","canUserApproveAnyLevel","isRecordStatusOnHold","ON_HOLD","isRecordStatusRejected","REJECTED","shouldDisplaySubmitAction","shouldShow","shouldDisplayApproveAction","shouldDisplayRejectAction","shouldDisplayOnHoldAction","shouldDisplayCancelAction","shouldDisplayReopenAction","changeStatus","notifySuccessMessage","notifyFailureMessage","hasComment","comment","onFailure","htmlColor","APPROVAL_ACTION_STATUS_COLORS","APPROVAL_ACTIONS","SUBMIT","confirmMessage","commentSubtext","commentLabel","commentHelpText","ConfirmIcon","SubmitIcon","APPROVE","ApproveIcon","REJECT","RejectIcon","OnHoldIcon","REOPEN","ReopenIcon","CANCEL","PermissionBehavior","PermissionCurrencies","PROC_ENTITY_RECORD_STATUS_CHOICES","APPROVED","COMPLETED","CANCELLED","PROCURE_APPROVAL_STATUS_CHOICES","PROC_ENTITY_RECORD_STATUS_COLORS","PROCURE_APPROVAL_STATUS_COLORS","procEntityRecordFiltersList","procureApprovalStatusFiltersList","ApprovalStatusField","useLabel","Labeled","RecordStatusField","NameEmailField","nameFieldSource","emailFieldSource","nameFieldLabel","emailFieldLabel","fieldLabel","RESOURCE_NAME_CURRENCIES","PermissionBusinessFunctions","memoize","fn","lodashMemoize","args","getMessage","messageArgs","isDateGreaterThan","targetDate","dateValue","isValidDate","isValid","isAfter","isDateLessThanOther","targetDateField","isBefore","isDateNotLessThanToday","requiredIf","otherFieldName","Object","assign","requiredIfTrue","trueCondition","isSameAs","serverUrl","checkIsFieldUnique","performOwnIdCheck","uniqueCheckUrl","ownId","isRequestSuccess","isUnique","isUniqueField","URL_REGEX","isUrl","regex","symbol","CurrencyForm","multiline","CURRENCIES_MENU","LIST_CURRENCIES","CREATE_CURRENCY","EDIT_CURRENCY","SHOW_CURRENCY","DELETE_CURRENCY","currencyResource","MoneyIcon","AmountField","amountSource","currencySoure","NumberField","CustomerNameField","VendorNameField","quantity","uomId","QuantityField","uomSource","ItemDetailsInputAccordionField","summaryClassName","setChecked","itemsAccordion","itemId","expandIconContainer","prev","expandIconSelected","expandIconUnselected","Fade","in","Paper","procureAccountId","left","transition","ProcureAccountField","showLink","accountResource","UserNameEmailField","usersResource","RESOURCE_NAME_ONLY_USER","RESOURCE_NAME_BUSINESS_FUNCTIONS","PermissionVendors","BusinessFunctionForm","businessFunctionPermissions","MENU_BUSINESS_FUNCTION","LIST_BUSINESS_FUNCTIONS","CREATE_BUSINESS_FUNCTION","EDIT_BUSINESS_FUNCTION","SHOW_BUSINESS_FUNCTION","DELETE_BUSINESS_FUNCTION","businessFunctionResource","BusinessCenterIcon","BusinessFunctionsListFilter","ItemsListFilter","ProcEntityRecordStatusFilterList","ProcureApprovalStatusFilterList","ProcureOwnerUserListFilter","container","subTitle2","ApprovalActionCommentsForm","FormControl","rows","isMatchingAccount","itemKey","itemStr","getLocalStorageItem","getProcEntityRecordStatusRowStyle","recordStatusColor","borderLeftColor","borderLeftWidth","borderLeftStyle","LocationForm","locationPermissions","MENU_LOCATION","LIST_LOCATIONS","CREATE_LOCATION","EDIT_LOCATION","SHOW_LOCATION","DELETE_LOCATION","locationResource","LocationOnIcon","ItemShowContainer","shouldSyncWithLocation","shouldNotSyncWithLocation","isProcureAccount","linkType","SingleItemShowContainer","showProps","controllerProps","useShowController","ResourceContextProvider","ShowContextProvider","itemsPermissions","MENU_ITEMS","LIST_ITEMS","CREATE_ITEM","EDIT_ITEM","SHOW_ITEM","DELETE_ITEM","IMPORT_ITEMS","itemResource","NoteIcon","RESOURCE_NAME_VENDOR","FILTER_NAME_GLOBAL_VENDORS","VENDOR_ACTIONS","PermissionVendorGroup","RESOURCE_NAME_VENDOR_GROUP","PermissionRequisitions","VendorGroupForm","VendorGroupPermissions","MENU_VENDOR_GROUP","LIST_VENDOR_GROUPS","CREATE_VENDOR_GROUP","EDIT_VENDOR_GROUP","SHOW_VENDOR_GROUP","DELETE_VENDOR_GROUP","vendorGroupResource","PeopleAltIcon","vendorForm","phone","VendorForm","validateName","validateEmail","email","Grid","lg","md","item","VENDOR","Divider","ArrayInput","SimpleFormIterator","Separator","VendorEditContainer","VendorListRowActionButtons","isGlobalFilterSelected","userAccountId","EDIT_VENDOR","SHOW_VENDOR","ownVendorExtraDisplayData","handleVendorAction","vendorAction","isAddAsOwnVendor","String","ADD_AS_OWN_VENDOR","multiLine","autoHideDuration","shouldDisplayEditOrDeleteAction","primaryProcureAccountId","isVendorOwnedByUserAccount","shouldDisplayAddAsOwnVendorAction","shouldDisplayRemoveAsOwnVendorAction","isVendorNotOwnedByUserAccount","addAsOwnVendorConfirm","removeAsOwnVendorConfirm","CAN_LINK_GLOBAL_VENDORS","CAN_UNLINK_GLOBAL_VENDORS","REMOVE_AS_OWN_VENDOR","layout","phonesList","section","VendorShowContainer","ArrayField","SingleFieldList","UrlField","SingleVendorShowContainer","vendorId","BooleanInput","vendorPermissions","MENU_VENDOR","LIST_VENDORS","DELETE_VENDOR","CREATE_VENDOR","IMPORT_VENDORS","vendorResource","DateRangeIcon","RESOURCE_NAME_REQUISITION","RESOURCE_NAME_REQUISITION_DETAILS","PermissionComments","OwnerEntityTypes","CommentType","RESOURCE_NAME_COMMENT","PermissionOrgStructure","ORG_STRUCTURE_USER_GROUP_TYPE","CommentToolbar","onCancel","alwaysEnableSaveButton","CommentCreateButton","ownerEntityType","ownerEntityId","isDialogOpen","setIsDialogOpen","commentType","INTERNAL","autofocus","CommentListActions","isViewOnly","hasCreateAccess","setHasCreateAccess","CREATE_COMMENT","SortButton","fields","CommentListFilters","metadata","buttons","paragraph","body1","visibility","SingleComment","isHover","setHover","isEditing","setEditing","hasEditCommentAccess","EDIT_ANY_COMMENT","EDIT_OWN_COMMENT","ownerId","hasDeleteCommentAccess","DELETE_ANY_COMMENT","DELETE_OWN_COMMENT","useDelete","onMouseEnter","onMouseLeave","showTime","locales","dateStyle","timeStyle","timeline","paddingInlineStart","evenBg","oddBg","alignLeft","missingOppositeContent","before","CommentsIterator","Timeline","align","isOdd","TimelineItem","TimelineSeparator","TimelineDot","TimelineConnector","TimelineContent","ChatBubbleIcon","LinearProgress","CommentsList","empty","filterDefaultValues","limit","commentsAccordion","CommentsAccordion","validations","code","RESOURCE_NAME_ORG_STRUCTURE","PermissionOrgStructureTypes","RESOURCE_NAME_ORG_STRUCTURE_TYPES","PermissionOrgUserGroup","OrgUserGroupType","RESOURCE_NAME_ORG_USER_GROUP","PermissionBidsComparison","validateLevel1ApprovalGroupName","validateLevel2ApprovalGroupName","validateUsers","OrgUserGroupForm","MENU_ORG_USER_GROUP","LIST_ORG_USER_GROUPS","CREATE_ORG_USER_GROUP","EDIT_ORG_USER_GROUP","SHOW_ORG_USER_GROUP","DELETE_ORG_USER_GROUP","OrgUserGroupsResource","ChipField","GroupWorkIcon","OrgStructureForm","orgStructureTypeId","setOrgStructureTypeId","MENU_ORG_STRUCTURE","LIST_ORG_STRUCTURE","CREATE_ORG_STRUCTURE","EDIT_ORG_STRUCTURE","SHOW_ORG_STRUCTURE","DELETE_ORG_STRUCTURE","IMPORT_ORG_STRUCTURES","orgStructureResource","TabbedShowLayout","BusinessIcon","OrgStructureTypesForm","OrgStructureTypesPermissions","MENU_ORG_STRUCTURE_TYPE","LIST_ORG_STRUCTURE_TYPES","CREATE_ORG_STRUCTURE_TYPE","EDIT_ORG_STRUCTURE_TYPE","SHOW_ORG_STRUCTURE_TYPE","DELETE_ORG_STRUCTURE_TYPE","OrgStructureTypesResource","RequisitionItemInputField","getSource","existingItemIds","setExistingItemIds","currentItemId","setCurrentItemId","useGetOne","enabled","currentItem","currentItemLoaded","processItemId","useForm","requisitionDetails","getState","itemIds","Set","trim","specifications","newRequisitionDetails","recordItemId","change","orgStructureType","REQUISITIONS","clearAlwaysVisible","suggestionLimit","columnGap","activityContainer","businessFunctionId","field1","field2","field3","formIterator","remarksAccordion","requisitionDetailSection","rowGap","quantity2","itemsArrayContainer","overflowX","RequisitionForm","savedItemIds","useFormState","addExistingItemIds","showRequisitionDetails","FormDataConsumer","formData","scopedFormData","showUnitPrice2","REQUISITION","RequisitionListFilters","SelectArrayInput","RequisitionListSideFilters","cardClasses","useCardStyles","FilterLiveSearch","updatedSinceDatesList","needsUserApproval","canPerformAction","DATE_FORMAT_DAY","endOfYesterday","startOfWeek","startOfMonth","endOfMonth","subMonths","RequisitionListRowActionButtons","hasShowRequisitionAccess","SHOW_ANY_REQUISITION","SHOW_OWN_REQUISITION","procureOwnerUserId","hasEditRequisitionAccess","EDIT_OWN_REQUISITION","EDIT_ANY_REQUISITION","hasDeleteRequisitionAccess","DELETE_OWN_REQUISITION","DELETE_ANY_REQUISITION","canPerformCreateEnquiryAction","isStatusWaitingDraft","isStatusApproved","isApprovalStatusApproved","shouldDisplayEditAction","shouldDisplayDeleteAction","shouldDisplayCreateEnquiryAction","shouldAllowCreateEnquiryAction","enquiryResource","itemsGrid","requisitionPermissions","REQUISITION_MENU","LIST_REQUISITIONS","CREATE_REQUISITION","IMPORT_REQUISITIONS","requisitionResource","useDispatch","setSidebarVisibility","aside","rowStyle","useGetList","page","requisitionId","allRequisitionDetails","allRequisitionDetailIds","requisitionDetailId","requisition","ShowDetail","pl","mb","bulkActionButtons","expand","py","EqualizerIcon","gridGap","RequisitionSummaryContainer","hasBusinessFunctionListAccess","EnquiryShowContainer","permissionsLoading","hasRequisitionShowAccess","ReferenceManyField","conditions","remarks","ENQUIRY","bidStartDate","bidEndDate","preferredDeliveryDate","embeddedDataGridRowStyle","hasId","UNSELECTED_BG_COLOR","UNSELECTED_COLOR","SELECTED_BG_COLOR","SELECTED_COLOR","addItemsToEnquiry","removeItemsFromEnquiry","AddItemsToEnquiryBulkActionButton","unselectAll","useUnselectAll","handleAddItemsToEnquiry","itemsToAddMap","Map","selectedId","enquiryId","isNew","enquiryDetail","uom2Id","sortOrder","RemoveItemsFromEnquiryBulkActionButton","handleRemoveItemsFromEnquiry","EnquiryBulkActionButtons","addVendorsToEnquiry","removeVendorsFromEnquiry","AddVendorsToEnquiryBulkActionButton","handleAddVendorsToEnquiry","RemoveVendorsFromEnquiryBulkActionButton","handleRemoveVendorsFromEnquiry","VendorsBulkActionButtons","ItemListFilters","VendorListFilters","vendor","arrayInput","arrayField","enquiryLayout1","enquiryLayout2","useArrayInputStyles","EnquiryCreateContainer","arrayInputClasses","requestRequisitionId","URLSearchParams","useLocation","search","selectedRequisitionId","setSelectedRequisitionId","enquiryDetailsMap","setEnquiryDetailsMap","vendorIds","setVendorIds","openRequisitions","RecordContext","openRequisitionDetailsForEnquiry","newEnquiriesDetailsMap","enquiryDetails","newVendorIds","indexOf","newRecordIndex","splice","EnquiryEditContainer","selectedEnquiryId","setSelectedEnquiryId","requisitionEnquiryDetailIdsMap","setRequisitionEnquiryDetailIdsMap","enquiriesLoaded","useEditContext","originalRequisitionEnquiryDetailIdsMap","setOriginalRequisitionEnquiryDetailIdsMap","addedEnquiryDetailsMap","setAddedEnquiryDetailsMap","removedEnquiryDetailIds","setRemovedEnquiryDetailIds","originalVendorIds","setOriginalVendorIds","addedVendorIds","setAddedVendorIds","removedVendorIds","setRemovedVendorIds","existingEnquiryDetails","existingEnquiryDetailIds","existingEnquiryDetailsLoaded","allVendors","allVendorIds","allVendorsLoaded","enquiryVendors","enquiryVendorIds","enquiryVendorsLoaded","prepareAllVendors","allVendorsMap","enquiryVendorIdsList","enquiryVendorId","enquiryVendorRecord","enquiryVendorRecordVendorId","allVendorRecord","newEnquiryVendorRecord","vendorAccount","primaryUser","vendorRecord","vendorAccountId","newEnquiryDetailsMap","existingRequisitionDetailIdToEnquiryDetailsIdMap","enquiryDetailId","existingEnquiryDetailsRecord","enquiryDetailRecord","prepareExistingEnquiryDetails","enquiryVendorsMap","newEnquiryVendorsMap","existingEnquiriesVendorIdsList","prepareExistingVendors","setAllVendorsMap","newAddedEnquiryDetailsMap","newRemoveEnquiryDetailIds","changedEnquiryDetails","added","removed","requisitionDetailIds","newRemovedVendorIds","newAddedVendorIds","allVendorsRecord","newVendorRecord","vendorChanges","toggledVendorId","EnquiryShowBids","SENT","RECEIVED","showEnquiryDetail","RESOURCE_NAME_BIDS_COMPARISON","COLOR_ODD_CELL","indigo","COLOR_EVEN_CELL","COLOR_HIGHLIGHT_CELL","lightGreen","COLOR_OPTIMAL_BACKGROUND_CELL","orange","COLOR_OPTIMAL_FOREGROUND_CELL","BidComparisonCalculationActionTypes","unitTypeChoices","BidComparisonCalculationContext","bidComparisonCalculationReducer","newState","LOADING_BID_CALCULATIONS","isLoading","shouldRecalculate","ENQUIRY_LOADED","excludedItemIds","excludedVendorAccountIds","priceComponents","BID_COM_DATA_POPULATE","bidsComparisonCalc","hasData","summary","ITEM_TOGGLED","newExcludedItemIds","add","VENDOR_ACCOUNT_TOGGLED","newExcludedVendorAccountIds","vendorAccounts","OPEN_MANAGE_PRICE_COMPONENTS_DIALOG","isManagePriceComponentsDialogOpen","CLOSE_MANAGE_PRICE_COMPONENTS_DIALOG","RECALCULATE_PRICE_COMPONENTS","tableContainer","tableWrapper","maxHeight","table","borderSpacing","firstColumn","vendorCell","oddCell","evenCell","headerCell","dataCell","normalValue","bestValue","optimal","excludedDataContainer","excludedDataSelect","ValueCell","isEvenRow","valueClassName","colorClassName","TableCell","nf","Intl","NumberFormat","BidsComparisonTable","enquiry","COLSPAN_TITLE","COLSPAN_VENDOR","COLSPAN_OPTIMAL_VALUES","isLowestUnitPriceLabel","isLowestUnitPrice2Label","isQuickestDeliveryDateLabel","bidTotalsLabel","excludeItemTooltip","excludeVendorAccountTooltip","itemToggled","vendorAccountToggled","excluded","items","TableContainer","Table","stickyHeader","TableHead","TableRow","colSpan","vendorAccountRecord","TableBody","row","header","uom","uom2","bidIds","bidId","matchingBidRows","bids","bid","detail","unitPrice","isLowestUnitPrice","amount","unitPrice2","isLowestUnitPrice2","amount2","estimatedDeliveryDate","isQuickestDeliveryDate","quickestDeliveryDate","totals","totalAmount","bidAmounts","totalAmount2","CompareIcon","COLOR_HEADER_CELL","COLOR_TABLE_BORDER","borderColor","headerFourCol","dataFourCol","BidsComparisonHeader","preparedDate","bidDates","start","end","businessFunction","preparedBy","currency","PRICE_COMPONENT_FIELD_NAME","removeIcon","bottomRow","ManagePriceComponents","mode","shouldUnregister","defaultValues","formState","useFieldArray","append","onSubmitCheckChangedData","EmptyPriceComponentIcon","rowNumber","rules","render","fieldState","Select","FormHelperText","uuidv4","subTotal","grandTotal","priceComponent","DisplayPriceComponentsTable","bidSubTotalsLabel","bidGrandTotalsLabel","priceComponentOptimalRecord","bidTotal","bidTotalRecord","subTotals","grandTotals","titleContainer","titleBody","emptyState","manageButton","DisplayPriceComponents","canManage","ManagePriceComponentButton","bidCalcsContainer","fetchBidCalculationData","bidComparisonCalculationUrl","bidCalculationResponse","BidsComparisonContainer","refetchBidComparisonCalcs","excludedItemIdsList","excludedVendorAccountIdsList","priceComponentsList","responseBidsComparisonCalc","loadingPrimary","loadingSecondary","SaveBidComparisonButton","saveBidComparison","CustomBidComparisonToolbar","isReadOnly","SHOW_BIDS_COMPARISON","isInitialized","BidsComparisonView","contextValue","LIST_BIDS_COMPARISONS","EDIT_BIDS_COMPARISON","bidsComparisonResource","appStateDispatch","useEditController","EditContextProvider","BidsCompareIcon","EnquiryShowBidEnquiry","EnquiryCrudShowActions","canProcure","CAN_PROCURE","canCreate","EnquiryCrudEditActions","EnquiryListRowActionButtons","useListFilterContext","isVendorUser","CAN_SELL","canBid","vendors","hasShowEnquiryAccess","SHOW_ANY_ENQUIRY","SHOW_OWN_ENQUIRY","hasEditEnquiryAccess","EDIT_ANY_ENQUIRY","EDIT_OWN_ENQUIRY","hasDeleteEnquiryAccess","DELETE_ANY_ENQUIRY","DELETE_OWN_ENQUIRY","hasCreateBidPermission","CREATE_BID","hasCreateBidComparisonPermission","CREATE_BIDS_COMPARISON","shouldDisplayShowAction","shouldDisplayCreateBidAction","bidResource","SaveEnquiryButton","useCreate","saveEnquiry","mediaFileSources","modifiedValues","CustomEnquiryToolbar","EnquiryListFilters","hasRequisitionsListAccess","isDirectionSent","approvalStatus","EnquiryListSideFilters","bidDatesList","EnquiryShowLayout","canViewBidComparison","canViewBids","enquiriesPermissions","MENU_ENQUIRIES","LIST_ENQUIRIES","CREATE_ENQUIRY","IMPORT_ENQUIRIES","useListParams","setHasRequisitionsListAccess","ContactSupportIcon","currencyId","make","comments","totalAmountLabel","justifySelf","totalAmountContainer","transformOrigin","totalsContainer","VendorBidForm","setTotalAmount","setTotalAmount2","bidDetails","currency2Id","formClasses","disableAdd","disableRemove","disableReordering","getItemLabel","detailRowIndex","bidDetail","recalculateTotalAmounts","FormInput","enquirySummary","summaryDetails","detailRow","gridColumn","EnquirySummaryFields","ConditionIcon","EnquirySummaryContainer","bidRecord","BidCreateContent","requestEnquiryId","setEnquiry","requestEnquiry","setBidDetails","handleEnquiryDetailsLoaded","bidDetailRecords","existingRecord","requisitionDetail","openEnquiries","onSelect","BidSummaryContainer","createdAt","BidEditContent","BID","totalContainer","amountsContainer","BidShowContent","cellClassName","PermissionMedia","BidListSideFilters","isDirectionReceived","BidListFilters","BidListRowActionButtons","ownerUserId","vendorOwnerUserId","hasShowBidAccess","SHOW_ANY_BID","SHOW_OWN_BID","hasEditBidAccess","EDIT_ANY_BID","EDIT_OWN_BID","hasDeleteBidAccess","DELETE_ANY_BID","DELETE_OWN_BID","isApproved","BidCrudShowActions","BidCrudEditActions","bidsPermissions","MENU_BIDS","LIST_BIDS","IMPORT_BIDS","concat","LocalAtmIcon","RESOURCE_NAME_MEDIA","mediaPermissions","MEDIA_MANAGEMENT_MENU","LIST_MEDIA","CREATE_MEDIA","EDIT_MEDIA","SHOW_MEDIA","DELETE_MEDIA","MEDIA_OWNER_MAP","fetchMediaOwnerTypeChoices","mediaOwnerTypeFiltersList","getRowStyle","ownerType","ownerTypeRecord","MediaListFilters","MediaListSideFilters","mediaOwnerTypeFiltersStatusList","MediaOwnerLinkField","mediaOwnerConfig","hasShowAccess","setHasShowAccess","S3FileUploader","mediaFileSource","s3SignUrl","files","mediaFiles","i","file","uploadFile","mediaFile","rawFile","fileName","scrubFilename","fileType","fileSize","fileExtension","split","pop","objectName","contentType","signUrl","signedResponse","signedUploadUrl","presignedUrl","filePath","s3Headers","filename","replace","modifiedRecord","s3FileUploader","startUpload","errorStatus","errorbody","mediaResource","sortBy","isSidebarOpen","isSidebarClosed","SubMenu","dense","translatedName","isMenuOpen","setMenuOpen","detectOpenedMenu","element","grandChildren","routeLocation","pathname","currentLocationPath","Header","Collapse","timeout","disablePadding","GatedSubMenu","allowedPermissionName","GatedMenuItemLink","MenuItemLink","sidebarIsOpen","UtilitiesMenu","onMenuClick","EmptyState","PermissionPermissionGroups","UploadedFilesField","hasDeletePermission","DeleteButton","confirmTitle","confirmContent","smallAvatar","ConfigurationMenu","CustomUserMenu","avatarText","charAt","UserMenu","AppBar","userMenu","RESOURCE_NAME_PERMISSION_GROUP","PermissionPermissions","PermissionGroupForm","formclassName","MENU_PERMISSION_GROUP","LIST_PERMISSION_GROUPS","CREATE_PERMISSION_GROUP","EDIT_PERMISSION_GROUP","SHOW_PERMISSION_GROUP","DELETE_PERMISSION_GROUP","permissionGroupResource","PeopleIcon","RESOURCE_NAME_PERMISSION","PermissionManagerActionTypes","permissionGroup","PermissionForm","prepareInitialState","isDisabled","roleId","rolePermissions","rolePermissionIds","rolePermission","permissionChanges","toggleAndcollectPermissionIds","isSelected","isPermissionAssigned","recalculatePermissionGroupSelection","areAllPermissionsAssigned","recalculateSelection","allPermissionGroups","permissionsManagerReducer","SET_ALL_PERMISSION_GROUPS","allpermissionGroups","allPermissionGroupIds","permissionGroups","permissionGroupId","parentId","unsortedPermissionGroupsWithPermissions","permissionGroupsIdToIndexMap","roots","groupAllPermissionGroups","aParentPermissiondGroupId","bParentPermissiondGroupId","preparePermissionGroups","TOGGLE_SINGLE_PERMISSION","permissionId","handlePermissionToggle","TOGGLE_MANY_PERMISSIONS","permissionIds","childPermissionIds","flatMap","allPermissionIds","handlePermissionGroupToggle","PermissionManagerContext","PermissionRoles","SinglePermission","permissionTooltip","htmlFor","statePermissionChanges","handlePermissionChanged","heading","gridList","gridListTile","PermissionsGridList","permissionsCount","isMedium","isLarge","isExtraLarge","GridList","cols","gridListCols","getGridListCols","cellHeight","GridListTile","permissionGroupHeading","checkbox","PermissionsGroup","permissionGroupTooltip","isExpanded","setExpanded","isAccordionExpanded","ChildPermissionGroups","childPermissionGroup","expanded","onFocus","fontWeightRegular","PermissionsGroupContainer","headingLabel","ModifyRolePermissions","arePermissionGroupsLoading","useLoading","permissionManagerState","registerField","MENU_PERMISSION","LIST_PERMISSIONS","CREATE_PERMISSION","EDIT_PERMISSION","SHOW_PERMISSION","DELETE_PERMISSION","permissionResource","AccessibilityNewIcon","RESOURCE_NAME_ROLE","PermissionUsers","ShowRolePermissions","RoleForm","canModifyPermissions","setCanModifyPermissions","isBootStrapped","isBootstrapped","canUserModifyPermissions","allowManagePermissionsFromRoleScreen","ACTION_MANAGE_PERMISSIONS_FROM_ROLE","MENU_ROLES","LIST_ROLES","CREATE_ROLE","EDIT_ROLE","SHOW_ROLE","DELETE_ROLE","roleResource","SimpleShowForm","TabbedForm","AssignmentIndIcon","confirm_password","roleIds","UserForm","firstNameRandomId","lastNameRandomId","emailRandomId","passwordRandomId","confirmPasswordRandomId","validatePasswords","errors","PermissionSystemData","USER_MENU","USER_LIST","USER_CREATE","USER_UPDATE","USER_SHOW","USER_DELETE","autocomplete","showRoles","AccountsMenu","SystemDataForm","MENU_SYSTEM_DATA","LIST_SYSTEM_DATA","CREATE_SYSTEM_DATA","EDIT_SYSTEM_DATA","SHOW_SYSTEM_DATA","DELETE_SYSTEM_DATA","systemDataResource","SalesIcon","DatasetupMenu","_scrollToTop","ProcurementMenu","SalesMenu","AppMenu","useSelector","admin","ui","sidebarOpen","isXSmall","DashboardMenuItem","CustomSidebar","Sidebar","BackdropProps","invisible","Layout","appBar","sidebar","AccountForm","AccountBoxIcon","routes","exact","setSubmitting","isCompleted","setCompleted","doSubmit","requestUrl","requestOptions","res","result","noLayout","setLoading","isResponse","setIsResponse","useParams","severity","setSeverity","setMessage","reason","confirmPassword","newPassword","Snackbar","DefaultDashboardCard","CardHeader","subheader","Dashboard","App","Admin","authProvider","dashboard","loginPage","customRoutes","disableTelemetry","Resource","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode","document","getElementById","refreshTimeOutId","inMemoryJWT","isRefreshing","logoutEventName","refreshEndpoint","global","tokenExpiry","setTimeout","delay","clearTimeout","now","addEventListener","setLogoutEventName","setRefreshTokenEndpoint","endpoint"],"mappings":"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","file":"static/js/main.11067cb5.chunk.js","sourcesContent":["import { TranslationMessages } from 'react-admin';\nimport englishMessages from 'ra-language-english';\nimport en from \"./en.json\";\nimport accounts from \"../lib/modules/accounts/i18n/en.json\";\nimport utilities from \"../lib/modules/utilities/i18n/en.json\";\n\nimport components from \"../lib/components/i18n/en.json\";\nimport datasetup from \"../modules/datasetup/i18n/en.json\";\n\n\nconst customEnglishMessages: TranslationMessages = {\n ...englishMessages,\n ...en,\n resources: {\n ...accounts.resources,\n ...datasetup.resources,\n ...utilities.resources,\n ...en.resources,\n },\n\n common: {\n ...en.common,\n },\n\n components: {\n ...components.components,\n }, \n \n}\n\nexport default customEnglishMessages;","import polyglotI18nProvider from 'ra-i18n-polyglot';\nimport englishMessages from './en';\n\nconst i18nProvider = polyglotI18nProvider(locale => {\n // Always fallback on english\n return englishMessages;\n}, 'en');\n\nexport { i18nProvider }","import type {} from \"@material-ui/lab/themeAugmentation\";\nimport {createTheme, responsiveFontSizes} from \"@material-ui/core/styles\";\nimport merge from \"lodash/merge\";\nimport { defaultTheme } from \"react-admin\";\n\nconst dark = createTheme(\n merge({}, defaultTheme, {\n typography: { \n fontFamily: 'Work Sans',\n fontSize: 18,\n },\n palette: {\n primary: {\n main: \"#90caf9\",\n },\n secondary: {\n main: \"#FBBA72\",\n },\n type: \"dark\" as \"dark\", // Switching the dark mode on is a single property value change.\n },\n overrides: {\n MuiAppBar: {\n colorSecondary: {\n color: \"#ffffffb3\",\n backgroundColor: \"#616161e6\",\n },\n },\n MuiButtonBase: {\n root: {\n \"&:hover:active::after\": {\n // recreate a static ripple color\n // use the currentColor to make it work both for outlined and contained buttons\n // but to dim the background without dimming the text,\n // put another element on top with a limited opacity\n content: '\"\"',\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n right: 0,\n backgroundColor: \"currentColor\",\n opacity: 0.3,\n borderRadius: \"inherit\",\n },\n },\n },\n },\n props: {\n MuiButtonBase: {\n // disable ripple for perf reasons\n disableRipple: false,\n },\n },\n })\n);\n\nconst light = createTheme(\n merge({}, defaultTheme, {\n typography: {\n fontFamily:[\n 'Work Sans'\n ].join(','),\n fontSize: 18,\n },\n palette: {\n primary: {\n main: \"#4f3cc9\",\n },\n secondary: {\n light: \"#5f5fc4\",\n main: \"#283593\",\n dark: \"#001064\",\n contrastText: \"#fff\",\n },\n background: {\n default: \"#fcfcfe\",\n },\n type: \"light\" as \"light\",\n },\n shape: {\n borderRadius: 10,\n },\n overrides: {\n RaMenuItemLink: {\n root: {\n borderLeft: \"3px solid #fff\",\n },\n active: {\n borderLeft: \"3px solid #4f3cc9\",\n },\n },\n MuiPaper: {\n elevation1: {\n boxShadow: \"none\",\n },\n root: {\n border: \"1px solid #e0e0e3\",\n backgroundClip: \"padding-box\",\n },\n },\n MuiButton: {\n contained: {\n backgroundColor: \"#fff\",\n color: \"#4f3cc9\",\n boxShadow: \"none\",\n },\n },\n MuiButtonBase: {\n root: {\n \"&:hover:active::after\": {\n // recreate a static ripple color\n // use the currentColor to make it work both for outlined and contained buttons\n // but to dim the background without dimming the text,\n // put another element on top with a limited opacity\n content: '\"\"',\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n right: 0,\n backgroundColor: \"currentColor\",\n opacity: 0.3,\n borderRadius: \"inherit\",\n },\n },\n },\n MuiAppBar: {\n colorSecondary: {\n color: \"#808080\",\n backgroundColor: \"#fff\",\n },\n },\n MuiLinearProgress: {\n colorPrimary: {\n backgroundColor: \"#f5f5f5\",\n },\n barColorPrimary: {\n backgroundColor: \"#d7d7d7\",\n },\n },\n MuiFilledInput: {\n root: {\n backgroundColor: \"rgba(0, 0, 0, 0.04)\",\n \"&$disabled\": {\n backgroundColor: \"rgba(0, 0, 0, 0.04)\",\n },\n },\n },\n MuiSnackbarContent: {\n root: {\n border: \"none\",\n },\n },\n },\n props: {\n MuiButtonBase: {\n // disable ripple for perf reasons\n disableRipple: false,\n },\n },\n })\n);\n\n\nexport const darkTheme = responsiveFontSizes(dark);\nexport const lightTheme = responsiveFontSizes(light);","import { SVGProps } from \"react\";\nimport { useTheme } from \"@material-ui/core/styles\";\n\nconst Logo = (props: SVGProps) => {\n const theme = useTheme();\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport { Logo };\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { ThemeProvider } from \"@material-ui/styles\";\nimport {\n Card,\n Avatar,\n Typography,\n AppBar,\n createTheme,\n makeStyles,\n} from \"@material-ui/core\";\nimport { lightTheme } from \"../../components/layout/themes\";\nimport { Notification } from \"react-admin\";\nimport { Logo } from \"../../components/layout/Logo\";\nimport classnames from \"classnames\";\nimport LockIcon from \"@material-ui/icons/Lock\";\n\nconst useStyles = makeStyles(\n (theme) => ({\n main: {\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: \"100vh\",\n height: \"1px\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\",\n backgroundImage:\n \"radial-gradient(circle at 50% 14em, #313264 0%, #00023b 60%, #00023b 100%)\",\n },\n appbar: {\n paddingTop: 8,\n },\n card: {\n minWidth: 300,\n marginTop: \"6em\",\n },\n avatar: {\n margin: \"2em\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n icon: {\n backgroundColor: theme.palette.secondary.main,\n },\n appBarTitle: {\n flex: 1,\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n alignSelf: \"center\",\n },\n spacer: {\n flex: 1,\n },\n title: {\n margin: \"1em\",\n display: \"flex\",\n justifyContent: \"center\",\n color: theme.palette.primary.main,\n fontSize: theme.typography.pxToRem(25),\n },\n titleMessage: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: theme.palette.grey[500],\n },\n }),\n { name: \"RaLogin\" }\n);\n\nexport interface Props {\n title: string;\n titleMessage: string;\n}\n\nconst UnauthenticatedLayout= ({\n title,\n titleMessage,\n children,\n}) => {\n const theme = lightTheme;\n const backgroundImage = \"/cover.jpeg\";\n const classes = useStyles();\n const containerRef = useRef(null);\n const muiTheme = useMemo(() => createTheme(theme), [theme]);\n let backgroundImageLoaded = false;\n\n useEffect(() => {\n if (!backgroundImageLoaded) {\n lazyLoadBackgroundImage();\n }\n// eslint-disable-next-line\n }, [backgroundImageLoaded]);\n\n const updateBackgroundImage = () => {\n if (!backgroundImageLoaded && null !== containerRef.current) {\n containerRef.current.style.backgroundImage = `url(${backgroundImage})`;\n backgroundImageLoaded = true;\n }\n };\n\n // Load background image asynchronously to speed up time to interactive\n const lazyLoadBackgroundImage = () => {\n if (backgroundImage) {\n const img = new Image();\n img.onload = updateBackgroundImage;\n img.src = backgroundImage;\n }\n };\n\n return (\n \n \n \n \n \n \n \n
\n \n
\n \n \n \n
\n
{title}
\n \n {titleMessage}\n \n {children}\n
\n \n
\n
\n );\n};\n\nexport { UnauthenticatedLayout };\n","\nimport { LoginForm } from \"react-admin\";\nimport { UnauthenticatedLayout } from \"./UnauthenticatedLayout\";\nimport { SecondaryActionLinkButton } from \"../../components\";\n\n/**\n * A standalone login page, to serve as authentication gate to the admin\n *\n * Expects the user to enter a login and a password, which will be checked\n * by the `authProvider.login()` method. Redirects to the root page (/)\n * upon success, otherwise displays an authentication error message.\n *\n * Copy and adapt this component to implement your own login logic\n * (e.g. to authenticate via email or facebook or anything else).\n *\n * @example\n * import MyLoginPage from './MyLoginPage';\n * const App = () => (\n * \n * ...\n * \n * );\n */\n\n\n\nconst LoginPage= () => {\n return (\n \n <>\n \n \n \n \n );\n};\n\nexport { LoginPage };\n","import { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Form, Field } from \"react-final-form\";\nimport { Link } from \"react-router-dom\";\n\nimport Button from \"@material-ui/core/Button\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { makeStyles } from \"@material-ui/core\";\n\nimport { useTranslate } from \"ra-core\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { SecondaryActionLinkButton } from \"../../components\";\nimport { UnauthenticatedLayout } from \"./UnauthenticatedLayout\";\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n textAlign: \"center\",\n padding: \"0 1em 1em 1em\",\n },\n input: {\n marginTop: \"1em\",\n },\n actions: {\n padding: \"0 1em 1em 1em\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n button: {\n margin: 0,\n marginTop: \"20px\",\n },\n success: {\n fontSize: \"20px\",\n fontWeight: 400,\n color: \"green\",\n textAlign: \"center\",\n marginTop: \"20px\",\n marginBottom: \"20px\",\n },\n}));\n\nconst SuccessMessage = () => {\n const classes = useStyles();\n\n return (\n
\n \n If you have given a valid email which exists in our system,\n
\n you will receive instructions to reset your password.\n
\n Please check your registered email.\n
\n \n Login\n \n
\n );\n};\n\nconst InputForm = ({ handleSubmit, isSubmitting }) => {\n const classes = useStyles();\n return (\n
\n
\n
\n \n
\n
\n \n \n {isSubmitting && }\n Reset My Password\n \n\n \n \n {/* */}\n \n );\n};\n\nconst renderInput = ({\n meta: { touched, error } = { touched: false, error: undefined },\n input,\n ...rest\n}) => (\n \n);\n\nconst ForgotPasswordPage= () => {\n const [isSubmitting, setSubmitting] = useState(false);\n const translate = useTranslate();\n const [isCompleted, setCompleted] = useState(false);\n\n const doSubmit = async (values, form) => {\n setSubmitting(true);\n const requestUrl = `${process.env.REACT_APP_SERVER_ENDPOINT}/auth/forgot-password/initiate`;\n\n const requestOptions = {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email: values?.email }),\n };\n\n fetch(requestUrl, requestOptions)\n .then((res) => res.json())\n .then(\n (result) => {\n setSubmitting(true);\n },\n (error) => {\n setSubmitting(false);\n }\n );\n\n if (values.email) {\n setCompleted(true);\n }\n };\n\n const validate = (values) => {\n let errors = {};\n\n if (!values?.email) {\n errors[\"email\"] = translate(\"ra.validation.required\");\n }\n\n return errors;\n };\n\n if (isCompleted) {\n return (\n \n \n \n );\n } else {\n return (\n \n (\n \n )}\n />\n \n );\n }\n};\n\nForgotPasswordPage.propTypes = {\n authProvider: PropTypes.func,\n previousRoute: PropTypes.string,\n};\n\nexport { ForgotPasswordPage };\n","import { useState } from \"react\";\nimport { Form, Field } from \"react-final-form\";\nimport { Link, useParams } from \"react-router-dom\";\n\nimport Button from \"@material-ui/core/Button\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { makeStyles } from \"@material-ui/core/styles\";\n\nimport { useTranslate } from \"ra-core\";\nimport Typography from \"@material-ui/core/Typography\";\nimport MuiAlert from \"@material-ui/lab/Alert\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport { SecondaryActionLinkButton } from \"../../components\";\nimport { UnauthenticatedLayout } from \"./UnauthenticatedLayout\";\n\nfunction Alert(props) {\n return ;\n}\n\nconst useStyles = makeStyles((theme) => ({\n main: {\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: \"100vh\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n background: \"url(Dashboard_cover.jpeg)\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\",\n },\n card: {\n minWidth: 300,\n marginTop: \"6em\",\n },\n avatar: {\n margin: \"1em\",\n display: \"flex\",\n justifyContent: \"center\",\n },\n icon: {\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n textAlign: \"center\",\n padding: \"0 1em 1em 1em\",\n },\n input: {\n marginTop: \"1em\",\n },\n actions: {\n padding: \"0 1em 1em 1em\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n button: {\n margin: 0,\n marginTop: \"20px\",\n },\n}));\n\nconst SuccessMessage = () => {\n const classes = useStyles();\n\n return (\n
\n \n Your password has been changed successfully.\n
\n Please login with your changed password.
\n
\n \n Login\n \n
\n );\n};\n\nconst InputForm = ({ handleSubmit, loading }) => {\n const classes = useStyles();\n return (\n
\n
\n
\n \n
\n
\n \n
\n
\n \n \n {loading && }\n Reset My Password\n \n\n \n\n \n \n {/* */}\n \n );\n};\n\nconst renderInput = ({\n meta: { touched, error } = { touched: false, error: undefined },\n input: { ...inputProps },\n ...props\n}) => (\n \n);\n\nconst ResetPasswordPage = () => {\n const [loading, setLoading] = useState(false);\n const translate = useTranslate();\n const [isResponse, setIsResponse] = useState(false);\n const { token } = useParams();\n const [open, isOpen] = useState(false);\n const [severity, setSeverity] = useState(\"\");\n const [message, setMessage] = useState(\"\");\n\n const handleClose = (event, reason) => {\n if (reason === \"clickaway\") {\n return;\n }\n\n isOpen(false);\n };\n\n const handleSubmit = async (values) => {\n // setLoading(true);\n if (values.password !== values.confirmPassword) {\n setSeverity(\"error\");\n setMessage(\"Password and confirm password do not match\");\n\n isOpen(true);\n } else {\n const requestUrl = `${process.env.REACT_APP_SERVER_ENDPOINT}/auth/forgot-password/reset`;\n const requestOptions = {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n newPassword: values?.password,\n token: token,\n }),\n };\n\n fetch(requestUrl, requestOptions)\n .then((res) => res.json())\n .then(\n (result) => {\n setLoading(false);\n setIsResponse(true);\n setSeverity(\"success\");\n setMessage(\"Password Changed Successfully\");\n isOpen(true);\n },\n (error) => {\n setSeverity(\"error\");\n setMessage(\"An error occured. Please request a new password.\");\n isOpen(true);\n }\n );\n }\n };\n\n const validate = (values) => {\n let errors = {};\n\n if (!values.password) {\n errors[\"password\"] = translate(\"ra.validation.required\");\n }\n if (!values.confirmPassword) {\n errors[\"confirmPassword\"] = translate(\"ra.validation.required\");\n }\n\n return errors;\n };\n\n return (\n (\n \n
\n {isResponse ? (\n \n ) : (\n \n )}\n \n \n {message}\n \n \n
\n \n )}\n />\n );\n};\n\nexport { ResetPasswordPage };\n","export enum PERMISSION_MODE {\n ANY,\n ALL,\n}\n\nexport const COMMON_DATE_FORMAT = {\n day: \"numeric\",\n month: \"numeric\",\n year: \"numeric\",\n};\n\nexport const COMMON_DATE_TIME_FORMAT = {\n weekday: \"short\",\n year: \"2-digit\",\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n};\n\nexport const DATE_FORMAT_STANDARD_DAY = 'dd-MM-yyyy';\nexport const DATE_FORMAT_STANDARD_DATE_TIME = 'dd-MMM-yyyy HH:mm';\n","import { useCallback } from \"react\";\nimport { useGetIdentity, usePermissions } from \"react-admin\";\nimport { PERMISSION_MODE } from \"..\";\n\nconst usePermissionsCheck = () => {\n const { loaded: permissionsLoaded, permissions } = usePermissions();\n const { identity } = useGetIdentity();\n\n const hasPermissionAccess = useCallback(\n (\n permissionNames?: string | Array,\n permissionMode: PERMISSION_MODE = PERMISSION_MODE.ANY\n ): boolean => {\n let hasResourceAccess = false;\n if (permissionNames && permissionsLoaded) {\n const permissionsToCheck = Array.isArray(permissionNames)\n ? permissionNames\n : [permissionNames];\n\n if (permissionMode === PERMISSION_MODE.ANY) {\n hasResourceAccess = permissionsToCheck?.some((permission) =>\n permissions.includes(permission)\n );\n } else if (permissionMode === PERMISSION_MODE.ALL) {\n hasResourceAccess = permissionsToCheck?.every((permission) =>\n permissions.includes(permission)\n );\n }\n }\n\n return hasResourceAccess;\n },\n [permissions, permissionsLoaded]\n );\n\n const hasOwnOrAccountAccess = useCallback(\n (\n accountPermissionNames,\n ownPermissionNames,\n targetAccountId,\n targetOwnerId,\n ) => {\n let hasResourceAccess = false;\n if (permissionsLoaded) {\n const doesTargetAccountIdMatch =\n targetAccountId === identity?.accountId;\n const doesTargetOwnerIdMatch = targetOwnerId === identity?.id;\n const isSystemAdmin = identity?.isSystemAdmin;\n const isSystemUser = identity?.isSystemUser;\n\n //First check if the current user has access to the account\n hasResourceAccess = doesTargetAccountIdMatch;\n\n //If the current user's account id matches with the targetAccountId\n if (hasResourceAccess) {\n //Check if the current user has account access, check if his accountId matches with the target resource's account Id\n hasResourceAccess = hasPermissionAccess(accountPermissionNames);\n\n //If the user does not have account access, and his target owner id matches,\n //then check if he has own resource access\n if (!hasResourceAccess && doesTargetOwnerIdMatch) {\n hasResourceAccess = hasPermissionAccess(ownPermissionNames);\n }\n }\n\n //Finally, if the user still does not have any access, finally check if he is an admin or a superuser\n if (!hasResourceAccess) {\n hasResourceAccess = isSystemAdmin || isSystemUser;\n }\n }\n\n return hasResourceAccess;\n },\n [\n hasPermissionAccess,\n identity?.accountId,\n identity?.id,\n identity?.isSystemAdmin,\n identity?.isSystemUser,\n permissionsLoaded,\n ]\n );\n\n return {\n hasPermissionAccess, \n hasOwnOrAccountAccess,\n permissionsLoaded,\n };\n};\n\nexport { usePermissionsCheck };\n","// eslint-disable-next-line\nimport { stringify } from \"query-string\";\nimport { fetchUtils, DataProvider } from \"ra-core\";\nimport { GetListParams, HttpError } from \"react-admin\";\n\n/**\n * Maps react-admin queries to a simple REST API\n *\n * This REST dialect is similar to the one of FakeRest\n *\n * @see https://github.com/marmelab/FakeRest\n *\n * @example\n *\n * getList => GET http://my.api.url/posts?sort=['title','ASC']&range=[0, 24]\n * getOne => GET http://my.api.url/posts/123\n * getMany => GET http://my.api.url/posts?filter={id:[123,456,789]}\n * update => PUT http://my.api.url/posts/123\n * create => POST http://my.api.url/posts\n * delete => DELETE http://my.api.url/posts/123\n *\n * @example\n *\n * import * as React from \"react\";\n * import { Admin, Resource } from 'react-admin';\n * import simpleRestProvider from 'ra-data-simple-rest';\n *\n * import { PostList } from './posts';\n *\n * const App = () => (\n * \n * \n * \n * );\n *\n * export default App;\n */\n\nconst countHeader: string = \"X-Total-Count\".toLowerCase();\n\nconst prepareQuery = (params: GetListParams) => {\n return {\n pagination: JSON.stringify(params.pagination),\n sort: JSON.stringify(params.sort),\n filter: JSON.stringify(params.filter),\n };\n};\n\nconst restDataProvider = (\n apiUrl: string,\n httpClient = fetchUtils.fetchJson\n): DataProvider => ({\n getList: (resource, params) => {\n const query = prepareQuery(params);\n const url = `${apiUrl}/${resource}?${stringify(query)}`;\n return httpClient(url).then(({ headers, json }) => {\n const totalValStr = headers.get(countHeader?.toLowerCase()) || \"0\";\n const totalValue = parseInt(totalValStr);\n\n if (!headers.has(countHeader)) {\n throw new Error(\n `The ${countHeader} header is missing in the HTTP Response. The simple REST data provider expects responses for lists of resources to contain this header with the total number of results to build the pagination. If you are using CORS, did you declare ${countHeader} in the Access-Control-Expose-Headers header?`\n );\n }\n return {\n data: json,\n total: totalValue,\n };\n });\n },\n\n getOne: (resource, params) =>\n httpClient(`${apiUrl}/${resource}/${params.id}`).then(({ json }) => ({\n data: json,\n })),\n\n getMany: (resource, params) => {\n const query = {\n filter: JSON.stringify({ id: params.ids }),\n };\n const url = `${apiUrl}/${resource}?${stringify(query)}`;\n return httpClient(url).then(({ json }) => ({ data: json }));\n },\n\n getManyReference: (resource, params) => {\n const query = {\n sort: JSON.stringify(params.sort),\n pagination: JSON.stringify(params.pagination),\n filter: JSON.stringify({\n ...params.filter,\n [params.target]: params.id,\n }),\n };\n const url = `${apiUrl}/${resource}?${stringify(query)}`;\n\n return httpClient(url).then(({ headers, json }) => {\n const totalValStr = headers.get(countHeader?.toLowerCase()) || \"0\";\n const totalValue = parseInt(totalValStr);\n if (!headers.has(countHeader)) {\n throw new Error(\n `The ${countHeader} header is missing in the HTTP Response. The simple REST data provider expects responses for lists of resources to contain this header with the total number of results to build the pagination. If you are using CORS, did you declare ${countHeader} in the Access-Control-Expose-Headers header?`\n );\n }\n return {\n data: json,\n total: totalValue,\n };\n });\n },\n\n update: (resource, params) =>\n httpClient(`${apiUrl}/${resource}/${params.id}`, {\n method: \"PUT\",\n body: JSON.stringify(params.data),\n }).then(({ json }) => ({ data: json })),\n\n // simple-rest doesn't handle provide an updateMany route, so we fallback to calling update n times instead\n updateMany: (resource, params) =>\n Promise.all(\n params.ids.map((id) =>\n httpClient(`${apiUrl}/${resource}/${id}`, {\n method: \"PUT\",\n body: JSON.stringify(params.data),\n })\n )\n ).then((responses) => ({ data: responses.map(({ json }) => json.id) })),\n\n create: (resource, params) =>\n httpClient(`${apiUrl}/${resource}`, {\n method: \"POST\",\n body: JSON.stringify(params.data),\n })\n .then(({ json }) => ({\n data: { ...params.data, id: json.id },\n }))\n .catch((error) => {\n const message = error?.message;\n const errorMessage = Array.isArray(message)\n ? message?.join(\". \\n\")\n : message;\n return Promise.reject(new HttpError(errorMessage, error.status, error));\n }),\n\n delete: (resource, params) =>\n httpClient(`${apiUrl}/${resource}/${params.id}`, {\n method: \"DELETE\",\n headers: new Headers({\n \"Content-Type\": \"text/plain\",\n }),\n }).then(({ json }) => ({ data: json })),\n\n // simple-rest doesn't handle filters on DELETE route, so we fallback to calling DELETE n times instead\n deleteMany: (resource, params) =>\n Promise.all(\n params.ids.map((id) =>\n httpClient(`${apiUrl}/${resource}/${id}`, {\n method: \"DELETE\",\n headers: new Headers({\n \"Content-Type\": \"text/plain\",\n }),\n })\n )\n ).then((responses) => ({\n data: responses.map(({ json }) => json.id),\n })),\n});\n\nexport { restDataProvider };\n","import { ResourceProps } from \"ra-core\";\nimport { matchPath } from \"react-router\";\n\nexport const hasAccess = (permissions, ...askedPermissions) =>\n askedPermissions.every((permission) => permissions?.includes(permission));\n\nexport const hasAnyAccess = (permissions, ...askedPermissions) =>\n askedPermissions.some((permission) => permissions?.includes(permission));\n\nexport const checkResourcePermissions = (\n { options, name, list, create, edit, show, ...otherProps }: ResourceProps,\n permissions\n) => {\n const allowedPermissions = options ? options[\"allowedPermissions\"] : null;\n\n let gatedProp: ResourceProps = { ...otherProps, name };\n\n if (permissions && allowedPermissions) {\n const hasList =\n allowedPermissions?.list &&\n list &&\n hasAccess(permissions, allowedPermissions?.list);\n\n const hasCreate =\n allowedPermissions.create &&\n create &&\n hasAccess(permissions, allowedPermissions?.create);\n\n const hasEdit =\n allowedPermissions.edit &&\n edit &&\n hasAccess(permissions, allowedPermissions?.edit);\n\n const hasShow =\n allowedPermissions.show &&\n show &&\n hasAccess(permissions, allowedPermissions?.show);\n\n if (hasList) {\n gatedProp.list = list;\n }\n\n if (hasCreate) {\n gatedProp.create = create;\n }\n\n if (hasEdit) {\n gatedProp.edit = edit;\n }\n\n if (hasShow) {\n gatedProp.show = show;\n }\n } else {\n gatedProp = {\n name,\n list,\n edit,\n create,\n show,\n options,\n ...otherProps,\n };\n }\n\n return gatedProp;\n};\n\nexport const isPublicUrl = () => {\n const isMatchingResetPath = !!matchPath(\n window?.location?.hash,\n \"#/auth/reset-password/\"\n );\n\n const currentLocation = window?.location?.hash;\n\n const publicUrlPathsList = [\"#/auth/forgot-password\"];\n\n return isMatchingResetPath ? true: publicUrlPathsList.includes(currentLocation);\n};\n","import { AuthProvider } from \"react-admin\";\nimport { isPublicUrl } from \"../helpers/auth\";\nimport inMemoryJWTManager from \"./inMemoryJWTManager\";\n\nconst apiUrl = `${process.env.REACT_APP_SERVER_ENDPOINT}`;\nconst clearLocalAuthInfo = () => {\n localStorage.removeItem(\"user\");\n localStorage.removeItem(\"app-logout\");\n};\n\nconst restAuthProvider: AuthProvider = {\n // authentication\n login: async ({ username, password }) => {\n const request = new Request(`${apiUrl}/auth/login`, {\n method: \"POST\",\n body: JSON.stringify({ username, password }),\n credentials: \"include\",\n headers: new Headers({ \"Content-Type\": \"application/json\" }),\n });\n const response = await fetch(request);\n if (response.status < 200 || response.status >= 300) {\n throw new Error(response.statusText);\n }\n const { user, accessToken } = await response.json();\n const { refreshValidityTimeStamp, ...restUser } = user;\n localStorage.setItem(\"user\", JSON.stringify(restUser));\n inMemoryJWTManager.setToken(accessToken);\n },\n checkError: (error) => {\n const status = error?.status;\n console.log(`error status: ${status}`);\n if (status === 401 || status === 403) {\n inMemoryJWTManager.eraseToken();\n clearLocalAuthInfo();\n return Promise.reject({\n redirectTo: \"/login\",\n message: \"common.login.unauthorized\",\n });\n }\n // other error code (404, 500, etc): no need to log out\n return Promise.resolve();\n },\n checkAuth: async () => {\n if (isPublicUrl()) {\n return Promise.resolve();\n }\n\n return inMemoryJWTManager.waitForTokenRefresh().then(() => {\n Promise.resolve();\n /* return inMemoryJWTManager.getToken()\n ? Promise.resolve()\n : Promise.reject(); */\n });\n },\n logout: async () => {\n const request = new Request(`${apiUrl}/auth/logout`, {\n method: \"POST\",\n credentials: \"include\",\n headers: new Headers({ \"Content-Type\": \"application/json\" }),\n });\n try {\n const response = await fetch(request);\n clearLocalAuthInfo();\n inMemoryJWTManager.eraseToken();\n return Promise.resolve(\"/login\");\n } catch (error) {\n //throw new Error(\"Logout Error\");\n //Ignore\n }\n },\n getIdentity: async () => {\n if (isPublicUrl()) {\n return Promise.resolve({ id: \"\", fullName: \"\" });\n }\n\n try {\n const localUserStr = localStorage.getItem(\"user\");\n if (localUserStr) {\n const localUser = JSON.parse(localUserStr);\n const id = localUser?.id;\n const firstName = localUser?.firstName;\n const lastName = localUser?.lastName;\n const fullName = localUser.fullName ?? `${firstName} ${lastName}`;\n const accountId = localUser?.accountId;\n const isSystemAdmin = localUser?.isSystemAdmin;\n const isSystemUser = localUser?.isSystemUser;\n const isActive = localUser?.isActive;\n\n return Promise.resolve({\n id,\n fullName,\n firstName,\n lastName,\n accountId,\n isSystemAdmin,\n isSystemUser,\n isActive,\n });\n } else {\n return Promise.reject();\n }\n } catch (error) {\n return Promise.reject(error);\n }\n },\n // authorization\n getPermissions: async (params) => {\n if (isPublicUrl()) {\n return Promise.resolve();\n }\n\n await inMemoryJWTManager.waitForTokenRefresh();\n\n /* if (!inMemoryJWTManager.getToken()) {\n Promise.reject();\n } */\n\n const userStr = localStorage.getItem(\"user\");\n if (userStr) {\n const user = JSON.parse(userStr);\n const permissionNames = user.permissionNames;\n return permissionNames\n ? Promise.resolve(permissionNames)\n : Promise.reject();\n }\n\n return Promise.reject();\n },\n};\n\nexport { restAuthProvider };\n","//import simpleRestProvider from 'ra-data-simple-rest';\nimport { restDataProvider } from \"./restDataProvider\";\nimport { fetchUtils } from \"ra-core\";\n\nimport { cacheDataProviderProxy } from \"react-admin\";\nimport inMemoryJWTManager from \"./inMemoryJWTManager\";\n\nexport interface Options extends RequestInit {\n user?: {\n authenticated?: boolean;\n token?: string;\n };\n}\n\nexport const httpClient = (url: string, options: Options = {}) => {\n if (!options.headers) {\n options.headers = new Headers({ Accept: \"application/json\" });\n }\n\n options.credentials = \"include\";\n\n const token = inMemoryJWTManager.getToken();\n if (token) {\n return fetchUtils.fetchJson(url, options);\n } else {\n return inMemoryJWTManager.getRefreshedToken().then((gotFreshToken) => {\n return fetchUtils.fetchJson(url, options);\n });\n }\n /* const token = localStorage.getItem('token');\n if(token){\n const requestHeaders: HeadersInit = new Headers();\n requestHeaders.set('authorization', `Bearer ${token}`);\n options.headers = requestHeaders;\n } */\n};\n\nconst defaultApiUrl = `${process.env.REACT_APP_SERVER_ENDPOINT}`;\nconst unCachedDataProvider = restDataProvider(defaultApiUrl, httpClient);\nconst dataProvider = cacheDataProviderProxy(unCachedDataProvider);\n\nexport { dataProvider };\n","import { IUser } from \"../../modules/accounts\";\n\nexport class LocalUser {\n protected localUser: IUser | undefined;\n\n constructor() {\n this.localUser = this.readLocalUser();\n }\n\n public getUserId = () => {\n return this.localUser?.id;\n };\n\n public getLocalUser = (): IUser | undefined => {\n return this.localUser;\n };\n\n public readLocalUser = (): IUser | undefined => {\n let user: IUser | undefined = undefined;\n const localUserStr = localStorage.getItem(\"user\");\n if (localUserStr) {\n user = JSON.parse(localUserStr);\n }\n return user;\n };\n\n public hasDarkTheme = (): boolean => {\n if (this.localUser?.settings?.theme === \"dark\") {\n return true;\n }\n return false;\n };\n\n public changeLocalTheme = (isDarkTheme: boolean) => {\n let localUser = this.getLocalUser();\n\n const themeName = isDarkTheme ? \"dark\" : \"light\";\n\n if (localUser && localUser.settings) {\n localUser.settings.theme = themeName;\n this.localUser = localUser;\n this.saveLocalUser();\n }\n };\n\n public saveName = (firstName: string, lastName: string) => {\n let localUser = this.getLocalUser();\n if (localUser) {\n localUser.firstName = firstName;\n localUser.lastName = lastName;\n this.localUser = localUser;\n this.saveLocalUser();\n }\n };\n\n public saveLocalUser = () => {\n const user = this.localUser;\n const localUserStr = JSON.stringify(user);\n localStorage.setItem(\"user\", localUserStr);\n this.localUser = this.readLocalUser();\n };\n}\n","import { Tooltip } from \"@material-ui/core\";\nimport { usePermissions, useTranslate } from \"react-admin\";\nimport { hasAccess } from \"../../core\";\nimport DownloadIcon from '@material-ui/icons/CloudDownloadTwoTone';\n\ninterface DownloadReportFileButtonProps {\n downloadPath: string;\n downloadPermissionName: string;\n tooltip: string;\n}\nconst DownloadReportFileButton=({\n downloadPath,\n downloadPermissionName,\n tooltip,\n}:DownloadReportFileButtonProps) => {\n const { loaded, permissions } = usePermissions();\n const translate = useTranslate();\n const hasDownloadPermission =\n loaded && hasAccess(permissions, downloadPermissionName);\n const apiUrl = process.env[\"REACT_APP_SERVER_ENDPOINT\"];\n const downloadUrl = `${apiUrl}${downloadPath}`;\n if (hasDownloadPermission) {\n return (\n \n \n \n {translate(\"components.buttons.DownloadReportFileButton.label\")}\n \n \n );\n }else{\n return null;\n }\n};\n\nexport { DownloadReportFileButton };\n","import { useCallback } from \"react\"\nimport { useListContext, useTranslate, RefreshIconButtonProps } from \"react-admin\"\nimport NavigationRefresh from '@material-ui/icons/Refresh';\nimport { IconButton, makeStyles, Theme, Tooltip } from \"@material-ui/core\";\n\n\n\nconst RefetchIconButton = ({\n label = 'ra.action.refresh',\n icon = defaultIcon,\n onClick,\n className,\n ...rest\n}: RefetchButtonProps) => {\n const classes = useStyles();\n const buttonClassName = className || classes.root;\n const { refetch } = useListContext();\n const translate = useTranslate();\n const handleClick = useCallback(\n event => {\n event.preventDefault();\n refetch();\n },[refetch]\n )\n\n return (\n \n \n {icon}\n \n \n );\n}\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n paddingLeft: theme.spacing(1.75),\n paddingRight: theme.spacing(1.75),\n }\n}));\n\nconst defaultIcon = ;\n\ninterface RefetchButtonProps extends RefreshIconButtonProps {\n\n}\n\nexport { RefetchIconButton }","import { useHistory } from \"react-router-dom\";\nimport { Button } from \"@material-ui/core\";\nimport BackButtonIcon from \"@material-ui/icons/KeyboardBackspace\";\n\nconst HistoryBackButton = () => {\n const history = useHistory();\n return (\n \n );\n};\n\nexport { HistoryBackButton };\n","import { IconButton, Menu, useMediaQuery, Theme } from \"@material-ui/core\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useState,\n} from \"react\";\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\n\nconst ListVerticalActionMenuButton= ({ children }) => {\n const isSmall = useMediaQuery((theme: Theme) => theme.breakpoints.down(\"sm\"));\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const renderMenuItem = (menuItem) => {\n if (isValidElement(menuItem)) {\n return cloneElement(menuItem, {\n //@ts-ignore\n closeMenu: handleClose,\n });\n } else {\n return null;\n }\n };\n\n return (\n
\n \n \n \n \n {Children.map(children, renderMenuItem)}\n \n
\n );\n};\n\nexport { ListVerticalActionMenuButton };\n","import { ReactElement, ReactNode, useCallback } from \"react\";\nimport { MenuItem, MenuItemProps, Tooltip } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport { cloneElement } from \"react\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n color: theme.palette.text.secondary,\n },\n active: {\n color: theme.palette.text.primary,\n },\n icon: { minWidth: theme.spacing(5) },\n}));\n\ninterface Props {\n tooltip: string;\n leftIcon?: ReactElement;\n primaryText?: ReactNode;\n closeMenu?: () => void;\n}\n\ntype ListVerticalActionMenuItemButtonProps = Props &\n MenuItemProps<\"li\", { button?: true }>;\n\nconst ListVerticalActionMenuItemButton=\n (props:ListVerticalActionMenuItemButtonProps) => {\n const classes = useStyles(props);\n const { leftIcon, primaryText, tooltip, closeMenu, onClick, ...rest } =\n props;\n\n const handleMenuTap = useCallback(\n (e) => {\n closeMenu && closeMenu();\n onClick && onClick(e);\n },\n [onClick, closeMenu]\n );\n\n return (\n \n \n {leftIcon && (\n \n {cloneElement(leftIcon, {\n titleAccess: primaryText,\n })}\n \n )}\n {primaryText}\n \n \n );\n };\n\nexport { ListVerticalActionMenuItemButton };\n","import Button from \"@material-ui/core/Button\";\nimport { Link } from \"react-router-dom\";\nimport { makeStyles } from \"@material-ui/core\";\nexport interface SecondaryActionLinkButtonProps {\n title: string;\n url: string;\n}\n\nconst useStyles = makeStyles(\n (theme) => ({\n main: {\n marginTop: \"15px\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n display: \"flex\",\n width: \"100%\",\n },\n }),\n { name: \"RaLogin\" }\n);\n\nconst SecondaryActionLinkButton= ({\n title,\n url,\n}:SecondaryActionLinkButtonProps) => {\n const classes = useStyles();\n return (\n
\n \n {title}\n \n
\n );\n};\n\nexport { SecondaryActionLinkButton };\n","import { TextFieldProps } from \"ra-ui-materialui\";\nimport { Tooltip } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport get from \"lodash/get\";\n\nconst TruncatedTextField= (props:TruncatedTextFieldProps) => {\n const classes = useStyles();\n const { record, source, truncateLength, showTooltip } = props;\n const fullText = record && source ? get(record, source) : null;\n const truncateText =\n fullText && fullText.length > (truncateLength || 50)\n ? `${fullText.substring(0, truncateLength)}...`\n : fullText;\n if (showTooltip) {\n return (\n \n {truncateText}\n \n );\n } else {\n return {truncateText};\n }\n};\n\nconst useStyles = makeStyles((theme) => ({\n customWidth: {\n maxWidth: 500,\n },\n text: {\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\n },\n}));\n\nexport interface TruncatedTextFieldProps extends TextFieldProps {\n truncateLength?: number;\n showTooltip?: boolean;\n}\n\nTruncatedTextField.defaultProps = {\n truncateLength: 5,\n showTooltip: true,\n};\n\nexport { TruncatedTextField };\n","import { memo } from \"react\";\nimport { TextFieldProps } from \"ra-ui-materialui\";\nimport { sanitizeFieldRestProps } from \"react-admin\";\nimport Typography from '@material-ui/core/Typography';\n\n\n\nconst LabelField=(props:LabelFieldProps)=>memo(props => {\n const { className, value, emptyText, ...rest } = props;\n\n return (\n \n {value || emptyText}\n \n )\n});\n\nLabelField.displayName = 'LabelField';\n\nLabelField.defaultProps = {\n addLabel: true,\n}\n\nexport interface LabelFieldProps extends TextFieldProps {\n value?: string | number | undefined;\n}\n\nexport { LabelField }","import { FC } from \"react\";\nimport get from \"lodash/get\";\nimport { Typography, TypographyProps } from \"@material-ui/core\";\nimport { Link } from \"react-router-dom\";\n\nimport {\n InjectedFieldProps,\n PublicFieldProps,\n useRecordContext,\n sanitizeFieldRestProps,\n getResourceLinkPath,\n} from \"react-admin\";\n\nexport interface ResourceLinkedFieldProps\n extends PublicFieldProps,\n InjectedFieldProps,\n TypographyProps {\n linkedResource: string;\n linkedResourceIdSource: string;\n link?: string;\n resource?: string;\n}\n\nconst stopPropagation = (e) => e.stopPropagation();\n\nconst ResourceLinkedField: FC =\n //memo((props) => {\n ((props) => {\n const {\n source,\n emptyText,\n link,\n linkedResource,\n linkedResourceIdSource,\n className,\n resource,\n basePath,\n ...rest\n } = props;\n const record = useRecordContext(props);\n const value = get(record, source);\n const resourceLinkPath = !resource\n ? undefined\n : getResourceLinkPath({\n source: linkedResourceIdSource,\n reference: linkedResource,\n resource: resource,\n record,\n basePath,\n link,\n });\n\n if (!resourceLinkPath) {\n return null;\n }\n\n return (\n \n \n {value != null && typeof value !== \"string\"\n ? JSON.stringify(value)\n : value || emptyText}\n \n \n );\n });\n\nResourceLinkedField.displayName = \"ResourceLinkedField\";\n\nResourceLinkedField.defaultProps = {\n addLabel: true,\n link: \"show\",\n};\n\nexport { ResourceLinkedField };\n","import { memo } from \"react\";\nimport {\n Accordion,\n AccordionSummary,\n Tooltip,\n AccordionDetails,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport { TextFieldProps, useTranslate } from \"react-admin\";\n\nconst StyledAccordionSummary = withStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.grey[300],\n },\n}))(AccordionSummary);\n\nexport interface AccordionFieldProps extends TextFieldProps {\n headerTooltip: string;\n headerlabel: string;\n detailsClassName?: string;\n defaultExpanded?: boolean;\n}\nconst AccordionField = memo(\n (props) => {\n const {\n headerTooltip,\n headerlabel,\n defaultExpanded = true,\n className,\n detailsClassName,\n children,\n } = props;\n const translate = useTranslate();\n\n return (\n \n \n }\n aria-label=\"Expand\"\n aria-controls=\"additional-actions1-content\"\n >\n \n {translate(headerlabel)}\n \n \n \n {children}\n \n \n \n );\n }\n);\n\nAccordionField.displayName = \"AccordionField\";\n\n\nexport { AccordionField };\n","import { DateField, DateFieldProps, useRecordContext } from \"react-admin\";\nimport get from \"lodash/get\";\nimport Countdown, { CountdownRenderProps } from \"react-countdown\";\nimport { Box } from \"@material-ui/core\";\nimport TimerIcon from \"@material-ui/icons/TimerTwoTone\";\n\ninterface DateCountdownFieldProps extends DateFieldProps {}\n\nconst CompletedTime = () =>
Expired
;\nconst renderer = ({\n days,\n hours,\n minutes,\n seconds,\n completed,\n}: CountdownRenderProps) => {\n return (\n \n \n {completed && }\n {!completed && `${days}d ${hours}h ${minutes}m ${seconds}s`}\n \n );\n};\n\nconst DateCountdownField= (props:DateCountdownFieldProps) => {\n const record = useRecordContext(props);\n if (!record) {\n return null;\n }\n\n const value = get(record, props?.source);\n\n if (!value || value == null || value === \"\") {\n return null;\n }\n\n return (\n \n \n \n \n );\n};\n\nexport { DateCountdownField };\n","const leftPad = (nb = 2) => value => ('0'.repeat(nb) + value).slice(-nb);\nconst leftPad4 = leftPad(4);\nconst leftPad2 = leftPad(2);\n\n// yyyy-MM-ddThh:mm\nconst dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/;\n\n/**\n * @param {Date} value value to convert\n * @returns {String} A standardized datetime (yyyy-MM-ddThh:mm), to be passed to an \n */\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) {\n return '';\n }\n\n const yy = leftPad4(value.getFullYear());\n const MM = leftPad2(value.getMonth() + 1);\n const dd = leftPad2(value.getDate());\n const hh = leftPad2(value.getHours());\n const mm = leftPad2(value.getMinutes());\n return `${yy}-${MM}-${dd}T${hh}:${mm}`;\n};\n\n/**\n * Converts a date from the Redux store, with timezone, to a date string\n * without timezone for use in an .\n *\n * @param {Date | String} value date string or object\n */\nexport const dateTimeFormatter = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n return value;\n }\n\n return convertDateToString(new Date(value));\n};\n\n/**\n * Converts a datetime string without timezone to a date object\n * with timezone, using the browser timezone.\n *\n * @param {String} value Date string, formatted as yyyy-MM-ddThh:mm\n * @return {Date}\n */\nexport const dateTimeParser = value => (value ? new Date(value) : '');","import { useCallback } from \"react\";\nimport {\n useInput,\n useTranslate,\n FieldTitle,\n InputHelperText,\n} from \"react-admin\";\nimport { MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport { dateTimeFormatter, dateTimeParser } from \"./utils\";\n\nconst Picker = ({ PickerComponent, ...fieldProps }) => {\n const {\n defaultValue,\n format,\n initialValue,\n label,\n helperText,\n margin,\n options,\n source,\n resource,\n parse,\n validate,\n variant,\n className,\n isRequired,\n providerOptions,\n fullWidth,\n cancelLabel,\n clearLabel,\n pickerVariant,\n stringFormat,\n ...rest\n } = fieldProps;\n\n const translate = useTranslate();\n\n const { id, input, meta } = useInput({\n defaultValue,\n format,\n initialValue,\n parse,\n resource,\n source,\n validate,\n });\n const { touched, submitError, error } = meta;\n\n const handleChange = useCallback(\n (value) => {\n Date.parse(value)\n ? input.onChange(\n stringFormat === \"ISO\" ? value?.toISOString() : value?.toString()\n )\n : input.onChange(null);\n },\n [input]\n );\n\n return (\n
\n \n \n }\n variant={pickerVariant}\n inputVariant={variant}\n margin={margin}\n error={!!(touched && (error || submitError))}\n helperText={\n \n }\n className={className}\n value={input.value ? new Date(input.value) : null}\n cancelLabel={translate(cancelLabel)}\n clearLabel={translate(clearLabel)}\n onChange={(date) => handleChange(date)}\n onBlur={() =>\n input.onBlur(\n //@ts-ignore\n input.value\n ? stringFormat === \"ISO\"\n ? new Date(input.value).toISOString()\n : new Date(input.value).toString()\n : null\n )\n }\n {...options}\n />\n \n
\n );\n};\n\nconst sanitizeRestProps = ({\n allowEmpty,\n alwaysOn,\n basePath,\n component,\n defaultValue,\n format,\n formClassName,\n initialValue,\n initializeForm,\n input,\n isRequired,\n label,\n limitChoicesToValue,\n locale,\n meta,\n options,\n optionText,\n optionValue,\n parse,\n record,\n resource,\n source,\n textAlign,\n translate,\n translateChoice,\n labelTime,\n ...rest\n}) => rest;\n\nPicker.defaultProps = {\n input: {},\n isRequired: false,\n meta: { touched: false, error: false },\n options: {},\n cancelLabel: \"ra.action.clear_input_value\",\n clearLabel: \"ra.action.cancel\",\n margin: \"dense\",\n variant: \"filled\",\n pickerVariant: \"dialog\",\n stringFormat: \"ISO\",\n format: dateTimeFormatter,\n parse: dateTimeParser,\n providerOptions: {\n utils: DateFnsUtils,\n locale: undefined,\n },\n};\n\nexport default Picker;\n","import {\n DatePicker,\n TimePicker,\n DateTimePicker,\n KeyboardDatePicker,\n KeyboardDateTimePicker,\n KeyboardTimePicker\n} from '@material-ui/pickers';\nimport Picker from './Picker';\n\nconst DateInput = props => ;\nconst TimeInput = props => ;\nconst DateTimeInput = props => ;\nconst KeyboardDateInput = props => ;\nconst KeyboardDateTimeInput = props => ;\nconst KeyboardTimeInput = props => ;\n\nexport { DateInput, TimeInput, DateTimeInput, KeyboardDateInput, KeyboardDateTimeInput, KeyboardTimeInput };\n","import { Box, Typography } from \"@material-ui/core\";\nimport { useTranslate } from \"react-admin\";\n\nconst UserFormMessage = ({\n line1,\n line2,\n}: {\n line1: string;\n line2?: string;\n}) => {\n const translate = useTranslate();\n return (\n \n {translate(line1)}\n {line2 && {translate(line2)}}\n \n );\n};\n\nexport { UserFormMessage };\n","import { Chip, makeStyles } from \"@material-ui/core\";\nimport { useTranslate } from \"react-admin\";\n\nconst useQuickFilterStyles = makeStyles(theme => ({\n chip: {\n marginBottom: theme.spacing(1),\n },\n}));\n\nconst QuickFilter = ({ label }) => {\n const translate = useTranslate();\n const classes = useQuickFilterStyles();\n return ;\n};\n\nexport { QuickFilter }","import { InputAdornment } from \"@material-ui/core\";\nimport { TextInput, useTranslate } from \"react-admin\";\nimport SearchIcon from '@material-ui/icons/Search';\n\nconst SearchFilter= (props:{ source?: string; alwaysOn?: boolean }) => {\n const { source = \"q\", alwaysOn = true, ...rest } = props;\n const translate = useTranslate();\n return (\n \n \n \n ),\n }}\n {...rest}\n />\n );\n};\n\nexport { SearchFilter }","import { required, TextInput } from \"react-admin\";\n\nconst IdFilter= (props:{ source?: string; label?:string; alwaysOn?: boolean }) => {\n const { source = \"id\", label=\"components.controls.filters.idFilter.label\" } = props;\n\n return (\n \n );\n};\n\nexport { IdFilter };\n","import { Box } from \"@material-ui/core\";\nimport { useTranslate } from \"react-admin\";\n\nexport interface StatusItemProps {\n statusLabel: string;\n statusValue: number | string;\n statusColor?: string;\n getColorFromStatus?: (status: any) => string;\n width?: string;\n}\n\nconst StatusItem=({\n statusLabel,\n statusValue,\n statusColor,\n getColorFromStatus,\n width = '100%',\n}:StatusItemProps) => {\n const translate = useTranslate();\n return (\n \n \n   {translate(statusLabel)} \n \n );\n};\n\nexport { StatusItem };\n","import { ReactNode, useMemo } from \"react\";\nimport { FilterList, FilterListItem } from \"react-admin\";\nimport { StatusItem, StatusItemProps } from \"./StatusItem\";\n\nexport interface StatusFilterListProps {\n statusFieldName?: string;\n label: string;\n icon: ReactNode;\n statusList: StatusItemProps[];\n width?: string;\n}\n\nconst StatusFilterList = ({\n statusFieldName = \"status\",\n label,\n icon,\n statusList,\n width,\n}: StatusFilterListProps) => {\n\n const filterList = useMemo( () => (\n \n {\n statusList.map((statusEntry: StatusItemProps) => (\n \n }\n value={{\n [statusFieldName]: statusEntry.statusValue,\n }}\n />\n ))\n }\n \n ), [icon, label, statusFieldName, statusList, width]);\n\n return filterList;\n};\n\nexport { StatusFilterList };\n","import { ReactNode } from \"react\";\nimport { FilterList, FilterListItem } from \"react-admin\";\n\nexport interface FixedDateRangeFilterListProps {\n label: string;\n icon: ReactNode;\n gteSource: string;\n lteSource: string;\n dateRangeList: {\n label: string;\n gte: string | undefined;\n lte: string | undefined;\n }[];\n}\n\nconst FixedDateRangeFilterList= ({\n label,\n icon,\n gteSource,\n lteSource,\n dateRangeList,\n}:FixedDateRangeFilterListProps) => {\n return (\n \n {dateRangeList?.map((dateRange) => (\n \n ))}\n \n );\n};\n\nexport { FixedDateRangeFilterList };\n","export const getTabbedFormProps = (props) => {\n return {\n basePath: props?.basePath,\n children: props?.children,\n className: props?.className,\n classes: props?.classes,\n initialValues: props?.classes,\n margin: props?.margin,\n mutationMode: props?.mutationMode,\n record: props?.record,\n redirect: props?.redirect,\n resource: props?.resource,\n sanitizeEmptyValues: props?.sanitizeEmptyValues,\n save: props?.save,\n submitOnEnter: props?.submitOnEnter,\n syncWithLocation: props?.syncWithLocation,\n tabs: props?.tabs,\n toolbar: props?.toolbar,\n undoable: props?.undoable,\n variant: props?.variant,\n warnWhenUnsavedChanges: props?.warnWhenUnsavedChanges,\n };\n };","export const DEFAULT_PER_PAGE = 25;\nexport const MAX_RECORDS_PER_PAGE=1000;\nexport const DEFAULT_DATE_TIME_OPTIONS = {\n showTodayButton: true,\n clearable: true,\n}\n\nexport const APP_MAX_FILE_SIZE_BYTES = 15728640; //15MBs\nexport const PIC_MAX_FILE_SIZE_BYTES = 1048576; //1MB\n\nexport const SUPPORTED_IMAGE_TYPES: string[] = [\n \"image/jpg\",\n \"image/jpeg\",\n \"image/png\",\n \"image/tiff\",\n \"image/gif\",\n];\n\nexport const ALLOWED_FILE_TYPES: string[] = [\n ...SUPPORTED_IMAGE_TYPES,\n \"text/plain\",\n \"text/csv\",\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/bz\",\n \"application/bz2\",\n \"application/zip\",\n \"application/gzip\",\n \"application/x-tar\",\n \"application/x-7z-compressed\",\n];","import { FileField, FileFieldProps, FileInput, FileInputProps, InputProps } from \"react-admin\";\nimport { DropzoneOptions } from \"react-dropzone\";\nimport { FileInputPlaceholder } from \"..\";\nimport { UploadedFilesField } from \"../..\";\nimport { SectionTitleSubtitle } from \"../../..\";\nimport { APP_MAX_FILE_SIZE_BYTES, ALLOWED_FILE_TYPES } from \"../../../../common\";\n\ninterface FileInputOptions extends DropzoneOptions {\n inputProps?: any;\n onRemove?: Function;\n}\n\nexport interface MediaInputFieldProps\n extends Partial,\n Partial> {\n showUploadedFiles?: boolean;\n showSectionTitle?: boolean;\n sectionTitle?: string;\n sectionSubtitle?: string;\n fileFieldOptions?: FileFieldProps,\n}\n\nconst DEFAULT_FILE_FIELD_OPTIONS: FileFieldProps = {\n src: \"src\",\n title: \"title\",\n}\n\nconst MediaInputField = (props: MediaInputFieldProps) => {\n const { \n showUploadedFiles = false, \n showSectionTitle = true, \n sectionTitle = \"components.controls.media.fieldGroups.attachments\",\n sectionSubtitle,\n source = \"files\",\n label=\"components.controls.media.fields.files\",\n helperText=\"components.controls.media.help.files\",\n multiple=true,\n placeholder = ,\n //@ts-ignore\n accept=ALLOWED_FILE_TYPES,\n maxSize=APP_MAX_FILE_SIZE_BYTES,\n fileFieldOptions = DEFAULT_FILE_FIELD_OPTIONS,\n ...rest \n } = props;\n\n return (\n <>\n {\n showSectionTitle && \n }\n \n \n \n {showUploadedFiles && }\n \n );\n};\n\nexport { MediaInputField };\n","import { useTranslate } from \"react-admin\";\n\nconst FilenameField = (props) => {\n const translate = useTranslate();\n const apiUrl = process.env[\"REACT_APP_SERVER_ENDPOINT\"];\n const downloadUrl = `${apiUrl}/media/download/${props?.record?.id}`;\n\n return (\n \n {props?.record?.originalFileName}\n \n );\n};\n\nFilenameField.defaultProps = {\n label: \"components.controls.media.fields.originalFileName\",\n};\n\nexport { FilenameField };\n","import { makeStyles, Typography } from \"@material-ui/core\";\nimport { useTranslate } from \"react-admin\";\n\nconst useStyles = makeStyles((theme) => ({\n placeholder: {\n textAlign: \"center\",\n borderStyle: \"dashed\",\n borderWidth: \"1px\",\n borderRadius: \"2%\",\n color: \"rgba(0, 0, 0, 0.54)\",\n },\n note: {\n fontSize: \"small\",\n fontStyle: \"italic\",\n },\n}));\n\nexport interface FileInputPlaceholderProps {\n fileDescription?: string;\n maxFileSize?: string;\n}\n\nconst FileInputPlaceholder= ({\n fileDescription = \"components.controls.media.placeholder.labels.fileDescription\",\n maxFileSize = \"components.controls.media.placeholder.labels.maxFileSize\",\n}:FileInputPlaceholderProps) => {\n const classes = useStyles();\n const translate = useTranslate();\n const fileDescriptionLabel = translate(fileDescription);\n const maxFileSizeLabel = translate(maxFileSize);\n const line1 = translate(\"components.controls.media.placeholder.content.line1\", {fileDescriptionLabel});\n const line2 = translate(\"components.controls.media.placeholder.content.line2\");\n const line3 = translate(\"components.controls.media.placeholder.content.line3\", {fileDescriptionLabel, maxFileSizeLabel});\n \n return (\n \n

{line1}

\n

{line2}

\n

\n {line3}\n

\n \n );\n};\n\nexport { FileInputPlaceholder };\n","import { Dispatch, MouseEvent, ReactElement } from \"react\";\nimport { ConfirmProps } from \"react-admin\";\n\nexport interface ListRowActionButtonsState {\n listRowActions?: Array;\n isSpeedDialOpen: boolean;\n isConfirmOpen: boolean;\n confirm?: ConfirmProps;\n}\n\nexport enum ListRowActionButtonsActionTypes {\n INIT,\n OPEN_SPEED_DIAL,\n CLOSE_SPEED_DIAL,\n OPEN_CONFIRM,\n CLOSE_CONFIRM,\n HANDLE_CONFIRM_ACTION,\n SET_LIST_ROW_ACTIONS,\n}\n\nexport type ListRowActionButtonsActions =\n | {\n type: ListRowActionButtonsActionTypes.INIT;\n } \n | {\n type: ListRowActionButtonsActionTypes.OPEN_SPEED_DIAL;\n }\n | {\n type: ListRowActionButtonsActionTypes.CLOSE_SPEED_DIAL;\n }\n | {\n type: ListRowActionButtonsActionTypes.OPEN_CONFIRM;\n payload: {\n confirm: ConfirmProps;\n };\n }\n | {\n type: ListRowActionButtonsActionTypes.CLOSE_CONFIRM;\n }\n | {\n type: ListRowActionButtonsActionTypes.HANDLE_CONFIRM_ACTION;\n payload: {\n event: MouseEvent,\n }\n }\n | {\n type: ListRowActionButtonsActionTypes.SET_LIST_ROW_ACTIONS;\n payload: {\n listRowActions: Array;\n };\n };\n\nexport interface ListRowActionButtonsContextProps {\n state?: ListRowActionButtonsState;\n dispatch?: Dispatch;\n}\n","import { createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport MediaIcon from \"@material-ui/icons/Backup\";\nimport { EmptyState } from \"../../..\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n emptyStateContainer: {\n width: \"25%\",\n // display: \"flex\",\n // flexDirection: \"column\",\n // alignItems: \"flex-start\"\n },\n emptyStateIcon: {\n width: \"1.25em\",\n height: \"1.25em\",\n alignSelf: \"center\",\n },\n })\n);\n\nconst MediaEmptyState = () => {\n const classes = useStyles();\n\n return (\n \n );\n};\n\nexport { MediaEmptyState };\n","import { required, minLength, maxLength } from 'react-admin';\n\nconst validateFirstNameMessage =\n 'resources.User.validations.firstName.required';\nconst validateLastNameMessage = 'resources.User.validations.lastName.required';\n\nconst validateFirstName = [\n required(validateFirstNameMessage),\n minLength(2),\n maxLength(25)\n];\nconst validateLastName = [\n required(validateLastNameMessage),\n minLength(2),\n maxLength(25)\n];\n\nconst validatePassword = [\n minLength(6),\n];\n\nconst matchPassword = (value, allValues) =>\n (value || allValues.password) && value !== allValues.password\n ? `Please confirm your password`\n : undefined;\n\nconst validate = {\n validateFirstName,\n validateLastName,\n validatePassword,\n matchPassword\n};\n\nexport default validate;\n","import { createStyles, Theme } from \"@material-ui/core/styles\";\n\nconst styles = (theme: Theme) => \ncreateStyles({\n clearWithFloatLeft: {\n float: \"left\",\n clear: \"left\",\n },\n floatLeftWithMarginLeft: {\n float: \"left\",\n marginLeft: 32,\n },\n marginTop20: {\n marginTop: \"25px\",\n },\n actionButton: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n padding: \"8px 0 14px 8px\",\n },\n inlineGridWith50PercentWidth: {\n [theme.breakpoints.up(\"xs\")]: {\n display: \"inline-grid\",\n width: \"50%\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n width: \"100%\",\n },\n },\n});\n\nexport { styles };\n","import { Link } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentCreate from '@material-ui/icons/Create';\n//import Button from '@material-ui/core/Button';\nimport { Button, useTranslate } from 'react-admin';\nimport { styles } from './style';\n\nconst useStyles = makeStyles(styles);\n\ninterface ProfileActionsProps {\n href: string;\n buttonTitle: string\n}\n\nconst stopPropagation = e => e.stopPropagation();\n\nconst ProfileActions= ({ href, buttonTitle }:ProfileActionsProps) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n return (\n
\n \n
\n );\n};\n\nexport default ProfileActions;\n","import { SpeedDialAction, SpeedDialActionProps } from \"@material-ui/lab\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { Record, useTranslate } from \"react-admin\";\n\nexport interface SingleListRowActionProps extends SpeedDialActionProps {\n record?: Record;\n handleClick?: (clickEvent, record?: Record) => void;\n shouldDisplay?: (record?: Record, extraData?: any) => Promise;\n permissionKey?: string;\n permissionName?: string;\n extraDisplayData?: any;\n}\n\nconst SingleListRowAction = (props: SingleListRowActionProps) => {\n const {\n record,\n handleClick,\n shouldDisplay,\n extraDisplayData,\n permissionKey,\n permissionName,\n ...rest\n } = props;\n const translate = useTranslate();\n const translatedTooltip =\n props?.tooltipTitle &&\n typeof props?.tooltipTitle === \"string\"\n ? translate(props?.tooltipTitle)\n : props?.tooltipTitle;\n const [shouldShowAction, setShouldShowAction] = useState(true);\n const keyValue = `slra-${record?.id}-${props?.tooltipTitle}`;\n\n useEffect(() => {\n async function getShouldDisplay() {\n let shouldDisplayAction = true;\n\n if (shouldDisplay && record) {\n shouldDisplayAction = await shouldDisplay(record, extraDisplayData);\n }\n setShouldShowAction(shouldDisplayAction);\n }\n\n getShouldDisplay();\n }, [extraDisplayData, record, shouldDisplay]);\n\n if (!shouldShowAction) {\n return \n }\n\n return (\n handleClick && handleClick(clickEvent, record)}\n tooltipTitle={translatedTooltip}\n />\n );\n};\n\nSingleListRowAction.defaultProps = {\n className: \"fabPrimary\",\n tooltipPlacement: \"bottom-start\",\n extraDisplayData: null,\n};\n\nexport { SingleListRowAction };\n","import { createContext } from \"react\";\nimport { ListRowActionButtonsContextProps } from \"./types\";\n\nconst ListRowActionButtonsContext = createContext({});\n\nListRowActionButtonsContext.displayName = \"ListRowActionButtonsContext\";\n\nexport { ListRowActionButtonsContext };","import { Fragment, useCallback, useContext, useEffect, useState } from \"react\";\nimport {\n SingleListRowAction,\n SingleListRowActionProps,\n} from \"../SingleListRowAction\";\nimport {\n Record,\n useListContext,\n useRedirect,\n useResourceDefinition,\n} from \"react-admin\";\nimport { usePermissionsCheck } from \"../../../../../core\";\nimport { ListRowActionButtonsContext } from \"../ListRowActionButtonsContext\";\nimport { ListRowActionButtonsActionTypes } from \"../types\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n fabPrimary: {\n color: theme.palette.primary.main,\n },\n })\n);\n\nexport interface RedirectListRowActionProps extends SingleListRowActionProps {\n calculateRedirectPath: (record?: Record) => string;\n}\n\nconst RedirectListRowAction = (props: RedirectListRowActionProps) => {\n const { calculateRedirectPath, ...rest } = props;\n const { resource } = useListContext();\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n const { permissionKey, permissionName } = props;\n const classes = useStyles();\n\n const redirect = useRedirect();\n const { options } = useResourceDefinition({ resource });\n const actionClassName = props?.className ?? classes.fabPrimary;\n const keyValue = `rlra-${props?.record?.id}-${props?.tooltipTitle}`;\n\n const [canAccess, setCanAccess] = useState(false);\n\n const actionPermissionName =\n !permissionName && permissionKey\n ? options?.allowedPermissions[permissionKey]\n : permissionName;\n\n const { dispatch } = useContext(ListRowActionButtonsContext);\n\n const handleRedirectAction = useCallback(\n (clickEvent, record) => {\n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.CLOSE_SPEED_DIAL,\n });\n }\n const redirectPath = calculateRedirectPath(record);\n redirect(redirectPath);\n },\n [dispatch, calculateRedirectPath, redirect]\n );\n\n useEffect(() => {\n if (permissionsLoaded) {\n const canAccess = actionPermissionName\n ? hasPermissionAccess(actionPermissionName)\n : true;\n setCanAccess(canAccess);\n }\n }, [permissionsLoaded, actionPermissionName, hasPermissionAccess]);\n\n if (!canAccess) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport { RedirectListRowAction };\n","import { useCallback, useContext, useEffect, useState } from \"react\";\nimport {\n useResourceDefinition,\n useDeleteWithConfirmController,\n useListContext,\n} from \"react-admin\";\nimport { ListRowActionButtonsContext } from \"../ListRowActionButtonsContext\";\nimport {\n SingleListRowAction,\n SingleListRowActionProps,\n} from \"../SingleListRowAction\";\nimport { usePermissionsCheck } from \"../../../../../core\";\nimport ActionDelete from \"@material-ui/icons/Delete\";\nimport { ListRowActionButtonsActionTypes } from \"../types\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport CancelTwoToneIcon from \"@material-ui/icons/CancelTwoTone\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n fabError: {\n color: theme.palette.error.main,\n },\n })\n);\n\nconst DeleteListRowActionButton = (props: SingleListRowActionProps) => {\n const classes = useStyles();\n const { basePath, resource } = useListContext();\n const { record } = props;\n\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n const { options } = useResourceDefinition({ resource });\n const deletePermissionName = options?.allowedPermissions?.delete;\n\n const [canDelete, setCanDelete] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const canDelete = deletePermissionName\n ? hasPermissionAccess(deletePermissionName)\n : true;\n setCanDelete(canDelete);\n }\n }, [permissionsLoaded, deletePermissionName, hasPermissionAccess]);\n\n const { dispatch } = useContext(ListRowActionButtonsContext);\n\n const { handleDialogOpen, handleDialogClose, handleDelete } =\n useDeleteWithConfirmController({\n record,\n basePath,\n resource,\n });\n const openConfirmDialog = useCallback(\n (clickEvent, record) => {\n const handleOnConfirm = (event) => {\n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.CLOSE_CONFIRM,\n });\n }\n handleDelete(event);\n };\n\n const handleOnConfirmClose = (event) => {\n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.CLOSE_CONFIRM,\n });\n }\n handleDialogClose(event);\n };\n\n const title = \"components.buttons.listRowDeleteAction.title\";\n const content = \"components.buttons.listRowDeleteAction.content\";\n const confirmMessage = \"components.buttons.listRowDeleteAction.confirm\";\n const cancel = \"components.buttons.listRowDeleteAction.cancel\";\n const confirm = {\n title,\n content,\n onConfirm: handleOnConfirm,\n onClose: handleOnConfirmClose,\n confirmColor: \"warning\",\n CancelIcon: CancelTwoToneIcon,\n confirm: confirmMessage,\n cancel,\n };\n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.OPEN_CONFIRM,\n payload: {\n confirm,\n },\n });\n }\n\n handleDialogOpen(clickEvent);\n },\n // eslint-disable-next-line\n [dispatch, handleDialogOpen]\n );\n\n if (!canDelete) {\n return null;\n }\n\n return (\n }\n className={classes.fabError}\n handleClick={openConfirmDialog}\n />\n );\n};\n\nexport { DeleteListRowActionButton };\n","import { cloneElement, ReactElement, useMemo } from \"react\";\nimport { SingleListRowActionProps } from \"../SingleListRowAction\";\nimport { RedirectListRowAction } from \"./RedirectListRowAction\";\nimport {\n Record,\n linkToRecord,\n useResourceDefinition,\n useListContext,\n} from \"react-admin\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport { DeleteListRowActionButton } from \"./DeleteListRowActionButton\";\n\ninterface DefaultCrudListRowActionsProps extends SingleListRowActionProps {\n shouldDisplayShow?: (record?: Record, extraData?: any) => Promise;\n shouldDisplayEdit?: (record?: Record, extraData?: any) => Promise;\n shouldDisplayDelete?: (record?: Record, extraData?: any) => Promise;\n calculateShowRedirectPath?: (record?: Record) => string;\n calculateEditRedirectPath?: (record?: Record) => string;\n extraShowDisplayData?: any;\n extraEditDisplayData?: any;\n extraDeleteDisplayData?: any;\n hasEdit?: boolean;\n hasShow?: boolean;\n}\n\nconst DefaultCrudListRowActions = (props: DefaultCrudListRowActionsProps) => {\n const { basePath, resource } = useListContext();\n const { options } = useResourceDefinition({ resource });\n const { hasEdit, hasShow } = props;\n const showPermissionName = options?.allowedPermissions?.show;\n const editPermissionName = options?.allowedPermissions?.update;\n const deletePermissionName = options?.allowedPermissions?.delete;\n\n const {\n shouldDisplayShow,\n shouldDisplayEdit,\n shouldDisplayDelete,\n calculateShowRedirectPath,\n calculateEditRedirectPath,\n extraShowDisplayData,\n extraEditDisplayData,\n extraDeleteDisplayData,\n open,\n ...rest\n } = props;\n\n const hasEditPermission = hasEdit && editPermissionName ? true: false;\n const hasShowPermission = hasShow && showPermissionName ? true: false;\n const displayDeleteButton = deletePermissionName ? true: false;\n const keyPrefix = props?.record?.id;\n\n const defaultActions: Array = useMemo(() => {\n const defaultActions: Array = [];\n\n const calculateDefaultEditRedirectPath = (record?: Record) => {\n const editPath = record\n ? linkToRecord(basePath || `/${resource}`, record?.id)\n : \"\";\n\n return editPath;\n };\n\n const calculateDefaultShowRedirectPath = (record?: Record) => {\n const showPath = record\n ? `${linkToRecord(basePath || `/${resource}`, record?.id)}/show`\n : \"\";\n\n return showPath;\n };\n\n if (hasEditPermission) {\n defaultActions.push(\n }\n calculateRedirectPath={\n calculateEditRedirectPath ?? calculateDefaultEditRedirectPath\n }\n shouldDisplay={shouldDisplayEdit}\n permissionKey=\"edit\"\n open={open}\n extraDisplayData={extraEditDisplayData}\n {...rest}\n />\n );\n }\n\n if (hasShowPermission) {\n defaultActions.push(\n }\n calculateRedirectPath={\n calculateShowRedirectPath ?? calculateDefaultShowRedirectPath\n }\n shouldDisplay={shouldDisplayShow}\n permissionKey=\"show\"\n open={open}\n extraDisplayData={extraShowDisplayData}\n {...rest}\n />\n );\n }\n\n if (displayDeleteButton) {\n defaultActions.push(\n \n );\n }\n\n return defaultActions;\n }, [hasEditPermission, hasShowPermission, displayDeleteButton, basePath, resource, keyPrefix, calculateEditRedirectPath, shouldDisplayEdit, open, extraEditDisplayData, rest, calculateShowRedirectPath, shouldDisplayShow, extraShowDisplayData, shouldDisplayDelete, extraDeleteDisplayData]);\n\n return (\n <>\n {defaultActions?.map((defaultAction) => {\n return cloneElement(defaultAction, {\n record: props?.record,\n });\n })}\n \n )\n};\n\nDefaultCrudListRowActions.displayName = \"DefaultCrudListRowActions\";\n\nDefaultCrudListRowActions.defaultProps = {\n hasShow: true,\n};\n\nexport { DefaultCrudListRowActions };\n","import { FunctionComponent, ReactNode } from \"react\";\nimport { makeStyles, Theme, createStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport HomeIcon from \"@material-ui/icons/Home\";\nimport ContentAddIcon from \"@material-ui/icons/Add\";\nimport ContentCreateIcon from \"@material-ui/icons/Create\";\nimport ImageEyeIcon from \"@material-ui/icons/RemoveRedEye\";\nimport { Link as RouterLink } from 'react-router-dom';\n\nimport { useTranslate } from \"react-admin\";\nimport DefaultIcon from \"@material-ui/icons/ViewList\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n link: {\n display: \"flex\",\n alignItems: \"center\",\n },\n icon: {\n marginRight: theme.spacing(0.5),\n width: 20,\n height: 20,\n },\n })\n);\n\nexport enum CrudActionType {\n CREATE = \"ra.action.create\",\n EDIT = \"ra.action.edit\",\n SHOW = \"ra.action.show\",\n}\n\nconst actionIcons = {\n [CrudActionType.CREATE]: ContentAddIcon,\n [CrudActionType.EDIT]: ContentCreateIcon,\n [CrudActionType.SHOW]: ImageEyeIcon,\n};\n\nexport interface CrudActionBreadcrumbProps {\n resourceLabel: string;\n listPath: string;\n Icon: FunctionComponent;\n actionType: CrudActionType | string;\n actionIcon? : ReactNode;\n}\n\nconst CrudActionBreadcrumb = ({\n resourceLabel,\n listPath,\n Icon,\n actionType,\n actionIcon,\n}: CrudActionBreadcrumbProps) => {\n const classes = useStyles();\n const translate = useTranslate();\n const ActionIcon = actionIcon ?? actionIcons[actionType];\n\n return (\n \n \n \n {translate(\"ra.page.dashboard\")}\n \n \n {Icon ? (\n \n ) : (\n \n )}\n {resourceLabel && translate(resourceLabel, {smart_count: 2})}\n \n \n {}\n {translate(actionType)}\n \n \n );\n};\n\nexport { CrudActionBreadcrumb };\n","import { createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport { useCallback, useContext } from \"react\";\nimport {\n useListContext,\n usePermissions,\n useResourceDefinition,\n ConfirmProps,\n Record,\n} from \"react-admin\";\nimport { hasAccess } from \"../../../../../core\";\nimport { ListRowActionButtonsContext } from \"../ListRowActionButtonsContext\";\nimport {\n SingleListRowAction,\n SingleListRowActionProps,\n} from \"../SingleListRowAction\";\nimport { ListRowActionButtonsActionTypes } from \"../types\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n fabPrimary: {\n color: theme.palette.primary.main,\n },\n })\n);\n\nexport const EMPTY_CONFIRM_HANDLER = (event) => {}\n\nexport interface ConfirmListViewActionButtonProps\n extends SingleListRowActionProps {\n confirm: ConfirmProps;\n onConfirmHandler: (record?: Record) => Promise | void;\n}\n\nconst ConfirmListViewActionButton = (props: ConfirmListViewActionButtonProps) => {\n const { resource } = useListContext();\n const { permissionKey, permissionName, record } = props;\n const {confirm, onConfirmHandler, ...rest } = props;\n const { options } = useResourceDefinition({ resource });\n const { loaded: permissionsLoaded, permissions } = usePermissions(props);\n\n const classes = useStyles();\n const actionClassName = props?.className || classes.fabPrimary;\n\n const actionPermissionName =\n !permissionName && permissionKey\n ? options?.allowedPermissions[permissionKey]\n : permissionName;\n\n const canAccess =\n actionPermissionName && permissionsLoaded\n ? hasAccess(permissions, actionPermissionName)\n : true;\n const { dispatch } = useContext(ListRowActionButtonsContext);\n\n const openConfirmDialog = useCallback(\n (clickEvent, record) => {\n const handleOnConfirm = (event) => {\n\n confirm?.onConfirm(event);\n\n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.CLOSE_CONFIRM,\n });\n }\n\n if(onConfirmHandler){\n onConfirmHandler(record);\n }\n };\n\n const handleOnConfirmClose = (event) => {\n confirm?.onClose(event);\n \n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.CLOSE_CONFIRM,\n });\n }\n };\n\n const confirmProps = {\n ...confirm,\n onConfirm: handleOnConfirm,\n onClose: handleOnConfirmClose,\n };\n\n if (dispatch && confirm) {\n dispatch({\n type: ListRowActionButtonsActionTypes.OPEN_CONFIRM,\n payload: {\n confirm: confirmProps,\n },\n });\n }\n },\n [confirm, onConfirmHandler, dispatch]\n );\n\n if (!canAccess) {\n return
\n }\n\n return (\n \n );\n};\n\nexport { ConfirmListViewActionButton };\n","import { cloneElement, MouseEventHandler, ReactElement, useContext, useEffect, useMemo, useState } from \"react\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport SpeedDial from \"@material-ui/lab/SpeedDial\";\nimport MoreVertIcon from \"@material-ui/icons/MoreVert\";\nimport SpeedDialIcon from \"@material-ui/lab/SpeedDialIcon\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport {\n FieldProps,\n Confirm,\n} from \"react-admin\";\n\nimport { ListRowActionButtonsContext } from \"./ListRowActionButtonsContext\";\nimport { ListRowActionButtonsActionTypes } from \"./types\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n zIndex: 10,\n transform: \"translateZ(0px)\",\n flexGrow: 1,\n },\n speedDial: {\n zIndex: 11,\n \"& .MuiFab-sizeSmall\": {\n width: 35,\n height: 35,\n \"& svg\": {\n \"width\": \"0.85em\",\n \"height\": \"0.85em\",\n }\n },\n \"& .MuiSpeedDial-actions[role=menu]\": {\n zIndex: 12,\n position: \"absolute\",\n display: \"flex\",\n right: \"30px\",\n flexDirection: \"row\",\n },\n },\n fabPrimary: {\n margin: 0,\n marginLeft: 4,\n color: theme.palette.primary.main,\n },\n fabSecondary: {\n margin: 0,\n marginLeft: 4,\n color: theme.palette.secondary.main,\n },\n fabError: {\n margin: 0,\n marginLeft: 4,\n color: theme.palette.error.main,\n },\n })\n);\n\nexport interface ListRowActionsProps extends FieldProps {\n overriddenListRowActions?: Array,\n}\n\nconst ListRowActions = (props: ListRowActionsProps) => {\n const classes = useStyles();\n const { state, dispatch } = useContext(ListRowActionButtonsContext);\n const overriddenListRowActions = props?.overriddenListRowActions;\n\n const { record } = props;\n\n const listRowActions = useMemo(() => {\n return overriddenListRowActions ?? state?.listRowActions;\n }, [overriddenListRowActions, state?.listRowActions])\n\n const [isSpeedDialOpen, setSpeedDialOpen] = useState(false);\n\n const handleSpeedDialOpen = () => {\n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.OPEN_SPEED_DIAL,\n });\n }\n setSpeedDialOpen(true);\n };\n\n const handleSpeedDialClose = () => {\n if (dispatch) {\n dispatch({\n type: ListRowActionButtonsActionTypes.CLOSE_SPEED_DIAL,\n });\n }\n setSpeedDialOpen(false);\n };\n\n const handleConfirmClose = (event, onConfirmClose?: MouseEventHandler) => {\n handleSpeedDialClose();\n if(onConfirmClose){\n onConfirmClose(event);\n }\n return true;\n };\n\n if (listRowActions?.length) {\n\n return (\n
\n } />}\n onClose={handleSpeedDialClose}\n onOpen={handleSpeedDialOpen}\n open={isSpeedDialOpen}\n direction={\"left\"}\n openIcon={}\n FabProps={{\n size: \"small\",\n }}\n >\n {isSpeedDialOpen && listRowActions?.map((listRowAction, index) => {\n const keyValue=`listRowActions-${index}-${record?.id}`;\n return cloneElement(listRowAction, {\n record: record,\n key: keyValue\n });\n })}\n \n {state?.isConfirmOpen && state?.confirm && (\n handleConfirmClose(event, state?.confirm?.onClose)}\n />\n )}\n
\n );\n } else {\n return null;\n }\n};\n\nexport { ListRowActions }\n","import { ReactElement } from \"react\";\nimport {\n ListRowActionButtonsActions,\n ListRowActionButtonsActionTypes,\n ListRowActionButtonsState,\n} from \"./types\";\n\nexport const prepareListRowActionButtonsInitialState = (\n listRowActions?: Array\n) => {\n const newListRowActions = listRowActions\n ? Array.from(listRowActions)\n : undefined;\n const state = {\n listRowActions: newListRowActions,\n isSpeedDialOpen: false,\n isConfirmOpen: false,\n confirm: undefined,\n };\n return state;\n};\n\nexport const listRowActionButtonsReducer = (\n state: ListRowActionButtonsState,\n action: ListRowActionButtonsActions\n): ListRowActionButtonsState => {\n switch (action.type) {\n case ListRowActionButtonsActionTypes.INIT: {\n const newState = prepareListRowActionButtonsInitialState();\n\n return newState;\n }\n\n case ListRowActionButtonsActionTypes.OPEN_SPEED_DIAL: {\n const newState = {\n ...state,\n isSpeedDialOpen: true,\n };\n\n return newState;\n }\n\n case ListRowActionButtonsActionTypes.CLOSE_SPEED_DIAL: {\n const newState = {\n ...state,\n isSpeedDialOpen: false,\n };\n\n return newState;\n }\n\n case ListRowActionButtonsActionTypes.OPEN_CONFIRM: {\n const confirm = action?.payload?.confirm;\n const newState = {\n ...state,\n isConfirmOpen: true,\n isSpeedDialOpen: false,\n confirm,\n };\n\n return newState;\n }\n\n case ListRowActionButtonsActionTypes.CLOSE_CONFIRM: {\n const newState = {\n ...state,\n isConfirmOpen: false,\n confirm: undefined,\n };\n\n return newState;\n }\n\n case ListRowActionButtonsActionTypes.HANDLE_CONFIRM_ACTION: {\n const onConfirm = state?.confirm?.onConfirm;\n const event = action?.payload?.event;\n\n if (onConfirm) {\n onConfirm(event);\n }\n\n const newState = {\n ...state,\n isConfirmOpen: false,\n confirm: undefined,\n };\n\n return newState;\n }\n\n case ListRowActionButtonsActionTypes.SET_LIST_ROW_ACTIONS: {\n const listRowActions = action?.payload?.listRowActions;\n const newState = {\n ...state,\n listRowActions,\n };\n\n return newState;\n }\n }\n};\n","import get from \"lodash/get\";\nimport isEmpty from \"lodash/isEmpty\";\nimport { DatagridStorage } from \"./types\";\n//import lz from 'lzutf8';\n\nexport const CUSTOMIZABLE_LIST_STORAGE_KEY = \"raCustomListColumns\";\n\n// Very basic storage helper\n// values are stored in browser localStorage\n\nconst getRootValue = (storageKey) => {\n try {\n const compressedValue = window.localStorage.getItem(storageKey);\n /* const uncompressedValue = lz.decompress(compressedValue);\n const jsonValue = JSON.parse(uncompressedValue); */\n const jsonValue = compressedValue ? JSON.parse(compressedValue) : {};\n return jsonValue;\n } catch (e) {\n return undefined;\n }\n};\n\nconst setRootValue = (storageKey, value) => {\n try {\n if (isEmpty(value)) {\n //console.log(`Empltying storage`)\n window.localStorage.removeItem(storageKey);\n } else {\n const stringValue = JSON.stringify(value);\n /* const compressedValue = lz.compress(stringValue); \n window.localStorage.setItem(STORAGE_KEY, compressedValue); */\n window.localStorage.setItem(storageKey, stringValue);\n }\n } catch (e) {}\n};\n\nconst LocalStorage: DatagridStorage = {\n get(storageKey, key) {\n return get(getRootValue(storageKey), key);\n },\n set(storageKey, key, value) {\n const oldValue = getRootValue(storageKey);\n //console.log(`Storage Set Value: ${JSON.stringify(value)}`)\n if (isEmpty(value)) {\n this.remove(storageKey, key);\n } else {\n setRootValue(storageKey, {\n ...oldValue,\n [key]: value,\n });\n }\n },\n remove(storageKey, key) {\n const rootValue = getRootValue(storageKey);\n if (rootValue && key in rootValue) {\n delete rootValue[key];\n setRootValue(storageKey, rootValue);\n }\n },\n};\n\nexport { LocalStorage };\n","import { FunctionComponent } from \"react\";\nimport { makeStyles, Theme, createStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport HomeIcon from \"@material-ui/icons/Home\";\nimport { useTranslate } from \"react-admin\";\nimport DefaultIcon from '@material-ui/icons/ViewList';\nimport { Link as RouterLink } from 'react-router-dom';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n link: {\n display: \"flex\",\n alignItems: \"center\",\n },\n icon: {\n marginRight: theme.spacing(0.5),\n width: 20,\n height: 20,\n },\n })\n);\n\nexport interface ListActionBreadcrumbProps {\n resourceLabel: string;\n Icon: FunctionComponent;\n}\n\nconst ListActionBreadcrumb = ({ resourceLabel, Icon }: ListActionBreadcrumbProps) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return (\n \n \n \n {translate(\"ra.page.dashboard\")}\n \n \n {Icon?:}\n {resourceLabel && translate(resourceLabel, {smart_count: 2})}\n \n \n );\n};\n\nexport { ListActionBreadcrumb };\n","import { DatagridProps } from \"ra-ui-materialui\";\nimport { Dispatch, ReactNode } from \"react\";\nimport { DefaultListProps } from \"../../../types\";\n\nexport interface CustomizableListProps extends DefaultListProps {\n defaultColumns: string[];\n datagridStorage?: DatagridStorage;\n selectionTooltip?: string;\n selectionLabel?: string;\n}\n\nexport interface CustomizableListState {\n isOpen: boolean;\n defaultColumns?: string[];\n storage?: DatagridStorage;\n\n columns?: DatagridFieldProps[];\n fieldsList?: ReactNode | ReactNode[];\n\n selection?: string[];\n\n resource?: string;\n}\n\nexport enum CustomizableListActionTypes {\n INIT_DATAGRID,\n SET_COLUMNS,\n COLUMN_TOGGLED,\n RESET_ALL,\n SAVE_COLUMNS_STATE,\n OPEN_DIALOG,\n CLOSE_DIALOG,\n}\n\nexport type CustomizableListActions =\n | {\n type: CustomizableListActionTypes.INIT_DATAGRID;\n payload: {\n fieldsList: ReactNode | ReactNode[];\n };\n }\n | {\n type: CustomizableListActionTypes.SET_COLUMNS;\n payload: {\n columns: DatagridFieldProps[];\n };\n }\n | {\n type: CustomizableListActionTypes.COLUMN_TOGGLED;\n payload: {\n columnName: string;\n };\n }\n | {\n type: CustomizableListActionTypes.RESET_ALL;\n }\n | {\n type: CustomizableListActionTypes.SAVE_COLUMNS_STATE;\n }\n | {\n type: CustomizableListActionTypes.OPEN_DIALOG;\n }\n | {\n type: CustomizableListActionTypes.CLOSE_DIALOG;\n };\n\nexport interface CustomizableListContextProps {\n state?: CustomizableListState;\n dispatch?: Dispatch;\n}\n\nexport interface CustomizableSelectionDialogProps {\n //isOpen: boolean;\n //onClose: () => void;\n selectionText?: string;\n selectionLabel?: string;\n}\n\nexport interface DatagridFieldProps {\n id: string;\n label: string;\n source: string;\n isDisplayed: boolean;\n}\n\nexport interface CustomizableListDialogButtonProps {\n selectionTooltip?: string;\n}\n\nexport interface CustomizableDatagridProps extends DatagridProps {\n defaultColumns: string[];\n storage?: DatagridStorage;\n selectionTooltip?: string;\n selectionLabel?: string;\n selectionText?: string;\n}\n\nexport interface DatagridStorage {\n get(storageKey: string, key: string);\n set(storageKey: string, key: string, value?: any);\n remove(storageKey: string, key: string);\n}\n","import { hasAccess } from \"../../../core/helpers\";\n\nexport const prepareModifiedListProps = (options: any, otherProps, permissions: any) => {\n const allowedPermissions = options?.allowedPermissions;\n const listPermissionName = allowedPermissions?.list;\n const createPermissionName = allowedPermissions?.create;\n const editPermissionName = allowedPermissions?.update;\n const showPermissionName = allowedPermissions?.show;\n\n const hasList = otherProps?.hasList && hasAccess(permissions, listPermissionName);\n\n const hasCreate = otherProps?.hasCreate &&\n createPermissionName &&\n hasAccess(permissions, createPermissionName);\n\n const hasEdit = otherProps?.hasEdit &&\n editPermissionName &&\n hasAccess(permissions, editPermissionName);\n\n const hasShow = otherProps?.hasShow &&\n showPermissionName &&\n hasAccess(permissions, showPermissionName);\n\n const modifiedProps = {\n ...otherProps,\n hasList,\n hasCreate,\n hasEdit,\n hasShow,\n };\n return modifiedProps;\n}","import { Children, cloneElement, isValidElement, ReactNode } from \"react\";\nimport isEmpty from \"lodash/isEmpty\";\nimport filter from \"lodash/filter\";\nimport get from \"lodash/get\";\n\nimport { LocalStorage, CUSTOMIZABLE_LIST_STORAGE_KEY } from \"./LocalStorage\";\nimport { CustomizableListProps, CustomizableListState, DatagridFieldProps, DatagridStorage } from \"./types\";\nimport { DefaultCrudListRowActions } from \"../listActions/actions/DefaultCrudListRowActions\";\n\nconst prepareColumnKey = (columnKey, isDisplayed = 1) => {\n return `${columnKey}-${isDisplayed}`;\n}\n\nconst arrayToSelection = (defaultColumns?: string[]) => defaultColumns?.map( (column) => `${column}-1`);\n\nconst getColumnNames = (children) => {\n return filter(\n Children.map(children, (field) => get(field, [\"props\", \"source\"]))\n );\n};\n\nexport const getInitialCustomizableListSelection = (\n state: CustomizableListState,\n children: ReactNode | ReactNode[],\n) => {\n const resource = state?.resource;\n const defaultColumns = state?.defaultColumns;\n const storage = state?.storage;\n\n if (resource && storage) {\n const previousSelection = storage.get(CUSTOMIZABLE_LIST_STORAGE_KEY, resource);\n\n if (!isEmpty(previousSelection)) {\n // if we have a previously stored value, let's return it\n return previousSelection;\n } else if (!isEmpty(defaultColumns)) {\n // if defaultColumns are set let's return them\n return arrayToSelection(defaultColumns);\n } else {\n // otherwise we fallback on the default behaviour : display all columns\n return arrayToSelection(getColumnNames(children));\n }\n }\n};\n\nexport const recalculateFields = (targetSelection, fieldsList, sortChildren = true) => {\n let sortedNodeChildren: any[] = [];\n const childrenArr = Children.toArray(fieldsList);\n\n childrenArr.forEach( (child) => {\n const childKey = get(child, [\"props\", \"source\"])\n const displayedColumnKey = prepareColumnKey(childKey,1);\n const hiddenColumnKey = prepareColumnKey(childKey,0);\n const oldDataColumnPosition = get(child, [\"props\", \"datacolumnposition\"]);\n let shouldColumnBeDisplayed = 0;\n let columnPosition = -1;\n\n const displayedColumnPosition = targetSelection?.lastIndexOf(displayedColumnKey);\n const hiddenColumnPosition = targetSelection?.lastIndexOf(hiddenColumnKey);\n\n if(displayedColumnPosition >= 0){\n //This means that the column should be displayed\n shouldColumnBeDisplayed = 1;\n columnPosition = displayedColumnPosition;\n }else if(hiddenColumnPosition >= 0){\n columnPosition = hiddenColumnPosition;\n }\n\n if(!sortChildren && oldDataColumnPosition >= 0){\n columnPosition = oldDataColumnPosition;\n }\n\n const extraAttributes = {\n datacolumnposition: columnPosition,\n dataisdisplayed: shouldColumnBeDisplayed\n }\n\n if (isValidElement(child)) {\n const modifiedElement = cloneElement(child, extraAttributes);\n\n sortedNodeChildren.push(modifiedElement);\n }\n });\n\n if(sortChildren && sortedNodeChildren.length > 0){\n sortedNodeChildren.sort( (a,b) => {\n const firstDataColumnPosition = get(a, [\"props\", \"datacolumnposition\"]);\n const secondDataColumnPosition = get(b, [\"props\", \"datacolumnposition\"]);\n\n const firstSource = get(a, [\"props\", \"source\"]);\n const secondSource = get(b, [\"props\", \"source\"]);\n\n if(!firstSource){\n return 0;\n }\n\n if(!secondSource){\n return 0;\n }\n\n if(firstDataColumnPosition > secondDataColumnPosition){\n return 1;\n }\n\n if(secondDataColumnPosition > firstDataColumnPosition){\n return -1;\n }\n\n return 0;\n })\n }\n\n return sortedNodeChildren;\n};\n\nexport const prepareCustomizableListContextInitialState = (\n props: CustomizableListProps\n) => {\n\n const resource = props?.resource;\n const defaultColumns = props?.defaultColumns;\n const storage = props?.datagridStorage || LocalStorage;\n\n return {\n isOpen: false,\n resource,\n defaultColumns,\n storage\n };\n};\n\nexport const prepareColumns = (fieldsList: any[]) => {\n const childrenArr = Children.toArray(fieldsList);\n const columnsList: DatagridFieldProps[] = [];\n childrenArr.forEach( (child) => {\n const source = get(child, [\"props\", \"source\"]);\n if(source){\n const label = get(child, [\"props\", \"label\"]);\n const isDisplayed = get(child, [\"props\", \"dataisdisplayed\"]);\n const column = {\n id: source,\n label: label,\n source: source,\n isDisplayed\n }\n\n columnsList.push(column);\n }\n });\n\n return columnsList;\n}\n\nconst toggleColumnDisplay = (columnName:string, isColumnDisplayed: boolean, columns:DatagridFieldProps[] | undefined ) => {\n columns?.every(column => {\n if(column.source === columnName){\n column.isDisplayed = isColumnDisplayed;\n return false;\n }\n return true;\n });\n}\n\nexport const handleToggleColumn = (columnName, state: CustomizableListState) => {\n\n const resource = state?.resource;\n const storage = state?.storage;\n const selection = state?.selection;\n const columns = state?.columns;\n let isColumnDisplayed = true;\n\n const displayedColumnKey = prepareColumnKey(columnName,1);\n const hiddenColumnKey = prepareColumnKey(columnName,0);\n\n let toggledSelection = selection?[...selection]:[];\n\n if(selection?.includes(displayedColumnKey)){\n isColumnDisplayed = false;\n toggledSelection = selection?.map(columnKey => {\n if(columnKey === displayedColumnKey){\n return hiddenColumnKey;\n }\n\n return columnKey;\n });\n }else if(selection?.includes(hiddenColumnKey)){\n toggledSelection = selection.map(columnKey => {\n if(columnKey === hiddenColumnKey){\n return displayedColumnKey;\n }\n\n return columnKey;\n });\n } else{\n toggledSelection?.push(displayedColumnKey);\n } \n\n if(resource){\n storage?.set(CUSTOMIZABLE_LIST_STORAGE_KEY, resource, toggledSelection);\n }\n\n toggleColumnDisplay(columnName, isColumnDisplayed, columns);\n\n return {\n selection: toggledSelection,\n columns\n }\n}\n\nexport const removeResourceStorage = (resourceName: string, storage: DatagridStorage) => {\n storage.remove(CUSTOMIZABLE_LIST_STORAGE_KEY, resourceName);\n}\n\nexport const initializeDataGrid = (originalFieldsList: ReactNode | ReactNode[], state: CustomizableListState) => {\n\n const selection = getInitialCustomizableListSelection(state, originalFieldsList);\n const fieldsList = recalculateFields(selection, originalFieldsList, true);\n const columns = prepareColumns(fieldsList);\n const newState = {\n ...state,\n isOpen: false,\n fieldsList,\n selection,\n columns,\n }\n\n return newState;\n}\n\nexport const saveSelectionState = (state: CustomizableListState) => {\n const resource = state?.resource;\n const columns = state?.columns;\n const storage = state?.storage;\n\n if(resource && columns && storage){\n const newSelection = columns?.map(column => `${column.source}-${column.isDisplayed?1:0}`);\n storage?.set(CUSTOMIZABLE_LIST_STORAGE_KEY, resource, newSelection);\n return newSelection;\n }\n\n return state?.selection;\n}\n\nexport const prepareListRowActions = (listRowActions, modifiedProps) => {\n let defaultListRowActions: Array = [];\n if (listRowActions !== false && typeof listRowActions !== \"boolean\") {\n defaultListRowActions = listRowActions || [\n ,\n ];\n\n return defaultListRowActions;\n }\n}","import { createContext } from \"react\";\nimport { CustomizableListContextProps } from \"./types\";\n\nconst CustomizableListContext = createContext({});\n\nCustomizableListContext.displayName = \"CustomizableListContext\";\n\nexport { CustomizableListContext };\n","import {\n CustomizableListState,\n CustomizableListActions,\n CustomizableListActionTypes,\n} from \"./types\";\nimport {\n handleToggleColumn,\n removeResourceStorage,\n initializeDataGrid,\n saveSelectionState,\n} from \"./listUtils\";\n\nexport const customizableListReducer = (\n state: CustomizableListState,\n action: CustomizableListActions\n): CustomizableListState => {\n switch (action.type) {\n case CustomizableListActionTypes.INIT_DATAGRID: {\n const originalFieldsList = action?.payload?.fieldsList;\n const newState = initializeDataGrid(originalFieldsList, state);\n\n return newState;\n }\n\n case CustomizableListActionTypes.SET_COLUMNS: {\n const columns = action?.payload?.columns;\n const newState = {\n ...state,\n columns,\n };\n\n return newState;\n }\n\n case CustomizableListActionTypes.COLUMN_TOGGLED: {\n const columnName = action?.payload?.columnName;\n const { selection, columns } = handleToggleColumn(columnName, state);\n const newState = {\n ...state,\n selection,\n columns,\n };\n\n return newState;\n }\n\n case CustomizableListActionTypes.RESET_ALL: {\n if (state?.resource && state?.storage) {\n removeResourceStorage(state?.resource, state?.storage);\n }\n\n const newState = initializeDataGrid(state?.fieldsList, state);\n\n return newState;\n }\n\n case CustomizableListActionTypes.SAVE_COLUMNS_STATE: {\n const selection = saveSelectionState(state);\n\n const newState = {\n ...state,\n selection,\n };\n\n return newState;\n }\n\n case CustomizableListActionTypes.OPEN_DIALOG: {\n const newState = {\n ...state,\n ...{ isOpen: true },\n };\n\n return newState;\n }\n\n case CustomizableListActionTypes.CLOSE_DIALOG: {\n const newState = {\n ...state,\n ...{ isOpen: false },\n };\n\n return newState;\n }\n }\n};\n","import { cloneElement, useMemo, ReactElement } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n sanitizeListRestProps,\n Identifier,\n SortPayload,\n Exporter,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n} from \"ra-core\";\nimport { ToolbarProps } from \"@material-ui/core\";\n\nimport { TopToolbar, CreateButton, ExportButton } from \"react-admin\";\n\nconst DefaultListActions= (props:DefaultListActionsProps) => {\n const { className, exporter, filters, ...rest } = props;\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n selectedIds,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n return useMemo(\n () => (\n \n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n {hasCreate && }\n {exporter !== false && (\n \n )}\n {props?.children}\n \n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total] // eslint-disable-line react-hooks/exhaustive-deps\n );\n};\n\nDefaultListActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n currentSort: PropTypes.any,\n displayedFilters: PropTypes.object,\n exporter: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n filters: PropTypes.element,\n filterValues: PropTypes.object,\n hasCreate: PropTypes.bool,\n resource: PropTypes.string,\n onUnselectItems: PropTypes.func.isRequired,\n selectedIds: PropTypes.arrayOf(PropTypes.any),\n showFilter: PropTypes.func,\n total: PropTypes.number,\n};\n\nDefaultListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport interface DefaultListActionsProps extends ToolbarProps {\n currentSort?: SortPayload;\n className?: string;\n resource?: string;\n filters?: ReactElement;\n displayedFilters?: any;\n exporter?: Exporter | boolean;\n filterValues?: any;\n permanentFilter?: any;\n hasCreate?: boolean;\n basePath?: string;\n selectedIds?: Identifier[];\n onUnselectItems?: () => void;\n showFilter?: (filterName: string, defaultValue: any) => void;\n total?: number;\n}\n\nDefaultListActions.displayName = \"DefaultListActions\";\n\nexport { DefaultListActions };\n","import {useContext } from \"react\";\nimport {\n DefaultListActions,\n DefaultListActionsProps,\n} from \"../DefaultListActions\";\nimport ColumnIcon from \"@material-ui/icons/ViewColumn\";\nimport {\n ListVerticalActionMenuButton,\n ListVerticalActionMenuItemButton,\n} from \"../../../buttons\";\nimport { useTranslate } from \"react-admin\";\nimport { CustomizableListContext } from \"./CustomizableListContext\";\nimport { CustomizableListActionTypes } from \"./types\";\n\nconst CustomizableListActions= (props:DefaultListActionsProps) => {\n const translate = useTranslate();\n const { dispatch } = useContext(CustomizableListContext);\n\n const handleFieldSelectionDialogOpen = () => {\n if (dispatch) {\n dispatch({\n type: CustomizableListActionTypes.OPEN_DIALOG,\n });\n }\n };\n\n return (\n \n \n }\n onClick={handleFieldSelectionDialogOpen}\n primaryText={translate(\n \"components.lists.customizableList.dialogLabel\"\n )}\n tooltip={translate(\n \"components.lists.customizableList.dialogTooltip\"\n )}\n />\n \n {props?.children}\n \n );\n};\n\nCustomizableListActions.displayName = \"CustomizableListActions\";\n\nexport { CustomizableListActions };\n","import { forwardRef, useMemo, useContext } from \"react\";\nimport { FieldTitle } from \"react-admin\";\n\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport IconClose from \"@material-ui/icons/Close\";\nimport RotateLeftIcon from \"@material-ui/icons/RotateLeft\";\nimport Button from \"@material-ui/core/Button\";\nimport { useTranslate, useRefresh } from \"react-admin\";\nimport { ReactSortable } from \"react-sortablejs\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport {\n CustomizableListActionTypes,\n CustomizableSelectionDialogProps,\n DatagridFieldProps,\n} from \"./types\";\nimport Slide from \"@material-ui/core/Slide\";\nimport { TransitionProps } from \"@material-ui/core/transitions\";\nimport { CustomizableListContext } from \"./CustomizableListContext\";\n\nconst useStyles = makeStyles((theme) => ({\n donotdrag: {\n color: \"gray\",\n cursor: \"no-drop\",\n },\n drag: {\n cursor: \"drag\",\n },\n}));\n\nconst Transition = forwardRef(function Transition(\n props: TransitionProps & { children?: React.ReactElement },\n ref: React.Ref\n) {\n return ;\n});\n\nconst CustomizableSelectionDialog= ({\n //isOpen,\n selectionLabel,\n selectionText,\n // onClose,\n}:CustomizableSelectionDialogProps) => {\n const classes = useStyles();\n const translate = useTranslate();\n const refresh = useRefresh();\n \n const selectionLabelString = translate(selectionLabel!);\n const selectionTextString = translate(selectionText!);\n\n const { state, dispatch } = useContext(CustomizableListContext);\n const resource = state?.resource;\n const columns = state?.columns;\n\n const CustomFormGroup = useMemo(\n () => forwardRef((props, ref) => ),\n []\n );\n\n const handleClose = (event) => {\n if (dispatch) {\n dispatch({\n type: CustomizableListActionTypes.SAVE_COLUMNS_STATE,\n });\n\n dispatch({\n type: CustomizableListActionTypes.CLOSE_DIALOG,\n });\n }\n refresh();\n };\n\n const handleColumnToggled = ({ target: { value: columnName } }) => {\n if (dispatch) {\n dispatch({\n type: CustomizableListActionTypes.COLUMN_TOGGLED,\n payload: { columnName },\n });\n }\n };\n\n const handleReset = (event) => {\n if (dispatch) {\n dispatch({\n type: CustomizableListActionTypes.RESET_ALL,\n });\n }\n };\n\n const setColumns = (columns: DatagridFieldProps[]) => {\n if (dispatch) {\n dispatch({\n type: CustomizableListActionTypes.SET_COLUMNS,\n payload: { columns },\n });\n }\n };\n\n return (\n \n \n {selectionLabelString}\n \n \n {selectionTextString}\n {columns && Array.isArray(columns) && (\n \n {columns.map((column) => {\n const source = column?.source;\n const label = column?.label;\n //const dataIsDisplayed = get(column, [\"props\", \"dataisdisplayed\"]);\n const dataIsDisplayed = column?.isDisplayed;\n const childClassName = !dataIsDisplayed\n ? classes.donotdrag\n : classes.drag;\n\n if (!source) {\n return null;\n }\n\n return (\n \n }\n label={\n \n }\n />\n );\n })}\n \n )}\n \n \n \n \n \n \n );\n};\n\nCustomizableSelectionDialog.displayName = \"CustomizableSelectionDialog\";\n\nCustomizableSelectionDialog.defaultProps = {\n selectionLabel: \"components.lists.customizableList.selectionLabel\",\n selectionText: \"components.lists.customizableList.selectionText\",\n};\nexport { CustomizableSelectionDialog };\n","import { Pagination } from 'react-admin';\n\nconst DefaultPagination = props => ;\n\nexport { DefaultPagination }","import { ReactElement, useContext, useEffect } from \"react\";\nimport { prepareListRowActions } from \"./CustomizableList/listUtils\";\nimport { ListRowActionButtonsActionTypes, ListRowActionButtonsContext } from \"./listActions\";\n\nconst DummyListRowComponent = (props) => {\n const { dispatch } = useContext(ListRowActionButtonsContext);\n const { listRowActions, modifiedProps } = props;\n useEffect(() => {\n if (dispatch) {\n const defaultListRowActions = prepareListRowActions(\n listRowActions,\n modifiedProps\n );\n \n let newListRowActions: Array | undefined = undefined;\n if (defaultListRowActions && Array.isArray(defaultListRowActions)) {\n newListRowActions = Array.from(defaultListRowActions);\n }\n \n dispatch({\n type: ListRowActionButtonsActionTypes.SET_LIST_ROW_ACTIONS,\n payload: {\n //@ts-ignore\n listRowActions: newListRowActions,\n },\n });\n }\n }, []);\n return null;\n }\n\n export { DummyListRowComponent }","import { ReactElement, useReducer, useMemo } from \"react\";\nimport { Box } from \"@material-ui/core\";\nimport {\n List,\n usePermissions,\n useResourceDefinition,\n Loading,\n} from \"react-admin\";\nimport { CustomizableListProps } from \"./types\";\nimport { ListActionBreadcrumb } from \"../../../navigation\";\nimport { prepareModifiedListProps } from \"../listUtils\";\nimport {\n prepareCustomizableListContextInitialState,\n prepareListRowActions,\n} from \"./listUtils\";\nimport { CustomizableListContext } from \"./CustomizableListContext\";\nimport { customizableListReducer } from \"./customizableListReducer\";\nimport { CustomizableListActions } from \"./CustomizableListActions\";\nimport { DEFAULT_PER_PAGE } from \"../../../../common\";\nimport { CustomizableSelectionDialog } from \"./CustomizableSelectionDialog\";\nimport {\n ListRowActionButtonsContext,\n listRowActionButtonsReducer,\n prepareListRowActionButtonsInitialState,\n} from \"../listActions\";\nimport { DefaultPagination } from \"../DefaultPagination\";\nimport { DummyListRowComponent } from \"../DummyListRowComponent\";\n\nconst CustomizableList = (\n props: CustomizableListProps & { children: ReactElement }\n): ReactElement => {\n const { defaultColumns, listRowActions, ...rest } = props;\n const { options, icon } = useResourceDefinition(rest);\n const { loaded, permissions } = usePermissions();\n const modifiedProps = prepareModifiedListProps(options, rest, permissions);\n const listContextInitialState =\n prepareCustomizableListContextInitialState(modifiedProps);\n\n const listRowActionButtonsInitialState = useMemo(() => {\n const defaultListRowActions = prepareListRowActions(\n listRowActions,\n modifiedProps\n );\n const listRowActionButtonsInitialState =\n prepareListRowActionButtonsInitialState(defaultListRowActions);\n return listRowActionButtonsInitialState;\n }, [listRowActions]);\n\n const [customizableListState, customizableListDispatch] = useReducer(\n customizableListReducer,\n {\n ...listContextInitialState,\n }\n );\n\n const [listRowActionButtonsState, listRowActionButtonsDispatch] = useReducer(\n listRowActionButtonsReducer,\n { ...listRowActionButtonsInitialState }\n );\n\n const listContextValue = useMemo(() => {\n return { state: customizableListState, dispatch: customizableListDispatch };\n }, [customizableListState, customizableListDispatch]);\n\n const listRowActionButtonsContextValue = useMemo(() => {\n return {\n state: listRowActionButtonsState,\n dispatch: listRowActionButtonsDispatch,\n };\n }, [listRowActionButtonsState, listRowActionButtonsDispatch]);\n\n const resourceName = options?.label;\n\n if (loaded) {\n return (\n \n \n \n \n \n \n \n \n {listRowActions !== false &&\n typeof listRowActions !== \"boolean\" && (\n \n )}\n \n \n \n );\n } else {\n return ;\n }\n};\n\nCustomizableList.defaultProps = {\n filter: {},\n perPage: DEFAULT_PER_PAGE,\n pagination: ,\n actions: ,\n};\n\nCustomizableList.displayName = \"CustomizableList\";\n\nexport { CustomizableList };\n","import { Children, cloneElement, useContext, useEffect } from \"react\";\nimport { Datagrid, DatagridProps, Loading } from \"react-admin\";\nimport get from \"lodash/get\";\nimport { CustomizableListContext } from \"./CustomizableListContext\";\nimport { CustomizableListActionTypes } from \"./types\";\n\nconst CustomizableDatagrid= (props:DatagridProps) => {\n const { state, dispatch } = useContext(CustomizableListContext);\n const children = props?.children;\n const fieldsList = state?.fieldsList;\n\n useEffect(() => {\n if (dispatch) {\n dispatch({\n type: CustomizableListActionTypes.INIT_DATAGRID,\n payload: { fieldsList: children },\n });\n }\n }, [children, dispatch]);\n\n const renderChild = (child) => {\n const key = get(child, [\"props\", \"source\"]);\n const dataisdisplayed = get(child, [\"props\", \"dataisdisplayed\"]);\n if (!key || dataisdisplayed) {\n return cloneElement(child, {});\n }\n\n return null;\n };\n\n if (fieldsList) {\n return (\n {Children.map(fieldsList, renderChild)} );\n } else {\n return \n }\n};\n\nCustomizableDatagrid.displayName = \"CustomizableDatagrid\";\n\nexport { CustomizableDatagrid };\n","import { Box } from \"@material-ui/core\";\nimport { ReactElement, useMemo, useReducer } from \"react\";\nimport {\n List,\n usePermissions,\n useResourceDefinition,\n Loading,\n} from \"react-admin\";\nimport { prepareModifiedListProps } from \"./listUtils\";\nimport { ListActionBreadcrumb } from \"../../navigation\";\nimport { DefaultListProps } from \"../../types\";\nimport { DefaultListActions } from \"./DefaultListActions\";\nimport { DEFAULT_PER_PAGE } from \"../../../common\";\nimport { DefaultCrudListRowActions } from \"./listActions/actions\";\nimport {\n ListRowActionButtonsContext,\n listRowActionButtonsReducer,\n prepareListRowActionButtonsInitialState,\n} from \"./listActions\";\nimport { DefaultPagination } from \"./DefaultPagination\";\nimport { prepareListRowActions } from \"./CustomizableList/listUtils\";\nimport { DummyListRowComponent } from \"./DummyListRowComponent\";\n\nconst DefaultList = (\n props: DefaultListProps & { children: ReactElement }\n): ReactElement => {\n const { listRowActions, showBreadcrumbs, ...rest } = props;\n const { options, icon } = useResourceDefinition(props);\n const { loaded, permissions } = usePermissions();\n const modifiedProps = prepareModifiedListProps(options, rest, permissions);\n\n const resourceName = options?.label;\n const listRowActionButtonsInitialState = useMemo(() => {\n const defaultListRowActions = prepareListRowActions(\n listRowActions,\n modifiedProps\n );\n const listRowActionButtonsInitialState =\n prepareListRowActionButtonsInitialState(defaultListRowActions);\n return listRowActionButtonsInitialState;\n }, [listRowActions]);\n\n const [listRowActionButtonsState, listRowActionButtonsDispatch] = useReducer(\n listRowActionButtonsReducer,\n { ...listRowActionButtonsInitialState }\n );\n\n const listRowActionButtonsContextValue = useMemo(() => {\n return {\n state: listRowActionButtonsState,\n dispatch: listRowActionButtonsDispatch,\n };\n }, [listRowActionButtonsState, listRowActionButtonsDispatch]);\n\n if (loaded) {\n const modifiedProps = prepareModifiedListProps(options, rest, permissions);\n\n return (\n \n {showBreadcrumbs && (\n \n \n \n )}\n \n \n {listRowActions !== false && typeof listRowActions !== \"boolean\" && (\n \n )}\n \n \n );\n } else {\n return ;\n }\n};\n\nDefaultList.defaultProps = {\n actions: ,\n filter: {},\n perPage: DEFAULT_PER_PAGE,\n pagination: ,\n showBreadcrumbs: true,\n};\n\nDefaultList.displayName = \"DefaultList\";\n\nexport { DefaultList };\n","import { Identifier, Record } from \"react-admin\";\n\nexport const RESOURCE_NAME_BID = \"bids\";\n\nexport enum PermissionBids {\n MENU_BIDS ='view-bids-menu', \n LIST_BIDS = 'list-bids',\n SHOW_OWN_BID = 'show-own-bid',\n SHOW_ANY_BID = 'show-any-bid',\n CREATE_BID = 'create-bid',\n EDIT_ANY_BID = 'update-any-bid',\n EDIT_OWN_BID = 'update-own-bid',\n DELETE_OWN_BID = 'delete-own-bid',\n DELETE_ANY_BID = 'delete-any-bid',\n IMPORT_BIDS = 'import-bids',\n}\n\nexport interface BidRecord extends Partial {\n enquiryId: Identifier;\n userAccountId: Identifier;\n vendorAccountId: Identifier;\n vendorId: Identifier;\n estimatedDeliveryDate: Date;\n currencyId: string;\n currency2Id?: string;\n remarks?: string;\n status: number;\n bidDetails: BidDetailRecord[];\n}\n\nexport interface BidDetailRecord extends Partial {\n requisitionId: Identifier;\n requisitionDetailId: Identifier;\n enquiryId: Identifier;\n enquiryDetailId: Identifier;\n bidId?: Identifier;\n itemId: Identifier;\n quantity: number;\n uomId: Identifier;\n unitPrice?: number;\n currencyId?: Identifier;\n quantity2?: number;\n uom2Id?: Identifier;\n unitPrice2?: number;\n currency2Id?: Identifier;\n sortOrder?: number;\n make?: string;\n size?: string;\n specifications?: string;\n comments?: string;\n}\n\n","import { Box, Typography } from \"@material-ui/core\";\nimport { useTranslate } from \"react-admin\";\n\nconst SectionTitleSubtitle = (props) => {\n const {title, subTitle, ...rest} = props;\n\n const translate = useTranslate();\n return (\n \n \n {translate(title)}\n \n {subTitle && (\n \n {translate(subTitle)}\n \n )}\n \n );\n};\n\nexport { SectionTitleSubtitle };\n","import { CreateButton, EditButton, ListButton, ShowActionsProps, TopToolbar, useResourceDefinition, useShowContext } from 'react-admin';\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}: any) => rest;\n\nconst DefaultShowAction = ({ className, ...rest }: ShowActionsProps) => {\n const { basePath, record } = useShowContext(rest);\n const { hasList, hasEdit, hasCreate } = useResourceDefinition(rest);\n return (\n \n {hasList && }\n {hasEdit && }\n {hasCreate && }\n \n );\n}\n\nexport { DefaultShowAction }","import { CreateButton, ListButton, ShowActionsProps, ShowButton, TopToolbar, useResourceDefinition, useShowContext } from 'react-admin';\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}: any) => rest;\n\nconst DefaultEditAction = ({ className, ...rest }: ShowActionsProps) => {\n const { basePath, record } = useShowContext(rest);\n const { hasList, hasShow, hasCreate } = useResourceDefinition(rest);\n return (\n \n {hasList && }\n {hasShow && }\n {hasCreate && }\n \n );\n}\n\nexport { DefaultEditAction }","import { ListButton, ShowActionsProps, TopToolbar, useResourceDefinition, useShowContext } from 'react-admin';\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}: any) => rest;\n\nconst DefaultCreateAction = ({ className, ...rest }: ShowActionsProps) => {\n const { basePath } = useShowContext(rest);\n const { hasList } = useResourceDefinition(rest);\n return (\n \n {hasList && }\n \n );\n}\n\nexport { DefaultCreateAction }","import { ReactElement, useEffect, useState } from \"react\";\n\nimport { Box } from \"@material-ui/core\";\n\nimport {\n Create,\n CreateProps,\n useResourceDefinition,\n useResourceContext,\n} from \"react-admin\";\n\nimport { CrudActionBreadcrumb, CrudActionType } from \"../navigation\";\nimport { usePermissionsCheck } from \"../../core\";\nimport { DefaultCreateAction } from \"./actions\";\n\nconst DefaultCreate = (\n props: CreateProps & { children: ReactElement }\n): ReactElement => {\n const { options, icon } = useResourceDefinition(props);\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n const resource = useResourceContext();\n const resourceName = options?.label;\n\n const {actions = } = props;\n const allowedPermissions = options?.allowedPermissions;\n const listPermissionName = allowedPermissions?.list;\n const createPermissionName = allowedPermissions?.create;\n const listPath = props?.basePath ? `${props?.basePath}` : `/${resource}`;\n\n const [hasList, setHasList] = useState(false);\n const [hasCreate, setHasCreate] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasList = listPermissionName\n ? hasPermissionAccess(listPermissionName)\n : false;\n\n const hasCreate = createPermissionName\n ? hasPermissionAccess(createPermissionName)\n : false;\n\n setHasList(hasList);\n setHasCreate(hasCreate);\n }\n }, [\n permissionsLoaded,\n listPermissionName,\n createPermissionName,\n hasPermissionAccess,\n ]);\n\n const modifiedProps = {\n ...props,\n actions,\n hasList,\n hasCreate,\n };\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport { DefaultCreate };\n","import { ReactElement, useEffect, useState } from \"react\";\n\nimport { Box } from \"@material-ui/core\";\n\nimport {\n Edit,\n EditProps,\n useResourceDefinition,\n useResourceContext,\n Loading,\n} from \"react-admin\";\n\nimport { CrudActionBreadcrumb, CrudActionType } from \"../navigation\";\nimport { usePermissionsCheck } from \"../../core\";\nimport { DefaultEditAction } from \"./actions\";\n\nconst DefaultEdit = (\n props: EditProps & { children: ReactElement }\n): ReactElement => {\n const { options, icon } = useResourceDefinition(props);\n const resource = useResourceContext();\n const resourceName = options?.label;\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n const allowedPermissions = options?.allowedPermissions;\n const listPermissionName = allowedPermissions?.list;\n const createPermissionName = allowedPermissions?.create;\n const showPermissionName = allowedPermissions?.show;\n const listPath = props?.basePath ? `${props?.basePath}` : `/${resource}`;\n\n const { actions = } = props;\n const [hasList, setHasList] = useState(false);\n const [hasCreate, setHasCreate] = useState(false);\n const [hasShow, setHasShow] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasList = listPermissionName\n ? hasPermissionAccess(listPermissionName)\n : false;\n\n const hasCreate = createPermissionName\n ? hasPermissionAccess(createPermissionName)\n : false;\n const hasShow = showPermissionName\n ? hasPermissionAccess(showPermissionName)\n : false;\n\n setHasList(hasList);\n setHasCreate(hasCreate);\n setHasShow(hasShow);\n }\n }, [\n permissionsLoaded,\n listPermissionName,\n createPermissionName,\n showPermissionName,\n hasPermissionAccess,\n ]);\n\n const modifiedProps = {\n ...props,\n actions,\n hasList,\n hasCreate,\n hasShow,\n };\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport { DefaultEdit };\n","import { ReactElement, useEffect, useState } from \"react\";\n\nimport { Box } from \"@material-ui/core\";\n\nimport {\n Show,\n ShowProps,\n useResourceDefinition,\n useResourceContext,\n} from \"react-admin\";\n\nimport { CrudActionBreadcrumb, CrudActionType } from \"../navigation\";\nimport { usePermissionsCheck } from \"../../core\";\nimport { DefaultShowAction } from \"./actions\";\n\nconst DefaultShow = (\n props: ShowProps & { children: ReactElement }\n): ReactElement => {\n const { options, icon } = useResourceDefinition(props);\n const resource = useResourceContext();\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n const resourceName = options?.label;\n const {actions = } = props;\n\n const allowedPermissions = options?.allowedPermissions;\n const listPermissionName = allowedPermissions?.list;\n const createPermissionName = allowedPermissions?.create;\n const editPermissionName = allowedPermissions?.update;\n const listPath = props?.basePath ? `${props?.basePath}` : `/${resource}`;\n\n const [hasList, setHasList] = useState(false);\n const [hasCreate, setHasCreate] = useState(false);\n const [hasEdit, setHasEdit] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasList = listPermissionName\n ? hasPermissionAccess(listPermissionName)\n : false;\n\n const hasCreate = createPermissionName\n ? hasPermissionAccess(createPermissionName)\n : false;\n const hasEdit = editPermissionName\n ? hasPermissionAccess(editPermissionName)\n : false;\n\n setHasList(hasList);\n setHasCreate(hasCreate);\n setHasEdit(hasEdit);\n }\n }, [\n permissionsLoaded,\n listPermissionName,\n createPermissionName,\n editPermissionName,\n hasPermissionAccess,\n ]);\n\n const modifiedProps = {\n ...props,\n actions,\n hasList,\n hasCreate,\n hasEdit,\n };\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport { DefaultShow };\n","import { useState, useMemo } from \"react\";\nimport { Card, CardContent, Box } from \"@material-ui/core\";\nimport DeleteForeverIcon from '@material-ui/icons/DeleteForever';\nimport WbSunnyIcon from '@material-ui/icons/WbSunny';\nimport NightsStayIcon from '@material-ui/icons/NightsStay';\nimport Button from \"@material-ui/core/Button/index\";\nimport { useTranslate, Title, Loading } from \"react-admin\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { LocalUser } from \"../../core\";\nimport { CUSTOMIZABLE_LIST_STORAGE_KEY } from \"../../components/crud\";\n\nconst useStyles = makeStyles((theme) => ({\n label: { width: \"10em\", display: \"inline-block\" },\n button: { margin: \"1em\" },\n}));\n\nconst UserPreferences= () => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const localUser = useMemo(() => new LocalUser(), []);\n const [hasDarkTheme, setDarkTheme] = useState(localUser.hasDarkTheme());\n\n const changeTheme = (isDarkTheme: boolean) => {\n localUser.changeLocalTheme(isDarkTheme);\n setDarkTheme(isDarkTheme);\n };\n\n const clearListCustomizations = () => {\n localStorage.removeItem(CUSTOMIZABLE_LIST_STORAGE_KEY);\n }\n\n if (!localUser) {\n return ;\n }\n\n return (\n \n \n <CardContent>\n <Box>\n <div className={classes.label}>\n {translate(\"resources.users.profile.theme.label\")}\n </div>\n <Button\n variant=\"contained\"\n className={classes.button}\n color={!hasDarkTheme ? \"primary\" : \"default\"}\n startIcon={<WbSunnyIcon/>}\n onClick={() => changeTheme(false)}\n >\n {translate(\"resources.users.profile.theme.light\")}\n </Button>\n <Button\n variant=\"contained\"\n className={classes.button}\n color={hasDarkTheme ? \"primary\" : \"default\"}\n startIcon={<NightsStayIcon/>}\n onClick={() => changeTheme(true)}\n >\n {translate(\"resources.users.profile.theme.dark\")}\n </Button>\n </Box>\n <Box>\n <div className={classes.label}>\n {translate(\"resources.users.profile.listCustomizations.label\")}\n </div>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n className={classes.button}\n startIcon={<DeleteForeverIcon/>}\n onClick={() => clearListCustomizations()}\n >\n {translate(\"resources.users.profile.listCustomizations.clear\")}\n </Button>\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport { UserPreferences };\n","import {\n TabbedForm,\n FormTab,\n TextInput,\n PasswordInput,\n Edit,\n Toolbar,\n SaveButton,\n useTranslate,\n EmailField,\n Loading,\n useUpdate,\n useNotify,\n useRedirect,\n} from \"react-admin\";\nimport validation from \"./validations\";\nimport { styles } from \"./style\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport ProfileActions from \"./ProfileActions\";\nimport { UserPreferences } from \"./UserPreferences\";\nimport { RESOURCE_NAME_USER } from \"../accounts\";\nimport { LocalUser } from \"../../core\";\nimport { useCallback } from \"react\";\n\nconst useStyles = makeStyles(styles);\n\nconst UserProfileEditTitle = () => {\n const translate = useTranslate();\n\n return <span>{translate(\"resources.users.profile.editPagetitle\")}</span>;\n};\n\nconst ProfileEdit = (props) => {\n const localUser = new LocalUser();\n\n const userId = localUser?.getUserId();\n\n const SaveProfileButton = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const [saveProfile] = useUpdate(RESOURCE_NAME_USER, userId);\n\n const handleSave = useCallback(\n (values) => {\n const localUserData = localUser.readLocalUser();\n localUser.saveName(values.firstName, values.lastName);\n let user = {\n id: values.id,\n firstName: values.firstName,\n lastName: values.lastName,\n settings: localUserData?.settings,\n version: values.version,\n };\n\n if (values.password) {\n user[\"password\"] = values.password;\n }\n\n saveProfile(\n {\n payload: {\n data: {\n ...user,\n },\n },\n },\n {\n onSuccess: () => {\n notify(\"resources.users.profile.notification.saved\", {type: \"info\"});\n redirect(\"/my-profile\");\n },\n }\n );\n },\n [saveProfile, notify, redirect]\n );\n return <SaveButton {...props} onSave={handleSave} />;\n };\n\n const classes = useStyles();\n\n const CustomToolbar = (props) => (\n <Toolbar {...props} style={{ clear: \"left\" }}>\n <SaveProfileButton />\n </Toolbar>\n );\n\n const { staticContext, ...restProps } = props;\n\n if (!userId) {\n return <Loading />;\n }\n\n return (\n <Edit\n {...restProps}\n actions={\n <ProfileActions href=\"/my-profile\" buttonTitle=\"ra.action.show\" />\n }\n title={<UserProfileEditTitle />}\n id={userId}\n resource={RESOURCE_NAME_USER}\n basePath=\"/my-profile/edit\"\n className={classes.marginTop20}\n >\n <TabbedForm\n toolbar={<CustomToolbar />}\n initialValues={{ password: undefined }}\n >\n <FormTab label=\"resources.users.profile.tabs.generalInformation\">\n <TextInput\n source=\"firstName\"\n formClassName={classes.clearWithFloatLeft}\n validate={validation.validateFirstName}\n />\n <TextInput\n source=\"lastName\"\n formClassName={classes.floatLeftWithMarginLeft}\n validate={validation.validateLastName}\n />\n <EmailField\n source=\"email\"\n formClassName={classes.clearWithFloatLeft}\n />\n </FormTab>\n <FormTab\n label=\"resources.users.profile.tabs.changePassword\"\n path=\"password\"\n >\n <PasswordInput\n source=\"password\"\n formClassName={classes.clearWithFloatLeft}\n autoComplete=\"new-password\"\n validate={validation.validatePassword}\n />\n <PasswordInput\n type=\"password\"\n source=\"passwordConfirmation\"\n formClassName={classes.floatLeftWithMarginLeft}\n validate={validation.matchPassword}\n autoComplete=\"new-password\"\n />\n </FormTab>\n <FormTab label=\"resources.users.profile.tabs.settings\" path=\"settings\">\n <UserPreferences />\n </FormTab>\n </TabbedForm>\n </Edit>\n );\n};\n\nexport { ProfileEdit };\n","import { TextField, useTranslate, Loading, SimpleShowLayout } from \"react-admin\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport ProfileActions from \"./ProfileActions\";\nimport { styles } from \"./style\";\nimport { DefaultShow } from \"../../components\";\nimport { IUser, RESOURCE_NAME_USER } from \"../accounts\";\n\nconst useStyles = makeStyles(styles);\n\nconst UserProfileShowTitle = () => {\n const translate = useTranslate();\n\n return <span>{translate(\"resources.users.profile.showPagetitle\")}</span>;\n};\n\nconst ProfileShow = (props) => {\n const classes = useStyles();\n let userId: string | undefined = undefined;\n let user: IUser | undefined = undefined;\n\n const localUserStr = localStorage.getItem(\"user\");\n if (localUserStr) {\n user = JSON.parse(localUserStr);\n userId = user?.id;\n }\n\n const { staticContext, ...restProps } = props;\n\n if (!userId) {\n return <Loading />;\n }\n\n return (\n <DefaultShow\n actions={\n <ProfileActions\n href=\"/my-profile/edit\"\n buttonTitle=\"ra.action.edit\"\n />\n }\n title={<UserProfileShowTitle />}\n id={userId}\n resource={RESOURCE_NAME_USER}\n basePath=\"/my-profile\"\n className={classes.marginTop20}\n {...restProps}\n >\n <SimpleShowLayout>\n <TextField\n source=\"firstName\"\n className={classes.inlineGridWith50PercentWidth}\n />\n <TextField\n source=\"lastName\"\n className={classes.inlineGridWith50PercentWidth}\n />\n <TextField\n source=\"email\"\n className={classes.inlineGridWith50PercentWidth}\n />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { ProfileShow };\n","import { Identifier, Record } from \"react-admin\";\n\nexport const RESOURCE_NAME_ENQUIRY = \"enquiries\";\nexport const RESOURCE_NAME_ENQUIRY_DETAILS = \"enquiry/detail\";\nexport const RESOURCE_NAME_ENQUIRY_VENDORS = \"enquiry/vendor\";\n\nexport enum PermissionEnquiries {\n MENU_ENQUIRIES ='view-enquiries-management-menu', \n LIST_ENQUIRIES = 'list-enquiries',\n SHOW_OWN_ENQUIRY = 'show-own-enquiry',\n SHOW_ANY_ENQUIRY = 'show-any-enquiry',\n CREATE_ENQUIRY = 'create-enquiry',\n EDIT_OWN_ENQUIRY = 'update-own-enquiry',\n EDIT_ANY_ENQUIRY = 'update-any-enquiry',\n DELETE_OWN_ENQUIRY = 'delete-own-enquiry',\n DELETE_ANY_ENQUIRY = 'delete-any-enquiry',\n IMPORT_ENQUIRIES = 'import-enquiries',\n}\n\n\nexport enum DatagridColors {\n SELECTED_COLOR = \"#56776d\",\n SELECTED_BG_COLOR = \"#B3D0C7\",\n UNSELECTED_COLOR = \"#ec4702\",\n UNSELECTED_BG_COLOR = \"#FBC8B2\",\n}\n\nexport interface EnquiryRecord extends Partial<Record> {\n accountId: Identifier;\n requisitionId: Identifier;\n name: string;\n currencyId: string;\n bidStartDate: Date;\n bidEndDate: Date;\n preferredDeliveryDate?: Date;\n remarks?: string;\n status: number;\n version: number;\n enquiryDetails: EnquiryDetailRecord[];\n}\n\nexport interface EnquiryDetailRecord extends Partial<Record> {\n enquiryId: Identifier;\n requisitionId: Identifier;\n requisitionDetailId: Identifier;\n itemId: Identifier;\n quantity: number;\n uomId: Identifier;\n quantity2?: number;\n uom2Id?: string;\n version?: number;\n isNew?: boolean;\n}\n","export const RESOURCE_NAME_ITEM = \"items\";\n\nexport enum ItemAbcIndicator {\n CRITICAL = 1,\n MEDIUM,\n LESS_CRITICAL,\n}\n\nexport const ABC_INDICATOR_CHOICES = [\n { id: 1, name: \"resources.items.choices.itemType.critical\" },\n { id: 2, name: \"resources.items.choices.itemType.medium\" },\n { id: 3, name: \"resources.items.choices.itemType.less_critical\" },\n];\n\nexport enum PermissionItems {\n ITEMS_MANAGEMENT_MENU = \"view-items-management-menu\",\n MENU_ITEMS = \"view-items-menu\",\n LIST_ITEMS = \"list-items\",\n SHOW_ITEM = \"show-item\",\n CREATE_ITEM = \"create-item\",\n EDIT_ITEM = \"update-item\",\n DELETE_ITEM = \"delete-item\",\n IMPORT_ITEMS = \"import-items\",\n}\n","export const RESOURCE_NAME_ITEM_SEGMENTS = \"itemSegments\";\n\nexport enum PermissionItemSegments {\n LIST_ITEM_SEGMENTS = \"list-item-segments\",\n MENU_ITEM_SEGMENTS = \"view-item-segments-menu\",\n SHOW_ITEM_SEGMENT = \"show-item-segment\",\n CREATE_ITEM_SEGMENT = \"create-item-segment\",\n EDIT_ITEM_SEGMENT = \"update-item-segment\",\n DELETE_ITEM_SEGMENT = \"delete-item-segment\",\n IMPORT_ITEM_SEGMENTS = \"import-item-segments\",\n\n}\n","export const RESOURCE_NAME_ACCOUNT = \"accounts\";\nexport const RESOURCE_NAME_CODE = \"code\";\n\nexport enum PermissionAccounts {\n ACCOUNT_MANAGEMENT_MENU ='view-access-management-menu',\n MENU_ACCOUNT = 'view-account-management-menu',\n LIST_ACCOUNTS = 'list-accounts',\n SHOW_ACCOUNT = 'show-account',\n CREATE_ACCOUNT = 'create-account',\n EDIT_ACCOUNT = 'update-account',\n DELETE_ACCOUNT = 'delete-account',\n}\n\nexport const accountsPermissions = {\n menu: PermissionAccounts.MENU_ACCOUNT,\n list: PermissionAccounts.LIST_ACCOUNTS,\n create: PermissionAccounts.CREATE_ACCOUNT,\n update: PermissionAccounts.EDIT_ACCOUNT,\n show: PermissionAccounts.SHOW_ACCOUNT,\n delete: PermissionAccounts.DELETE_ACCOUNT,\n};","export const RESOURCE_NAME_ITEM_CLASS = \"itemClasses\";\n\nexport enum PermissionItemClasses {\n MENU_ITEM_CLASSES = \"view-item-classes-menu\",\n LIST_ITEM_CLASSES = \"list-item-classes\",\n SHOW_ITEM_CLASS = \"show-item-class\",\n CREATE_ITEM_CLASS = \"create-item-class\",\n EDIT_ITEM_CLASS = \"update-item-class\",\n DELETE_ITEM_CLASS = \"delete-item-class\",\n IMPORT_ITEM_CLASSES = \"import-item-classes\",\n}\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n SearchFilter,\n} from \"../../../../lib/common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../../lib/modules/accounts/accounts/constants\";\nimport { RESOURCE_NAME_ITEM_CLASS } from \"./constants\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\n\nconst defaultColumns = [\"name\", \"number\", \"description\", \"parentId\"];\nconst ItemClassList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_ITEM_CLASS}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\n// eslint-disable-next-line\nexport { ItemClassList as ItemClassList };\n","export const RESOURCE_NAME_ITEM_GROUPS = \"itemGroups\";\n\nexport enum PermissionItemGroups {\n MENU_ITEM_GROUPS = \"view-item-groups-menu\",\n LIST_ITEM_GROUPS = \"list-item-groups\",\n SHOW_ITEM_GROUP = \"show-item-group\",\n CREATE_ITEM_GROUP = \"create-item-group\",\n EDIT_ITEM_GROUP = \"update-item-group\",\n DELETE_ITEM_GROUP = \"delete-item-group\",\n IMPORT_ITEM_GROUPS = \"import-item-groups\",\n}\n","import {\n TextInput,\n required,\n ReferenceInput,\n useTranslate,\n SimpleForm,\n AutocompleteInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { RESOURCE_NAME_ITEM_CLASS } from \"./constants\";\nimport { Typography } from \"@material-ui/core\";\nimport { MediaInputField } from \"../../../../lib/components\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n number: { display: \"block\" },\n description: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst ItemClassForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest}>\n <SectionTitle label=\"resources.itemClasses.fieldGroups.itemClassDetails\" />\n\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.itemClasses.fields.number\"\n helperText=\"resources.itemClasses.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n fullWidth\n />\n <TextInput\n source=\"name\"\n label=\"resources.itemClasses.fields.name\"\n helperText=\"resources.itemClasses.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n fullWidth\n />\n\n <RichTextInput\n source=\"description\"\n label=\"resources.itemClasses.fields.description\"\n helperText=\"resources.itemClasses.help.description\"\n formClassName={classes.description}\n />\n\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.items.fields.parentId\"\n reference={RESOURCE_NAME_ITEM_CLASS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n formClassName={classes.parent}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.parentId\"\n />\n </ReferenceInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\nexport { ItemClassForm };\n","import CategoryIcon from '@material-ui/icons/Category';import { ItemClassList } from './ItemClassList';\nimport { ItemClassEdit } from './ItemClassEdit';\nimport { PermissionItemClasses, RESOURCE_NAME_ITEM_CLASS } from './constants';\nimport { ItemClassShow } from './ItemClassShow';\nimport { ItemClassCreate } from './ItemClassCreate';\n\nconst allowedPermissions = {\n menu: PermissionItemClasses.MENU_ITEM_CLASSES,\n list: PermissionItemClasses.LIST_ITEM_CLASSES,\n create: PermissionItemClasses.CREATE_ITEM_CLASS,\n update: PermissionItemClasses.EDIT_ITEM_CLASS,\n show: PermissionItemClasses.SHOW_ITEM_CLASS,\n delete: PermissionItemClasses.DELETE_ITEM_CLASS,\n import: PermissionItemClasses.IMPORT_ITEM_CLASSES,\n};\nconst itemsClassResource = {\n name: RESOURCE_NAME_ITEM_CLASS,\n list: ItemClassList,\n create: ItemClassCreate,\n edit: ItemClassEdit,\n show: ItemClassShow, \n icon: CategoryIcon,\n options: { label: 'resources.itemClasses.name',allowedPermissions },\n}\n\nexport * from './constants';\nexport { itemsClassResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../../lib/components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../../../lib/modules\";\nimport { ItemClassForm } from \"./ItemClassForm\";\n\nconst ItemClassCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'itemClass',\n }]; \n return (\n <DefaultCreate {...props} transform={transformAndUploadS3Files(mediaFileSources)}>\n <ItemClassForm />\n </DefaultCreate>\n );\n };\n \n export { ItemClassCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../../lib/modules\";\n\nimport { ItemClassForm } from \"./ItemClassForm\";\n\nconst ItemClassEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"itemClass\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <ItemClassForm isEdit={true}{...props} />\n </DefaultEdit>\n );\n};\n\nexport { ItemClassEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_ITEM_CLASS } from \"./constants\";\n\nconst ItemClassShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_ITEM_CLASS}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n\n {/* <ArrayField label=\"Items\" source={RESOURCE_NAME_ITEM}>\n <Datagrid>\n <TextField source=\"createdAt\"/>\n <TextField source=\"updatedAt\"/>\n </Datagrid>\n </ArrayField> */}\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { ItemClassShow };\n","import {\n TextInput,\n required,\n ReferenceInput,\n useTranslate,\n SimpleForm,\n AutocompleteInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { RESOURCE_NAME_ITEM_SEGMENTS } from \"./constants\";\nimport { Typography } from \"@material-ui/core\";\nimport { MediaInputField } from \"../../../../lib/components\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\nimport { RESOURCE_NAME_ITEM_CLASS } from \"../itemsClass\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n number: { display: \"block\" },\n description: { display: \"block\" },\n parent: { display: \"block\" },\n class: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst ItemSegmentForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest}>\n <SectionTitle label=\"resources.itemSegments.fieldGroups.itemSegmentDetails\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.itemSegments.fields.number\"\n helperText=\"resources.itemSegments.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n fullWidth\n />\n <TextInput\n source=\"name\"\n label=\"resources.itemSegments.fields.name\"\n helperText=\"resources.itemSegments.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n fullWidth\n />\n\n <RichTextInput\n source=\"description\"\n label=\"resources.itemSegments.fields.description\"\n helperText=\"resources.itemSegments.help.description\"\n formClassName={classes.description}\n />\n\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.items.fields.parentId\"\n reference={RESOURCE_NAME_ITEM_SEGMENTS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n formClassName={classes.parent}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n <ReferenceInput\n source=\"itemClassId\"\n label=\"resources.itemSegments.fields.itemClassId\"\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n reference={RESOURCE_NAME_ITEM_CLASS}\n formClassName={classes.group}\n key=\"itemClassId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.itemSegments.help.itemClassId\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { ItemSegmentForm };\n","import { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n RichTextField,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../../lib/common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../../lib/components\";\nimport { RESOURCE_NAME_ITEM_SEGMENTS } from \"./constants\";\nimport { RESOURCE_NAME_ITEM_CLASS } from \"../itemsClass\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../../lib/modules/accounts/accounts/constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn={true} key=\"search\"></SearchFilter>\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n\n <ReferenceArrayInput\n label=\"resources.itemSegments.filters.itemClassId\"\n source=\"itemClassId\"\n reference={RESOURCE_NAME_ITEM_CLASS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"itemClassId\"\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n </Filter>\n);\nconst defaultColumns = [\n \"name\",\n \"number\",\n \"description\",\n \"parentId\",\n \"itemClassId\",\n];\nconst ItemSegmentList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField\n source=\"parentId\"\n reference={RESOURCE_NAME_ITEM_SEGMENTS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"itemClassId\"\n reference={RESOURCE_NAME_ITEM_CLASS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { ItemSegmentList };\n","export const RESOURCE_ACCOUNT_CODE = \"accountCode\";\nexport const RESOURCE_NAME_PURCHASE_GROUPS = 'purchaseGroups'\n\nexport enum PermissionPurchaseGroups {\n MENU_PURCHASE_GROUP = \"view-purchase-group-menu\",\n LIST_PURCHASE_GROUPS = \"list-purchase-groups\",\n SHOW_PURCHASE_GROUP = \"show-purchase-group\",\n CREATE_PURCHASE_GROUP = \"create-purchase-group\",\n EDIT_PURCHASE_GROUP = \"update-purchase-group\",\n DELETE_PURCHASE_GROUP = \"delete-purchase-group\",\n}\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../lib/common\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"./constants\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"description\"];\n\nconst PurchaseGroupList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_PURCHASE_GROUPS}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { PurchaseGroupList };\n","export const RESOURCE_ACCOUNT_CODE = \"accountCode\";\nexport const RESOURCE_NAME_LOCATION = 'location'\n\nexport enum PermissionLocations {\n MENU_LOCATION = \"view-locations-menu\",\n LIST_LOCATIONS = \"list-locations\",\n SHOW_LOCATION = \"show-location\",\n CREATE_LOCATION = \"create-location\",\n EDIT_LOCATION = \"update-location\",\n DELETE_LOCATION = \"delete-location\",\n}\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n AutocompleteInput,\n ReferenceInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport { MediaInputField } from \"../../../lib/components\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"./constants\";\n\nexport const styles: Styles<Theme, any> = {\n number: { display: \"block\" },\n name: { display: \"block\" },\n description: { display: \"block\" },\n formClass: {\n width: \"75%\",\n },\n};\nconst useStyles = makeStyles(styles);\n\nconst PurchaseGroupForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm\n variant=\"filled\"\n className={classes.formClass}\n warnWhenUnsavedChanges\n {...rest}\n >\n <SectionTitle label=\"resources.purchaseGroups.fieldGroups.PurchaseGroupDetaills\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.purchaseGroups.fields.number\"\n helperText=\"resources.purchaseGroups.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n fullWidth\n />\n\n <TextInput\n source=\"name\"\n label=\"resources.purchaseGroups.fields.name\"\n helperText=\"resources.purchaseGroups.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n fullWidth\n />\n\n <RichTextInput\n source=\"description\"\n helperText=\"resources.purchaseGroups.help.description\"\n formClassName={classes.description}\n label=\"resources.purchaseGroups.fields.description\"\n />\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.purchaseGroups.fields.parentId\"\n fullWidth\n reference={RESOURCE_NAME_PURCHASE_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.purchaseGroups.help.parentId\"\n />\n </ReferenceInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { PurchaseGroupForm };\n","import GroupIcon from \"@material-ui/icons/Group\";\nimport {\n PermissionPurchaseGroups,\n RESOURCE_NAME_PURCHASE_GROUPS,\n} from \"./constants\";\nimport { PurchaseGroupList } from \"./PurchaseGroupList\";\nimport { PurchaseGroupCreate } from \"./PurchaseGroupCreate\";\nimport { PurchaseGroupShow } from \"./PurchaseGroupShow\";\nimport { PurchaseGroupEdit } from \"./PurchaseGroupEdit\";\n\nconst PurchaseGroupPermissions = {\n menu: PermissionPurchaseGroups.MENU_PURCHASE_GROUP,\n list: PermissionPurchaseGroups.LIST_PURCHASE_GROUPS,\n create: PermissionPurchaseGroups.CREATE_PURCHASE_GROUP,\n update: PermissionPurchaseGroups.EDIT_PURCHASE_GROUP,\n show: PermissionPurchaseGroups.SHOW_PURCHASE_GROUP,\n delete: PermissionPurchaseGroups.DELETE_PURCHASE_GROUP,\n};\n\nconst purchaseGroupResource = {\n name: RESOURCE_NAME_PURCHASE_GROUPS,\n list: PurchaseGroupList,\n create: PurchaseGroupCreate,\n edit: PurchaseGroupEdit,\n show: PurchaseGroupShow,\n icon: GroupIcon,\n options: {\n label: \"resources.purchaseGroups.name\",\n allowedPermissions: PurchaseGroupPermissions,\n },\n};\n\nexport * from \"./constants\";\nexport { PurchaseGroupPermissions, purchaseGroupResource };\n","import { CreateProps } from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\nimport { PurchaseGroupForm } from \"./PurchaseGroupForm\";\nconst PurchaseGroupCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"purchase-groups\",\n },\n ];\n\n return (\n <DefaultCreate\n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <PurchaseGroupForm />\n </DefaultCreate>\n );\n};\n\nexport { PurchaseGroupCreate };\n","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\nimport { PurchaseGroupForm } from \"./PurchaseGroupForm\";\n\nconst PurchaseGroupEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"purchase-groups\",\n },\n ];\n\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <PurchaseGroupForm isEdit={true} {...props} />\n </DefaultEdit>\n );\n};\n\nexport { PurchaseGroupEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"./constants\";\n\nconst PurchaseGroupShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_PURCHASE_GROUPS}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { PurchaseGroupShow };\n","import {\n TextInput,\n required,\n ReferenceInput,\n useTranslate,\n SimpleForm,\n AutocompleteInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { RESOURCE_NAME_ITEM_GROUPS } from \"./constants\";\nimport { Typography } from \"@material-ui/core\";\nimport { MediaInputField } from \"../../../../lib/components\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"../../purchase-groups\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n number: { display: \"block\" },\n description: { display: \"block\" },\n parent: { display: \"block\" },\n class: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst ItemGroupForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm {...rest} warnWhenUnsavedChanges>\n <SectionTitle label=\"resources.itemGroups.fieldGroups.itemGroupDetails\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.itemGroups.fields.number\"\n helperText=\"resources.itemGroups.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n fullWidth\n />\n <TextInput\n source=\"name\"\n label=\"resources.itemGroups.fields.name\"\n helperText=\"resources.itemGroups.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n fullWidth\n />\n <RichTextInput\n source=\"description\"\n label=\"resources.itemGroups.fields.description\"\n helperText=\"resources.itemGroups.help.description\"\n formClassName={classes.description}\n />\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.itemGroups.fields.parentId\"\n reference={RESOURCE_NAME_ITEM_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n formClassName={classes.parent}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.itemGroups.help.parentId\"\n />\n </ReferenceInput>\n\n <ReferenceArrayInput\n source=\"purchaseGroupIds\"\n label=\"resources.itemGroups.fields.purchaseGroupIds\"\n reference={RESOURCE_NAME_PURCHASE_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n fullWidth\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n helperText=\"resources.itemGroups.help.purchaseGroupIds\"\n />\n </ReferenceArrayInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { ItemGroupForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n RichTextField,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../../lib/common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../../lib/modules/accounts/accounts/constants\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"../../purchase-groups\";\nimport { RESOURCE_NAME_ITEM_CLASS } from \"../itemsClass/constants\";\nimport { RESOURCE_NAME_ITEM_GROUPS } from \"./constants\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n\n <ReferenceArrayInput\n label=\"resources.orgStructures.filters.purchaseGroupId\"\n source=\"purchaseGroupIds\"\n reference={RESOURCE_NAME_PURCHASE_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"purchaseGroupIds\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"name\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n </Filter>\n);\nconst defaultColumns = [\n \"name\",\n \"number\",\n \"description\",\n \"parentId\",\n];\nconst ItemGroupList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_ITEM_GROUPS}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"purchaseGroupIds\" sortable={false} reference={RESOURCE_NAME_PURCHASE_GROUPS} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { ItemGroupList };\n","import SpeakerGroupIcon from '@material-ui/icons/SpeakerGroup';import { ItemGroupCreate } from './ItemGroupCreate';\n\nimport { ItemGroupList } from './ItemGroupList';\nimport { ItemGroupEdit } from './ItemGroupEdit';\nimport { PermissionItemGroups, RESOURCE_NAME_ITEM_GROUPS } from './constants';\nimport { ItemGroupShow } from './ItemGroupShow';\nconst allowedPermissions = {\n menu: PermissionItemGroups.MENU_ITEM_GROUPS,\n list: PermissionItemGroups.LIST_ITEM_GROUPS,\n create: PermissionItemGroups.CREATE_ITEM_GROUP,\n update: PermissionItemGroups.EDIT_ITEM_GROUP,\n show: PermissionItemGroups.SHOW_ITEM_GROUP,\n delete: PermissionItemGroups.DELETE_ITEM_GROUP,\n import: PermissionItemGroups.IMPORT_ITEM_GROUPS,\n};\n\nconst itemsGroupResource = {\n name: RESOURCE_NAME_ITEM_GROUPS,\n list: ItemGroupList,\n create: ItemGroupCreate,\n edit: ItemGroupEdit,\n show: ItemGroupShow, \n icon: SpeakerGroupIcon,\n options: { label: 'resources.itemGroups.name', allowedPermissions },\n}\n\nexport * from './constants';\nexport { itemsGroupResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../../lib/components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../../../lib/modules\";\nimport { ItemGroupForm } from \"./ItemGroupForm\";\n\nconst ItemGroupCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'itemGroups',\n }]; \n return (\n <DefaultCreate {...props}transform={transformAndUploadS3Files(mediaFileSources)}>\n <ItemGroupForm />\n </DefaultCreate>\n );\n };\n \n export { ItemGroupCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../../lib/modules\";\n\nimport { ItemGroupForm } from \"./ItemGroupForm\";\n\nconst ItemGroupEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"itemGroups\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <ItemGroupForm isEdit={true}{...props} />\n </DefaultEdit>\n );\n};\n\nexport { ItemGroupEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n RichTextField,\n ReferenceArrayField,\n Datagrid,\n} from \"react-admin\";\nimport {\n DefaultShow,\n ResourceLinkedField,\n UploadedFilesField,\n} from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"../../purchase-groups\";\nimport { RESOURCE_NAME_ITEM_GROUPS } from \"./constants\";\n\nconst ItemGroupShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" label=\"resources.itemGroups.fields.number\" />\n <TextField source=\"name\" label=\"resources.itemGroups.fields.name\" />\n <RichTextField\n source=\"description\"\n label=\"resources.itemGroups.fields.description\"\n />\n <ReferenceField\n source=\"parentId\"\n label=\"resources.itemGroups.fields.parentId\"\n reference={RESOURCE_NAME_ITEM_GROUPS}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <ReferenceArrayField\n source=\"purchaseGroupIds\"\n label=\"resources.itemGroups.fields.purchaseGroupIds\"\n reference={RESOURCE_NAME_PURCHASE_GROUPS}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"number\"\n linkedResource={RESOURCE_NAME_PURCHASE_GROUPS}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_PURCHASE_GROUPS}\n link=\"show\"\n />\n <TextField source=\"name\" />\n </Datagrid>\n </ReferenceArrayField>\n <DateField\n source=\"createdAt\"\n label=\"resources.itemGroups.fields.createdAt\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n <DateField\n source=\"updatedAt\"\n label=\"resources.itemGroups.fields.updatedAt\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { ItemGroupShow };\n","import StraightenIcon from '@material-ui/icons/Straighten';import { ItemSegmentCreate } from './ItemSegmentCreate';\n\nimport { ItemSegmentList } from './ItemSegmentList';\nimport { ItemSegmentEdit } from './ItemSegmentEdit';\nimport { PermissionItemSegments, RESOURCE_NAME_ITEM_SEGMENTS } from './constants';\nimport { ItemSegmentShow } from './ItemSegmentShow';\n\nconst allowedPermissions = {\n menu: PermissionItemSegments.MENU_ITEM_SEGMENTS,\n list: PermissionItemSegments.LIST_ITEM_SEGMENTS,\n create: PermissionItemSegments.CREATE_ITEM_SEGMENT,\n update: PermissionItemSegments.EDIT_ITEM_SEGMENT,\n show: PermissionItemSegments.SHOW_ITEM_SEGMENT,\n delete: PermissionItemSegments.DELETE_ITEM_SEGMENT,\n import: PermissionItemSegments.IMPORT_ITEM_SEGMENTS,\n };\n\nconst itemsSegmentResource = {\n name: RESOURCE_NAME_ITEM_SEGMENTS,\n list: ItemSegmentList,\n create: ItemSegmentCreate,\n edit: ItemSegmentEdit,\n show: ItemSegmentShow, \n icon: StraightenIcon,\n options: {label: 'resources.itemSegments.name', allowedPermissions },\n}\n\nexport * from './constants';\nexport { itemsSegmentResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../../lib/components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../../../lib/modules\";\nimport { ItemSegmentForm } from \"./ItemSegmentForm\";\n\nconst ItemSegmentCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'itemSegments',\n }]; \n return (\n <DefaultCreate {...props}transform={transformAndUploadS3Files(mediaFileSources)}>\n <ItemSegmentForm />\n </DefaultCreate>\n );\n };\n \n export { ItemSegmentCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../../lib/modules\";\n\nimport { ItemSegmentForm } from \"./ItemSegmentForm\";\n\nconst ItemSegmentEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"itemSegments\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <ItemSegmentForm isEdit={true}{...props} />\n </DefaultEdit>\n );\n};\n\nexport { ItemSegmentEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_ITEM_GROUPS } from \"../itemsGroup\";\nimport { RESOURCE_NAME_ITEM_SEGMENTS } from \"./constants\";\n\nconst ItemSegmentShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField\n source=\"parentId\"\n reference={RESOURCE_NAME_ITEM_SEGMENTS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"itemGroupId\"\n reference={RESOURCE_NAME_ITEM_GROUPS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n {/* <ArrayField label=\"Items\" source={RESOURCE_NAME_ITEM}>\n <Datagrid>\n <TextField source=\"createdAt\"/>\n <TextField source=\"updatedAt\"/>\n </Datagrid>\n </ArrayField> */}\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { ItemSegmentShow };\n","export const RESOURCE_NAME_CATEGORY = 'categories'\n\n\n\nexport const enum CategoryTypes {\n ITEM = 1,\n VENDOR\n}\n\nexport const CATEGORY_TYPE_CHOICES = [\n { id: 1, name: 'resources.category.choices.categoryType.item' },\n { id: 2, name: 'resources.category.choices.categoryType.vendor' },\n];\n\nexport enum PermissionCategory {\n MENU_CATEGORY = \"view-category-menu\",\n LIST_CATEGORIES = \"list-categories\",\n SHOW_CATEGORY = \"show-category\",\n CREATE_CATEGORY = \"create-category\",\n EDIT_CATEGORY = \"update-category\",\n DELETE_CATEGORY = \"delete-category\",\n}\n","export const RESOURCE_NAME_UOM = \"uom\";\n\nexport enum PermissionUoms {\n UOM_MENU = \"view-unit-of-measures-menu\",\n LIST_UOMS = \"list-uoms\",\n SHOW_UOM = \"show-uom\",\n CREATE_UOM = \"create-uom\",\n EDIT_UOM = \"update-uom\",\n DELETE_UOM = \"delete-uom\",\n IMPORT_UOMS=\"import-uoms\",\n}\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n RadioButtonGroupInput,\n ReferenceInput,\n AutocompleteInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport { MediaInputField } from \"../../../lib/components\";\nimport { RESOURCE_NAME_CATEGORY, CATEGORY_TYPE_CHOICES } from \"./constants\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\nexport const styles: Styles<Theme, any> = {\n number: { display: \"block\" },\n name: { display: \"block\" },\n description: { display: \"block\" },\n formClass: {\n width: \"75%\",\n },\n};\nconst useStyles = makeStyles(styles);\n\nconst CategoryForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm\n variant=\"filled\"\n className={classes.formClass}\n {...rest}\n warnWhenUnsavedChanges\n >\n <SectionTitle label=\"resources.category.fieldGroups.categoryDetaills\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.category.fields.number\"\n helperText=\"resources.category.help.number\"\n validate={[required()]}\n fullWidth\n />\n\n <TextInput\n source=\"name\"\n label=\"resources.category.fields.name\"\n helperText=\"resources.category.help.name\"\n formClassName={classes.name}\n fullWidth\n />\n\n <RichTextInput\n source=\"description\"\n label=\"resources.category.fields.description\"\n helperText=\"resources.category.help.description\"\n formClassName={classes.description}\n />\n\n <RadioButtonGroupInput\n source=\"categoryType\"\n label=\"resources.category.fields.categoryType\"\n choices={CATEGORY_TYPE_CHOICES}\n formClassName={classes.description}\n isRequired\n validate={[required()]}\n />\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.category.fields.parentId\"\n fullWidth\n reference={RESOURCE_NAME_CATEGORY}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.category.help.parentId\"\n />\n </ReferenceInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { CategoryForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n DateField,\n BooleanField,\n SelectField,\n SelectInput,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../lib/common\";\nimport { CATEGORY_TYPE_CHOICES, RESOURCE_NAME_CATEGORY } from \"./constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n\n <SelectInput\n source=\"categoryType\"\n label=\"resources.category.fields.categoryType\"\n choices={CATEGORY_TYPE_CHOICES}\n allowEmpty={false}\n />\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"categoryType\", \"description\"];\n\nconst CategoryList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <SelectField source=\"categoryType\" choices={CATEGORY_TYPE_CHOICES} />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_CATEGORY}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { CategoryList };\n","import CategoryIcon from \"@material-ui/icons/Category\";\nimport { CategoryCreate } from \"./CategoryCreate\";\nimport { CategoryEdit } from \"./CategoryEdit\";\nimport { CategoryList } from \"./CategoryList\";\nimport { CategoryShow } from \"./CategoryShow\";\nimport { PermissionCategory, RESOURCE_NAME_CATEGORY } from \"./constants\";\n\n\n\nconst CategoryPermissions = {\n menu: PermissionCategory.MENU_CATEGORY,\n list: PermissionCategory.LIST_CATEGORIES,\n create: PermissionCategory.CREATE_CATEGORY,\n update: PermissionCategory.EDIT_CATEGORY,\n show: PermissionCategory.SHOW_CATEGORY,\n delete: PermissionCategory.DELETE_CATEGORY,\n};\n\n\nconst categoryResource = {\n name: RESOURCE_NAME_CATEGORY,\n list: CategoryList,\n create: CategoryCreate,\n edit: CategoryEdit,\n show: CategoryShow,\n icon: CategoryIcon,\n options: { label: 'resources.category.name', allowedPermissions: CategoryPermissions },\n\n}\n\n\nexport * from './constants'\nexport { CategoryPermissions, categoryResource }\n\n","import { CreateProps } from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components\";\nimport { CategoryForm } from \"./CategoryForm\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\n\nconst CategoryCreate= (props: CreateProps)=> {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"category\",\n },\n ];\n\n return (\n <DefaultCreate\n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <CategoryForm />\n </DefaultCreate>\n );\n};\n\nexport { CategoryCreate };\n","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\nimport { CategoryForm } from \"./CategoryForm\";\n\nconst CategoryEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"category\",\n },\n ];\n\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <CategoryForm isEdit={true}{...props} />\n </DefaultEdit>\n );\n};\n\nexport { CategoryEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n SelectField,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { CATEGORY_TYPE_CHOICES, RESOURCE_NAME_CATEGORY } from \"./constants\";\n\nconst CategoryShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <SelectField source=\"categoryType\" choices={CATEGORY_TYPE_CHOICES} />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_CATEGORY}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { CategoryShow };\n","import { StatusItemProps } from \"../lib/common/ui/filters/StatusItem\";\n\n//Filters\n\nexport enum FILTER_DIRECTION {\n SENT = 'sent',\n RECEIVED = 'received',\n}\n\nexport const FILTER_NAME_DIRECTION = 'direction';\n\nexport enum PermissionBehavior {\n CAN_SELL = \"can-sell\",\n CAN_PROCURE = \"can-procure\",\n}\n\n//Status\nexport const enum ProcEntityRecordStatus {\n DRAFT = 1,\n WAITING_FOR_APPROVAL,\n APPROVED,\n REJECTED,\n IN_PROGRESS,\n COMPLETED,\n ON_HOLD,\n CANCELLED,\n}\n\nexport const enum ProcureApprovalStatus {\n PENDING_SUBMISSION = 1,\n LEVEL_1_APPROVAL_PENDING,\n LEVEL_2_APPROVAL_PENDING,\n APPROVED,\n REJECTED,\n ON_HOLD,\n}\n\nexport enum APPROVAL_ACTIONS {\n SUBMIT = \"submit\",\n APPROVE = \"approve\",\n REJECT = \"reject\",\n ON_HOLD = \"onHold\",\n CANCEL = \"cancel\",\n REOPEN = \"reopen\",\n}\n\nexport const PROC_ENTITY_RECORD_STATUS_CHOICES = [\n { id: ProcEntityRecordStatus.DRAFT, name: \"common.choices.procEntityRecordStatus.draft\" },\n { id: ProcEntityRecordStatus.WAITING_FOR_APPROVAL, name: \"common.choices.procEntityRecordStatus.waitingForApproval\" },\n { id: ProcEntityRecordStatus.APPROVED, name: \"common.choices.procEntityRecordStatus.approved\" },\n { id: ProcEntityRecordStatus.REJECTED, name: \"common.choices.procEntityRecordStatus.rejected\" },\n { id: ProcEntityRecordStatus.IN_PROGRESS, name: \"common.choices.procEntityRecordStatus.inProgress\" },\n { id: ProcEntityRecordStatus.COMPLETED, name: \"common.choices.procEntityRecordStatus.completed\" },\n { id: ProcEntityRecordStatus.ON_HOLD, name: \"common.choices.procEntityRecordStatus.onHold\" },\n { id: ProcEntityRecordStatus.CANCELLED, name: \"common.choices.procEntityRecordStatus.cancelled\" },\n];\n\nexport const PROCURE_APPROVAL_STATUS_CHOICES = [\n { id: ProcureApprovalStatus.PENDING_SUBMISSION, name: \"common.choices.procureApprovalStatus.pendingSubmission\" },\n { id: ProcureApprovalStatus.LEVEL_1_APPROVAL_PENDING, name: \"common.choices.procureApprovalStatus.level1ApprovalPending\" },\n { id: ProcureApprovalStatus.LEVEL_2_APPROVAL_PENDING, name: \"common.choices.procureApprovalStatus.level2ApprovalPending\" },\n { id: ProcureApprovalStatus.APPROVED, name: \"common.choices.procureApprovalStatus.approved\" },\n { id: ProcureApprovalStatus.REJECTED, name: \"common.choices.procureApprovalStatus.rejected\" },\n { id: ProcureApprovalStatus.ON_HOLD, name: \"common.choices.procureApprovalStatus.onHold\" },\n];\n\nexport const PROC_ENTITY_RECORD_STATUS_COLORS = {\n [ProcEntityRecordStatus.DRAFT]: \"#484041\",\n [ProcEntityRecordStatus.WAITING_FOR_APPROVAL]: \"#F95738\",\n [ProcEntityRecordStatus.APPROVED]: \"#F4D35E\",\n [ProcEntityRecordStatus.REJECTED]: \"#A8A84D\",\n [ProcEntityRecordStatus.IN_PROGRESS]: \"#EE964B\",\n [ProcEntityRecordStatus.COMPLETED]: \"#083D77\",\n [ProcEntityRecordStatus.ON_HOLD]: \"#533E2D\",\n [ProcEntityRecordStatus.CANCELLED]: \"#A491D3\",\n};\n\nexport const PROCURE_APPROVAL_STATUS_COLORS = {\n [ProcureApprovalStatus.PENDING_SUBMISSION]: \"#484041\",\n [ProcureApprovalStatus.LEVEL_1_APPROVAL_PENDING]: \"#250902\",\n [ProcureApprovalStatus.LEVEL_2_APPROVAL_PENDING]: \"#998FC7\",\n [ProcureApprovalStatus.APPROVED]: \"#E03616\",\n [ProcureApprovalStatus.REJECTED]: \"#1B998B\",\n [ProcureApprovalStatus.ON_HOLD]: \"#390099\",\n};\n\nexport const APPROVAL_ACTION_STATUS_COLORS = {\n [APPROVAL_ACTIONS.SUBMIT]: \"#484041\",\n [APPROVAL_ACTIONS.APPROVE]: \"#2a9d8f\",\n [APPROVAL_ACTIONS.REJECT]: \"#d62828\",\n [APPROVAL_ACTIONS.ON_HOLD]: \"#f4a261\",\n [APPROVAL_ACTIONS.CANCEL]: \"#f04419\",\n [APPROVAL_ACTIONS.REOPEN]: \"#2176ff\",\n};\n\nexport const procEntityRecordFiltersList: StatusItemProps[] = [\n {\n statusLabel: \"common.choices.procEntityRecordStatus.draft\",\n statusValue: ProcEntityRecordStatus.DRAFT,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcEntityRecordStatus.DRAFT],\n },\n {\n statusLabel: \"common.choices.procEntityRecordStatus.waitingForApproval\",\n statusValue: ProcEntityRecordStatus.WAITING_FOR_APPROVAL,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcEntityRecordStatus.WAITING_FOR_APPROVAL],\n },\n {\n statusLabel: \"common.choices.procEntityRecordStatus.approved\",\n statusValue: ProcEntityRecordStatus.APPROVED,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcEntityRecordStatus.APPROVED],\n },\n {\n statusLabel: \"common.choices.procEntityRecordStatus.inProgress\",\n statusValue: ProcEntityRecordStatus.REJECTED,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcEntityRecordStatus.REJECTED],\n },\n {\n statusLabel: \"common.choices.procEntityRecordStatus.completed\",\n statusValue: ProcEntityRecordStatus.IN_PROGRESS,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcEntityRecordStatus.IN_PROGRESS],\n },\n {\n statusLabel: \"common.choices.procEntityRecordStatus.onHold\",\n statusValue: ProcEntityRecordStatus.COMPLETED,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcEntityRecordStatus.COMPLETED],\n },\n {\n statusLabel: \"common.choices.procEntityRecordStatus.cancelled\",\n statusValue: ProcEntityRecordStatus.CANCELLED,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcEntityRecordStatus.CANCELLED],\n },\n];\n\nexport const procureApprovalStatusFiltersList: StatusItemProps[] = [\n {\n statusLabel: \"common.choices.procureApprovalStatus.pendingSubmission\",\n statusValue: ProcureApprovalStatus.PENDING_SUBMISSION,\n statusColor: PROCURE_APPROVAL_STATUS_COLORS[ProcureApprovalStatus.PENDING_SUBMISSION],\n },\n {\n statusLabel: \"common.choices.procureApprovalStatus.level1ApprovalPending\",\n statusValue: ProcureApprovalStatus.LEVEL_1_APPROVAL_PENDING,\n statusColor: PROCURE_APPROVAL_STATUS_COLORS[ProcureApprovalStatus.LEVEL_1_APPROVAL_PENDING],\n },\n {\n statusLabel: \"common.choices.procureApprovalStatus.level2ApprovalPending\",\n statusValue: ProcureApprovalStatus.LEVEL_2_APPROVAL_PENDING,\n statusColor: PROCURE_APPROVAL_STATUS_COLORS[ProcureApprovalStatus.LEVEL_2_APPROVAL_PENDING],\n },\n {\n statusLabel: \"common.choices.procureApprovalStatus.approved\",\n statusValue: ProcureApprovalStatus.APPROVED,\n statusColor: PROCURE_APPROVAL_STATUS_COLORS[ProcureApprovalStatus.APPROVED],\n },\n {\n statusLabel: \"common.choices.procureApprovalStatus.rejected\",\n statusValue: ProcureApprovalStatus.REJECTED,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcureApprovalStatus.REJECTED],\n },\n {\n statusLabel: \"common.choices.procureApprovalStatus.onHold\",\n statusValue: ProcureApprovalStatus.ON_HOLD,\n statusColor: PROC_ENTITY_RECORD_STATUS_COLORS[ProcureApprovalStatus.ON_HOLD],\n }\n];\n\nexport const FILTER_NAME_ONLY_USER = 'onlyUser';","import {\n TextInput,\n required,\n ReferenceInput,\n SelectInput,\n useTranslate,\n SimpleForm,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n account: { display: \"block\" },\n unitType: { display: \"block\" },\n unitSystem: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst UomForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest}>\n <SectionTitle label=\"resources.uom.fieldGroups.unitOfMeasureDetails\" />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.uom.fields.name\"\n helperText=\"resources.uom.help.name\"\n formClassName={classes.name}\n fullWid\n />\n\n <TextInput\n source=\"unitType\"\n label=\"resources.uom.fields.unitType\"\n helperText=\"resources.uom.help.unitType\"\n formClassName={classes.unitType}\n fullWid\n />\n\n <TextInput\n source=\"unitSystem\"\n label=\"resources.uom.fields.unitSystem\"\n helperText=\"resources.uom.help.unitSystem\"\n formClassName={classes.unitSystem}\n validate={[required()]}\n fullWid\n />\n\n <RichTextInput\n source=\"description\"\n label=\"resources.uom.fields.description\"\n helperText=\"resources.uom.help.description\"\n formClassName={classes.description}\n />\n\n <ReferenceInput\n label=\"resources.uom.fields.accountId\"\n source=\"accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n formClassName={classes.account}\n >\n <SelectInput\n optionText=\"displayLabel\"\n helperText=\"resources.uom.help.accountId\"\n />\n </ReferenceInput>\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { UomForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../lib/common\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter label=\"components.controls.filters.idFilter.label\"\n key=\"id\" />\n </Filter>\n);\nconst defaultColumns = [\"name\", \"description\"];\n\nconst UomList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"name\" />\n <TextField source=\"unitType\" />\n <TextField source=\"unitSystem\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { UomList };\n","import DonutLargeIcon from '@material-ui/icons/DonutLarge';\nimport { PermissionUoms, RESOURCE_NAME_UOM } from './constants';\nimport { UomCreate } from './UomCreate';\nimport { UomEdit } from './UomEdit';\nimport { UomList } from './UomList';\nimport { UomShow } from './UomShow';\n\nconst allowedPermissions = {\n menu: PermissionUoms.UOM_MENU,\n list: PermissionUoms.LIST_UOMS,\n create: PermissionUoms.CREATE_UOM,\n update: PermissionUoms.EDIT_UOM,\n show: PermissionUoms.SHOW_UOM,\n delete: PermissionUoms.DELETE_UOM,\n import: PermissionUoms.IMPORT_UOMS,\n};\n\nconst uomResource = {\n name: RESOURCE_NAME_UOM,\n list: UomList,\n create: UomCreate,\n edit: UomEdit,\n show: UomShow, \n icon: DonutLargeIcon,\n options: { label: 'resources.uom.name',allowedPermissions },\n}\n\nexport * from './constants';\nexport { uomResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components\";\nimport { UomForm } from \"./UomForm\";\n\nconst UomCreate= (props: CreateProps) => {\n return (\n <DefaultCreate {...props}>\n < UomForm/>\n </DefaultCreate>\n );\n };\n \n export { UomCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport { UomForm } from \"./UomForm\";\n\nconst UomEdit=(props:EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <UomForm />\n </DefaultEdit>\n );\n};\n\nexport { UomEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts\";\nimport { DefaultShow } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst UomShow=(props:ShowProps)=> {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"unitType\" />\n <TextField source=\"unitSystem\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { UomShow };\n","import { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\n\nexport const useFormStyles = makeStyles((theme) =>\n createStyles({\n generalTab: {\n display: \"grid\",\n gap: 10,\n gridTemplateColumns: \"1fr 1fr\",\n gridTemplateAreas: `\n \"itemDetailsLabel itemDetailsLabel\"\n \"number number\"\n \"name name\"\n \"description description\"\n \"parentId itemSegmentId\"\n \"itemCategoryId itemGroupId\"\n \"uomId size\"\n \"specifications specifications\"\n \"weight weightUomId\"\n \"volume volumeUomId\"\n `,\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n gridTemplateAreas: `\n \"itemDetailsLabel\"\n \"number\"\n \"name\"\n \"description\"\n \"parentId\"\n \"itemSegmentId\"\n \"itemCategoryId\"\n \"itemGroupId\"\n \"uomId\"\n \"size\"\n \"specifications\"\n \"weight\"\n \"weightUomId\"\n \"volume\"\n \"volumeUomId\"\n `,\n },\n \"& .ra-input-itemDetailsLabel\": {\n gridArea: \"itemDetailsLabel\",\n },\n \"& .ra-input-number\": {\n gridArea: \"number\",\n },\n\n \"& .ra-input-name\": {\n gridArea: \"name\",\n },\n \"& .ra-input-description\": {\n gridArea: \"description\",\n },\n \"& .ra-input-parentId\": {\n gridArea: \"parentId\",\n },\n \"& .ra-input-itemSegmentId\": {\n gridArea: \"itemSegmentId\",\n },\n \"& .ra-input-itemCategoryId\": {\n gridArea: \"itemCategoryId\",\n },\n \"& .ra-input-itemGroupId\": {\n gridArea: \"itemGroupId\",\n },\n\n \"& .ra-input-uomId\": {\n gridArea: \"uomId\",\n },\n \"& .ra-input-specifications\": {\n gridArea: \"specifications\",\n },\n \"& .ra-input-size\": {\n gridArea: \"size\",\n },\n \"& .ra-input-weight\": {\n gridArea: \"weight\",\n },\n \"& .ra-input-weightUomId\": {\n gridArea: \"weightUomId\",\n },\n \"& .ra-input-volume\": {\n gridArea: \"volume\",\n },\n \"& .ra-input-volumeUomId\": {\n gridArea: \"volumeUomId\",\n },\n },\n procurementTab: {\n display: \"grid\",\n gap: 10,\n gridTemplateColumns: \"1fr 1fr\",\n gridTemplateAreas: `\n \"procurementDetailsLabel procurementDetailsLabel\"\n \"purchaseGroupId .\"\n \"leadTimeInDays storageLocationId\"\n \"abcIndicator .\"\n \"moq moqUomId\"\n \"safetyStock safetyStockUomId\"\n \"description createdAt\"\n \"updatedAt version\"\n `,\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n gridTemplateAreas: `\n \"procurementDetailsLabel\"\n \"purchaseGroupId\"\n \"leadTimeInDays\"\n \"storageLocationId\"\n \"abcIndicator\"\n \"moq\"\n \"moqUomId\n \"safetyStock\"\n \"safetyStockUomId\"\n `,\n },\n \"& .ra-input-procurementDetailsLabel\": {\n gridArea: \"procurementDetailsLabel\",\n },\n \"& .ra-input-purchaseGroupId\": {\n gridArea: \"purchaseGroupId\",\n },\n \"& .ra-input-leadTimeInDays\": {\n gridArea: \"leadTimeInDays\",\n },\n\n \"& .ra-input-storageLocationId\": {\n gridArea: \"storageLocationId\",\n },\n\n \"& .ra-input-abcIndicator\": {\n gridArea: \"abcIndicator\",\n },\n\n \"& .ra-input-moq\": {\n gridArea: \"moq\",\n },\n\n \"& .ra-input-moqUomId\": {\n gridArea: \"moqUomId\",\n },\n\n \"& .ra-input-safetyStock\": {\n gridArea: \"safetyStock\",\n },\n\n \"& .ra-input-safetyStockUomId\": {\n gridArea: \"safetyStockUomId\",\n },\n \"& .ra-input-description\": {\n gridArea: \"description\",\n },\n \"& .ra-input-createdAt\": {\n gridArea: \"createdAt\",\n },\n \"& .ra-input-updatedAt\": {\n gridArea: \"updatedAt\",\n },\n \"& .ra-input-version\": {\n gridArea: \"version\",\n },\n },\n })\n);\n","import {\n TextInput,\n required,\n ReferenceInput,\n AutocompleteInput,\n TabbedForm,\n FormTab,\n number,\n RadioButtonGroupInput,\n Create,\n NumberInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { ABC_INDICATOR_CHOICES, RESOURCE_NAME_ITEM } from \"./constants\";\nimport { RESOURCE_NAME_ITEM_SEGMENTS } from \"../itemsSegment\";\nimport {\n MediaInputField,\n SectionTitleSubtitle,\n} from \"../../../../lib/components\";\nimport {\n getTabbedFormProps,\n MAX_RECORDS_PER_PAGE,\n} from \"../../../../lib/common\";\nimport { RESOURCE_NAME_LOCATION } from \"../../locations/constants\";\nimport { CategoryTypes, RESOURCE_NAME_CATEGORY } from \"../../category\";\nimport { RESOURCE_NAME_UOM } from \"../../unit-of-measure\";\nimport { useFormStyles } from \"./styles\";\nimport { RESOURCE_NAME_ITEM_GROUPS } from \"../itemsGroup/constants\";\n\nconst validateNumber = [number()];\n\nconst ItemForm = ({ isEdit, ...rest }) => {\n const classes = useFormStyles();\n\n return (\n <Create {...rest}>\n <TabbedForm\n {...getTabbedFormProps(rest)}\n warnWhenUnsavedChanges\n {...rest}\n >\n <FormTab\n label=\"resources.items.tabs.general\"\n contentClassName={classes.generalTab}\n >\n <SectionTitleSubtitle\n title=\"resources.items.fieldGroups.itemDetails\"\n formClassName=\"ra-input-itemDetailsLabel\"\n />\n\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.items.fields.number\"\n helperText=\"resources.items.help.number\"\n fullWidth\n isRequired\n validate={[required()]}\n />\n\n <TextInput\n source=\"name\"\n label=\"resources.items.fields.name\"\n helperText=\"resources.items.help.name\"\n fullWidth\n isRequired\n validate={[required()]}\n />\n\n <RichTextInput\n source=\"description\"\n label=\"resources.items.fields.description\"\n helperText=\"resources.items.help.description\"\n />\n\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.items.fields.parentId\"\n fullWidth\n reference={RESOURCE_NAME_ITEM}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.parentId\"\n />\n </ReferenceInput>\n\n <ReferenceInput\n source=\"itemSegmentId\"\n label=\"resources.items.fields.itemSegmentId\"\n fullWidth\n reference={RESOURCE_NAME_ITEM_SEGMENTS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"itemSegmentId\"\n >\n <AutocompleteInput\n optionText=\"name\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.itemSegmentId\"\n />\n </ReferenceInput>\n\n <ReferenceInput\n label=\"resources.items.fields.itemCategoryId\"\n source=\"itemCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={{ categoryType: CategoryTypes.ITEM }}\n key=\"itemCategoryId\"\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.itemCategoryId\"\n />\n </ReferenceInput>\n <ReferenceInput\n label=\"resources.items.fields.itemGroupId\"\n source=\"itemGroupId\"\n reference={RESOURCE_NAME_ITEM_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"number\", order: \"ASC\" }}\n key=\"itemGroupId\"\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.itemGroupId\"\n />\n </ReferenceInput>\n\n <ReferenceInput\n source=\"uomId\"\n label=\"resources.items.fields.uomId\"\n reference={RESOURCE_NAME_UOM}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"uomId\"\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.uomId\"\n />\n </ReferenceInput>\n\n <RichTextInput\n source=\"specifications\"\n label=\"resources.items.fields.specifications\"\n helperText=\"resources.items.help.specifications\"\n />\n\n <TextInput\n source=\"size\"\n label=\"resources.items.fields.size\"\n helperText=\"resources.items.help.size\"\n validate={validateNumber}\n fullWidth\n />\n\n <NumberInput\n source=\"weight\"\n label=\"resources.items.fields.weight\"\n helperText=\"resources.items.help.weight\"\n fullWidth\n />\n <ReferenceInput\n source=\"weightUomId\"\n label=\"resources.items.fields.weightUomId\"\n reference={RESOURCE_NAME_UOM}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"weightuomId\"\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.weightUomId\"\n />\n </ReferenceInput>\n\n <NumberInput\n source=\"volume\"\n label=\"resources.items.fields.volume\"\n helperText=\"resources.items.help.volume\"\n validate={validateNumber}\n fullWidth\n />\n <ReferenceInput\n source=\"volumeUomId\"\n label=\"resources.items.fields.volumeUomId\"\n fullWidth\n reference={RESOURCE_NAME_UOM}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"volumeuomId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.volumeUomId\"\n />\n </ReferenceInput>\n </FormTab>\n <FormTab\n label=\"resources.items.tabs.procurement\"\n contentClassName={classes.procurementTab}\n >\n <SectionTitleSubtitle\n title=\"resources.items.fieldGroups.procurementDetails\"\n formClassName=\"ra-input-procurementDetailsLabel\"\n />\n <NumberInput\n source=\"leadTimeInDays\"\n label=\"resources.items.fields.leadTimeInDays\"\n helperText=\"resources.items.help.leadTimeInDays\"\n validate={validateNumber}\n fullWidth\n />\n <ReferenceInput\n source=\"storageLocationId\"\n label=\"resources.items.fields.storageLocation\"\n reference={RESOURCE_NAME_LOCATION}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"number\", order: \"ASC\" }}\n key=\"storageLocationId\"\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={true}\n helperText=\"resources.items.help.storageLocation\"\n />\n </ReferenceInput>\n\n <RadioButtonGroupInput\n source=\"abcIndicator\"\n label=\"resources.items.fields.abcIndicator\"\n choices={ABC_INDICATOR_CHOICES}\n />\n\n <NumberInput\n source=\"moq\"\n label=\"resources.items.fields.moq\"\n helperText=\"resources.items.help.moq\"\n validate={validateNumber}\n fullWidth\n />\n <ReferenceInput\n source=\"moqUomId\"\n label=\"resources.items.fields.moqUomId\"\n fullWidth\n reference={RESOURCE_NAME_UOM}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"moquomId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.moqUomId\"\n />\n </ReferenceInput>\n\n <NumberInput\n source=\"safetyStock\"\n label=\"resources.items.fields.safetyStock\"\n helperText=\"resources.items.help.safetyStock\"\n validate={validateNumber}\n fullWidth\n />\n\n <ReferenceInput\n source=\"safetyStockUomId\"\n label=\"resources.items.fields.safetyStockUomId\"\n fullWidth\n reference={RESOURCE_NAME_UOM}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"safetyStockUomId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.items.help.sfUomId\"\n />\n </ReferenceInput>\n </FormTab>\n\n <FormTab label=\"resources.items.tabs.attachments\">\n <MediaInputField showUploadedFiles={isEdit} />\n </FormTab>\n </TabbedForm>\n </Create>\n );\n};\n\nexport { ItemForm };\n","import { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n AutocompleteArrayInput,\n ReferenceArrayInput,\n RichTextField,\n NumberField,\n SelectField,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n MAX_RECORDS_PER_PAGE,\n IdFilter,\n SearchFilter,\n} from \"../../../../lib/common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../../lib/components\";\nimport { RESOURCE_NAME_LOCATION } from \"../../locations/constants\";\nimport { RESOURCE_NAME_ITEM_SEGMENTS } from \"../itemsSegment\";\nimport { ABC_INDICATOR_CHOICES, RESOURCE_NAME_ITEM } from \"./constants\";\nimport {\n CategoryTypes,\n RESOURCE_NAME_CATEGORY,\n} from \"../../category/constants\";\nimport { RESOURCE_NAME_ITEM_GROUPS } from \"../itemsGroup\";\nimport { RESOURCE_NAME_UOM } from \"../../unit-of-measure\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn={true} key=\"search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n <ReferenceArrayInput\n label=\"resources.items.filters.itemSegment\"\n source=\"itemSegmentId\"\n reference={RESOURCE_NAME_ITEM_SEGMENTS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"itemSegmentId\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n label=\"resources.items.filters.itemCategoryId\"\n source=\"itemCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"number\", order: \"ASC\" }}\n filter={{ categoryType: CategoryTypes.ITEM }}\n key=\"itemCategoryId\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n <ReferenceArrayInput\n label=\"resources.items.filters.itemGroupId\"\n source=\"itemGroupId\"\n reference={RESOURCE_NAME_ITEM_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"number\", order: \"ASC\" }}\n key=\"itemGroupId\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n label=\"resources.items.filters.storageLocation\"\n source=\"storageLocationId\"\n reference={RESOURCE_NAME_LOCATION}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"storageLocationId\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n\n </Filter>\n);\n\nconst defaultColumns = [\n \"number\",\n \"name\",\n \"parentId\",\n \"itemSegmentId\",\n \"itemCategoryId\",\n \"itemGroupId\",\n];\nconst ItemList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n {...props}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_ITEM}>\n <TextField source=\"name\" />\n </ReferenceField>\n\n <ReferenceField\n source=\"itemCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"itemSegmentId\"\n reference={RESOURCE_NAME_ITEM_SEGMENTS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ReferenceField\n source=\"itemGroupId\"\n reference={RESOURCE_NAME_ITEM_GROUPS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"storageLocationId\"\n reference={RESOURCE_NAME_LOCATION}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ReferenceField\n source=\"uomId\"\n reference={RESOURCE_NAME_UOM}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <SelectField source=\"abcIndicator\" choices={ABC_INDICATOR_CHOICES} />\n <RichTextField source=\"specifications\" sortable={false} />\n <NumberField source=\"size\" />\n <NumberField source=\"weight\" />\n <ReferenceField\n source=\"weightUomId\"\n reference={RESOURCE_NAME_UOM}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <NumberField source=\"volume\" />\n <ReferenceField\n source=\"volumeUomId\"\n reference={RESOURCE_NAME_UOM}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <NumberField source=\"safetyStock\" />\n <ReferenceField\n source=\"safetyStockUomId\"\n reference={RESOURCE_NAME_UOM}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <NumberField source=\"moq\" />\n <ReferenceField\n source=\"moqUomId\"\n reference={RESOURCE_NAME_UOM}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <NumberField source=\"leadTimeInDays\" />\n\n <TextField source=\"accountId\" />\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { ItemList };\n","import {\n ConfirmListViewActionButton,\n EMPTY_CONFIRM_HANDLER,\n ListRowActionsProps,\n} from \"../../../lib/components\";\n\nimport SubmitIcon from \"@material-ui/icons/SendTwoTone\";\nimport ApproveIcon from \"@material-ui/icons/ThumbUpAltTwoTone\";\nimport RejectIcon from \"@material-ui/icons/ThumbDownTwoTone\";\nimport OnHoldIcon from \"@material-ui/icons/PauseCircleFilledTwoTone\";\nimport CancelIcon from \"@material-ui/icons/CancelTwoTone\";\nimport ReopenIcon from \"@material-ui/icons/ReplyAllTwoTone\";\n\nimport { Fragment } from \"react\";\nimport {\n ApprovalActionCommentsForm,\n APPROVAL_ACTIONS,\n APPROVAL_ACTION_STATUS_COLORS,\n ProcEntityRecordStatus,\n ProcureApprovalStatus,\n} from \"../..\";\nimport { Record, useNotify, useRefresh, useUpdate } from \"react-admin\";\n\ninterface ApprovalListRowActionButtonsProps extends ListRowActionsProps {}\n\nconst ApprovalListRowActionButtons = (\n props: ApprovalListRowActionButtonsProps\n) => {\n const notify = useNotify();\n const refresh = useRefresh();\n const [update] = useUpdate();\n\n const record: Record | undefined = props?.record;\n const resource = props?.resource;\n const translationResourceName = resource;\n\n const status = record?.procureStatus;\n const procureApprovalStatus = record?.procureApprovalStatus;\n const canUserAccess = record?.canAccess;\n const canUserLevel1Approve = record?.canLevel1Approve;\n const canUserLevel2Approve = record?.canLevel2Approve;\n\n const isStatusDraft = status === ProcEntityRecordStatus.DRAFT;\n\n const isStatusWaitingForApproval =\n status === ProcEntityRecordStatus.WAITING_FOR_APPROVAL;\n\n const isStatusInProgress = status === ProcEntityRecordStatus.IN_PROGRESS;\n\n const isApprovalStatusPendingSubmission =\n procureApprovalStatus === ProcureApprovalStatus.PENDING_SUBMISSION;\n\n const isApprovalStatusLevel1ApprovalPending =\n procureApprovalStatus === ProcureApprovalStatus.LEVEL_1_APPROVAL_PENDING;\n\n const isApprovalStatusLevel2ApprovalPending =\n procureApprovalStatus === ProcureApprovalStatus.LEVEL_2_APPROVAL_PENDING;\n\n const isApprovalStatusApprovalPending =\n isApprovalStatusLevel1ApprovalPending ||\n isApprovalStatusLevel2ApprovalPending;\n\n const canUserApprove = isApprovalStatusLevel1ApprovalPending\n ? canUserLevel1Approve\n : isApprovalStatusLevel2ApprovalPending\n ? canUserLevel2Approve\n : false;\n\n const canUserApproveAnyLevel = canUserLevel1Approve || canUserLevel2Approve;\n\n const isRecordStatusOnHold =\n status === ProcEntityRecordStatus.ON_HOLD &&\n procureApprovalStatus === ProcureApprovalStatus.ON_HOLD;\n const isRecordStatusRejected =\n status === ProcEntityRecordStatus.REJECTED &&\n procureApprovalStatus === ProcureApprovalStatus.REJECTED;\n\n //Should Show Handlers\n const shouldDisplaySubmitAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow =\n canUserAccess && isStatusDraft && isApprovalStatusPendingSubmission;\n\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayApproveAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow =\n canUserApprove &&\n isStatusWaitingForApproval &&\n isApprovalStatusApprovalPending;\n\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayRejectAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow =\n canUserApprove &&\n isStatusWaitingForApproval &&\n isApprovalStatusApprovalPending;\n\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayOnHoldAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow =\n canUserApprove &&\n isStatusWaitingForApproval &&\n isApprovalStatusApprovalPending;\n\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayCancelAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow =\n canUserApproveAnyLevel &&\n (isStatusInProgress || isRecordStatusOnHold || isRecordStatusRejected);\n\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayReopenAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow = canUserApproveAnyLevel && isRecordStatusOnHold;\n\n return Promise.resolve(shouldShow);\n };\n\n //Action Handlers\n\n const handleSubmitAction = (record?: Record) => {\n changeStatus(\n record,\n APPROVAL_ACTIONS.SUBMIT,\n `resources.${translationResourceName}.notification.submit.success`,\n `resources.${translationResourceName}.notification.submit.failure`,\n true\n );\n };\n\n const handleApproveAction = (record?: Record) => {\n changeStatus(\n record,\n APPROVAL_ACTIONS.APPROVE,\n `resources.${translationResourceName}.notification.approve.success`,\n `resources.${translationResourceName}.notification.approve.failure`\n );\n };\n\n const handleRejectAction = (record?: Record) => {\n changeStatus(\n record,\n APPROVAL_ACTIONS.REJECT,\n `resources.${translationResourceName}.notification.reject.success`,\n `resources.${translationResourceName}.notification.reject.failure`,\n true\n );\n };\n\n const handleOnHoldAction = (record?: Record) => {\n changeStatus(\n record,\n APPROVAL_ACTIONS.ON_HOLD,\n `resources.${translationResourceName}.notification.onHold.success`,\n `resources.${translationResourceName}.notification.onHold.failure`,\n true\n );\n };\n\n const handleCancelAction = (record?: Record) => {\n changeStatus(\n record,\n APPROVAL_ACTIONS.CANCEL,\n `resources.${translationResourceName}.notification.cancel.success`,\n `resources.${translationResourceName}.notification.cancel.failure`,\n true\n );\n };\n\n const handleReopenAction = (record?: Record) => {\n changeStatus(\n record,\n APPROVAL_ACTIONS.REOPEN,\n `resources.${translationResourceName}.notification.reopen.success`,\n `resources.${translationResourceName}.notification.reopen.failure`,\n true\n );\n };\n\n const changeStatus = (\n record,\n action: APPROVAL_ACTIONS,\n notifySuccessMessage: string,\n notifyFailureMessage: string,\n hasComment?: boolean\n ) => {\n const payload = {\n action,\n version: record?.version,\n ...(hasComment &&\n record &&\n record?.comment && {\n comment: record.comment,\n }),\n };\n\n update(resource, record.id, payload, record, {\n undoable: false,\n onSuccess: () => {\n notify(notifySuccessMessage, {type: \"success\"});\n refresh(true);\n },\n onFailure: () => {\n notify(notifyFailureMessage, {type: \"error\"});\n },\n });\n };\n\n return (\n <Fragment>\n <ConfirmListViewActionButton\n {...props}\n icon={\n <SubmitIcon\n htmlColor={APPROVAL_ACTION_STATUS_COLORS[APPROVAL_ACTIONS.SUBMIT]}\n />\n }\n tooltipTitle={`resources.${translationResourceName}.actions.submit.single.tooltip`}\n confirm={{\n title: `resources.${translationResourceName}.actions.submit.single.confirm.title`,\n content: (\n <ApprovalActionCommentsForm\n confirmMessage={`resources.${translationResourceName}.actions.submit.single.confirm.content`}\n commentSubtext={`resources.${translationResourceName}.actions.submit.comment.subText`}\n commentLabel={`resources.${translationResourceName}.actions.submit.comment.label`}\n commentHelpText={`resources.${translationResourceName}.actions.submit.comment.helpText`}\n record={record}\n />\n ),\n confirm: `resources.${translationResourceName}.actions.submit.single.confirm.confirm`,\n cancel: `resources.${translationResourceName}.actions.submit.single.confirm.cancel`,\n confirmColor: \"primary\",\n ConfirmIcon: SubmitIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n }}\n onConfirmHandler={handleSubmitAction}\n shouldDisplay={shouldDisplaySubmitAction}\n />\n\n <ConfirmListViewActionButton\n {...props}\n icon={\n <ApproveIcon\n htmlColor={APPROVAL_ACTION_STATUS_COLORS[APPROVAL_ACTIONS.APPROVE]}\n />\n }\n tooltipTitle={`resources.${translationResourceName}.actions.approve.single.tooltip`}\n confirm={{\n title: `resources.${translationResourceName}.actions.approve.single.confirm.title`,\n content: `resources.${translationResourceName}.actions.approve.single.confirm.content`,\n confirm: `resources.${translationResourceName}.actions.approve.single.confirm.confirm`,\n cancel: `resources.${translationResourceName}.actions.approve.single.confirm.cancel`,\n confirmColor: \"primary\",\n ConfirmIcon: ApproveIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n }}\n onConfirmHandler={handleApproveAction}\n shouldDisplay={shouldDisplayApproveAction}\n />\n\n <ConfirmListViewActionButton\n {...props}\n icon={\n <RejectIcon\n htmlColor={APPROVAL_ACTION_STATUS_COLORS[APPROVAL_ACTIONS.REJECT]}\n />\n }\n tooltipTitle={`resources.${translationResourceName}.actions.reject.single.tooltip`}\n confirm={{\n title: `resources.${translationResourceName}.actions.reject.single.confirm.title`,\n content: (\n <ApprovalActionCommentsForm\n confirmMessage={`resources.${translationResourceName}.actions.reject.single.confirm.content`}\n commentSubtext={`resources.${translationResourceName}.actions.reject.comment.subText`}\n commentLabel={`resources.${translationResourceName}.actions.reject.comment.label`}\n commentHelpText={`resources.${translationResourceName}.actions.reject.comment.helpText`}\n record={record}\n />\n ),\n confirm: `resources.${translationResourceName}.actions.reject.single.confirm.confirm`,\n cancel: `resources.${translationResourceName}.actions.reject.single.confirm.cancel`,\n confirmColor: \"warning\",\n ConfirmIcon: RejectIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n }}\n onConfirmHandler={handleRejectAction}\n shouldDisplay={shouldDisplayRejectAction}\n />\n\n <ConfirmListViewActionButton\n {...props}\n icon={\n <OnHoldIcon\n htmlColor={APPROVAL_ACTION_STATUS_COLORS[APPROVAL_ACTIONS.ON_HOLD]}\n />\n }\n tooltipTitle={`resources.${translationResourceName}.actions.onHold.single.tooltip`}\n confirm={{\n title: `resources.${translationResourceName}.actions.onHold.single.confirm.title`,\n content: (\n <ApprovalActionCommentsForm\n confirmMessage={`resources.${translationResourceName}.actions.onHold.single.confirm.content`}\n commentSubtext={`resources.${translationResourceName}.actions.onHold.comment.subText`}\n commentLabel={`resources.${translationResourceName}.actions.onHold.comment.label`}\n commentHelpText={`resources.${translationResourceName}.actions.onHold.comment.helpText`}\n record={record}\n />\n ),\n confirm: `resources.${translationResourceName}.actions.onHold.single.confirm.confirm`,\n cancel: `resources.${translationResourceName}.actions.onHold.single.confirm.cancel`,\n confirmColor: \"warning\",\n ConfirmIcon: OnHoldIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n }}\n onConfirmHandler={handleOnHoldAction}\n shouldDisplay={shouldDisplayOnHoldAction}\n />\n\n <ConfirmListViewActionButton\n {...props}\n icon={\n <ReopenIcon\n htmlColor={APPROVAL_ACTION_STATUS_COLORS[APPROVAL_ACTIONS.REOPEN]}\n />\n }\n tooltipTitle={`resources.${translationResourceName}.actions.reopen.single.tooltip`}\n confirm={{\n title: `resources.${translationResourceName}.actions.reopen.single.confirm.title`,\n content: (\n <ApprovalActionCommentsForm\n confirmMessage={`resources.${translationResourceName}.actions.reopen.single.confirm.content`}\n commentSubtext={`resources.${translationResourceName}.actions.reopen.comment.subText`}\n commentLabel={`resources.${translationResourceName}.actions.reopen.comment.label`}\n commentHelpText={`resources.${translationResourceName}.actions.reopen.comment.helpText`}\n record={record}\n />\n ),\n confirm: `resources.${translationResourceName}.actions.reopen.single.confirm.confirm`,\n cancel: `resources.${translationResourceName}.actions.reopen.single.confirm.cancel`,\n confirmColor: \"primary\",\n ConfirmIcon: ReopenIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n }}\n onConfirmHandler={handleReopenAction}\n shouldDisplay={shouldDisplayReopenAction}\n />\n\n <ConfirmListViewActionButton\n {...props}\n icon={\n <CancelIcon\n htmlColor={APPROVAL_ACTION_STATUS_COLORS[APPROVAL_ACTIONS.CANCEL]}\n />\n }\n tooltipTitle={`resources.${translationResourceName}.actions.cancel.single.tooltip`}\n confirm={{\n title: `resources.${translationResourceName}.actions.cancel.single.confirm.title`,\n content: (\n <ApprovalActionCommentsForm\n confirmMessage={`resources.${translationResourceName}.actions.cancel.single.confirm.content`}\n commentSubtext={`resources.${translationResourceName}.actions.cancel.comment.subText`}\n commentLabel={`resources.${translationResourceName}.actions.cancel.comment.label`}\n commentHelpText={`resources.${translationResourceName}.actions.cancel.comment.helpText`}\n record={record}\n />\n ),\n confirm: `resources.${translationResourceName}.actions.cancel.single.confirm.confirm`,\n cancel: `resources.${translationResourceName}.actions.cancel.single.confirm.cancel`,\n confirmColor: \"warning\",\n ConfirmIcon: CancelIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n }}\n onConfirmHandler={handleCancelAction}\n shouldDisplay={shouldDisplayCancelAction}\n />\n </Fragment>\n );\n};\n\nexport { ApprovalListRowActionButtons };\n","export const RESOURCE_NAME_CURRENCIES = \"currencies\";\n\nexport enum PermissionCurrencies {\n CURRENCIES_MENU = \"view-currencies-menu\",\n LIST_CURRENCIES = \"list-currencies\",\n SHOW_CURRENCY = \"show-currency\",\n CREATE_CURRENCY = \"create-currency\",\n EDIT_CURRENCY = \"update-currency\",\n DELETE_CURRENCY = \"delete-currency\",\n}\n","import { Labeled, SelectField } from \"react-admin\";\nimport { PROCURE_APPROVAL_STATUS_CHOICES } from \"../../constants\";\n\nconst ApprovalStatusField = ({\n label = \"common.fields.approvalStatus\",\n useLabel = false,\n}: {\n label?: string;\n useLabel?: boolean;\n}) => {\n if (useLabel) {\n return (\n <Labeled\n id=\"procureApprovalStatus\"\n source=\"procureApprovalStatus\"\n label=\"common.fields.approvalStatus\"\n >\n <SelectField\n label={label}\n source=\"procureApprovalStatus\"\n choices={PROCURE_APPROVAL_STATUS_CHOICES}\n />\n </Labeled>\n );\n } else {\n return (\n <SelectField\n label={label}\n source=\"procureApprovalStatus\"\n choices={PROCURE_APPROVAL_STATUS_CHOICES}\n />\n );\n }\n};\n\nexport { ApprovalStatusField };\n","import { Labeled, SelectField } from \"react-admin\";\nimport { PROC_ENTITY_RECORD_STATUS_CHOICES } from \"../../constants\";\n\nconst RecordStatusField = ({\n label = \"common.fields.status\",\n useLabel = false,\n}: {\n label?: string;\n useLabel?: boolean;\n}) => {\n if (useLabel) {\n return (\n <Labeled id=\"procureStatus\" source=\"procureStatus\" label=\"common.fields.status\">\n <SelectField\n label={label}\n source=\"procureStatus\"\n choices={PROC_ENTITY_RECORD_STATUS_CHOICES}\n />\n </Labeled>\n );\n } else {\n return (\n <SelectField\n label={label}\n source=\"procureStatus\"\n choices={PROC_ENTITY_RECORD_STATUS_CHOICES}\n />\n );\n }\n};\n\nexport { RecordStatusField };\n","import { TextField, EmailField, Labeled, Record } from \"react-admin\";\n\nexport interface NameEmailFieldProps {\n nameFieldSource?: string;\n emailFieldSource?: string;\n nameFieldLabel?: string;\n emailFieldLabel?: string;\n useLabel?: boolean;\n fieldLabel?: string;\n record?: Record;\n}\n\nconst NameEmailField = ({\n nameFieldSource = \"fullName\",\n emailFieldSource = \"email\",\n nameFieldLabel = \"common.fields.name\",\n emailFieldLabel = \"common.fields.email\",\n useLabel = false,\n fieldLabel,\n record,\n}: NameEmailFieldProps) => {\n if (useLabel) {\n return (\n <Labeled id=\"nameEmailField\" label={fieldLabel}>\n <>\n <TextField label={nameFieldLabel} source={nameFieldSource}/>\n  (\n <EmailField label={emailFieldLabel} source={emailFieldSource} />)\n </>\n </Labeled>\n );\n }\n\n return (\n <>\n <TextField label={nameFieldLabel} source={nameFieldSource} />\n  (\n <EmailField label={emailFieldLabel} source={emailFieldSource} />)\n </>\n );\n};\n\nexport { NameEmailField };\n","export const RESOURCE_ACCOUNT_CODE = \"accountCode\";\nexport const RESOURCE_NAME_BUSINESS_FUNCTIONS = 'businessFunctions'\n\nexport enum PermissionBusinessFunctions {\n MENU_BUSINESS_FUNCTION = \"view-business-functions-menu\",\n LIST_BUSINESS_FUNCTIONS = \"list-business-functions\",\n SHOW_BUSINESS_FUNCTION = \"show-business-function\",\n CREATE_BUSINESS_FUNCTION = \"create-business-function\",\n EDIT_BUSINESS_FUNCTION = \"update-business-function\",\n DELETE_BUSINESS_FUNCTION = \"delete-business-function\",\n}\n","import lodashMemoize from \"lodash/memoize\";\n\n// If we define validation functions directly in JSX, it will\n// result in a new function at every render, and then trigger infinite re-render.\n// Hence, we memoize every built-in validator to prevent a \"Maximum call stack\" error.\nexport const memoize = (fn) => lodashMemoize(fn, (...args) => JSON.stringify(args));\n\nexport const getMessage = (message, messageArgs, value, values) =>\n typeof message === \"function\"\n ? message({\n args: messageArgs,\n value,\n values,\n })\n : messageArgs\n ? {\n message,\n args: messageArgs,\n }\n : message;\n\nexport const isEmpty = (value: any) =>\n typeof value === 'undefined' ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0); ","import { isValid, isBefore, isAfter } from \"date-fns\";\nimport { getMessage, memoize } from \"./validationUtils\";\n\nexport const isDateGreaterThan = memoize(\n (\n targetDate = new Date(),\n message = \"components.validations.isDateGreaterThan\"\n ) =>\n (value, values) => {\n if (!value) {\n return undefined;\n }\n const dateValue = new Date(value);\n let isValidDate = isValid(dateValue);\n isValidDate = isValidDate && !isAfter(dateValue, targetDate);\n\n return !isValidDate\n ? getMessage(message, undefined, value, values)\n : undefined;\n }\n);\n\nexport const isDateGreaterThanOther = memoize(\n (\n targetDateField,\n message = \"components.validations.isDateGreaterThanOther\"\n ) =>\n (value, values) => {\n if (!value) {\n return undefined;\n }\n const dateValue = new Date(value);\n let isValidDate = isValid(dateValue);\n const targetDate = values[targetDateField];\n isValidDate = isValidDate && !isAfter(dateValue, targetDate);\n\n return !isValidDate\n ? getMessage(message, undefined, value, values)\n : undefined;\n }\n);\n\nexport const isDateNotGreaterThanToday = memoize(\n (message = \"components.validations.isDateNotGreaterThanToday\") =>\n (value, values) => {\n if (!value) {\n return undefined;\n }\n const targetDate = new Date();\n\n return isDateGreaterThan(targetDate, message);\n }\n);\n\nexport const isDateLessThan = memoize(\n (\n targetDate = new Date(),\n message = \"components.validations.isDateLessThan\"\n ) =>\n (value, values) => {\n\n if (!value) {\n return undefined;\n }\n\n const dateValue = new Date(value);\n let isValidDate = isValid(dateValue);\n isValidDate = isValidDate && !isBefore(dateValue, targetDate);\n\n return !isValidDate\n ? getMessage(message, undefined, value, values)\n : undefined;\n }\n);\n\nexport const isDateLessThanOther = memoize(\n (targetDateField, message = \"components.validations.isDateLessThanOther\") =>\n (value, values) => {\n //Do not proceed if no date is specified\n if (!value) {\n return undefined;\n }\n const dateValue = new Date(value);\n let isValidDate = isValid(dateValue);\n const targetDate = values[targetDateField];\n isValidDate = isValidDate && !isBefore(dateValue, targetDate);\n\n return !isValidDate\n ? getMessage(message, undefined, value, values)\n : undefined;\n }\n);\n\nexport const isDateNotLessThanToday = memoize(\n (message = \"components.validations.isDateNotLessThanToday\") =>\n (value, values) => {\n //Do not proceed if no date is specified\n if (!value) {\n return undefined;\n }\n const targetDate = new Date();\n const dateValue = new Date(value);\n let isValidDate = isValid(dateValue);\n isValidDate = isValidDate && !isBefore(dateValue, targetDate);\n\n return !isValidDate\n ? getMessage(message, undefined, value, values)\n : undefined;\n }\n);\n","import { getMessage, memoize, isEmpty } from \"./validationUtils\";\n\nexport const requiredIf = memoize(\n (otherFieldName, message = \"ra.validation.required\") =>\n Object.assign((value, values) => {\n const doesConditionPass =\n isEmpty(value) && !isEmpty(values[otherFieldName]);\n const conditionalMessage = doesConditionPass\n ? getMessage(message, undefined, value, values)\n : undefined;\n\n return conditionalMessage;\n })\n);\n\nexport const requiredIfTrue = memoize(\n (trueCondition: boolean, message = \"ra.validation.required\") =>\n Object.assign((value, values) => {\n const doesConditionPass =\n isEmpty(value) && trueCondition;\n const conditionalMessage = doesConditionPass\n ? getMessage(message, undefined, value, values)\n : undefined;\n\n return conditionalMessage;\n })\n);\n\nexport const isSameAs = memoize(\n (otherFieldName, message = \"ra.validation.required\") =>\n Object.assign((value, values) => {\n const doesConditionPass =\n !isEmpty(value) &&\n !isEmpty(values[otherFieldName]) &&\n value === values[otherFieldName];\n const conditionalMessage = doesConditionPass\n ? getMessage(message, undefined, value, values)\n : undefined;\n\n return conditionalMessage;\n })\n);\n\nexport const isNotSameAs = memoize(\n (otherFieldName, message = \"ra.validation.required\") =>\n Object.assign((value, values) => {\n const doesConditionPass =\n !isEmpty(value) &&\n !isEmpty(values[otherFieldName]) &&\n value !== values[otherFieldName];\n const conditionalMessage = doesConditionPass\n ? getMessage(message, undefined, value, values)\n : undefined;\n \n return conditionalMessage;\n })\n );\n","import { Identifier } from \"react-admin\";\nimport { getMessage, memoize } from \"./validationUtils\";\n\nconst serverUrl = process.env.REACT_APP_SERVER_ENDPOINT;\n\nconst checkIsFieldUnique = async (\n resourceName: string,\n field: string,\n value: string,\n values: any,\n performOwnIdCheck: boolean = false,\n message: string = \"components.validations.isUniqueField\"\n) => {\n const uniqueCheckUrl = `${serverUrl}/${resourceName}/isUnique`;\n\n if (value) {\n let params: any = {\n field,\n value,\n };\n if(performOwnIdCheck && values?.id){\n const ownId: Identifier = values?.id;\n params = {\n ...params,\n ownId,\n }\n }\n const request = new Request(uniqueCheckUrl, {\n method: \"POST\",\n body: JSON.stringify(params),\n credentials: \"include\",\n headers: new Headers({ \"Content-Type\": \"application/json\" }),\n });\n\n const response = await fetch(request);\n const isRequestSuccess = response.status === 201;\n const { isUnique } = await response.json();\n\n return !isUnique && isRequestSuccess\n ? getMessage(message, undefined, value, values)\n : undefined;\n } else {\n return undefined;\n }\n}\n\nconst isUniqueField = memoize(\n (\n resourceName: string,\n field: string,\n performOwnIdCheck: boolean = false,\n message: string = \"components.validations.isUniqueField\"\n ) =>\n async (value, values) => {\n return checkIsFieldUnique(resourceName, field, value, values, performOwnIdCheck, message);\n }\n);\n\nexport { checkIsFieldUnique, isUniqueField }\n","import { regex } from \"ra-core\";\nimport { memoize } from \"./validationUtils\";\n\nconst URL_REGEX =\n /(http|ftp|https):\\/\\/[\\w-]+(\\.[\\w-]+)+([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?/;\n\nexport const isUrl = memoize(\n (message = \"components.validations.isUrl\") =>\n regex(URL_REGEX, message)\n);\n","import {\n TextInput,\n required,\n ReferenceInput,\n SelectInput,\n SimpleForm,\n BooleanInput,\n} from \"react-admin\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\nimport { isUniqueField } from \"../../../lib/components/validations\";\nimport { RESOURCE_NAME_CURRENCIES } from \"./constants\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n symbol: { display: \"block\" },\n description: { display: \"block\" },\n account: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst CurrencyForm = ({ isEdit, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest} variant=\"filled\">\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.currencies.fields.name\"\n helperText=\"resources.currencies.help.name\"\n formClassName={classes.name}\n validate={[required(),\n isUniqueField(\n RESOURCE_NAME_CURRENCIES,\n \"name\",\n isEdit,\n \"resources.currencies.validations.isUniqueField\"\n )\n ]}\n\n />\n <TextInput\n source=\"symbol\"\n label=\"resources.currencies.fields.symbol\"\n helperText=\"resources.currencies.help.symbol\"\n formClassName={classes.symbol}\n validate={[required()]}\n />\n <TextInput\n source=\"description\"\n label=\"resources.currencies.fields.description\"\n helperText=\"resources.currencies.help.description\"\n formClassName={classes.description}\n resettable\n multiline\n />\n <ReferenceInput\n label=\"resources.currencies.fields.accountId\"\n source=\"accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n formClassName={classes.account}\n >\n <SelectInput\n optionText=\"displayLabel\"\n helperText=\"resources.currencies.help.accountId\"\n />\n </ReferenceInput>\n\n </SimpleForm>\n );\n};\nexport { CurrencyForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../lib/common\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"name\", \"symbol\", \"description\"];\n\nconst CurrencyList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <TextField source=\"symbol\" />\n <TextField source=\"label\" sortable={false} />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <BooleanField source=\"isBootstrapped\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { CurrencyList };\n","import MoneyIcon from '@material-ui/icons/Money';\nimport { PermissionCurrencies, RESOURCE_NAME_CURRENCIES } from './constants';\nimport { CurrencyCreate } from './CurrencyCreate';\nimport { CurrencyEdit } from './CurrencyEdit';\nimport { CurrencyList } from './CurrencyList';\nimport { CurrencyShow } from './CurrencyShow';\n\nconst allowedPermissions = {\n menu: PermissionCurrencies.CURRENCIES_MENU,\n list: PermissionCurrencies.LIST_CURRENCIES,\n create: PermissionCurrencies.CREATE_CURRENCY,\n update: PermissionCurrencies.EDIT_CURRENCY,\n show: PermissionCurrencies.SHOW_CURRENCY,\n delete: PermissionCurrencies.DELETE_CURRENCY,\n};\n\nconst currencyResource = {\n name: RESOURCE_NAME_CURRENCIES,\n list: CurrencyList,\n create: CurrencyCreate,\n edit: CurrencyEdit,\n show: CurrencyShow, \n icon: MoneyIcon,\n options: { label: 'resources.currencies.name', allowedPermissions },\n}\n\nexport * from './constants';\nexport { currencyResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components\";\nimport { CurrencyForm } from \"./CurrencyForm\";\n\nconst CurrencyCreate= (props: CreateProps) => {\n return (\n <DefaultCreate {...props}>\n <CurrencyForm isEdit={true}/>\n </DefaultCreate>\n );\n };\n \n export { CurrencyCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport { CurrencyForm } from \"./CurrencyForm\";\n\nconst CurrencyEdit= (props:EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <CurrencyForm isEdit={true} />\n </DefaultEdit>\n );\n};\n\nexport { CurrencyEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n BooleanField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts\";\nimport { DefaultShow } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst CurrencyShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"symbol\" />\n <TextField source=\"label\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <BooleanField source=\"isBootstrapped\" />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { CurrencyShow };\n","import { Labeled, NumberField, ReferenceField, TextField } from \"react-admin\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../../modules/datasetup/currencies\";\n\nconst AmountField = ({\n amountSource,\n currencySoure,\n label,\n useLabel = false,\n}: {\n amountSource: string;\n currencySoure: string;\n label: string;\n useLabel?: boolean;\n}) => {\n if (useLabel) {\n return (\n <Labeled id={label} source={amountSource} label={label}>\n <>\n <NumberField source={amountSource} />\n <ReferenceField\n source={currencySoure}\n reference={RESOURCE_NAME_CURRENCIES}\n link={false}\n fullWidth={false}\n >\n <TextField source=\"name\" style={{marginLeft: 5}} />\n </ReferenceField>\n </>\n </Labeled>\n );\n } else {\n return (\n <>\n <NumberField source={amountSource} />\n <ReferenceField\n label=\"resources.enquiries.fields.currencyId\"\n source={currencySoure}\n reference={RESOURCE_NAME_CURRENCIES}\n link=\"show\"\n fullWidth={true}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n </>\n );\n }\n};\n\nexport { AmountField };\n","import { Labeled, ReferenceField, TextField } from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\n\nconst CustomerNameField = ({\n source = \"procureAccountId\",\n label = \"common.fields.customerName\",\n useLabel = true,\n}: {\n source?: string;\n label?: string;\n useLabel?: boolean;\n}) => {\n if (useLabel) {\n return (\n <Labeled id={label} source={source} label={label}>\n <ReferenceField\n label={label}\n source={source}\n reference={RESOURCE_NAME_ACCOUNT}\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n );\n } else {\n return (\n <ReferenceField\n label={label}\n source={source}\n reference={RESOURCE_NAME_ACCOUNT}\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n );\n }\n};\n\nexport { CustomerNameField };\n","import { Labeled, ReferenceField, TextField } from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\n\nconst VendorNameField = ({\n source = \"vendorAccountId\",\n label = \"common.fields.vendorName\",\n useLabel = true,\n}: {\n source?: string;\n label?: string;\n useLabel?: boolean;\n}) => {\n if (useLabel) {\n return (\n <Labeled id={label} source={source} label={label}>\n <ReferenceField\n label={label}\n source={source}\n reference={RESOURCE_NAME_ACCOUNT}\n link=\"show\"\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n );\n } else {\n return (\n <ReferenceField\n label={label}\n source={source}\n reference={RESOURCE_NAME_ACCOUNT}\n link=\"show\"\n >\n <TextField source=\"name\" />\n </ReferenceField>\n );\n }\n};\n\nexport { VendorNameField };\n","import { Box, makeStyles } from \"@material-ui/core\";\nimport {\n NumberField, \n ReferenceField, \n TextField, \n Labeled,\n Record,\n} from \"react-admin\";\nimport { RESOURCE_NAME_UOM } from \"../../../modules/datasetup/unit-of-measure\";\n\nconst useStyles = makeStyles((theme) => ({\n quantity: {\n paddingLeft: 10,\n paddingRight: 50,\n },\n uomId: {\n marginLeft: 5,\n },\n}));\n\nconst QuantityField = ({\n source = \"quantity\",\n uomSource = \"uomId\",\n label = \"common.fields.quantity\",\n useLabel = true,\n record,\n className,\n}: {\n source?: string;\n uomSource?: string;\n label?: string;\n useLabel?: boolean;\n record?: Record;\n className?: string;\n}) => {\n const classes = useStyles();\n if (useLabel) {\n return (\n <Labeled\n id={source}\n label={label}\n source={source}\n className={className}\n >\n <Box>\n <NumberField source={source} record={record}/>\n <ReferenceField\n source={uomSource}\n reference={RESOURCE_NAME_UOM}\n link={false}\n record={record}\n >\n <TextField \n source=\"displayLabel\" \n className={classes.uomId} \n />\n </ReferenceField>\n </Box>\n </Labeled>\n );\n } else {\n return (\n <Box>\n <NumberField source={source} />\n <ReferenceField\n source={uomSource}\n reference={RESOURCE_NAME_UOM}\n link={false}\n >\n <TextField \n source=\"displayLabel\" \n className={classes.uomId} \n />\n </ReferenceField>\n </Box>\n );\n }\n};\n\nexport { QuantityField };\n","import { makeStyles, Box, Fade, Paper } from \"@material-ui/core\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport { useState } from \"react\";\nimport { SingleItemShowContainer } from \"../../../modules/datasetup/items\";\n\nconst ItemDetailsInputAccordionField = (props) => {\n const classes = useStyles();\n const summaryClassName = props?.summaryClassName;\n const [checked, setChecked] = useState(false);\n\n const handleChange = () => {\n setChecked((prev) => !prev);\n };\n\n return (\n <Box>\n <Box className={classes.itemsAccordion}>\n {props?.record?.itemId && (\n <Box\n className={classes.expandIconContainer}\n onClick={() => handleChange()}\n >\n <ExpandMoreIcon\n className={`${classes.expandIcon} ${\n checked\n ? classes.expandIconSelected\n : classes.expandIconUnselected\n }`}\n />\n </Box>\n )}\n <Box className={summaryClassName}>{props?.children}</Box>\n </Box>\n {checked && props?.record?.itemId && (\n <Box>\n <Fade in={checked}>\n <Paper elevation={3} variant=\"outlined\">\n <SingleItemShowContainer\n procureAccountId={false}\n record={props?.record}\n />\n </Paper>\n </Fade>\n </Box>\n )}\n </Box>\n );\n};\n\nconst useStyles = makeStyles((theme) => ({\n itemsAccordion: {\n border: 0,\n borderRadius: 0,\n position: \"unset\",\n display: \"flex\",\n },\n\n expandIconContainer: {\n position: \"relative\",\n top: 30,\n left: -10,\n [theme.breakpoints.down(\"sm\")]: {\n position: \"unset\",\n top: \"unset\",\n left: \"unset\",\n marginTop: 10,\n },\n },\n expandIcon: {\n cursor: \"pointer\",\n transition: \"transform 0.5s\",\n },\n expandIconUnselected: {\n transform: \"rotate(-90deg)\",\n },\n expandIconSelected: {\n transform: \"rotate(0deg)\",\n },\n}));\n\nexport { ItemDetailsInputAccordionField };\n","import { Labeled, ReferenceField, TextField } from \"react-admin\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\nimport { accountResource, RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts\";\n\nconst ProcureAccountField = ({\n label = \"common.fields.procureAccountId\",\n useLabel = false,\n}: {\n label?: string;\n useLabel?: boolean;\n}) => {\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n let showLink: boolean | string = false;\n \n if(permissionsLoaded && (hasPermissionAccess(accountResource?.options?.allowedPermissions?.show))){\n showLink = 'show';\n }\n\n if (useLabel) {\n return (\n <Labeled\n id=\"procureAccountId\"\n source=\"procureAccountId\"\n label={label}\n >\n <ReferenceField\n source=\"procureAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n link={showLink}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n </Labeled>\n );\n } else {\n return (\n <ReferenceField\n source=\"procureAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n link={showLink}\n sortable={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n );\n }\n};\n\nexport { ProcureAccountField };\n","import { LinkToType, ReferenceField, Record } from \"react-admin\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\nimport {\n RESOURCE_NAME_ONLY_USER,\n RESOURCE_NAME_USER,\n usersResource,\n} from \"../../../lib/modules/accounts\";\nimport { NameEmailField } from \"./NameEmailField\";\n\nconst UserNameEmailField = ({\n source,\n label,\n useLabel = false,\n record\n}: {\n source: string;\n label: string;\n useLabel?: boolean;\n record?: Record;\n}) => {\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n let showLink: LinkToType = false;\n\n if (\n permissionsLoaded &&\n hasPermissionAccess(usersResource?.options?.allowedPermissions?.show)\n ) {\n showLink = (record, reference) => {\n return `/${RESOURCE_NAME_USER}/${record[source]}/show`;\n };\n }\n\n return (\n <ReferenceField\n source={source}\n reference={RESOURCE_NAME_ONLY_USER}\n link={showLink}\n record={record}\n >\n <NameEmailField\n nameFieldSource=\"fullName\"\n emailFieldSource=\"email\"\n useLabel={useLabel}\n fieldLabel={label}\n />\n </ReferenceField>\n );\n};\n\nexport { UserNameEmailField };\n","export const RESOURCE_NAME_VENDOR = \"vendors\";\n\nexport const FILTER_NAME_GLOBAL_VENDORS = \"showGlobalVendors\";\n\nexport enum PermissionVendors {\n MENU_VENDOR = \"view-vendors-menu\",\n LIST_VENDORS = \"list-vendors\",\n SHOW_VENDOR = \"show-vendor\",\n CREATE_VENDOR = \"create-vendor\",\n EDIT_VENDOR = \"update-vendor\",\n DELETE_VENDOR = \"delete-vendor\",\n IMPORT_VENDORS = \"import-vendors\",\n CAN_LINK_GLOBAL_VENDORS = \"can-link-global-vendors\",\n CAN_UNLINK_GLOBAL_VENDORS = \"can-unlink-global-vendors\"\n}\n\nexport const CATEGORY_TYPE_CHOICES = [\n { id: 1, name: 'resources.category.choices.categoryType.item' },\n { id: 2, name: 'resources.category.choices.categoryType.vendor' },\n];\nexport enum VENDOR_ACTIONS {\n ADD_AS_OWN_VENDOR = \"addAsGlobalVendor\",\n REMOVE_AS_OWN_VENDOR = \"removeAsOwnVendor\",\n}","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n ReferenceInput,\n AutocompleteInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport {\n MediaInputField,\n} from \"../../../lib/components\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"./constants\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n account: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst BusinessFunctionForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest}>\n <SectionTitle label=\"resources.businessFunction.fieldGroups.businessFunctionDetails\" />\n <TextInput\n source=\"number\"\n label=\"resources.businessFunction.fields.number\"\n helperText=\"resources.businessFunction.help.number\"\n formClassName={classes.name}\n autoFocus\n validate={[required()]}\n />\n <TextInput\n source=\"name\"\n label=\"resources.businessFunction.fields.name\"\n helperText=\"resources.businessFunction.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n />\n\n <RichTextInput\n source=\"description\"\n label=\"resources.businessFunction.fields.description\"\n helperText=\"resources.businessFunction.help.description\"\n formClassName={classes.description}\n />\n\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.businessFunction.fields.parentId\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n key=\"parentId\"\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.businessFunction.help.parentId\"\n />\n </ReferenceInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { BusinessFunctionForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../lib/common\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"./constants\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"description\"];\n\nconst BusinessFunctionList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { BusinessFunctionList };\n","import BusinessCenterIcon from \"@material-ui/icons/BusinessCenter\";\nimport { BusinessFunctionEdit } from './BusinessFunctionEdit'\nimport { BusinessFunctionList } from './BusinessFunctionList'\nimport { BusinessFunctionShow } from './BusinessFunctionShow'\nimport { BusinessFunctionCreate } from './BusinessFunctionsCreate'\nimport { PermissionBusinessFunctions, RESOURCE_NAME_BUSINESS_FUNCTIONS } from './constants'\n\nconst businessFunctionPermissions = {\n menu: PermissionBusinessFunctions.MENU_BUSINESS_FUNCTION,\n list: PermissionBusinessFunctions.LIST_BUSINESS_FUNCTIONS,\n create: PermissionBusinessFunctions.CREATE_BUSINESS_FUNCTION,\n update: PermissionBusinessFunctions.EDIT_BUSINESS_FUNCTION,\n show: PermissionBusinessFunctions.SHOW_BUSINESS_FUNCTION,\n delete: PermissionBusinessFunctions.DELETE_BUSINESS_FUNCTION,\n\n};\n\nconst businessFunctionResource = {\n name: RESOURCE_NAME_BUSINESS_FUNCTIONS,\n list: BusinessFunctionList,\n create: BusinessFunctionCreate,\n edit: BusinessFunctionEdit,\n show: BusinessFunctionShow,\n icon: BusinessCenterIcon, \n options: { label: 'resources.businessFunction.name', allowedPermissions: businessFunctionPermissions },\n}\n\n\nexport * from './constants';\nexport { businessFunctionPermissions, businessFunctionResource }\n","import { CreateProps } from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\nimport { BusinessFunctionForm } from \"./BusinessFunctionForm\";\n\nconst BusinessFunctionCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"business-functions\",\n },\n ];\n\n return (\n <DefaultCreate\n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <BusinessFunctionForm />\n </DefaultCreate>\n );\n};\n\nexport { BusinessFunctionCreate };\n","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport { BusinessFunctionForm } from \"./BusinessFunctionForm\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\n\nconst BusinessFunctionEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"business-functions\",\n },\n ];\n\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <BusinessFunctionForm isEdit={true}{...props} />\n </DefaultEdit>\n );\n};\n\nexport { BusinessFunctionEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"./constants\";\n\nconst BusinessFunctionShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { BusinessFunctionShow };\n","import { AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"../../../modules/datasetup/business-functions\";\n\nconst BusinessFunctionsListFilter = ({source}: {source: string}) => {\n return (\n <ReferenceArrayInput\n source=\"businessFunctionId\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"businessFunctionId\"\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n );\n};\n\nexport { BusinessFunctionsListFilter };\n","import { AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\nimport { RESOURCE_NAME_ITEM } from \"../../../modules/datasetup/items\";\n\nconst ItemsListFilter = ({source}: {source: string}) => {\n return (\n <ReferenceArrayInput\n source={source}\n reference={RESOURCE_NAME_ITEM}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key={source}\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n );\n};\n\nexport { ItemsListFilter };\n","import StatusIcon from \"@material-ui/icons/Traffic\";\nimport { StatusFilterList } from \"../../../lib/common/ui/filters\";\nimport { procEntityRecordFiltersList } from \"../../constants\";\n\nconst ProcEntityRecordStatusFilterList = () => {\n\n return (\n <StatusFilterList\n statusFieldName=\"procureStatus\"\n label=\"common.fields.status\"\n icon={<StatusIcon />}\n statusList={procEntityRecordFiltersList}\n width=\"160px\"\n />\n )\n};\n\nexport { ProcEntityRecordStatusFilterList };\n","import ApprovalIcon from \"@material-ui/icons/VerifiedUser\";\nimport { StatusFilterList } from \"../../../lib/common/ui/filters/StatusFilterList\";\nimport { procureApprovalStatusFiltersList } from \"../../constants\";\n\nconst ProcureApprovalStatusFilterList = () => (\n <StatusFilterList\n statusFieldName=\"procureApprovalStatus\"\n label=\"common.fields.approvalStatus\"\n icon={<ApprovalIcon />}\n statusList={procureApprovalStatusFiltersList}\n width=\"180px\"\n />\n);\n\nexport { ProcureApprovalStatusFilterList };\n","import { AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\nimport { RESOURCE_NAME_USER } from \"../../../lib/modules\";\n\nconst ProcureOwnerUserListFilter = ({\n source =\"procureOwnerUserId\", \n label = \"common.fields.procureOwnerUserId\"\n}: {\n source?: string; \n label?: string\n}) => {\n return (\n <ReferenceArrayInput\n source={source}\n reference={RESOURCE_NAME_USER}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"firstName\", order: \"ASC\" }}\n key=\"procureOwnerUserId\"\n label=\"common.fields.procureOwnerUserId\"\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n );\n};\n\nexport { ProcureOwnerUserListFilter };\n","import {\n Box,\n createStyles,\n Typography,\n FormControl,\n makeStyles,\n TextField,\n Theme,\n} from \"@material-ui/core\";\nimport { useTranslate } from \"ra-core\";\nimport { Record } from \"react-admin\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexDirection: \"column\",\n width: '400px',\n height: '225px',\n },\n subTitle2: {\n paddingTop: 15\n },\n comment: {\n margin: theme.spacing(1),\n width: '95%'\n },\n })\n);\n\nconst ApprovalActionCommentsForm = ({\n confirmMessage,\n commentSubtext,\n commentLabel,\n commentHelpText,\n record,\n}: ApprovalActionCommentsFormProps) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n const storeComment = (event) => {\n if(record){\n record.comment = event.target.value;\n }\n }\n\n return (\n <Box className={classes.container}>\n <Typography variant=\"subtitle1\" color=\"secondary\" gutterBottom={true}>\n {translate(confirmMessage)}\n </Typography>\n <Typography variant=\"subtitle1\" color=\"textSecondary\" className={classes.subTitle2}>\n {translate(commentSubtext)}\n </Typography>\n <FormControl className={classes.comment}>\n <TextField\n multiline\n rows={3}\n variant=\"filled\"\n onChange={storeComment}\n label={translate(commentLabel)}\n helperText={translate(commentHelpText)}\n />\n </FormControl>\n </Box>\n );\n};\n\ninterface ApprovalActionCommentsFormProps {\n confirmMessage: string;\n commentSubtext: string;\n commentLabel: string;\n commentHelpText: string;\n record?: Record;\n}\n\nexport { ApprovalActionCommentsForm };\n","import { Identifier } from \"react-admin\";\n\nexport const getLocalStorageItem = (itemKey: string) => {\n const itemStr = localStorage.getItem(itemKey);\n const item = itemStr ? JSON.parse(itemStr):null;\n return item;\n}\n\nexport const isMatchingAccount = (targetAccountId: Identifier) => {\n const user = getLocalStorageItem(\"user\");\n const accountId = user?.accountId;\n\n return (targetAccountId === accountId)?true:false;\n}","import { Record } from \"react-admin\";\nimport { PROC_ENTITY_RECORD_STATUS_COLORS } from \"..\";\n\nconst getProcEntityRecordStatusRowStyle = (record: Record) => {\n let style = {};\n\n if (record) {\n const recordStatusColor = PROC_ENTITY_RECORD_STATUS_COLORS[record.status];\n if(recordStatusColor){\n style = {\n borderLeftColor: recordStatusColor,\n borderLeftWidth: 5,\n borderLeftStyle: 'solid',\n }\n }\n }\n\n return style;\n};\n\nexport { getProcEntityRecordStatusRowStyle };\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n ReferenceInput,\n AutocompleteInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport { MediaInputField } from \"../../../lib/components\";\nimport { RESOURCE_NAME_LOCATION } from \"./constants\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\n\nexport const styles: Styles<Theme, any> = {\n number: { display: \"block\" },\n name: { display: \"block\" },\n description: { display: \"block\" },\n formClass: {\n width: \"75%\",\n },\n};\nconst useStyles = makeStyles(styles);\n\nconst LocationForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm\n variant=\"filled\"\n className={classes.formClass}\n warnWhenUnsavedChanges\n {...rest}\n >\n <SectionTitle label=\"resources.location.fieldGroups.locationDetaills\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.location.fields.number\"\n helperText=\"resources.location.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n fullWidth\n />\n\n <TextInput\n source=\"name\"\n label=\"resources.location.fields.name\"\n helperText=\"resources.location.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n fullWidth\n />\n\n <RichTextInput\n source=\"description\"\n helperText=\"resources.location.help.description\"\n formClassName={classes.description}\n label=\"resources.location.fields.description\"\n />\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.location.fields.parentId\"\n fullWidth\n reference={RESOURCE_NAME_LOCATION}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.location.help.parentId\"\n />\n </ReferenceInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { LocationForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../lib/common\";\nimport { RESOURCE_NAME_LOCATION } from \"./constants\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"description\"];\n\nconst LocationList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_LOCATION}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { LocationList };\n","import LocationOnIcon from \"@material-ui/icons/LocationOn\";\nimport { PermissionLocations,RESOURCE_NAME_LOCATION } from \"./constants\";\nimport { LocationCreate } from \"./LocationCreate\";\nimport { LocationEdit } from \"./LocationEdit\";\nimport { LocationList } from \"./LocationList\";\nimport { LocationShow } from \"./LocationShow\";\n\n\nconst locationPermissions = {\n menu: PermissionLocations.MENU_LOCATION,\n list: PermissionLocations.LIST_LOCATIONS,\n create: PermissionLocations.CREATE_LOCATION,\n update: PermissionLocations.EDIT_LOCATION,\n show: PermissionLocations.SHOW_LOCATION,\n delete: PermissionLocations.DELETE_LOCATION,\n\n};\n\nconst locationResource = {\n name: RESOURCE_NAME_LOCATION,\n list: LocationList,\n create: LocationCreate,\n edit: LocationEdit,\n show: LocationShow,\n icon: LocationOnIcon,\n options: { label: 'resources.location.name', allowedPermissions: locationPermissions },\n}\n\nexport * from './constants'\nexport {locationPermissions,locationResource}\n","import { CreateProps } from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\nimport { LocationForm } from \"./LocationForm\";\n\nconst LocationCreate= (props: CreateProps)=> {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"locations\",\n },\n ];\n\n return (\n <DefaultCreate\n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <LocationForm />\n </DefaultCreate>\n );\n};\n\nexport { LocationCreate };\n","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport { LocationForm } from \"./LocationForm\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\n\nconst LocationEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"locations\",\n },\n ];\n\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <LocationForm isEdit={true}{...props} />\n </DefaultEdit>\n );\n};\n\nexport { LocationEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { RESOURCE_NAME_LOCATION } from \"./constants\";\n\nconst LocationShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_LOCATION}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { LocationShow };\n","import {\n TextField,\n ReferenceField,\n DateField,\n RichTextField,\n TabbedForm,\n FormTab,\n SelectField,\n NumberField,\n} from \"react-admin\";\nimport { isMatchingAccount } from \"../../../../../common\";\nimport { SectionTitleSubtitle, UploadedFilesField } from \"../../../../../lib/components\";\nimport { RESOURCE_NAME_CATEGORY } from \"../../../category\";\nimport { RESOURCE_NAME_LOCATION } from \"../../../locations\";\nimport { RESOURCE_NAME_UOM } from \"../../../unit-of-measure\";\nimport { RESOURCE_NAME_ITEM_GROUPS } from \"../../itemsGroup\";\nimport { RESOURCE_NAME_ITEM_SEGMENTS } from \"../../itemsSegment\";\nimport { ABC_INDICATOR_CHOICES, RESOURCE_NAME_ITEM } from \"../constants\";\nimport { useFormStyles } from \"../styles\";\n\nconst ItemShowContainer = (props) => {\n const classes = useFormStyles();\n const shouldSyncWithLocation = props?.shouldNotSyncWithLocation ? false : true;\n\n const procureAccountId = props?.procureAccountId;\n const isProcureAccount = procureAccountId ? isMatchingAccount(props?.procureAccountId) : procureAccountId ?? true;\n const linkType = isProcureAccount ? 'show' : false;\n\n return (\n <TabbedForm toolbar={<div />} syncWithLocation={shouldSyncWithLocation}>\n <FormTab\n label=\"resources.items.tabs.general\"\n contentClassName={classes.generalTab}\n >\n <SectionTitleSubtitle\n title=\"resources.items.fieldGroups.itemDetails\"\n formClassName=\"ra-input-itemDetailsLabel\"\n />\n <TextField source=\"number\" />\n\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_ITEM} linkType={linkType}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n {isProcureAccount && (\n <ReferenceField\n source=\"itemSegmentId\"\n reference={RESOURCE_NAME_ITEM_SEGMENTS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n\n {isProcureAccount && (\n <ReferenceField\n source=\"itemCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n {isProcureAccount && (<ReferenceField\n source=\"itemGroupId\"\n reference={RESOURCE_NAME_ITEM_GROUPS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n <ReferenceField source=\"uomId\"\n reference={RESOURCE_NAME_UOM}\n linkType={linkType}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <TextField source=\"size\" />\n <RichTextField source=\"specifications\" />\n\n <NumberField source=\"weight\" />\n\n <ReferenceField\n source=\"weightUomId\"\n reference={RESOURCE_NAME_UOM}\n linkType={linkType}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <NumberField source=\"volume\" />\n <ReferenceField\n source=\"volumeUomId\"\n reference={RESOURCE_NAME_UOM}\n linkType={linkType}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n </FormTab>\n {isProcureAccount && (\n <FormTab label=\"resources.items.tabs.procurement\"\n contentClassName={classes.procurementTab}>\n <SectionTitleSubtitle\n title=\"resources.items.fieldGroups.procurementDetails\"\n formClassName=\"ra-input-procurementDetailsLabel\"\n />\n <NumberField source=\"leadTimeInDays\" />\n <ReferenceField\n source=\"storageLocationId\"\n reference={RESOURCE_NAME_LOCATION}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <SelectField\n source=\"abcIndicator\"\n choices={ABC_INDICATOR_CHOICES}\n />\n <NumberField source=\"moq\" />\n <ReferenceField source=\"moqUomId\" reference={RESOURCE_NAME_UOM}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <NumberField source=\"safetyStock\" />\n <ReferenceField\n source=\"safetyStockUomId\"\n reference={RESOURCE_NAME_UOM}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <TextField source=\"description\" />\n <TextField source=\"leadTimeInDays\" />\n\n <DateField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <TextField source=\"version\" />\n </FormTab>\n\n )}\n <FormTab label=\"resources.items.tabs.attachments\">\n <UploadedFilesField canDelete={false} />\n </FormTab>\n\n </TabbedForm>\n )\n}\n\nexport { ItemShowContainer }","import { Box } from \"@material-ui/core\";\nimport {\n ResourceContextProvider,\n ShowContextProvider,\n ShowProps,\n useShowController,\n} from \"react-admin\";\nimport { ItemShowContainer } from \".\";\nimport { SectionTitleSubtitle } from \"../../../../../lib/components\";\nimport { RESOURCE_NAME_ITEM } from \"../constants\";\n\nconst SingleItemShowContainer = (props) => {\n const itemId = props?.record?.itemId ?? props?.record?.id;\n\n const showProps: ShowProps = {\n basePath: \"/\",\n hasCreate: false,\n hasShow: true,\n hasList: false,\n id: itemId,\n resource: RESOURCE_NAME_ITEM,\n };\n const controllerProps = useShowController({ ...showProps });\n\n return (\n <ResourceContextProvider value={RESOURCE_NAME_ITEM}>\n <ShowContextProvider value={controllerProps}>\n <Box>\n <SectionTitleSubtitle title=\"resources.items.fieldGroups.itemDetails\" />\n <ItemShowContainer\n {...props}\n {...controllerProps}\n shouldNotSyncWithLocation={true}\n procureAccountId={props?.procureAccountId}\n />\n </Box>\n </ShowContextProvider>\n </ResourceContextProvider>\n );\n};\n\nexport { SingleItemShowContainer };\n","import NoteIcon from '@material-ui/icons/Note';\nimport { ItemCreate } from './ItemCreate';\n\nimport { ItemList } from './ItemList';\nimport { ItemEdit } from './ItemEdit';\nimport { PermissionItems, RESOURCE_NAME_ITEM } from './constants';\nimport { ItemShow } from './ItemShow';\n\nconst itemsPermissions = {\n menu: PermissionItems.MENU_ITEMS,\n list: PermissionItems.LIST_ITEMS,\n create: PermissionItems.CREATE_ITEM,\n update: PermissionItems.EDIT_ITEM,\n show: PermissionItems.SHOW_ITEM,\n delete: PermissionItems.DELETE_ITEM,\n import: PermissionItems.IMPORT_ITEMS,\n};\nconst itemResource = {\n name: RESOURCE_NAME_ITEM,\n list: ItemList,\n create: ItemCreate,\n edit: ItemEdit,\n show: ItemShow, \n icon: NoteIcon,\n options: {label: 'resources.items.name', allowedPermissions: itemsPermissions },\n}\n\nexport * from './constants';\nexport * from './components';\nexport { itemsPermissions, itemResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../../lib/components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../../../lib/modules\";\nimport { ItemForm } from \"./ItemForm\";\n\nconst ItemCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'items',\n }];\n \n return (\n <DefaultCreate {...props} transform={transformAndUploadS3Files(mediaFileSources)}>\n <ItemForm isEdit={false}/>\n </DefaultCreate>\n );\n };\n \n export { ItemCreate };","import {\n EditProps,\n} from 'react-admin';\nimport { DefaultEdit } from '../../../../lib/components';\nimport { MediaFileSource, transformAndUploadS3Files } from '../../../../lib/modules';\n\nimport { ItemForm } from \"./ItemForm\";\n\nconst ItemEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"items\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n mutationMode = \"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <ItemForm isEdit={true} {...props}/>\n </DefaultEdit>\n );\n};\n\nexport { ItemEdit }","import {\n ShowProps,\n SimpleShowLayout,\n} from \"react-admin\";\nimport { DefaultShow } from \"../../../../lib/components\";\nimport { ItemShowContainer } from './components/ItemShowContainer';\n\nconst ItemShow= (props:ShowProps) => {\n\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <ItemShowContainer/>\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { ItemShow };\n","export const RESOURCE_ACCOUNT_CODE = \"accountCode\";\nexport const RESOURCE_NAME_VENDOR_GROUP = \"vendorGroup\";\n\nexport enum PermissionVendorGroup {\n MENU_VENDOR_GROUP = \"view-vendor-group-menu\",\n LIST_VENDOR_GROUPS = \"list-vendor-groups\",\n SHOW_VENDOR_GROUP = \"show-vendor-group\",\n CREATE_VENDOR_GROUP = \"create-vendor-group\",\n EDIT_VENDOR_GROUP = \"update-vendor-group\",\n DELETE_VENDOR_GROUP = \"delete-vendor-group\",\n}\n","export const RESOURCE_NAME_REQUISITION = \"requisitions\";\nexport const RESOURCE_NAME_REQUISITION_DETAILS = \"requisition/detail\";\n\nexport enum PermissionRequisitions {\n REQUISITIONS_MANAGEMENT_MENU = \"view-requisitions-management-menu\",\n REQUISITION_MENU = \"view-requisitions-menu\",\n LIST_REQUISITIONS = \"list-requisitions\",\n SHOW_OWN_REQUISITION = \"show-own-requisition\",\n SHOW_ANY_REQUISITION = \"show-any-requisition\",\n EDIT_OWN_REQUISITION = \"update-own-requisition\",\n EDIT_ANY_REQUISITION = \"update-any-requisition\",\n DELETE_OWN_REQUISITION = \"delete-own-requisition\",\n DELETE_ANY_REQUISITION = \"delete-any-requisition\",\n CREATE_REQUISITION = \"create-requisition\",\n IMPORT_REQUISITIONS = \"import-requisitions\",\n}\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n ReferenceInput,\n AutocompleteInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport { MediaInputField } from \"../../../lib/components\";\nimport { RESOURCE_NAME_VENDOR_GROUP } from \"./constants\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\n\nexport const styles: Styles<Theme, any> = {\n number: { display: \"block\" },\n name: { display: \"block\" },\n description: { display: \"block\" },\n formClass: {\n width: \"75%\",\n },\n};\nconst useStyles = makeStyles(styles);\n\nconst VendorGroupForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm\n variant=\"filled\"\n className={classes.formClass}\n warnWhenUnsavedChanges\n {...rest}\n >\n <SectionTitle label=\"resources.vendorGroup.fieldGroups.VendorGroupDetaills\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.vendorGroup.fields.number\"\n helperText=\"resources.vendorGroup.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n fullWidth\n />\n\n <TextInput\n source=\"name\"\n label=\"resources.vendorGroup.fields.name\"\n helperText=\"resources.vendorGroup.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n fullWidth\n />\n\n <RichTextInput\n source=\"description\"\n helperText=\"resources.vendorGroup.help.description\"\n formClassName={classes.description}\n label=\"resources.vendorGroup.fields.description\"\n />\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.vendorGroup.fields.parentId\"\n fullWidth\n reference={RESOURCE_NAME_VENDOR_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n helperText=\"resources.vendorGroup.help.parentId\"\n />\n </ReferenceInput>\n\n <MediaInputField showUploadedFiles={isEdit} />\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { VendorGroupForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../lib/common\";\nimport { RESOURCE_NAME_VENDOR_GROUP } from \"./constants\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"description\"];\n\nconst VendorGroupList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_VENDOR_GROUP}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { VendorGroupList };\n","import PeopleAltIcon from \"@material-ui/icons/PeopleAlt\";\nimport { PermissionVendorGroup, RESOURCE_NAME_VENDOR_GROUP } from \"./constants\";\nimport { VendorGroupCreate } from \"./VendorGroupCreate\";\nimport { VendorGroupEdit } from \"./VendorGroupEdit\";\nimport { VendorGroupList } from \"./VendorGroupList\";\nimport { VendorGroupShow } from \"./VendorGroupShow\";\nconst VendorGroupPermissions = {\n menu: PermissionVendorGroup.MENU_VENDOR_GROUP,\n list: PermissionVendorGroup.LIST_VENDOR_GROUPS,\n create: PermissionVendorGroup.CREATE_VENDOR_GROUP,\n update: PermissionVendorGroup.EDIT_VENDOR_GROUP,\n show: PermissionVendorGroup.SHOW_VENDOR_GROUP,\n delete: PermissionVendorGroup.DELETE_VENDOR_GROUP,\n};\n\nconst vendorGroupResource = {\n name: RESOURCE_NAME_VENDOR_GROUP,\n list: VendorGroupList,\n create: VendorGroupCreate,\n edit: VendorGroupEdit,\n show: VendorGroupShow,\n icon: PeopleAltIcon,\n options: {\n label: \"resources.vendorGroup.name\",\n allowedPermissions: VendorGroupPermissions,\n },\n};\n\nexport * from \"./constants\";\nexport { VendorGroupPermissions, vendorGroupResource };\n","import { CreateProps } from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\nimport { VendorGroupForm } from \"./VendorGroupForm\";\nconst VendorGroupCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"vendor-group\",\n },\n ];\n\n return (\n <DefaultCreate\n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <VendorGroupForm />\n </DefaultCreate>\n );\n};\n\nexport { VendorGroupCreate };\n","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport {\n MediaFileSource,\n transformAndUploadS3Files,\n} from \"../../../lib/modules\";\nimport { VendorGroupForm } from \"./VendorGroupForm\";\nconst VendorGroupEdit=(props:EditProps)=>{\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"vendor-group\",\n },\n ];\n\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <VendorGroupForm isEdit={true} {...props} />\n </DefaultEdit>\n );\n};\n\nexport { VendorGroupEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { RESOURCE_NAME_VENDOR_GROUP } from \"./constants\";\n\nconst VendorGroupShow=(props:ShowProps)=>{\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\" reference={RESOURCE_NAME_VENDOR_GROUP}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { VendorGroupShow };\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n ArrayInput,\n SimpleFormIterator,\n email,\n minLength,\n maxLength,\n ReferenceInput,\n AutocompleteInput,\n} from \"react-admin\";\nimport { isUrl, MediaInputField } from \"../../../../lib/components\";\nimport { Divider, Grid, Typography } from \"@material-ui/core\";\nimport { Box } from \"@material-ui/core\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\nimport { CategoryTypes, RESOURCE_NAME_CATEGORY } from \"../../category/constants\";\nimport { RESOURCE_NAME_VENDOR_GROUP } from \"../../vendor-group\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n vendorForm: {\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n\n },\n\n\n\n phone: {\n display: \"inline-block\",\n\n marginLeft: 32,\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: 0,\n },\n },\n url: {\n display: \"inline-block\",\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: 0,\n },\n },\n })\n);\n\nconst VendorForm = ({ isEdit = true, ...rest }) => {\n const validateName = [required(), minLength(2), maxLength(15)];\n const validateEmail = [required(), email()];\n const classes = useStyles();\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest}>\n <Box pt={2}>\n <SectionTitle label=\"resources.vendors.fieldGroups.vendorDetails\" />\n </Box>\n <Grid container lg={12} md={6} spacing={2} className={classes.vendorForm}>\n\n <Grid item >\n <TextInput\n autoFocus\n source=\"vendorAccountCode\"\n label=\"resources.vendors.fields.vendorAccountCode\"\n helperText=\"resources.vendors.help.vendorAccountCode\"\n validate={[required()]}\n isRequired\n />\n </Grid>\n\n <Grid item>\n <TextInput\n source=\"vendorAccountName\"\n label=\"resources.vendors.fields.vendorAccountId\"\n helperText=\"resources.vendors.help.vendorAccountName\"\n isRequired\n validate={[required()]}\n />\n </Grid>\n\n <Grid item>\n <TextInput\n multiline\n source=\"vendorAccountDescription\"\n label=\"resources.vendors.fields.vendorAccountDescription\"\n helperText=\"resources.vendors.help.vendorAccountDescription\"\n />\n </Grid>\n\n <Grid item>\n <ReferenceInput\n label=\"resources.vendors.filters.vendorCategoryId\"\n source=\"vendorCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={{ categoryType: CategoryTypes.VENDOR }}\n key=\"vendorCategoryId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n </Grid>\n\n <Grid item>\n <ReferenceInput\n label=\"resources.vendors.fields.vendorGroupId\"\n source=\"vendorGroupId\"\n reference={RESOURCE_NAME_VENDOR_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"vendorGroupId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n\n </Grid>\n </Grid>\n\n <Box pt={2} width=\"100% !important\">\n <SectionTitle label=\"resources.vendors.fieldGroups.primaryUserDetails\" />\n </Box>\n <Grid container lg={12} md={6} spacing={3} className={classes.vendorForm}>\n\n <Grid item>\n <TextInput\n source=\"primaryUserFirstName\"\n label=\"resources.vendors.fields.primaryUserFirstName\"\n helperText=\"resources.vendors.help.primaryUserFirstName\"\n validate={validateName}\n />\n </Grid>\n <Grid item>\n <TextInput\n source=\"primaryUserLastName\"\n label=\"resources.vendors.fields.primaryUserLastName\"\n helperText=\"resources.vendors.help.primaryUserLastName\"\n validate={validateName}\n />\n </Grid>\n <Grid item>\n <TextInput\n source=\"primaryUserEmail\"\n label=\"resources.vendors.fields.primaryUserEmail\"\n validate={validateEmail}\n helperText=\"resources.vendors.help.primaryUserEmail\"\n />\n </Grid>\n </Grid>\n\n <Separator />\n <Box pt={2}>\n <SectionTitle label=\"Address Details\" />\n </Box>\n <Grid container spacing={4} className={classes.vendorForm}>\n <Grid item>\n <TextInput\n source=\"addressLine1\"\n label=\"resources.vendors.fields.addressLine1\"\n helperText=\"resources.vendors.help.addressLine1\"\n />\n </Grid>\n\n <Grid item>\n <TextInput\n source=\"addressLine2\"\n label=\"resources.vendors.fields.addressLine2\"\n helperText=\"resources.vendors.help.addressLine2\"\n />\n </Grid>\n\n <Grid item>\n <TextInput\n source=\"pincode\"\n label=\"resources.vendors.fields.pincode\"\n helperText=\"resources.vendors.help.pincode\"\n />\n </Grid>\n\n </Grid>\n\n <Grid container spacing={4} className={classes.vendorForm}>\n <Grid item>\n <TextInput\n source=\"city\"\n label=\"resources.vendors.fields.city\"\n helperText=\"resources.vendors.help.city\"\n />\n </Grid>\n <Grid item>\n <TextInput\n source=\"state\"\n label=\"resources.vendors.fields.state\"\n helperText=\"resources.vendors.help.state\"\n />\n </Grid>\n <Grid item>\n <TextInput\n source=\"country\"\n label=\"resources.vendors.fields.country\"\n helperText=\"resources.vendors.help.country\"\n />\n </Grid>\n </Grid>\n <Divider />\n <Separator />\n <Box pt={2}>\n <SectionTitle label=\"Contact Information\" />\n </Box>\n <ArrayInput source=\"phones\">\n <SimpleFormIterator>\n <TextInput\n source=\"phone\"\n helperText=\"resources.vendors.help.phones\"\n resettable={true}\n validate={[required()]}\n isRequired\n />\n </SimpleFormIterator>\n </ArrayInput>\n\n <TextInput\n source=\"url\"\n label=\"resources.vendors.fields.url\"\n helperText=\"resources.vendors.help.url\"\n formClassName={classes.url}\n type=\"url\"\n validate={[isUrl()]}\n resettable={true}\n />\n\n <MediaInputField showUploadedFiles={false} />\n\n </SimpleForm >\n );\n};\nconst Separator = () => <Box pt=\"1em\" />;\n\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { VendorForm };\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n ArrayInput,\n SimpleFormIterator,\n ReferenceInput,\n AutocompleteInput,\n} from \"react-admin\";\nimport { Box } from \"@material-ui/core\";\nimport {\n isUrl,\n MediaInputField,\n} from \"../../../../lib/components\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport { Typography, Grid } from \"@material-ui/core\";\nimport { CategoryTypes, RESOURCE_NAME_CATEGORY } from \"../../category\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\nimport { RESOURCE_NAME_VENDOR_GROUP } from \"../../vendor-group/constants\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n vendorForm: {\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n },\n phone: {\n display: \"inline-block\",\n\n marginLeft: 32,\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: 0,\n },\n },\n url: {\n display: \"inline-block\",\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: 0,\n },\n },\n })\n);\n\nconst VendorEditContainer = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest}>\n <Box pt={2}>\n <SectionTitle label=\"resources.vendors.fieldGroups.vendorDetails\" />\n </Box>\n <Grid container lg={12} md={6} spacing={2} className={classes.vendorForm}>\n <Grid item>\n <TextInput\n autoFocus\n source=\"vendorAccountCode\"\n label=\"resources.vendors.fields.vendorAccountCode\"\n helperText=\"resources.vendors.help.vendorAccountCode\"\n validate={[required()]}\n />\n </Grid>\n\n <Grid item>\n <TextInput\n source=\"vendorAccountName\"\n label=\"resources.vendors.fields.vendorAccountId\"\n helperText=\"resources.vendors.help.vendorAccountName\"\n />\n </Grid>\n\n <Grid item>\n <TextInput\n multiline\n source=\"vendorAccountDescription\"\n label=\"resources.vendors.fields.vendorAccountDescription\"\n helperText=\"resources.vendors.help.vendorAccountDescription\"\n />\n </Grid>\n\n <Grid item>\n <ReferenceInput\n label=\"resources.vendors.filters.vendorCategoryId\"\n source=\"vendorCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={{ categoryType: CategoryTypes.VENDOR }}\n key=\"vendorCategoryId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n </Grid>\n\n <Grid item>\n <ReferenceInput\n label=\"resources.vendors.fields.vendorGroupId\"\n source=\"vendorGroupId\"\n reference={RESOURCE_NAME_VENDOR_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"vendorGroupId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n </Grid>\n </Grid>\n\n <Grid container lg={12} md={6} spacing={3} className={classes.vendorForm}>\n <Grid item>\n <TextInput\n source=\"primaryUserEmail\"\n label=\"resources.vendors.fields.primaryUserEmail\"\n helperText=\"resources.vendors.help.primaryUserEmail\"\n />\n </Grid>\n\n <Grid item>\n <TextInput\n source=\"primaryUserFirstName\"\n label=\"resources.vendors.fields.primaryUserFirstName\"\n helperText=\"resources.vendors.help.primaryUserFirstName\"\n />\n </Grid>\n <Grid item>\n <TextInput\n source=\"primaryUserLastName\"\n label=\"resources.vendors.fields.primaryUserLastName\"\n helperText=\"resources.vendors.help.primaryUserLastName\"\n />\n </Grid>\n </Grid>\n\n <Separator />\n <Box pt={2}>\n <SectionTitle label=\"Address Details\" />\n </Box>\n <Grid container spacing={4} className={classes.vendorForm}>\n <Grid item>\n <TextInput\n source=\"addressLine1\"\n label=\"resources.vendors.fields.addressLine1\"\n helperText=\"resources.vendors.help.addressLine1\"\n />\n </Grid>\n\n <Grid item>\n <TextInput\n source=\"addressLine2\"\n label=\"resources.vendors.fields.addressLine2\"\n helperText=\"resources.vendors.help.addressLine2\"\n />\n </Grid>\n\n <Grid item>\n <TextInput\n source=\"pincode\"\n label=\"resources.vendors.fields.pincode\"\n helperText=\"resources.vendors.help.pincode\"\n />\n </Grid>\n </Grid>\n\n <Grid container spacing={4} className={classes.vendorForm}>\n <Grid item>\n <TextInput\n source=\"city\"\n label=\"resources.vendors.fields.city\"\n helperText=\"resources.vendors.help.city\"\n />\n </Grid>\n <Grid item>\n <TextInput\n source=\"state\"\n label=\"resources.vendors.fields.state\"\n helperText=\"resources.vendors.help.state\"\n />\n </Grid>\n <Grid item>\n <TextInput\n source=\"country\"\n label=\"resources.vendors.fields.country\"\n helperText=\"resources.vendors.help.country\"\n />\n </Grid>\n </Grid>\n <Separator />\n <Box pt={2}>\n <SectionTitle label=\"Contact Information\" />\n </Box>\n <ArrayInput source=\"phones\">\n <SimpleFormIterator>\n <TextInput\n source=\"phone\"\n helperText=\"resources.vendors.help.phones\"\n resettable={true}\n validate={[required()]}\n type=\"phone\"\n isRequired\n />\n </SimpleFormIterator>\n </ArrayInput>\n\n <TextInput\n source=\"url\"\n label=\"resources.vendors.fields.url\"\n helperText=\"resources.vendors.help.url\"\n formClassName={classes.url}\n type=\"url\"\n validate={[isUrl()]}\n resettable={true}\n />\n\n <MediaInputField showUploadedFiles={true} />\n </SimpleForm>\n );\n};\n\nconst Separator = () => <Box pt=\"1em\" />;\n\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\nexport { VendorEditContainer };\n","import { ReactElement, useEffect, useMemo, useState } from \"react\";\nimport {\n Record,\n useUpdate,\n useListContext,\n useNotify,\n useRefresh,\n useGetIdentity,\n Identifier,\n} from \"react-admin\";\nimport {\n ConfirmListViewActionButton,\n DefaultCrudListRowActions,\n EMPTY_CONFIRM_HANDLER,\n ListRowActions,\n ListRowActionsProps,\n} from \"../../../../lib/components\";\n\nimport PersonAddTwoToneIcon from \"@material-ui/icons/PersonAddTwoTone\";\nimport PersonAddDisabledRoundedIcon from \"@material-ui/icons/PersonAddDisabledRounded\";\nimport CancelTwoToneIcon from \"@material-ui/icons/CancelTwoTone\";\n\nimport {\n FILTER_NAME_GLOBAL_VENDORS,\n PermissionVendors,\n RESOURCE_NAME_VENDOR,\n VENDOR_ACTIONS,\n} from \"../constants\";\nimport { usePermissionsCheck } from \"../../../../lib/core\";\n\ninterface IOwnVendorActionDisplayData {\n isGlobalFilterSelected: boolean;\n userAccountId?: Identifier;\n}\n\nconst VendorListRowActionButtons = (props: ListRowActionsProps) => {\n const listContext = useListContext();\n\n const { filterValues } = listContext;\n const isGlobalFilterSelected =\n filterValues && filterValues[FILTER_NAME_GLOBAL_VENDORS] === true\n ? true\n : false;\n const { identity } = useGetIdentity();\n const userAccountId: Identifier = identity?.accountId;\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n const [hasEdit, setHasEdit] = useState(false);\n const [hasShow, setHasShow] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasEdit = hasPermissionAccess(PermissionVendors.EDIT_VENDOR);\n\n const hasShow = hasPermissionAccess(PermissionVendors.SHOW_VENDOR);\n\n setHasEdit(hasEdit);\n setHasShow(hasShow);\n }\n }, [permissionsLoaded, hasPermissionAccess]);\n\n // eslint-disable-next-line\n const ownVendorExtraDisplayData: IOwnVendorActionDisplayData = {\n isGlobalFilterSelected,\n userAccountId,\n };\n\n const notify = useNotify();\n const refresh = useRefresh();\n\n const [update] = useUpdate();\n\n const overriddenListRowActions: Array<ReactElement> = useMemo(() => {\n const handleAddAsOwnVendorAction = (record?: Record) => {\n handleVendorAction(record, VENDOR_ACTIONS.ADD_AS_OWN_VENDOR);\n };\n\n const handleRemoveAsOwnVendorAction = (record?: Record) => {\n handleVendorAction(record, VENDOR_ACTIONS.REMOVE_AS_OWN_VENDOR);\n };\n\n const handleVendorAction = (record, vendorAction: VENDOR_ACTIONS) => {\n const isAddAsOwnVendor =\n String(VENDOR_ACTIONS.ADD_AS_OWN_VENDOR) === String(vendorAction);\n const notifySuccessMessage = isAddAsOwnVendor\n ? \"resources.vendors.notification.addAsOwnVendor.success\"\n : \"resources.vendors.notification.removeAsOwnVendor.success\";\n const notifyFailureMessage = isAddAsOwnVendor\n ? \"resources.vendors.notification.addAsOwnVendor.failure\"\n : \"resources.vendors.notification.removeAsOwnVendor.failure\";\n const payload = {\n action: vendorAction,\n version: record?.version,\n };\n\n update(RESOURCE_NAME_VENDOR, record.id, payload, record, {\n undoable: false,\n onSuccess: () => {\n notify(notifySuccessMessage, { type: \"success\" });\n refresh(true);\n },\n onFailure: (error) => {\n const errorMessage = `An error occured during processing. Cannot perform the requested action.\n ${error?.message ?? \"\"}\n ${notifyFailureMessage}\n `;\n\n notify(notifyFailureMessage, {\n type: \"error\",\n multiLine: true,\n autoHideDuration: 10000,\n undoable: false,\n messageArgs: { message: error?.message },\n });\n },\n });\n };\n\n const shouldDisplayEditOrDeleteAction = async (\n record?: Record,\n extraDisplayData?: IOwnVendorActionDisplayData\n ): Promise<boolean> => {\n const userAccountId = extraDisplayData?.userAccountId;\n const primaryProcureAccountId = record?.primaryProcureAccountId;\n\n const isVendorOwnedByUserAccount =\n userAccountId === primaryProcureAccountId;\n\n const shouldShow =\n isVendorOwnedByUserAccount === undefined\n ? true\n : isVendorOwnedByUserAccount;\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayAddAsOwnVendorAction = async (\n record?: Record,\n extraDisplayData?: IOwnVendorActionDisplayData\n ): Promise<boolean> => {\n const isGlobalFilterSelected = extraDisplayData?.isGlobalFilterSelected;\n const shouldShow =\n isGlobalFilterSelected === undefined ? false : isGlobalFilterSelected;\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayRemoveAsOwnVendorAction = async (\n record?: Record,\n extraDisplayData?: IOwnVendorActionDisplayData\n ) => {\n const isGlobalFilterSelected = extraDisplayData?.isGlobalFilterSelected;\n const userAccountId = extraDisplayData?.userAccountId;\n const primaryProcureAccountId = record?.primaryProcureAccountId;\n\n const isVendorNotOwnedByUserAccount =\n userAccountId !== primaryProcureAccountId;\n const shouldShow =\n !isGlobalFilterSelected && isVendorNotOwnedByUserAccount ? true : false;\n return Promise.resolve(shouldShow);\n };\n\n const addAsOwnVendorConfirm = {\n title: \"resources.vendors.actions.addAsOwnVendor.single.confirm.title\",\n content:\n \"resources.vendors.actions.addAsOwnVendor.single.confirm.content\",\n confirm:\n \"resources.vendors.actions.addAsOwnVendor.single.confirm.confirm\",\n cancel: \"resources.vendors.actions.addAsOwnVendor.single.confirm.cancel\",\n confirmColor: \"primary\",\n CancelIcon: CancelTwoToneIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n };\n\n const removeAsOwnVendorConfirm = {\n title: \"resources.vendors.actions.removeAsOwnVendor.single.confirm.title\",\n content:\n \"resources.vendors.actions.removeAsOwnVendor.single.confirm.content\",\n confirm:\n \"resources.vendors.actions.removeAsOwnVendor.single.confirm.confirm\",\n cancel:\n \"resources.vendors.actions.removeAsOwnVendor.single.confirm.cancel\",\n confirmColor: \"primary\",\n CancelIcon: CancelTwoToneIcon,\n onConfirm: EMPTY_CONFIRM_HANDLER,\n onClose: EMPTY_CONFIRM_HANDLER,\n };\n\n const listRowActions: Array<ReactElement> = [\n <DefaultCrudListRowActions\n key=\"defaultCrudListRowActions\"\n shouldDisplayEdit={shouldDisplayEditOrDeleteAction}\n shouldDisplayDelete={shouldDisplayEditOrDeleteAction}\n extraEditDisplayData={ownVendorExtraDisplayData}\n extraDeleteDisplayData={ownVendorExtraDisplayData}\n hasEdit={hasEdit}\n hasShow={hasShow}\n {...props}\n />,\n\n <ConfirmListViewActionButton\n {...props}\n icon={<PersonAddTwoToneIcon />}\n tooltipTitle=\"resources.vendors.actions.addAsOwnVendor.tooltip\"\n permissionName={PermissionVendors.CAN_LINK_GLOBAL_VENDORS}\n confirm={addAsOwnVendorConfirm}\n onConfirmHandler={handleAddAsOwnVendorAction}\n shouldDisplay={shouldDisplayAddAsOwnVendorAction}\n extraDisplayData={ownVendorExtraDisplayData}\n />,\n <ConfirmListViewActionButton\n {...props}\n icon={<PersonAddDisabledRoundedIcon />}\n tooltipTitle=\"resources.vendors.actions.removeAsOwnVendor.tooltip\"\n permissionName={PermissionVendors.CAN_UNLINK_GLOBAL_VENDORS}\n confirm={removeAsOwnVendorConfirm}\n onConfirmHandler={handleRemoveAsOwnVendorAction}\n extraDisplayData={ownVendorExtraDisplayData}\n shouldDisplay={shouldDisplayRemoveAsOwnVendorAction}\n />,\n ];\n\n return listRowActions;\n }, [notify, ownVendorExtraDisplayData, props, refresh, update]);\n\n return (\n <ListRowActions\n overriddenListRowActions={overriddenListRowActions}\n {...props}\n />\n );\n};\n\nexport { VendorListRowActionButtons };\n","import {\n ArrayField,\n EmailField,\n ReferenceField,\n SimpleShowLayout,\n SingleFieldList,\n TextField,\n UrlField,\n useTranslate,\n} from \"react-admin\";\nimport { Box, Divider, Typography } from \"@material-ui/core\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport {\n SectionTitleSubtitle,\n UploadedFilesField,\n} from \"../../../../lib/components\";\nimport { RESOURCE_NAME_VENDOR_GROUP } from \"../../vendor-group\";\nimport { RESOURCE_NAME_CATEGORY } from \"../../category/constants\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n layout: {\n display: \"grid\",\n gap: 10,\n gridTemplateColumns: \"1fr 1fr\",\n gridTemplateAreas: `\n \"vendorDetailsLabel vendorDetailsLabel\"\n \"vendorAccountCode vendorAccountName\"\n \"vendorAccountPrimaryUserFullName vendorAccountPrimaryUserEmail\"\n \"vendorCategoryId vendorGroupId\"\n \"dividerAddressDetails dividerAddressDetails\"\n \"addressDetailsLabel addressDetailsLabel\"\n \"addressLine1 addressLine2\"\n \"pincode city\"\n \"state country\"\n \"dividerContactInformation dividerContactInformation\"\n \"contactInformation contactInformation\"\n \"phones phones\"\n \"url url\"\n \"dividerAttachments dividerAttachments\"\n \"attachments attachments\"\n `,\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n gridTemplateAreas: `\n \"vendorDetailsLabel\"\n \"vendorAccountCode\"\n \"vendorAccountName\"\n \"vendorAccountPrimaryUserFullName\"\n \"vendorAccountPrimaryUserEmail\"\n \"vendorCategoryId\"\n \"vendorGroupId\"\n \"dividerAddressDetails\"\n \"addressDetailsLabel\"\n \"addressLine1\"\n \"addressLine2\"\n \"pincode\"\n \"city\"\n \"state\"\n \"country\"\n \"dividerContactInformation\"\n \"contactInformation\"\n \"phones\"\n \"url\"\n \"dividerAttachments\"\n \"attachments\"\n `,\n },\n \"& .ra-field-vendorDetailsLabel\": {\n gridArea: \"vendorDetailsLabel\",\n },\n \"& .ra-field-vendorAccount.code\": {\n gridArea: \"vendorAccountCode\",\n },\n \"& .ra-field-vendorCategoryId\": {\n gridArea: \"vendorCategoryId\",\n },\n \"& .ra-field-vendorGroupId\": {\n gridArea: \"vendorGroupId\",\n },\n \"& .ra-field-vendorAccount.name\": {\n gridArea: \"vendorAccountName\",\n },\n \"& .ra-field-vendorAccount.primaryUser.fullName\": {\n gridArea: \"vendorAccountPrimaryUserFullName\",\n },\n \"& .ra-field-vendorAccount.primaryUser.email\": {\n gridArea: \"vendorAccountPrimaryUserEmail\",\n },\n \"& .ra-divider-addressDetails\": {\n gridArea: \"dividerAddressDetails\",\n },\n \"& .ra-field-addressDetailsLabel\": {\n gridArea: \"addressDetailsLabel\",\n },\n \"& .ra-field-addressLine1\": {\n gridArea: \"addressLine1\",\n },\n \"& .ra-field-addressLine2\": {\n gridArea: \"addressLine2\",\n },\n \"& .ra-field-pincode\": {\n gridArea: \"pincode\",\n },\n \"& .ra-field-city\": {\n gridArea: \"city\",\n },\n \"& .ra-field-state\": {\n gridArea: \"state\",\n },\n \"& .ra-field-country\": {\n gridArea: \"country\",\n },\n \"& .ra-divider-contactInformation\": {\n gridArea: \"dividerContactInformation\",\n },\n \"& .ra-field-contactInformation\": {\n gridArea: \"contactInformation\",\n },\n \"& .ra-field-phones\": {\n gridArea: \"phones\",\n },\n \"& .ra-field-url\": {\n gridArea: \"url\",\n },\n \"& .ra-divider-attachments\": {\n gridArea: \"dividerAttachments\",\n },\n \"& .ra-field-attachments\": {\n gridArea: \"attachments\",\n },\n },\n phonesList: {\n display: \"grid\",\n gap: 10,\n gridTemplateColumns: \"1fr\",\n },\n section: {\n paddingTop: 16,\n paddingLeft: 'unset',\n }\n })\n);\n\nconst VendorShowContainer = (props) => {\n const classes = useStyles(props);\n\n return (\n <SimpleShowLayout className={classes.layout}>\n <SectionTitleSubtitle\n title=\"resources.vendors.fieldGroups.vendorDetails\"\n className={`ra-field-vendorDetailsLabel ${classes.section}`}\n />\n <TextField\n label=\"resources.vendors.fields.vendorAccountCode\"\n source=\"vendorAccount.code\"\n />\n\n <TextField\n label=\"resources.vendors.fields.vendorAccountId\"\n source=\"vendorAccount.name\"\n />\n\n <TextField\n source=\"vendorAccount.primaryUser.fullName\"\n label=\"resources.vendors.fields.vendorAccountFullName\"\n />\n <EmailField\n source=\"vendorAccount.primaryUser.email\"\n label=\"resources.vendors.fields.vendorAccountEmail\"\n />\n\n <ReferenceField\n source=\"vendorCategoryId\"\n label=\"resources.vendors.fields.vendorCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n link={false}\n key=\"vendorCategoryId\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ReferenceField\n source=\"vendorGroupId\"\n label=\"resources.vendors.fields.vendorGroupId\"\n reference={RESOURCE_NAME_VENDOR_GROUP}\n link={false}\n key=\"vendorGroupId\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <Divider className=\"ra-divider-addressDetails\" />\n <SectionTitleSubtitle\n title=\"resources.vendors.fieldGroups.addressDetails\"\n className={`ra-field-addressDetailsLabel ${classes.section}`}\n />\n <TextField source=\"addressLine1\" />\n <TextField source=\"addressLine2\" />\n <TextField source=\"pincode\" />\n <TextField source=\"city\" />\n <TextField source=\"state\" />\n <TextField source=\"country\" />\n\n <Divider className=\"ra-divider-contactInformation\" />\n\n <SectionTitleSubtitle\n title=\"resources.vendors.fieldGroups.contactInformation\"\n className={`ra-field-contactInformation ${classes.section}`}\n />\n\n <ArrayField source=\"phones\">\n <SingleFieldList className={classes.phonesList} linkType={false}>\n <TextField source=\"phone\" />\n </SingleFieldList>\n </ArrayField>\n <UrlField source=\"url\" target=\"_blank\" rel=\"noopener\" />\n\n <Divider className=\"ra-divider-attachments\" />\n\n <UploadedFilesField canDelete={false} className=\"ra-field-attachments\" />\n </SimpleShowLayout>\n );\n};\n\nexport { VendorShowContainer };\n","import { ResourceContextProvider, ShowContextProvider, ShowProps, useShowController } from \"react-admin\";\nimport { RESOURCE_NAME_VENDOR } from \"../constants\";\nimport { VendorShowContainer } from \"./VendorShowContainer\";\n\nconst SingleVendorShowContainer = (props) => {\n const vendorId = props?.record?.vendorId || props?.record?.id;\n const showProps: ShowProps = {\n basePath: '/',\n hasCreate: false,\n hasShow: true,\n hasList: false,\n id: vendorId,\n resource: RESOURCE_NAME_VENDOR\n }\n const controllerProps = useShowController({...showProps}); \n\n return (\n <ResourceContextProvider value={RESOURCE_NAME_VENDOR}>\n <ShowContextProvider value={controllerProps}>\n <VendorShowContainer {...props} {...controllerProps} shouldNotSyncWithLocation={true}/>\n </ShowContextProvider>\n </ResourceContextProvider>\n );\n}\n\nexport { SingleVendorShowContainer }","import { ReactElement } from \"react\";\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n UrlField,\n ArrayField,\n SingleFieldList,\n BooleanInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n DateField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n} from \"../../../lib/components\";\nimport {\n DEFAULT_PER_PAGE,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../lib/common\";\nimport { FILTER_NAME_GLOBAL_VENDORS } from \"./constants\";\nimport { VendorListRowActionButtons } from \"./components\";\nimport { CategoryTypes, RESOURCE_NAME_CATEGORY } from \"../category\";\nimport { RESOURCE_NAME_VENDOR_GROUP } from \"../vendor-group\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"search\" />\n <BooleanInput\n label=\"resources.vendors.filters.showGlobalVendors\"\n source={FILTER_NAME_GLOBAL_VENDORS}\n alwaysOn\n key=\"showGlobalVendors\"\n />\n <ReferenceArrayInput\n label=\"resources.vendors.filters.vendorCategoryId\"\n source=\"vendorCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={{ categoryType: CategoryTypes.VENDOR }}\n key=\"vendorCategoryId\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n </Filter>\n);\n\nconst defaultColumns = [\n \"vendorAccountId\",\n \"vendorCategoryId\",\n \"vendorGroupId\",\n \"vendorAccount.primaryUser.fullName\",\n \"vendorAccount.primaryUser.email\",\n \"city\",\n];\n\nconst VendorList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"vendorAccountId\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n listRowActions={false}\n >\n <CustomizableDatagrid>\n <ReferenceField\n source=\"vendorAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <TextField\n source=\"vendorAccount.primaryUser.fullName\"\n sortable={false}\n />\n <ReferenceField\n source=\"vendorCategoryId\"\n reference={RESOURCE_NAME_CATEGORY}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"vendorGroupId\"\n reference={RESOURCE_NAME_VENDOR_GROUP}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <TextField source=\"vendorAccount.primaryUser.email\" sortable={false} />\n\n <TextField source=\"id\" />\n <TextField source=\"addressLine1\" />\n <TextField source=\"addressLine2\" />\n <TextField source=\"pincode\" />\n <TextField source=\"city\" />\n <TextField source=\"state\" />\n <TextField source=\"country\" />\n <ArrayField source=\"phones\" sortable={false}>\n <SingleFieldList>\n <TextField source=\"phone\" />\n </SingleFieldList>\n </ArrayField>\n <UrlField source=\"url\" />\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <VendorListRowActionButtons />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { VendorList };\n","import DateRangeIcon from '@material-ui/icons/DateRange';\nimport { PermissionVendors, RESOURCE_NAME_VENDOR } from './constants';\nimport { VendorCreate } from './VendorCreate';\nimport { VendorEdit } from './VendorEdit';\nimport { VendorList } from './VendorList';\nimport { VendorShow } from './VendorShow';\n\nconst vendorPermissions = {\n menu: PermissionVendors.MENU_VENDOR,\n list: PermissionVendors.LIST_VENDORS,\n update: PermissionVendors.EDIT_VENDOR,\n show: PermissionVendors.SHOW_VENDOR,\n delete: PermissionVendors.DELETE_VENDOR,\n create: PermissionVendors.CREATE_VENDOR,\n import: PermissionVendors.IMPORT_VENDORS,\n};\n\nconst vendorResource = {\n name: RESOURCE_NAME_VENDOR,\n list:VendorList,\n create:VendorCreate,\n edit:VendorEdit,\n show:VendorShow,\n icon: DateRangeIcon,\n options: { label: 'resources.vendors.name', allowedPermissions: vendorPermissions },\n}\n\nexport * from './constants';\nexport { vendorPermissions, vendorResource };","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../lib/components/crud/DefaultCreate\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../../lib/modules\";\nimport { VendorForm } from \"./components/VendorForm\";\n\n\nconst VendorCreate= (props: CreateProps)=> {\n \n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"vendors\",\n },\n ]; return (\n <DefaultCreate {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}>\n <VendorForm />\n </DefaultCreate>\n );\n};\n\nexport { VendorCreate };\n","import {\n EditProps,\n} from 'react-admin';\nimport { DefaultEdit } from '../../../lib/components';\nimport { MediaFileSource, transformAndUploadS3Files } from '../../../lib/modules';\nimport { VendorEditContainer } from './components/VendorEditContainer';\n\n\nconst VendorEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"vendors\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n mutationMode = \"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <VendorEditContainer isEdit={true}/>\n </DefaultEdit>\n );\n};\n\nexport { VendorEdit }","import {\n ShowProps,\n} from \"react-admin\";\nimport { DefaultShow } from \"../../../lib/components\";\nimport { VendorShowContainer } from \"./components\";\n\nconst VendorShow=(props:ShowProps,...rest) => {\n return (\n <DefaultShow {...props}>\n <VendorShowContainer/>\n </DefaultShow>\n );\n};\n\nexport { VendorShow };\n","import { Record, Identifier } from \"react-admin\";\n\nexport const RESOURCE_NAME_COMMENT = \"comments\";\n\nexport interface CommentOwnerEntity {\n ownerEntityType: OwnerEntityTypes;\n ownerEntityId: Identifier;\n}\n\nexport enum PermissionComments {\n LIST_COMMENTS = \"list-comments\",\n SHOW_COMMENT = \"show-comment\",\n CREATE_COMMENT = \"create-comment\",\n EDIT_ANY_COMMENT = \"update-any-comment\",\n EDIT_OWN_COMMENT = \"update-own-comment\",\n DELETE_ANY_COMMENT = \"delete-any-comment\",\n DELETE_OWN_COMMENT = \"delete-own-comment\",\n}\n\nexport enum OwnerEntityTypes {\n REQUISITION = 1,\n ENQUIRY = 2,\n BID = 3,\n}\n\nexport enum CommentType {\n INTERNAL = 1,\n EXTERNAL = 2,\n}\n\nexport interface Comment extends Record, CommentOwnerEntity {\n comment: string;\n commentType: CommentType;\n parentCommentId?: Identifier;\n}\n","export const RESOURCE_NAME_ORG_STRUCTURE = \"orgStructures\";\n\nexport enum PermissionOrgStructure {\n ORG_STRUCTURE_MANAGEMENT_MENU = \"view-org-structure-management-menu\",\n MENU_ORG_STRUCTURE = \"view-org-structure-menu\",\n LIST_ORG_STRUCTURE = \"list-org-structures\",\n SHOW_ORG_STRUCTURE = \"show-org-structure\",\n CREATE_ORG_STRUCTURE = \"create-org-structure\",\n EDIT_ORG_STRUCTURE = \"update-org-structure\",\n DELETE_ORG_STRUCTURE = \"delete-org-structure\",\n IMPORT_ORG_STRUCTURES = \"import-org-structures\",\n}\n\nexport enum ORG_STRUCTURE_USER_GROUP_TYPE {\n REQUISITIONS = 1,\n ENQUIRIES,\n BIDS,\n}","import ClearIcon from \"@material-ui/icons/Clear\";\nimport {\n useTranslate,\n Toolbar,\n SaveButton,\n} from \"react-admin\";\n\nimport { Button, makeStyles } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n toolbar: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: theme.spacing(1),\n },\n cancel: {\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst CommentToolbar = (props) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const { onCancel, ...rest } = props;\n return (\n <Toolbar\n alwaysEnableSaveButton={false}\n className={classes.toolbar}\n {...rest}\n >\n <SaveButton label=\"resources.comments.actions.save\" />\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"secondary\"\n startIcon={<ClearIcon />}\n className={classes.cancel}\n onClick={onCancel}\n >\n {translate(\"resources.comments.actions.cancel\")}\n </Button>\n </Toolbar>\n );\n};\n\n\nexport { CommentToolbar }","import { useState } from \"react\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogTitle,\n} from \"@material-ui/core\";\nimport {\n CommentOwnerEntity,\n CommentType,\n Comment,\n RESOURCE_NAME_COMMENT,\n} from \"../constants\";\nimport ContentAdd from \"@material-ui/icons/Add\";\nimport {\n Create,\n SimpleForm,\n useNotify,\n useListContext,\n useTranslate,\n required,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport { CommentToolbar } from \"./CommentToolbar\";\n\nconst CommentCreateButton = ({\n ownerEntityType,\n ownerEntityId,\n}: CommentOwnerEntity) => {\n const translate = useTranslate();\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n\n const commentType = CommentType.INTERNAL;\n\n const notify = useNotify();\n\n const { refetch } = useListContext<Comment>();\n\n const onSuccess = () => {\n setIsDialogOpen(false);\n notify(\"resources.comments.messages.notification.created\", {type: \"success\"});\n refetch();\n };\n\n const handleCancelCreate = () => {\n setIsDialogOpen(false);\n };\n\n const initialValues = {\n commentType,\n ownerEntityType,\n ownerEntityId,\n };\n\n return (\n <>\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => setIsDialogOpen(true)}\n startIcon={<ContentAdd />}\n >\n {translate(\"resources.comments.actions.create\")}\n </Button>\n <Dialog open={isDialogOpen} onClose={() => setIsDialogOpen(false)}>\n <DialogTitle>\n {translate(\"resources.comments.messages.create.title\")}\n </DialogTitle>\n <DialogContent>\n <Create\n basePath=\"/\"\n resource={RESOURCE_NAME_COMMENT}\n onSuccess={onSuccess}\n >\n <SimpleForm \n initialValues={initialValues} \n toolbar={<CommentToolbar onCancel={handleCancelCreate}/>}\n mutationMode=\"undoable\"\n >\n <RichTextInput\n source=\"comment\"\n helperText=\"resources.comments.help.comment\"\n label={false}\n validate={[required()]}\n isRequired\n autofocus\n />\n </SimpleForm>\n </Create>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n\nexport { CommentCreateButton };\n","import { useEffect, useState } from \"react\";\nimport { SortButton, TopToolbar } from \"react-admin\";\nimport { RefetchIconButton } from \"../../../lib/components\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\nimport { CommentOwnerEntity, PermissionComments } from \"../constants\";\nimport { CommentCreateButton } from \"./CommentCreateButton\";\n\nconst CommentListActions = ({\n ownerEntityType,\n ownerEntityId,\n isViewOnly,\n}: CommentListActionsProps) => {\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n const [hasCreateAccess, setHasCreateAccess] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasCreateAccess = hasPermissionAccess(\n PermissionComments.CREATE_COMMENT\n );\n setHasCreateAccess(hasCreateAccess);\n }\n }, [hasPermissionAccess, permissionsLoaded]);\n\n return (\n <TopToolbar>\n <SortButton fields={[\"updatedAt\"]} />\n <RefetchIconButton />\n {!isViewOnly && hasCreateAccess && (\n <CommentCreateButton\n ownerEntityType={ownerEntityType}\n ownerEntityId={ownerEntityId}\n />\n )}\n </TopToolbar>\n );\n};\n\ninterface CommentListActionsProps extends CommentOwnerEntity {\n isViewOnly: boolean;\n}\n\nexport { CommentListActions };\n","import { Filter, FilterProps } from \"react-admin\";\nimport { SearchFilter } from \"../../../lib/common\";\n\nconst CommentListFilters = (props: Omit<FilterProps, \"children\">) => {\n return (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"commentsSearchFilter\"/>\n </Filter>\n );\n};\n\nexport { CommentListFilters };\n","import { useState } from \"react\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport {\n Edit,\n SimpleForm,\n DateField,\n useDelete,\n useNotify,\n RichTextField,\n useListContext,\n useTranslate,\n required,\n} from \"react-admin\";\nimport {\n Typography,\n Tooltip,\n IconButton,\n Box,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport TrashIcon from \"@material-ui/icons/Delete\";\nimport {\n Comment,\n RESOURCE_NAME_COMMENT,\n PermissionComments,\n} from \"../constants\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\nimport { CommentToolbar } from \"./CommentToolbar\";\nimport { UserNameEmailField } from \"../../../common\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(2),\n },\n metadata: {\n color: theme.palette.text.secondary,\n },\n buttons: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n marginTop: theme.spacing(1),\n },\n cancel: {\n marginLeft: theme.spacing(1),\n },\n content: {\n borderRadius: 10,\n display: \"flex\",\n alignItems: \"stretch\",\n },\n text: {\n flex: 1,\n },\n paragraph: {\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.body1.fontSize,\n lineHeight: 1.3,\n marginBottom: theme.spacing(2.4),\n },\n toolbar: {\n marginLeft: theme.spacing(2),\n visibility: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-around\",\n },\n}));\n\nexport const SingleComment = ({\n comment,\n isViewOnly,\n}: {\n comment: Comment;\n isViewOnly: boolean;\n}) => {\n const translate = useTranslate();\n const { hasOwnOrAccountAccess, permissionsLoaded } = usePermissionsCheck();\n\n const [isHover, setHover] = useState(false);\n const [isEditing, setEditing] = useState(false);\n\n const notify = useNotify();\n const classes = useStyles();\n const { refetch } = useListContext<Comment>();\n\n const hasEditCommentAccess = hasOwnOrAccountAccess(\n PermissionComments.EDIT_ANY_COMMENT,\n PermissionComments.EDIT_OWN_COMMENT,\n comment?.accountId,\n comment?.ownerId\n );\n\n const hasDeleteCommentAccess = permissionsLoaded && hasOwnOrAccountAccess(\n PermissionComments.DELETE_ANY_COMMENT,\n PermissionComments.DELETE_OWN_COMMENT,\n comment?.accountId,\n comment?.ownerId\n );\n\n const [handleDelete] = useDelete(RESOURCE_NAME_COMMENT, comment.id, comment, {\n mutationMode: \"pessimistic\",\n onSuccess: () => {\n refetch();\n notify(\"resources.comments.messages.notification.deleted\", {type: \"success\"});\n },\n });\n\n const handleEnterEditMode = () => {\n setEditing(true);\n };\n\n const handleCancelEdit = () => {\n setEditing(false);\n setHover(false);\n };\n\n const onSuccess = () => {\n setEditing(false);\n setHover(false);\n refetch();\n notify(\"resources.comments.messages.notification.edited\", {type: \"success\"});\n }\n\n return (\n <div\n className={classes.root}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n >\n <div className={classes.metadata}>\n <UserNameEmailField record={comment} source=\"ownerId\" label=\"resources.comments.fields.fullName\"/>{\" \"}\n <Typography component=\"span\" variant=\"body2\">\n {translate(\"resources.comments.help.commentedOn\")}\n </Typography>\n <DateField\n source=\"updatedAt\"\n label=\"resources.comments.fields.updatedAt\"\n record={comment}\n variant=\"body2\"\n showTime\n locales=\"en\"\n options={{\n dateStyle: \"full\",\n timeStyle: \"short\",\n }}\n />\n </div>\n {(isEditing && !isViewOnly) ? (\n <Edit\n basePath=\"/\"\n resource={RESOURCE_NAME_COMMENT}\n id={comment?.id?.toString()}\n onSuccess={onSuccess}\n actions={false}\n mutationMode=\"optimistic\"\n >\n <SimpleForm\n toolbar={<CommentToolbar onCancel={handleCancelEdit}/>}\n >\n <RichTextInput\n source=\"comment\"\n label={false}\n helperText=\"resources.comments.help.commentEdit\"\n \n autofocus\n validate={[required()]}\n isRequired\n />\n </SimpleForm>\n </Edit>\n ) : (\n <Box className={classes.content}>\n <div className={classes.text}>\n <RichTextField\n source=\"comment\"\n label=\"resources.comments.fields.comment\"\n record={comment}\n />\n </div>\n {!isViewOnly && (hasEditCommentAccess || hasDeleteCommentAccess) && (\n <div\n className={classes.toolbar}\n style={{ visibility: isHover ? \"visible\" : \"hidden\" }}\n >\n {hasEditCommentAccess && (\n <Tooltip title=\"Edit Comment\">\n <IconButton size=\"small\" onClick={handleEnterEditMode}>\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {hasDeleteCommentAccess && (\n <Tooltip title=\"Delete Comment\">\n <IconButton size=\"small\" onClick={handleDelete}>\n <TrashIcon />\n </IconButton>\n </Tooltip>\n )}\n </div>\n )}\n </Box>\n )}\n </div>\n );\n};\n","import { LinearProgress, Loading, useListContext } from \"react-admin\";\nimport { createStyles, makeStyles, Theme } from \"@material-ui/core/styles\";\nimport Timeline from \"@material-ui/lab/Timeline\";\nimport TimelineItem from \"@material-ui/lab/TimelineItem\";\nimport TimelineSeparator from \"@material-ui/lab/TimelineSeparator\";\nimport TimelineConnector from \"@material-ui/lab/TimelineConnector\";\nimport TimelineContent from \"@material-ui/lab/TimelineContent\";\nimport TimelineDot from \"@material-ui/lab/TimelineDot\";\nimport ChatBubbleIcon from \"@material-ui/icons/ChatBubble\";\n\nimport { SingleComment } from \"./SingleComment\";\nimport { Comment, CommentOwnerEntity, PermissionComments } from \"../constants\";\nimport { EmptyState } from \"../../../lib/components\";\nimport { CommentCreateButton } from \"./CommentCreateButton\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\nimport { useEffect, useState } from \"react\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n timeline: {\n paddingInlineStart: 5,\n },\n evenBg: {\n backgroundColor: theme.palette.grey[300],\n },\n oddBg: {\n backgroundColor: theme.palette.background.default,\n },\n root: {\n //borderBottom: \"1px dotted lightgrey\",\n //backgroundColor: theme.palette.grey[300],\n },\n alignLeft: {\n alignItems: \"flex-start\",\n },\n missingOppositeContent: {\n \"&:before\": {\n flex: \"unset\",\n content: '\"\"',\n padding: \"1px 3px\",\n },\n },\n before: {},\n emptyStateContainer: {\n width: \"100%\",\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n // display: \"flex\",\n // flexDirection: \"column\",\n // alignItems: \"flex-start\"\n },\n emptyStateIcon: {\n width: \"1.25em\",\n height: \"1.25em\",\n alignSelf: \"center\",\n },\n })\n);\n\nexport const CommentsIterator = ({\n ownerEntityType,\n ownerEntityId,\n isViewOnly,\n}: CommentsIteratorProps) => {\n const classes = useStyles();\n const { data, ids, total, loaded, loading } = useListContext<Comment>();\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n const [hasCreateAccess, setHasCreateAccess] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasCreateAccess = hasPermissionAccess(\n PermissionComments.CREATE_COMMENT\n );\n setHasCreateAccess(hasCreateAccess);\n }\n }, [hasPermissionAccess, permissionsLoaded]);\n\n if (!loaded) {\n return <LinearProgress />;\n }\n\n if (loaded && !loading && (ids.length === 0 || total === 0)) {\n return (\n <EmptyState\n title=\"resources.comments.sections.emptyState.title\"\n subTitle=\"resources.comments.sections.emptyState.subTitle\"\n Icon={ChatBubbleIcon}\n className={classes.emptyStateContainer}\n iconClassName={classes.emptyStateIcon}\n actionButton={\n isViewOnly && !hasCreateAccess ? undefined : (\n <CommentCreateButton\n ownerEntityType={ownerEntityType}\n ownerEntityId={ownerEntityId}\n />\n )\n }\n />\n );\n }\n\n return (\n <Timeline align=\"left\" className={classes.timeline}>\n {ids.map((id, index) => {\n const comment = data[id];\n const isOdd = index % 2 === 0;\n const variant = isOdd ? \"default\" : \"outlined\";\n const color = isOdd ? \"primary\" : \"secondary\";\n\n return (\n <TimelineItem\n classes={{\n root: classes.root,\n missingOppositeContent: classes.missingOppositeContent,\n //alignLeft: classes.alignLeft,\n }}\n >\n <TimelineSeparator>\n <TimelineDot variant={variant} color={color} />\n <TimelineConnector />\n </TimelineSeparator>\n <TimelineContent>\n <SingleComment\n comment={comment}\n isViewOnly={isViewOnly}\n key={`comment-${comment?.ownerEntityId}-${index}`}\n />\n </TimelineContent>\n </TimelineItem>\n );\n })}\n </Timeline>\n );\n};\n\nexport interface CommentsIteratorProps extends CommentOwnerEntity {\n isViewOnly: boolean;\n}\n","import { Pagination } from \"react-admin\";\nimport { DEFAULT_PER_PAGE } from \"../../../lib/common\";\nimport { DefaultList } from \"../../../lib/components\";\nimport { CommentOwnerEntity, RESOURCE_NAME_COMMENT } from \"../constants\";\nimport { CommentListActions } from \"./CommentListActions\";\nimport { CommentListFilters } from \"./CommentListFilters\";\nimport { CommentsIterator } from \"./CommentsIterator\";\n\nconst CommentsList = ({\n ownerEntityType,\n ownerEntityId,\n isViewOnly,\n ...rest\n}: CommentsListProps) => {\n return (\n <DefaultList\n resource={RESOURCE_NAME_COMMENT}\n basePath=\"/\"\n exporter={false}\n empty={false}\n perPage={DEFAULT_PER_PAGE}\n title=\"Comments\"\n showBreadcrumbs={false}\n filters={<CommentListFilters />}\n filterDefaultValues={{\n ownerEntityType,\n ownerEntityId,\n }}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n actions={\n <CommentListActions\n ownerEntityType={ownerEntityType}\n ownerEntityId={ownerEntityId}\n isViewOnly={isViewOnly}\n />\n }\n pagination={\n <Pagination limit={<div/>}/>\n }\n {...rest}\n >\n <CommentsIterator \n ownerEntityType = {ownerEntityType}\n ownerEntityId = { ownerEntityId}\n isViewOnly = {isViewOnly}\n />\n </DefaultList>\n );\n};\n\ninterface CommentsListProps extends CommentOwnerEntity{\n isViewOnly: boolean\n}\n\nexport { CommentsList };\n","import { Box } from \"@material-ui/core\";\nimport { AccordionField } from \"../../../lib/components\";\nimport { CommentOwnerEntity } from \"../constants\";\nimport { CommentsList } from \"./CommentsList\";\n\nimport { Route } from 'react-router';\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n commentsAccordion: { width: \"100%\" },\n })\n);\n\n\nconst CommentsAccordion = ({\n ownerEntityType,\n ownerEntityId,\n isViewOnly,\n}: CommentsAccordionProps) => {\n const classes = useStyles();\n\n return (\n <AccordionField\n headerlabel=\"resources.requisitions.sections.comment.input.title\"\n headerTooltip=\"resources.requisitions.sections.comment.input.tooltip\"\n className={classes.commentsAccordion}\n >\n <Box mt={2} width=\"90vw\">\n <CommentsList\n ownerEntityType={ownerEntityType}\n ownerEntityId={ownerEntityId}\n isViewOnly={isViewOnly}\n />\n </Box>\n </AccordionField>\n );\n};\n\ninterface CommentsAccordionProps extends CommentOwnerEntity{\n isViewOnly: boolean\n}\n\nexport { CommentsAccordion };\n","import { maxLength, minLength, required } from \"react-admin\";\n\nconst validateCode = [\n required(),\n minLength(3),\n maxLength(10),\n];\n\nexport const validations = {\n code: validateCode,\n}","export const RESOURCE_NAME_ORG_STRUCTURE_TYPES = \"orgStructureTypes\";\n\nexport enum PermissionOrgStructureTypes {\n MENU_ORG_STRUCTURE_TYPE = \"view-org-structure-type-menu\",\n LIST_ORG_STRUCTURE_TYPES = \"list-org-structure-types\",\n SHOW_ORG_STRUCTURE_TYPE = \"show-org-structure-type\",\n CREATE_ORG_STRUCTURE_TYPE = \"create-org-structure-type\",\n EDIT_ORG_STRUCTURE_TYPE = \"update-org-structure-type\",\n DELETE_ORG_STRUCTURE_TYPE = \"delete-org-structure-type\",\n}\n","export const RESOURCE_NAME_ORG_USER_GROUP = \"orgUserGroups\";\n\nexport enum PermissionOrgUserGroup {\n MENU_ORG_USER_GROUP = \"view-org-user-group-menu\",\n LIST_ORG_USER_GROUPS = \"list-org-user-groups\",\n SHOW_ORG_USER_GROUP = \"show-org-user-group\",\n CREATE_ORG_USER_GROUP = \"create-org-user-group\",\n EDIT_ORG_USER_GROUP = \"update-org-user-group\",\n DELETE_ORG_USER_GROUP = \"delete-org-user-group\",\n}\nexport enum OrgUserGroupType {\n REQUISITION = 1,\n ENQUIRY,\n BID,\n}","import { required } from 'react-admin';\nimport { requiredIf, isSameAs } from '../../../../lib/components/validations';\n\nconst validateUsersMessage = \"resources.OrgUserGroups.validations.userIds.required\";\nconst validateLevel1ApprovalGroupRequiredIfMessage = \"resources.OrgUserGroups.validations.level1ApprovalGroupId.requiredIf\";\nconst validateLevel1ApprovalGroupSameAsMessage = \"resources.OrgUserGroups.validations.level2ApprovalGroupId.isSameAs\";\nconst validateLevel2ApprovalGroupSameAsMessage = \"resources.OrgUserGroups.validations.level2ApprovalGroupId.isSameAs\";\n\nconst validateLevel1ApprovalGroupName = [\n requiredIf(\"level2ApprovalGroupId\", validateLevel1ApprovalGroupRequiredIfMessage),\n isSameAs(\"level2ApprovalGroupId\", validateLevel1ApprovalGroupSameAsMessage),\n];\n\nconst validateLevel2ApprovalGroupName = [\n isSameAs(\"level1ApprovalGroupId\", validateLevel2ApprovalGroupSameAsMessage),\n];\n\nconst validateUsers = [\n required(validateUsersMessage)\n]\n\nconst validate = {\n validateLevel1ApprovalGroupName,\n validateLevel2ApprovalGroupName,\n validateUsers\n}\n\nexport { validate }","import { lightGreen, indigo, grey, orange } from \"@material-ui/core/colors\";\n\nexport const RESOURCE_NAME_BIDS_COMPARISON = \"bids-comparison\";\n\nexport const COLOR_ODD_CELL = indigo[100];\nexport const COLOR_EVEN_CELL = grey[300];\nexport const COLOR_HIGHLIGHT_CELL = lightGreen[500];\nexport const COLOR_OPTIMAL_BACKGROUND_CELL = orange[200];\nexport const COLOR_OPTIMAL_FOREGROUND_CELL = lightGreen[800];\n\nexport enum PermissionBidsComparison {\n LIST_BIDS_COMPARISONS = \"list-bids-comparisons\",\n SHOW_BIDS_COMPARISON = \"show-bids-comparison\",\n CREATE_BIDS_COMPARISON = \"create-bids-comparison\",\n EDIT_BIDS_COMPARISON = \"update-bids-comparison\",\n DELETE_BIDS_COMPARISON = \"delete-bids-comparison\",\n}\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n AutocompleteInput,\n ReferenceInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\nimport {\n RESOURCE_NAME_ORG_USER_GROUP,\n} from \"./constants\";\nimport { RESOURCE_NAME_USER } from \"../../../../lib/modules\";\nimport { validate } from \"./validations\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n number: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst OrgUserGroupForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm warnWhenUnsavedChanges {...rest}>\n <SectionTitle label=\"resources.OrgUserGroups.fieldGroups.OrgUserGroupsDetaills\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.OrgUserGroups.fields.number\"\n helperText=\"resources.OrgUserGroups.help.number\"\n formClassName={classes.number}\n fullWidth\n validate={[required()]}\n />\n <TextInput\n source=\"name\"\n label=\"resources.OrgUserGroups.fields.name\"\n helperText=\"resources.OrgUserGroups.help.name\"\n formClassName={classes.name}\n fullWidth\n validate={[required()]}\n />\n <RichTextInput\n source=\"description\"\n label=\"resources.OrgUserGroups.fields.description\"\n formClassName={classes.description}\n fullWidth\n />\n <ReferenceInput\n label=\"resources.OrgUserGroups.fields.level1ApprovalGroupId\"\n source=\"level1ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n validate={validate.validateLevel1ApprovalGroupName}\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.OrgUserGroups.help.level1ApprovalGroupId\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n <ReferenceInput\n source=\"level2ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level2ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n validate={validate.validateLevel2ApprovalGroupName}\n fullWidth\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.OrgUserGroups.help.level2ApprovalGroupId\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n <ReferenceArrayInput\n source=\"userIds\"\n label=\"resources.OrgUserGroups.fields.userIds\"\n reference={RESOURCE_NAME_USER}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"firstName\", order: \"ASC\" }}\n validate={validate.validateUsers}\n isRequired\n fullWidth\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n helperText=\"resources.OrgUserGroups.help.userIds\"\n />\n </ReferenceArrayInput>\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\nexport { OrgUserGroupForm };\n","import { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n FilterProps,\n ReferenceField,\n DateField,\n Filter,\n RichTextField,\n ReferenceArrayField,\n SingleFieldList,\n ChipField,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n SearchFilter,\n} from \"../../../../lib/common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_ACCOUNT, RESOURCE_NAME_USER } from \"../../../../lib/modules\";\nimport { RESOURCE_NAME_ORG_USER_GROUP } from \"./constants\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"level1ApprovalGroupId\", \"level2ApprovalGroupId\"];\nconst OrgUserGroupsList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField\n source=\"number\"\n label=\"resources.OrgUserGroups.fields.number\"\n />\n <TextField source=\"name\" label=\"resources.OrgUserGroups.fields.name\" />\n\n <RichTextField\n source=\"description\"\n label=\"resources.OrgUserGroups.fields.description\"\n />\n <ReferenceField\n source=\"level1ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level1ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"level2ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level2ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceArrayField\n source=\"userIds\"\n label=\"resources.OrgUserGroups.fields.userIds\"\n reference={RESOURCE_NAME_USER}\n sortable={false}\n >\n <SingleFieldList>\n <ChipField source=\"displayLabel\" />\n </SingleFieldList>\n </ReferenceArrayField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { OrgUserGroupsList };\n","import GroupWorkIcon from \"@material-ui/icons/GroupWork\";\nimport {\n PermissionOrgUserGroup,\n RESOURCE_NAME_ORG_USER_GROUP,\n} from \"./constants\";\nimport { OrgUserGroupCreate } from \"./OrgUserGroupCreate\";\nimport { OrgUserGroupEdit } from \"./OrgUserGroupEdit\";\nimport { OrgUserGroupsList } from \"./OrgUserGroupList\";\nimport { OrgUserGroupshow } from \"./OrgUserGroupShow\";\n\nconst allowedPermissions = {\n menu: PermissionOrgUserGroup.MENU_ORG_USER_GROUP,\n list: PermissionOrgUserGroup.LIST_ORG_USER_GROUPS,\n create: PermissionOrgUserGroup.CREATE_ORG_USER_GROUP,\n update: PermissionOrgUserGroup.EDIT_ORG_USER_GROUP,\n show: PermissionOrgUserGroup.SHOW_ORG_USER_GROUP,\n delete: PermissionOrgUserGroup.DELETE_ORG_USER_GROUP,\n};\n\nconst OrgUserGroupsResource = {\n name: RESOURCE_NAME_ORG_USER_GROUP,\n list: OrgUserGroupsList,\n create: OrgUserGroupCreate,\n edit: OrgUserGroupEdit,\n show: OrgUserGroupshow,\n icon: GroupWorkIcon,\n options: { label: \"resources.OrgUserGroups.name\", allowedPermissions },\n};\n\nexport * from \"./constants\";\nexport { OrgUserGroupsResource };\n","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../../lib/components/crud/DefaultCreate\";\nimport { OrgUserGroupForm } from \"./OrgUserGroupForm\";\n\nconst OrgUserGroupCreate = (props: CreateProps) => {\n return (\n <DefaultCreate {...props}>\n < OrgUserGroupForm />\n </DefaultCreate>\n );\n};\n\nexport { OrgUserGroupCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../../lib/components\";\nimport { OrgUserGroupForm } from \"./OrgUserGroupForm\";\n\nconst OrgUserGroupEdit = (props: EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <OrgUserGroupForm isEdit={true} {...props} />\n </DefaultEdit>\n );\n};\n\nexport { OrgUserGroupEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n ReferenceArrayField,\n RichTextField,\n Datagrid,\n EmailField,\n} from \"react-admin\";\nimport { DefaultShow, ResourceLinkedField } from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_USER } from \"../../../../lib/modules\";\nimport { RESOURCE_NAME_ORG_USER_GROUP } from \"./constants\";\n\nconst OrgUserGroupshow = (props: ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField\n source=\"number\"\n label=\"resources.OrgUserGroups.fields.number\"\n />\n <TextField source=\"name\" label=\"resources.OrgUserGroups.fields.name\" />\n <RichTextField\n source=\"description\"\n label=\"resources.businessFunction.fields.description\"\n />\n <ReferenceField\n source=\"level1ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level1ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"level2ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level2ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ReferenceArrayField\n source=\"userIds\"\n label=\"resources.OrgUserGroups.fields.userIds\"\n reference={RESOURCE_NAME_USER}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"fullName\"\n label=\"resources.users.fields.fullName\"\n linkedResource={RESOURCE_NAME_USER}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_USER}\n link=\"show\"\n />\n <EmailField source=\"email\" label=\"resources.users.fields.email\"/>\n </Datagrid>\n </ReferenceArrayField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { OrgUserGroupshow };\n","import {\n TextInput,\n required,\n ReferenceInput,\n useTranslate,\n AutocompleteInput,\n Identifier,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n TabbedForm,\n FormTab,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { RESOURCE_NAME_ORG_STRUCTURE } from \"./constants\";\nimport { Typography } from \"@material-ui/core\";\nimport { RESOURCE_NAME_ORG_STRUCTURE_TYPES } from \"../org-structure-types/constants\";\nimport { useState } from \"react\";\nimport { getTabbedFormProps, MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"../../purchase-groups\";\nimport { RESOURCE_NAME_ORG_USER_GROUP } from \"../org-user-groups\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n parent: { display: \"block\" },\n number: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst OrgStructureForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n const record = rest?.record;\n const [orgStructureTypeId, setOrgStructureTypeId] = useState<Identifier>(\n record?.orgStructureTypeId\n );\n return (\n <TabbedForm \n {...getTabbedFormProps(rest)}\n warnWhenUnsavedChanges\n >\n <FormTab label=\"resources.orgStructures.tabs.general\">\n <SectionTitle label=\"resources.orgStructures.fieldGroups.orgStructureDetails\" />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.orgStructures.fields.name\"\n helperText=\"resources.orgStructures.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n />\n <TextInput\n source=\"number\"\n label=\"resources.orgStructures.fields.number\"\n helperText=\"resources.orgStructures.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n />\n <RichTextInput\n source=\"description\"\n label=\"resources.businessFunction.fields.description\"\n formClassName={classes.description}\n />\n <ReferenceInput\n label=\"resources.orgStructures.fields.orgStructureTypeId\"\n source=\"orgStructureTypeId\"\n isRequired\n validate={[required()]}\n reference={RESOURCE_NAME_ORG_STRUCTURE_TYPES}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n onChange={(value) => setOrgStructureTypeId(value)}\n >\n <AutocompleteInput\n optionText=\"name\"\n helperText=\"resources.orgStructures.help.orgStructureTypeId\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n\n <ReferenceInput\n label=\"resources.orgStructures.fields.parentId\"\n source=\"parentId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={{ orgStructureTypeId: orgStructureTypeId }}\n >\n <AutocompleteInput\n optionText=\"name\"\n helperText=\"resources.orgStructures.help.parentId\"\n resettable={true}\n allowEmpty={true}\n />\n </ReferenceInput>\n </FormTab>\n\n <FormTab label=\"resources.orgStructures.tabs.procurement\">\n <ReferenceArrayInput\n source=\"purchaseGroupIds\"\n label=\"resources.orgStructures.fields.purchaseGroupIds\"\n reference={RESOURCE_NAME_PURCHASE_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n fullWidth\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n helperText=\"resources.orgStructures.help.purchaseGroupIds\"\n />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n source=\"procureRequisitionsUserGroupIds\"\n label=\"resources.orgStructures.fields.procureRequisitionsUserGroupIds\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n fullWidth\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n helperText=\"resources.orgStructures.help.procureRequisitionsUserGroupIds\"\n />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n source=\"procureEnquiriesUserGroupIds\"\n label=\"resources.orgStructures.fields.procureEnquiriesUserGroupIds\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n fullWidth\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n helperText=\"resources.orgStructures.help.procureEnquiriesUserGroupIds\"\n />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n source=\"procureBidsUserGroupIds\"\n label=\"resources.orgStructures.fields.procureBidsUserGroupIds\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n fullWidth\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n helperText=\"resources.orgStructures.help.procureBidsUserGroupIds\"\n />\n </ReferenceArrayInput>\n </FormTab>\n </TabbedForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\nexport { OrgStructureForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n Filter,\n RichTextField,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../../lib/common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_USER } from \"../../../../lib/modules/accounts\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../../lib/modules/accounts/accounts/constants\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"../../purchase-groups/constants\";\nimport { RESOURCE_NAME_ORG_STRUCTURE_TYPES } from \"../org-structure-types/constants\";\nimport { RESOURCE_NAME_ORG_USER_GROUP } from \"../org-user-groups/constants\";\nimport { RESOURCE_NAME_ORG_STRUCTURE } from \"./constants\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n <ReferenceArrayInput\n label=\"resources.orgStructures.filters.parentId\"\n source=\"parentId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"parentId\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n <ReferenceArrayInput\n label=\"resources.orgStructures.filters.userId\"\n source=\"userIds\"\n reference={RESOURCE_NAME_USER}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"firstName\", order: \"ASC\" }}\n key=\"userIds\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n label=\"resources.orgStructures.filters.orgStructureTypeId\"\n source=\"orgStructureTypeId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE_TYPES}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"orgStructureTypeId\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n label=\"resources.orgStructures.filters.purchaseGroupId\"\n source=\"purchaseGroupIds\"\n reference={RESOURCE_NAME_PURCHASE_GROUPS}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"purchaseGroupIds\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"name\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n <ReferenceArrayInput\n label=\"resources.orgStructures.filters.orgUserGroupId\"\n source=\"orgUserGroupsIds\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"orgUserGroupsIds\"\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"name\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"parentId\", \"orgStructureTypeId\"];\nconst OrgStructureList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField\n source=\"number\"\n label=\"resources.orgStructures.fields.number\"\n />\n <TextField source=\"name\" label=\"resources.orgStructures.fields.name\" />\n <ReferenceField\n source=\"parentId\"\n label=\"resources.orgStructures.fields.parentId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <ReferenceField\n source=\"orgStructureTypeId\"\n label=\"resources.orgStructures.fields.orgStructureTypeId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE_TYPES}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <RichTextField\n source=\"description\"\n label=\"resources.businessFunction.fields.description\"\n />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"purchaseGroupIds\" sortable={false} reference={RESOURCE_NAME_PURCHASE_GROUPS} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { OrgStructureList };\n","import BusinessIcon from \"@material-ui/icons/Business\";\nimport {\n PermissionOrgStructure,\n RESOURCE_NAME_ORG_STRUCTURE,\n} from \"./constants\";\nimport { OrgStructureCreate } from \"./OrgStructureCreate\";\nimport { OrgStructureEdit } from \"./OrgStructureEdit\";\nimport { OrgStructureList } from \"./OrgStructureList\";\nimport { OrgStructureShow } from \"./OrgStructureShow\";\n\nconst allowedPermissions = {\n menu: PermissionOrgStructure.MENU_ORG_STRUCTURE,\n list: PermissionOrgStructure.LIST_ORG_STRUCTURE,\n create: PermissionOrgStructure.CREATE_ORG_STRUCTURE,\n update: PermissionOrgStructure.EDIT_ORG_STRUCTURE,\n show: PermissionOrgStructure.SHOW_ORG_STRUCTURE,\n delete: PermissionOrgStructure.DELETE_ORG_STRUCTURE,\n import: PermissionOrgStructure.IMPORT_ORG_STRUCTURES,\n};\nconst orgStructureResource = {\n name: RESOURCE_NAME_ORG_STRUCTURE,\n list: OrgStructureList,\n create: OrgStructureCreate,\n edit: OrgStructureEdit,\n show: OrgStructureShow,\n icon: BusinessIcon,\n options: { label: \"resources.orgStructures.name\", allowedPermissions },\n};\n\nexport * from \"./constants\";\nexport { orgStructureResource };\n","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../../lib/components/crud/DefaultCreate\";\nimport { OrgStructureForm } from \"./OrgStructureForm\";\n\nconst OrgStructureCreate = (props: CreateProps) => {\n return (\n <DefaultCreate {...props}>\n <OrgStructureForm />\n </DefaultCreate>\n );\n};\n\nexport { OrgStructureCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../../lib/components\";\nimport { OrgStructureForm } from \"./OrgStructureForm\";\n\nconst OrgStructureEdit = (props: EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <OrgStructureForm isEdit={true} {...props} />\n </DefaultEdit>\n );\n};\n\nexport { OrgStructureEdit };\n","import {\n ShowProps,\n TabbedShowLayout,\n Tab,\n TextField,\n ReferenceField,\n DateField,\n RichTextField,\n ReferenceArrayField,\n Datagrid,\n EmailField,\n} from \"react-admin\";\nimport { DefaultShow, ResourceLinkedField } from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_USER } from \"../../../../lib/modules\";\nimport { RESOURCE_NAME_PURCHASE_GROUPS } from \"../../purchase-groups\";\nimport { RESOURCE_NAME_ORG_STRUCTURE_TYPES } from \"../org-structure-types/constants\";\nimport { RESOURCE_NAME_ORG_USER_GROUP } from \"../org-user-groups\";\nimport { RESOURCE_NAME_ORG_STRUCTURE } from \"./constants\";\n\nconst OrgStructureShow = (props: ShowProps) => {\n return (\n <DefaultShow {...props}>\n <TabbedShowLayout>\n <Tab label=\"resources.orgStructures.tabs.general\">\n <TextField\n source=\"name\"\n label=\"resources.orgStructures.fields.name\"\n />\n <TextField\n source=\"number\"\n label=\"resources.orgStructures.fields.number\"\n />\n <RichTextField\n source=\"description\"\n label=\"resources.businessFunction.fields.description\"\n />\n <ReferenceField\n source=\"orgStructureTypeId\"\n label=\"resources.orgStructures.fields.orgStructureTypeId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE_TYPES}\n link=\"show\"\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <ReferenceField\n source=\"parentId\"\n label=\"resources.orgStructures.fields.parentId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE}\n link=\"show\"\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n </Tab>\n <Tab label=\"resources.orgStructures.tabs.procurement\">\n <ReferenceArrayField\n source=\"purchaseGroupIds\"\n label=\"resources.orgStructures.fields.purchaseGroupIds\"\n reference={RESOURCE_NAME_PURCHASE_GROUPS}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"number\"\n linkedResource={RESOURCE_NAME_PURCHASE_GROUPS}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_PURCHASE_GROUPS}\n link=\"show\"\n />\n <TextField source=\"name\" />\n </Datagrid>\n </ReferenceArrayField>\n\n <ReferenceArrayField\n source=\"procureRequisitionsUserGroupIds\"\n label=\"resources.orgStructures.fields.procureRequisitionsUserGroupIds\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"number\"\n label=\"resources.OrgUserGroups.fields.number\"\n linkedResource={RESOURCE_NAME_ORG_USER_GROUP}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n />\n <TextField\n source=\"name\"\n label=\"resources.OrgUserGroups.fields.name\"\n />\n <ReferenceField\n source=\"level1ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level1ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"level2ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level2ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceArrayField\n source=\"userIds\"\n label=\"resources.OrgUserGroups.fields.userIds\"\n reference={RESOURCE_NAME_USER}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"fullName\"\n label=\"resources.users.fields.fullName\"\n linkedResource={RESOURCE_NAME_USER}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_USER}\n link=\"show\"\n />\n <EmailField\n source=\"email\"\n label=\"resources.users.fields.email\"\n />\n </Datagrid>\n </ReferenceArrayField>\n </Datagrid>\n </ReferenceArrayField>\n\n <ReferenceArrayField\n source=\"procureEnquiriesUserGroupIds\"\n label=\"resources.orgStructures.fields.procureEnquiriesUserGroupIds\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"number\"\n label=\"resources.OrgUserGroups.fields.number\"\n linkedResource={RESOURCE_NAME_ORG_USER_GROUP}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n />\n <TextField\n source=\"name\"\n label=\"resources.OrgUserGroups.fields.name\"\n />\n <ReferenceField\n source=\"level1ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level1ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"level2ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level2ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceArrayField\n source=\"userIds\"\n label=\"resources.OrgUserGroups.fields.userIds\"\n reference={RESOURCE_NAME_USER}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"fullName\"\n label=\"resources.users.fields.fullName\"\n linkedResource={RESOURCE_NAME_USER}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_USER}\n link=\"show\"\n />\n <EmailField\n source=\"email\"\n label=\"resources.users.fields.email\"\n />\n </Datagrid>\n </ReferenceArrayField>\n </Datagrid>\n </ReferenceArrayField>\n\n <ReferenceArrayField\n source=\"procureBidsUserGroupIds\"\n label=\"resources.orgStructures.fields.procureBidsUserGroupIds\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"number\"\n label=\"resources.OrgUserGroups.fields.number\"\n linkedResource={RESOURCE_NAME_ORG_USER_GROUP}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n />\n <TextField\n source=\"name\"\n label=\"resources.OrgUserGroups.fields.name\"\n />\n <ReferenceField\n source=\"level1ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level1ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"level2ApprovalGroupId\"\n label=\"resources.OrgUserGroups.fields.level2ApprovalGroupId\"\n reference={RESOURCE_NAME_ORG_USER_GROUP}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceArrayField\n source=\"userIds\"\n label=\"resources.OrgUserGroups.fields.userIds\"\n reference={RESOURCE_NAME_USER}\n >\n <Datagrid optimized>\n <ResourceLinkedField\n source=\"fullName\"\n label=\"resources.users.fields.fullName\"\n linkedResource={RESOURCE_NAME_USER}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_USER}\n link=\"show\"\n />\n <EmailField\n source=\"email\"\n label=\"resources.users.fields.email\"\n />\n </Datagrid>\n </ReferenceArrayField>\n </Datagrid>\n </ReferenceArrayField>\n </Tab>\n </TabbedShowLayout>\n </DefaultShow>\n );\n};\n\nexport { OrgStructureShow };\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n ReferenceInput,\n AutocompleteInput,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { Typography } from \"@material-ui/core\";\nimport { RESOURCE_NAME_ORG_STRUCTURE_TYPES } from \"./constants\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../../lib/common\";\n\nexport const styles: Styles<Theme, any> = {\n number: { display: \"block\" },\n name: { display: \"block\" },\n description: { display: \"block\" },\n formClass: {\n width: \"75%\",\n },\n};\nconst useStyles = makeStyles(styles);\n\nconst OrgStructureTypesForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm\n variant=\"filled\"\n className={classes.formClass}\n warnWhenUnsavedChanges\n {...rest}\n >\n <SectionTitle label=\"resources.OrgStructureTypes.fieldGroups.OrgStructureTypesDetaills\" />\n <TextInput\n autoFocus\n source=\"number\"\n label=\"resources.OrgStructureTypes.fields.number\"\n helperText=\"resources.OrgStructureTypes.help.number\"\n formClassName={classes.number}\n validate={[required()]}\n fullWidth\n />\n\n <TextInput\n source=\"name\"\n label=\"resources.OrgStructureTypes.fields.name\"\n helperText=\"resources.OrgStructureTypes.help.name\"\n formClassName={classes.name}\n validate={[required()]}\n fullWidth\n />\n\n <RichTextInput\n source=\"description\"\n helperText=\"resources.OrgStructureTypes.help.description\"\n formClassName={classes.description}\n label=\"resources.OrgStructureTypes.fields.description\"\n />\n <ReferenceInput\n source=\"parentId\"\n label=\"resources.OrgStructureTypes.fields.parentId\"\n fullWidth\n reference={RESOURCE_NAME_ORG_STRUCTURE_TYPES}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n key=\"parentId\"\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.OrgStructureTypes.help.parentId\"\n resettable={true}\n allowEmpty={true}\n />\n </ReferenceInput>\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { OrgStructureTypesForm };\n","import { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../../lib/common\";\nimport { RESOURCE_NAME_ORG_STRUCTURE_TYPES } from \"./constants\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../../lib/modules/accounts/accounts/constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"number\", \"name\", \"description\"];\n\nconst OrgStructureTypesList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"number\"\n label=\"resources.OrgStructureTypes.fields.number\"\n />\n <TextField source=\"name\"\n label=\"resources.OrgStructureTypes.fields.name\"\n />\n <RichTextField source=\"description\"\n label=\"resources.OrgStructureTypes.fields.description\" />\n <ReferenceField source=\"parentId\"\n label=\"resources.OrgStructureTypes.fields.parentId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE_TYPES}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT} >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { OrgStructureTypesList };\n","import {\n PermissionOrgStructureTypes,\n RESOURCE_NAME_ORG_STRUCTURE_TYPES,\n} from \"./constants\";\nimport { OrgStructureTypesCreate } from \"./OrgStructureTypesCreate\";\nimport { OrgStructureTypesEdit } from \"./OrgStructureTypesEdit\";\nimport { OrgStructureTypesList } from \"./OrgStructureTypesList\";\nimport { OrgStructureTypesShow } from \"./OrgStructureTypesShow\";\n\nconst OrgStructureTypesPermissions = {\n menu: PermissionOrgStructureTypes.MENU_ORG_STRUCTURE_TYPE,\n list: PermissionOrgStructureTypes.LIST_ORG_STRUCTURE_TYPES,\n create: PermissionOrgStructureTypes.CREATE_ORG_STRUCTURE_TYPE,\n update: PermissionOrgStructureTypes.EDIT_ORG_STRUCTURE_TYPE,\n show: PermissionOrgStructureTypes.SHOW_ORG_STRUCTURE_TYPE,\n delete: PermissionOrgStructureTypes.DELETE_ORG_STRUCTURE_TYPE,\n};\n\nconst OrgStructureTypesResource = {\n name: RESOURCE_NAME_ORG_STRUCTURE_TYPES,\n list: OrgStructureTypesList,\n create: OrgStructureTypesCreate,\n edit: OrgStructureTypesEdit,\n show: OrgStructureTypesShow,\n options: {\n label: \"resources.OrgStructureTypes.name\",\n allowedPermissions: OrgStructureTypesPermissions,\n },\n};\n\nexport * from \"./constants\";\nexport { OrgStructureTypesPermissions, OrgStructureTypesResource };\n","import { CreateProps } from \"react-admin\";\nimport { DefaultCreate } from \"../../../../lib/components\";\nimport { OrgStructureTypesForm } from \"./OrgStructureTypesForm\";\n\nconst OrgStructureTypesCreate = (props: CreateProps) => {\n\n return (\n <DefaultCreate\n {...props}\n >\n <OrgStructureTypesForm />\n </DefaultCreate>\n );\n};\n\nexport { OrgStructureTypesCreate };\n","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../../lib/components\";\nimport { OrgStructureTypesForm } from \"./OrgStructureTypesForm\";\n\nconst OrgStructureTypesEdit = (props: EditProps) => {\n return (\n <DefaultEdit \n {...props}\n mutationMode=\"pessimistic\"\n >\n <OrgStructureTypesForm isEdit={true} {...props} />\n </DefaultEdit>\n );\n};\n\nexport { OrgStructureTypesEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n DateField,\n BooleanField,\n RichTextField,\n ReferenceField,\n} from \"react-admin\";\nimport { DefaultShow, UploadedFilesField } from \"../../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../../lib/core\";\nimport { RESOURCE_NAME_ORG_STRUCTURE_TYPES } from \"./constants\";\n\nconst OrgStructureTypesShow = (props: ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"number\" \n label=\"resources.OrgStructureTypes.fields.number\"\n />\n <TextField source=\"name\" \n label=\"resources.OrgStructureTypes.fields.name\"\n />\n <RichTextField source=\"description\" />\n <ReferenceField source=\"parentId\"\n label=\"resources.OrgStructureTypes.fields.parentId\"\n reference={RESOURCE_NAME_ORG_STRUCTURE_TYPES}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { OrgStructureTypesShow };\n","import { ReferenceInput, AutocompleteInput } from \"ra-ui-materialui\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\nimport { RESOURCE_NAME_ITEM } from \"../../datasetup/items\";\nimport { ORG_STRUCTURE_USER_GROUP_TYPE } from \"../../datasetup/org-structure\";\nimport { useForm } from \"react-final-form\";\nimport { useGetOne, Identifier, required } from \"react-admin\";\nimport { useEffect, useState } from \"react\";\n\nconst RequisitionItemInputField = (props) => {\n const {\n getSource,\n existingItemIds,\n setExistingItemIds,\n isEdit,\n ...rest\n } = props;\n const [currentItemId, setCurrentItemId] = useState<Identifier>();\n\n const { data: currentItem, loaded: currentItemLoaded } = useGetOne(\n RESOURCE_NAME_ITEM,\n currentItemId || \"\",\n {\n enabled: currentItemId ? true : false,\n }\n );\n\n useEffect(() => {\n if (currentItem && currentItemLoaded) {\n processItemId();\n }\n }, [currentItemLoaded, currentItem]);\n\n const form = useForm();\n\n const handleItemIdChanged = (itemId) => {\n setCurrentItemId(itemId);\n };\n\n const processItemId = () => {\n if (!currentItem) {\n return;\n }\n const isEdit = props?.isEdit || false;\n\n const requisitionDetails = form.getState()?.values?.requisitionDetails;\n const itemIds = requisitionDetails\n ?.map((record) => record?.itemId)\n ?.filter((itemId) => itemId && itemId !== \"\");\n\n if (itemIds && itemIds?.length) {\n setExistingItemIds(new Set(itemIds));\n }\n\n const currentItemId = currentItem?.id;\n const uomId = currentItem?.uomId;\n const size = currentItem?.size?.trim();\n const specifications = currentItem?.specifications?.trim();\n\n const newRequisitionDetails = requisitionDetails?.map((record, index) => {\n const recordItemId = record?.itemId;\n const isMatchingItemId = currentItemId === recordItemId;\n if (!record || !isMatchingItemId) {\n return record;\n } else {\n if (uomId && uomId.length) {\n record[\"uomId\"] = uomId;\n } else {\n delete record[\"uomId\"];\n }\n\n if (size && size.length) {\n record[\"size\"] = size;\n } else {\n delete record[\"size\"];\n }\n\n if (specifications && specifications.length) {\n record[\"specifications\"] = specifications;\n } else {\n delete record[\"specifications\"];\n }\n\n return record;\n }\n });\n form.change(\"requisitionDetails\", newRequisitionDetails);\n };\n\n if(isEdit && !existingItemIds){\n return null;\n }\n\n return (\n <ReferenceInput\n {...rest}\n source={getSource(\"itemId\")}\n reference={RESOURCE_NAME_ITEM}\n label=\"resources.requisitions.fields.itemId\"\n validate={[required()]}\n resettable\n filter={{\n //excludeIds: [...existingItemIds],\n orgStructureType: ORG_STRUCTURE_USER_GROUP_TYPE.REQUISITIONS,\n }}\n sort={{ field: \"number\", order: \"ASC\" }}\n perPage={MAX_RECORDS_PER_PAGE}\n onChange={handleItemIdChanged}\n \n //className={classes.itemId}\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.requisitions.help.itemId\"\n isRequired\n clearAlwaysVisible\n resettable\n suggestionLimit={10}\n allowEmpty={false}\n />\n </ReferenceInput>\n );\n};\n\nexport { RequisitionItemInputField };\n","import { useState } from \"react\";\nimport { useFormState } from 'react-final-form';\nimport {\n TextInput,\n required,\n BooleanInput,\n ReferenceInput,\n AutocompleteInput,\n ArrayInput,\n SimpleFormIterator,\n NumberInput,\n useTranslate,\n Identifier,\n FormDataConsumer,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\n\nimport { Box, Typography, useMediaQuery } from \"@material-ui/core\";\n\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport { RESOURCE_NAME_UOM } from \"../datasetup/unit-of-measure\";\n\nimport {\n AccordionField,\n MediaInputField,\n SectionTitleSubtitle,\n} from \"../../lib/components\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"../datasetup/business-functions/constants\";\nimport { CommentsAccordion, OwnerEntityTypes } from \"../comments\";\nimport { validations } from \"./components/validations\";\nimport { ItemDetailsInputAccordionField } from \"../../common\";\nimport { RequisitionItemInputField } from \"./components/RequisitionItemInputField\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n form: {\n display: \"flex\",\n flexDirection: \"row\",\n padding: 0,\n gap: 10,\n width: \"100%\",\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"column\",\n },\n \"& .MuiAccordionSummary-content\": {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n columnGap: 10,\n width: \"100%\",\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n alignSelf: \"flex-start\",\n marginTop: 25,\n },\n },\n \"& .MuiAccordionSummary-content >.ra-input-itemId\": {\n paddingRight: 15,\n },\n \"& .MuiAccordionSummary-expandIcon\": {\n transform: \"rotate(-90deg)\",\n alignSelf: \"center\",\n position: \"absolute\",\n left: -60,\n [theme.breakpoints.down(\"sm\")]: {\n alignSelf: \"flex-start\",\n left: -5,\n top: -10,\n },\n \"& .Mui-expanded\": {\n transform: \"rotate(1deg)\",\n },\n },\n \"& .MuiAccordionSummary-expandIcon.Mui-expanded\": {\n transform: \"rotate(1deg)\",\n },\n \"& .ql-editor\": {\n backgroundColor: \"#f1e3f4\",\n }\n },\n itemId: {\n width: 350,\n [theme.breakpoints.down(\"sm\")]: {},\n },\n code: { display: \"block\" },\n description: {\n display: \"block\",\n },\n activityContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"column\",\n },\n },\n\n businessFunctionId: {\n flexGrow: \"unset\",\n display: \"flex\",\n width: \"max-content\",\n },\n\n field1: {\n display: \"inline-block\",\n [theme.breakpoints.down(\"sm\")]: {\n display: \"block\",\n },\n },\n field2: {\n display: \"inline-block\",\n marginLeft: theme.spacing(5),\n [theme.breakpoints.down(\"sm\")]: {\n display: \"block\",\n marginLeft: 0,\n },\n },\n field3: {\n display: \"inline-block\",\n marginLeft: theme.spacing(5),\n [theme.breakpoints.down(\"sm\")]: {\n display: \"block\",\n marginLeft: 0,\n },\n },\n formIterator: { form: { display: \"flex\" } },\n remarksAccordion: { width: \"100%\" },\n requisitionDetailSection: {\n marginTop: 25,\n display: \"flex\",\n justifyContent: \"space-between\",\n flexDirection: \"row\",\n \"& div\": {\n paddingLeft: \"unset\",\n paddingBottom: \"unset\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n justifyContent: \"flex-start\",\n flexDirection: \"column\",\n rowGap: 15,\n },\n },\n quantity2: {\n width: \"max-content\",\n },\n itemsArrayContainer: {\n overflowX: \"auto\",\n whiteSpace: \"nowrap\",\n width: \"90vw\",\n \"& li\": {\n flexDirection: \"row\",\n [theme.breakpoints.down(\"sm\")]: { flexDirection: \"column\" },\n },\n },\n })\n);\n\nconst RequisitionForm = (props) => {\n const { isEdit, savedItemIds, ...rest } = props;\n const { initialValues } = useFormState();\n const classes = useStyles(rest);\n const theme = useTheme();\n const isSmall = useMediaQuery(theme.breakpoints.down(\"sm\"));\n const [existingItemIds, addExistingItemIds] = useState<Set<Identifier>>(\n new Set(savedItemIds || [])\n );\n\n const showRequisitionDetails = !isEdit\n ? true\n : initialValues?.requisitionDetails?.length > 0;\n\n return (\n <>\n <SectionTitle label=\"resources.requisitions.fieldGroups.requisition\" />\n <TextInput\n autoFocus\n source=\"code\"\n label=\"resources.requisitions.fields.code\"\n helperText=\"resources.requisitions.help.code\"\n formClassName={classes.code}\n validate={validations.code}\n />\n <RichTextInput\n source=\"description\"\n label=\"resources.requisitions.fields.description\"\n helperText=\"resources.requisitions.help.description\"\n className={classes.description}\n />\n <Box className={classes.activityContainer}>\n <ReferenceInput\n label=\"resources.requisitions.fields.businessFunction\"\n source=\"businessFunctionId\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n className={classes.businessFunctionId}\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.requisitions.help.businessFunction\"\n resettable={true}\n />\n </ReferenceInput>\n </Box>\n <TextInput\n source=\"field1\"\n label=\"resources.requisitions.fields.field1\"\n helperText=\"resources.requisitions.help.field1\"\n className={classes.field1}\n />\n\n <TextInput\n source=\"field2\"\n label=\"resources.requisitions.fields.field2\"\n helperText=\"resources.requisitions.help.field2\"\n className={classes.field2}\n />\n\n <TextInput\n source=\"field3\"\n label=\"resources.requisitions.fields.field3\"\n helperText=\"resources.requisitions.help.field3\"\n className={classes.field3}\n />\n\n <Box className={classes.requisitionDetailSection}>\n <SectionTitleSubtitle\n title=\"resources.requisitions.fieldGroups.requisitionDetails.title\"\n subTitle=\"resources.requisitions.fieldGroups.requisitionDetails.subTitle\"\n />\n <BooleanInput\n label=\"resources.requisitions.fields.showUnitPrice2\"\n source=\"showUnitPrice2\"\n />\n </Box>\n\n {showRequisitionDetails && (\n <Box>\n <ArrayInput\n source=\"requisitionDetails\"\n isRequired\n validate={[required()]}\n label={false}\n margin=\"dense\"\n >\n <SimpleFormIterator\n margin=\"dense\"\n variant=\"filled\"\n className={classes.itemsArrayContainer}\n >\n <FormDataConsumer>\n {({ getSource, formData, scopedFormData, ...rest }) => {\n if (!getSource) {\n return <div />;\n }\n /* const currentIndex = isEdit\n ? scopedFormData?.sortOrder - 1\n : (formData?.requisitionDetails?.length ?? 1) - 1; */\n const showUnitPrice2 = formData?.showUnitPrice2;\n return (\n <ItemDetailsInputAccordionField\n record={scopedFormData}\n summaryClassName={classes.form}\n >\n <RequisitionItemInputField\n getSource={getSource}\n existingItemIds={existingItemIds}\n setExistingItemIds={addExistingItemIds}\n isEdit={isEdit}\n {...rest}\n />\n\n <NumberInput\n {...rest}\n source={getSource(\"quantity\")}\n label=\"resources.requisitions.fields.quantity\"\n helperText=\"resources.requisitions.help.quantity\"\n validate={[required()]}\n fullWidth={isSmall}\n />\n\n <ReferenceInput\n {...rest}\n source={getSource(\"uomId\")}\n label=\"resources.requisitions.fields.uomId\"\n reference={RESOURCE_NAME_UOM}\n validate={[required()]}\n >\n <AutocompleteInput\n helperText=\"resources.requisitions.help.uomId\"\n e\n optionText=\"displayLabel\"\n isRequired\n fullWidth={isSmall}\n />\n </ReferenceInput>\n {showUnitPrice2 && (\n <NumberInput\n {...rest}\n source={getSource(\"quantity2\")}\n label=\"resources.requisitions.fields.quantity2\"\n helperText=\"resources.requisitions.help.quantity2\"\n className={classes.quantity2}\n fullWidth={isSmall}\n />\n )}\n {showUnitPrice2 && (\n <ReferenceInput\n {...rest}\n source={getSource(\"uom2Id\")}\n reference={RESOURCE_NAME_UOM}\n label=\"resources.requisitions.fields.uom2Id\"\n className={classes.quantity2}\n >\n <AutocompleteInput\n helperText=\"resources.requisitions.help.uom2Id\"\n optionText=\"displayLabel\"\n fullWidth={isSmall}\n />\n </ReferenceInput>\n )}\n <TextInput\n {...rest}\n source={getSource(\"make\")}\n label=\"resources.requisitions.fields.make\"\n helperText=\"resources.requisitions.help.make\"\n fullWidth={isSmall}\n />\n\n <TextInput\n {...rest}\n source={getSource(\"size\")}\n label=\"resources.requisitions.fields.size\"\n helperText=\"resources.requisitions.help.size\"\n fullWidth={isSmall}\n />\n <RichTextInput\n {...rest}\n source={getSource(\"specifications\")}\n label=\"resources.requisitions.fields.specifications\"\n helperText=\"resources.requisitions.help.specifications\"\n fullWidth={isSmall}\n />\n\n <TextInput\n {...rest}\n source={getSource(\"comments\")}\n label=\"resources.requisitions.fields.comments\"\n helperText=\"resources.requisitions.help.comments\"\n fullWidth={isSmall}\n />\n </ItemDetailsInputAccordionField>\n );\n }}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n </Box>\n )}\n\n <AccordionField\n headerlabel=\"resources.requisitions.sections.remarks.input.title\"\n headerTooltip=\"resources.requisitions.sections.remarks.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <RichTextInput\n source=\"remarks\"\n helperText=\"resources.requisitions.help.remarks\"\n label={false}\n />\n </AccordionField>\n <AccordionField\n headerlabel=\"resources.requisitions.sections.fileUpload.input.title\"\n headerTooltip=\"resources.requisitions.sections.fileUpload.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <MediaInputField showUploadedFiles={isEdit} />\n </Box>\n </AccordionField>\n\n {isEdit && (\n <CommentsAccordion\n ownerEntityType={OwnerEntityTypes.REQUISITION}\n ownerEntityId={rest?.id}\n isViewOnly={false}\n />\n )}\n </>\n );\n};\n\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return <Typography variant=\"h6\">{translate(label)}</Typography>;\n};\n\nexport { RequisitionForm };\n","import { Theme, useMediaQuery } from \"@material-ui/core\";\nimport {\n Filter,\n FilterProps,\n BooleanInput,\n SelectArrayInput,\n SelectInput,\n} from \"react-admin\";\nimport { BusinessFunctionsListFilter, ItemsListFilter, ProcureOwnerUserListFilter, PROCURE_APPROVAL_STATUS_CHOICES, PROC_ENTITY_RECORD_STATUS_CHOICES } from \"../../../common\";\nimport { IdFilter, SearchFilter } from \"../../../lib/common\";\n\nconst RequisitionListFilters = (props: Omit<FilterProps, \"children\">) => {\n const isSmall = useMediaQuery<Theme>((theme) => theme.breakpoints.down(\"sm\"));\n\n return (\n <Filter {...props}>\n\n {isSmall && <SearchFilter alwaysOn />}\n <IdFilter label=\"components.controls.filters.idFilter.label\" source=\"id\" key=\"id\" />\n {isSmall && (\n <SelectArrayInput \n source=\"status\"\n label=\"common.fields.status\" \n choices={PROC_ENTITY_RECORD_STATUS_CHOICES} \n />\n )}\n\n {isSmall && (\n <SelectInput source=\"procureApprovalStatus\"\n label=\"common.fields.approvalStatus\"\n choices={PROCURE_APPROVAL_STATUS_CHOICES}\n allowEmpty={false}\n resettable={true}\n key=\"approvalStatus\" />\n )}\n <BusinessFunctionsListFilter source=\"businessFunctionId\"/>\n <ItemsListFilter source=\"itemId\"/>\n {isSmall && <BooleanInput source=\"isOpen\" />}\n {isSmall && <BooleanInput source=\"needsUserApproval\" />}\n {isSmall && <BooleanInput source=\"canPerformAction\" />}\n <ProcureOwnerUserListFilter source=\"procureOwnerUserId\" label=\"common.fields.procureOwnerUserId\"/>\n </Filter>\n );\n};\n\nexport { RequisitionListFilters };\n","import IsOpenIcon from '@material-ui/icons/NoEncryptionTwoTone';\nimport { FilterList, FilterListItem, FilterLiveSearch } from \"react-admin\";\nimport AccessTimeIcon from \"@material-ui/icons/AccessTime\";\nimport ApproveIcon from \"@material-ui/icons/ThumbUpAltTwoTone\";\nimport ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { createStyles, makeStyles, Card, CardContent } from \"@material-ui/core\";\nimport {\n FixedDateRangeFilterList,\n} from \"../../../lib/common\";\nimport {\n format,\n endOfYesterday,\n startOfWeek,\n startOfMonth,\n endOfMonth,\n subMonths,\n} from \"date-fns\";\nimport { ProcEntityRecordStatusFilterList, ProcureApprovalStatusFilterList } from '../../../common';\n\nconst RequisitionListSideFilters = () => {\n const cardClasses = useCardStyles();\n\n return (\n <Card classes={cardClasses}>\n <CardContent>\n <FilterLiveSearch />\n <FixedDateRangeFilterList\n label=\"resources.requisitions.fields.updated_since_gte\"\n icon={<AccessTimeIcon />}\n gteSource=\"updated_since_gte\"\n lteSource=\"updated_since_lte\"\n dateRangeList={updatedSinceDatesList}\n />\n <FilterList\n label=\"resources.requisitions.fields.isOpen\"\n icon={<IsOpenIcon />}\n >\n <FilterListItem\n label=\"ra.boolean.true\"\n value={{ isOpen: true }}\n />\n <FilterListItem\n label=\"ra.boolean.false\"\n value={{ isOpen: false }}\n />\n </FilterList>\n <FilterList\n label=\"resources.requisitions.fields.needsUserApproval\"\n icon={<ApproveIcon />}\n >\n <FilterListItem\n label=\"ra.boolean.true\"\n value={{ needsUserApproval: true }}\n />\n <FilterListItem\n label=\"ra.boolean.false\"\n value={{ needsUserApproval: false }}\n />\n </FilterList>\n <FilterList\n label=\"resources.requisitions.fields.canPerformAction\"\n icon={<ContactSupportIcon />}\n >\n <FilterListItem\n label=\"ra.boolean.true\"\n value={{ canPerformAction: true }}\n />\n <FilterListItem\n label=\"ra.boolean.false\"\n value={{ canPerformAction: false }}\n />\n </FilterList> \n <ProcEntityRecordStatusFilterList />\n <ProcureApprovalStatusFilterList />\n </CardContent>\n </Card>\n );\n};\n\nconst useCardStyles = makeStyles((theme) =>\n createStyles({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n order: -1,\n maxWidth: 210,\n marginRight: \"1em\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n })\n);\n\nconst DATE_FORMAT_DAY = \"yyyy-MM-dd\";\nconst updatedSinceDatesList = [\n {\n label: \"resources.requisitions.filters.updatedSince.today\",\n gte: format(endOfYesterday(), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.requisitions.filters.updatedSince.thisWeek\",\n gte: format(startOfWeek(new Date()), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.requisitions.filters.updatedSince.thisMonth\",\n lte: undefined,\n gte: format(startOfMonth(new Date()), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.requisitions.filters.updatedSince.lastMonth\",\n lte: format(endOfMonth(subMonths(new Date(), 1)), DATE_FORMAT_DAY),\n gte: format(subMonths(startOfMonth(new Date()), 1), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.requisitions.filters.updatedSince.earlier\",\n lte: format(endOfMonth(subMonths(new Date(), 2)), DATE_FORMAT_DAY),\n gte: undefined,\n },\n];\n\nexport { RequisitionListSideFilters };\n","import { ReactElement, useMemo } from \"react\";\n\nimport {\n DefaultCrudListRowActions,\n ListRowActions,\n ListRowActionsProps,\n RedirectListRowAction,\n} from \"../../../lib/components\";\nimport { Record } from \"react-admin\";\nimport { enquiryResource, RESOURCE_NAME_ENQUIRY } from \"../../enquiries\";\nimport { ProcureApprovalStatus, ProcEntityRecordStatus } from \"../../../common\";\nimport { ApprovalListRowActionButtons } from \"../../../common\";\nimport { PermissionRequisitions } from \"..\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\n\nconst RequisitionListRowActionButtons = (props: ListRowActionsProps) => {\n const { hasOwnOrAccountAccess, permissionsLoaded } = usePermissionsCheck();\n\n const overriddenListRowActions: Array<ReactElement> = useMemo(() => {\n const record: Record | undefined = props?.record;\n const keyPrefix = record?.id;\n\n const isOpen = record?.isOpen;\n\n const hasShowRequisitionAccess = permissionsLoaded && hasOwnOrAccountAccess(\n PermissionRequisitions.SHOW_ANY_REQUISITION,\n PermissionRequisitions.SHOW_OWN_REQUISITION,\n record?.procureAccountId,\n record?.procureOwnerUserId\n );\n\n const hasEditRequisitionAccess = permissionsLoaded && hasOwnOrAccountAccess(\n PermissionRequisitions.EDIT_OWN_REQUISITION,\n PermissionRequisitions.EDIT_ANY_REQUISITION,\n record?.procureAccountId,\n record?.procureOwnerUserId\n );\n\n const hasDeleteRequisitionAccess = permissionsLoaded && hasOwnOrAccountAccess(\n PermissionRequisitions.DELETE_OWN_REQUISITION,\n PermissionRequisitions.DELETE_ANY_REQUISITION,\n record?.procureAccountId,\n record?.procureOwnerUserId\n );\n\n const status = record?.procureStatus;\n const procureApprovalStatus = record?.procureApprovalStatus;\n const canPerformCreateEnquiryAction = record?.canPerformAction;\n\n const isStatusWaitingDraft = status === ProcEntityRecordStatus.DRAFT;\n const isStatusWaitingForApproval = status === ProcEntityRecordStatus.WAITING_FOR_APPROVAL;\n const isStatusApproved = status === ProcEntityRecordStatus.APPROVED;\n const isStatusInProgress = status === ProcEntityRecordStatus.IN_PROGRESS;\n const isStatusRejected = status === ProcEntityRecordStatus.REJECTED;\n const isStatusOnHold = status === ProcEntityRecordStatus.ON_HOLD;\n\n const isRecordStatusModifiable = isStatusWaitingDraft || isStatusWaitingForApproval || isStatusApproved || isStatusRejected || isStatusOnHold;\n\n const isApprovalStatusApproved =\n procureApprovalStatus === ProcureApprovalStatus.APPROVED;\n\n const shouldDisplayEditAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow = isStatusWaitingDraft && hasEditRequisitionAccess;\n\n return Promise.resolve(shouldShow);\n };\n\n const shouldDisplayDeleteAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldShow = isStatusWaitingDraft && hasDeleteRequisitionAccess;\n\n return Promise.resolve(shouldShow);\n };\n\n const calculateCreateEnquiryActionRedirectPath = (record?: Record) => {\n const createEnquiryPath = record\n ? `${RESOURCE_NAME_ENQUIRY}/create?requisitionId=${record.id}`\n : \"\";\n\n return createEnquiryPath;\n };\n\n const shouldDisplayCreateEnquiryAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldAllowCreateEnquiryAction =\n isOpen && canPerformCreateEnquiryAction && (isStatusApproved || isStatusInProgress) && isApprovalStatusApproved;\n\n return Promise.resolve(shouldAllowCreateEnquiryAction);\n };\n\n const listRowActions: Array<ReactElement> = [\n\n <DefaultCrudListRowActions\n key={`defaultCrudListRowActions-${keyPrefix}`}\n shouldDisplayEdit={shouldDisplayEditAction}\n shouldDisplayDelete={shouldDisplayDeleteAction}\n hasEdit={hasEditRequisitionAccess}\n hasShow={hasShowRequisitionAccess}\n {...props}\n />,\n\n <ApprovalListRowActionButtons {...props} />,\n\n <RedirectListRowAction\n key={`create.requisition.action-${keyPrefix}`}\n tooltipTitle=\"resources.requisitions.actions.createEnquiry\"\n icon={<enquiryResource.icon />}\n calculateRedirectPath={calculateCreateEnquiryActionRedirectPath}\n shouldDisplay={shouldDisplayCreateEnquiryAction}\n permissionName={enquiryResource?.options?.allowedPermissions?.create}\n {...props}\n />,\n ];\n\n return listRowActions;\n }, [hasOwnOrAccountAccess, permissionsLoaded, props]);\n\n return (\n <ListRowActions\n overriddenListRowActions={overriddenListRowActions}\n {...props}\n />\n );\n};\n\nexport { RequisitionListRowActionButtons };\n","import { ReactElement, useEffect } from \"react\";\nimport {\n TextField,\n RichTextField,\n ListProps,\n ReferenceField,\n DateField,\n BooleanField,\n setSidebarVisibility,\n} from \"react-admin\";\nimport { useDispatch } from \"react-redux\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n} from \"../../lib/components\";\nimport { DEFAULT_PER_PAGE } from \"../../lib/common\";\nimport { RequisitionListFilters } from \"./components/RequisitionListFilters\";\nimport { RequisitionListSideFilters } from \"./components/RequisitionListSideFilters\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"../datasetup/business-functions\";\nimport { RequisitionListRowActionButtons } from \"./components/RequisitionListRowActionButtons\";\nimport { ApprovalStatusField, getProcEntityRecordStatusRowStyle, ProcureAccountField, UserNameEmailField, RecordStatusField } from \"../../common\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../lib/core\";\n\nconst defaultColumns = [\"code\", \"businessFunctionId\", \"procureStatus\", \"procureApprovalStatus\"];\n\nconst RequisitionList = (props: ListProps): ReactElement => {\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n aside={<RequisitionListSideFilters />}\n filters={<RequisitionListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid rowStyle={getProcEntityRecordStatusRowStyle}>\n <TextField source=\"code\" />\n <RecordStatusField label=\"common.fields.status\" />\n <ApprovalStatusField label=\"common.fields.approvalStatus\" />\n\n <ReferenceField\n source=\"businessFunctionId\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <RichTextField source=\"description\" /> \n <ProcureAccountField label=\"common.fields.procureAccountId\"/>\n <UserNameEmailField source=\"procureOwnerUserId\" label=\"common.fields.procureOwnerUserId\"/>\n <BooleanField source=\"isOpen\" />\n <BooleanField source=\"canPerformAction\" />\n <BooleanField source=\"canLevel1Approve\" />\n <BooleanField source=\"canLevel2Approve\" />\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <RequisitionListRowActionButtons />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { RequisitionList };\n","import { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n setSidebarVisibility,\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n Datagrid,\n NumberField,\n DateField,\n Labeled,\n ResourceContextProvider,\n List,\n useRecordContext,\n RichTextField,\n} from \"react-admin\";\nimport {\n AccordionField,\n DefaultShow,\n SectionTitleSubtitle,\n TruncatedTextField,\n UploadedFilesField,\n} from \"../../lib/components\";\nimport { RESOURCE_NAME_UOM } from \"../datasetup/unit-of-measure\";\n\nimport { RESOURCE_NAME_ITEM } from \"../datasetup/items/items/constants\";\nimport { RESOURCE_NAME_REQUISITION_DETAILS } from \"./constants\";\nimport { Box, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport { DEFAULT_PER_PAGE } from \"../../lib/common\";\nimport { CommentsAccordion, OwnerEntityTypes } from \"../comments\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"../datasetup/business-functions/constants\";\nimport {\n ApprovalStatusField,\n isMatchingAccount,\n ProcureAccountField,\n UserNameEmailField,\n RecordStatusField,\n} from \"../../common\";\nimport { SingleItemShowContainer } from \"../datasetup/items/items/components/SingleItemShowContainer\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n itemsGrid: {\n \"& div:nth-of-type(1) .MuiPaper-root\": {\n width: \"95vw\",\n whiteSpace: \"nowrap\",\n overflowX: \"auto\",\n },\n },\n })\n);\n\nconst RequisitionShow = (props: ShowProps) => {\n const requisitionId = props?.id;\n const classes = useStyles();\n\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n const ShowDetail = (props) => {\n const record = useRecordContext(props);\n const showUnitPrice2 = record?.showUnitPrice2;\n const isProcureAccount = isMatchingAccount(record?.procureAccountId);\n const linkType = isProcureAccount ? \"show\" : false;\n\n return (\n <SimpleShowLayout {...props}>\n <SectionTitleSubtitle\n title=\"resources.requisitions.sections.header.show.title\"\n subTitle=\"resources.requisitions.sections.header.show.subTitle\"\n />\n <Box\n width=\"100%\"\n pl={2}\n mb={2}\n display=\"grid\"\n gridTemplateColumns=\"1fr 1fr\"\n >\n <Labeled id=\"code\" source=\"code\">\n <TextField source=\"code\" />\n </Labeled>\n <Labeled id=\"businessFunctionId\" source=\"businessFunctionId\">\n <ReferenceField\n source=\"businessFunctionId\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n </Labeled>\n </Box>\n <Box\n width=\"100%\"\n pl={2}\n mb={2}\n display=\"grid\"\n gridTemplateColumns=\"1fr\"\n >\n <Labeled id=\"description\" source=\"description\">\n <RichTextField source=\"description\" />\n </Labeled>\n </Box>\n <Box\n width=\"100%\"\n pl={2}\n mb={2}\n display=\"grid\"\n gridTemplateColumns=\"1fr 1fr\"\n >\n <RecordStatusField label=\"common.fields.status\" useLabel={true} />\n <ApprovalStatusField\n label=\"common.fields.approvalStatus\"\n useLabel={true}\n />\n <ProcureAccountField\n label=\"common.fields.procureAccountId\"\n useLabel={true}\n />\n <UserNameEmailField\n source=\"procureOwnerUserId\"\n label=\"common.fields.procureOwnerUserId\"\n useLabel={true}\n />\n\n <Labeled id=\"createdAt\" source=\"createdAt\">\n <DateField source=\"createdAt\" />\n </Labeled>\n <Labeled id=\"updatedAt\" source=\"updatedAt\">\n <DateField source=\"updatedAt\" />\n </Labeled>\n </Box>\n <SectionTitleSubtitle\n title=\"resources.requisitions.sections.items.show.title\"\n subTitle=\"resources.requisitions.sections.items.show.subTitle\"\n />\n <ResourceContextProvider value={RESOURCE_NAME_REQUISITION_DETAILS}>\n <List\n basePath={`/${RESOURCE_NAME_REQUISITION_DETAILS}`}\n filter={{ requisitionId }}\n perPage={DEFAULT_PER_PAGE}\n sort={{ field: \"sortOrder\", order: \"ASC\" }}\n title={\"Requisition Details\"}\n actions={false}\n syncWithLocation={false}\n bulkActionButtons={false}\n className={classes.itemsGrid}\n >\n <Datagrid\n optimized\n expand={\n <SingleItemShowContainer\n procureAccountId={record?.procureAccountId}\n {...props}\n />\n }\n >\n <TextField\n source=\"sortOrder\"\n label=\"resources.requisitionDetails.fields.serialNum\"\n />\n <ReferenceField\n source=\"itemId\"\n label=\"resources.requisitionDetails.fields.number\"\n reference={RESOURCE_NAME_ITEM}\n linkType={linkType}\n >\n <TextField source=\"number\" />\n </ReferenceField>\n <ReferenceField\n source=\"itemId\"\n label=\"resources.requisitionDetails.fields.itemId\"\n reference={RESOURCE_NAME_ITEM}\n linkType={linkType}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <NumberField\n source=\"quantity\"\n label=\"resources.requisitionDetails.fields.quantity\"\n />\n <ReferenceField\n source=\"uomId\"\n reference={RESOURCE_NAME_UOM}\n label=\"resources.requisitionDetails.fields.uomId\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n {showUnitPrice2 && (\n <NumberField\n source=\"quantity2\"\n label=\"resources.requisitionDetails.fields.quantity2\"\n />\n )}\n {showUnitPrice2 && (\n <ReferenceField\n source=\"uom2Id\"\n reference={RESOURCE_NAME_UOM}\n label=\"resources.requisitionDetails.fields.uom2Id\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n <TruncatedTextField\n source=\"make\"\n label=\"resources.requisitionDetails.fields.make\"\n truncateLength={50}\n />\n <TruncatedTextField\n source=\"size\"\n label=\"resources.requisitionDetails.fields.size\"\n truncateLength={25}\n />\n <RichTextField\n source=\"specifications\"\n label=\"resources.requisitionDetails.fields.specifications\"\n />\n <TruncatedTextField\n source=\"comments\"\n label=\"resources.requisitionDetails.fields.comments\"\n truncateLength={100}\n />\n </Datagrid>\n </List>\n </ResourceContextProvider>\n <Box py={2}>\n <AccordionField\n headerlabel=\"resources.requisitions.sections.remarks.field.title\"\n headerTooltip=\"resources.requisitions.sections.remarks.field.tooltip\"\n >\n <RichTextField source=\"remarks\" />\n </AccordionField>\n <AccordionField\n headerlabel=\"resources.requisitions.sections.fileUpload.input.title\"\n headerTooltip=\"resources.requisitions.sections.fileUpload.input.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <UploadedFilesField canDelete={false} />\n </Box>\n </AccordionField>\n </Box>\n\n {props?.id && (\n <Box py={2}>\n <CommentsAccordion\n ownerEntityType={OwnerEntityTypes.REQUISITION}\n ownerEntityId={props.id}\n isViewOnly={false}\n />\n </Box>\n )}\n </SimpleShowLayout>\n );\n };\n return (\n <DefaultShow {...props}>\n <ShowDetail />\n </DefaultShow>\n );\n};\n\nexport { RequisitionShow };\n","import EqualizerIcon from \"@material-ui/icons/Equalizer\";\nimport { PermissionRequisitions, RESOURCE_NAME_REQUISITION } from \"./constants\";\nimport { RequisitionCreate } from \"./RequisitionCreate\";\nimport { RequisitionEdit } from \"./RequisitionEdit\";\nimport { RequisitionList } from \"./RequisitionList\";\nimport { RequisitionShow } from \"./RequisitionShow\";\n\nconst requisitionPermissions = {\n menu: PermissionRequisitions.REQUISITION_MENU,\n list: PermissionRequisitions.LIST_REQUISITIONS,\n create: PermissionRequisitions.CREATE_REQUISITION,\n update: [\n PermissionRequisitions.EDIT_OWN_REQUISITION,\n PermissionRequisitions.EDIT_ANY_REQUISITION,\n ],\n show: [\n PermissionRequisitions.SHOW_OWN_REQUISITION,\n PermissionRequisitions.SHOW_ANY_REQUISITION,\n ],\n delete: [\n PermissionRequisitions.DELETE_OWN_REQUISITION,\n PermissionRequisitions.DELETE_ANY_REQUISITION,\n ],\n import: PermissionRequisitions.IMPORT_REQUISITIONS,\n};\n\nconst requisitionResource = {\n name: RESOURCE_NAME_REQUISITION,\n list: RequisitionList,\n create: RequisitionCreate,\n edit: RequisitionEdit,\n show: RequisitionShow,\n icon: EqualizerIcon,\n options: {\n label: \"resources.requisitions.name\",\n allowedPermissions: requisitionPermissions,\n },\n};\n\nexport * from \"./constants\";\nexport { requisitionPermissions, requisitionResource };\n","import {\n CreateProps, SimpleForm,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../lib/components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../lib/modules\";\nimport { RequisitionForm } from \"./RequisitionForm\";\n\nconst RequisitionCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'requisitions',\n }]; \n return (\n <DefaultCreate \n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <SimpleForm warnWhenUnsavedChanges>\n < RequisitionForm {...props}/>\n </SimpleForm>\n </DefaultCreate>\n );\n };\n \n export { RequisitionCreate };","import { useEffect, useMemo } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n setSidebarVisibility,\n EditProps,\n SimpleForm,\n useGetList,\n Record,\n useNotify,\n useRefresh,\n useRedirect,\n} from \"react-admin\";\nimport { DefaultEdit } from \"../../lib/components\";\nimport { RequisitionForm } from \"./RequisitionForm\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../lib/modules\";\nimport { RESOURCE_NAME_REQUISITION_DETAILS } from \"./constants\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../lib/common\";\nimport { ORG_STRUCTURE_USER_GROUP_TYPE } from \"../datasetup/org-structure\";\n\nconst RequisitionEdit = (props: EditProps) => {\n const dispatch = useDispatch();\n const notify = useNotify();\n const refresh = useRefresh();\n const redirect = useRedirect();\n const { data: allRequisitionDetails, ids: allRequisitionDetailIds } =\n useGetList(\n RESOURCE_NAME_REQUISITION_DETAILS,\n { page: 1, perPage: MAX_RECORDS_PER_PAGE },\n { field: \"sortOrder\", order: \"ASC\" },\n {\n requisitionId: props?.id,\n orgStructureType: ORG_STRUCTURE_USER_GROUP_TYPE.REQUISITIONS,\n }\n );\n\n const onSuccess = () => {\n notify(\"resources.requisitions.messages.edited\", { type: \"success\" });\n refresh(true);\n redirect(`/requisitions`);\n };\n\n const onFailure = (error) => {\n if (error.code === 123) {\n notify(\"Could not save changes: concurrent edition in progress\", {\n type: \"error\",\n });\n } else {\n const errorMessage = `An error occured and your changes were not saved. \\n ${\n error?.message || \"ra.notification.http_error\"\n }`;\n notify(errorMessage, { type: \"error\", multiLine: true });\n }\n //redirect(\"list\", props.basePath);\n };\n\n const { requisitionDetails, savedItemIds } = useMemo(() => {\n const requisitionDetails: Array<Record> = [];\n const savedItemIds: Array<string> = [];\n\n for (let index = 0; index < allRequisitionDetailIds.length; index++) {\n const requisitionDetailId = allRequisitionDetailIds[index];\n const requisition = allRequisitionDetails[requisitionDetailId];\n const itemId: string = requisition?.itemId;\n if (itemId) {\n savedItemIds.push(itemId);\n }\n requisitionDetails.push(requisition);\n }\n return { requisitionDetails, savedItemIds };\n }, [allRequisitionDetailIds, allRequisitionDetails]);\n\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"requisitions\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n mutationMode=\"pessimistic\"\n onSuccess={onSuccess}\n onFailure={onFailure}\n >\n <SimpleForm\n warnWhenUnsavedChanges\n initialValues={{ requisitionDetails: requisitionDetails }}\n >\n <RequisitionForm {...props} isEdit={true} savedItemIds={savedItemIds}/>\n </SimpleForm>\n </DefaultEdit>\n );\n};\n\nexport { RequisitionEdit };\n","import {\n SimpleShowLayout,\n ReferenceField,\n TextField,\n Labeled,\n usePermissions,\n} from \"react-admin\";\nimport { makeStyles, createStyles } from \"@material-ui/core\";\nimport { AccordionField, ResourceLinkedField } from \"../../../lib/components\";\nimport { hasAccess } from \"../../../lib/core\";\nimport {\n businessFunctionPermissions,\n RESOURCE_NAME_BUSINESS_FUNCTIONS,\n} from \"../../datasetup/business-functions\";\nimport { RESOURCE_NAME_REQUISITION } from \"../../requisitions\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n layout: {\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gridGap: 25,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n })\n);\n\nconst RequisitionSummaryContainer = () => {\n const classes = useStyles();\n const { permissions } = usePermissions();\n const hasBusinessFunctionListAccess = hasAccess(\n permissions,\n businessFunctionPermissions.list\n );\n\n return (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.summary.title\"\n headerTooltip=\"resources.enquiries.sections.summary.tooltip\"\n >\n <ReferenceField\n label=\"resources.enquiries.fields.requisitionId\"\n source=\"requisitionId\"\n reference={RESOURCE_NAME_REQUISITION}\n link={false}\n fullWidth={true}\n >\n <SimpleShowLayout className={classes.layout}>\n <ResourceLinkedField\n label=\"resources.enquiries.fields.code\"\n source=\"code\"\n linkedResource={RESOURCE_NAME_REQUISITION}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_REQUISITION}\n link=\"show\"\n />\n\n {hasBusinessFunctionListAccess && (\n <Labeled id=\"businessFunctionId\" source=\"businessFunctionId\">\n <ReferenceField\n source=\"businessFunctionId\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n </Labeled>\n )}\n\n <TextField\n label=\"resources.enquiries.fields.field1\"\n source=\"field1\"\n />\n <TextField\n label=\"resources.enquiries.fields.field2\"\n source=\"field2\"\n />\n <TextField\n label=\"resources.enquiries.fields.field3\"\n source=\"field3\"\n />\n </SimpleShowLayout>\n </ReferenceField>\n </AccordionField>\n );\n};\n\nexport { RequisitionSummaryContainer };\n","import { Box, createStyles, makeStyles } from \"@material-ui/core\";\nimport {\n Loading,\n ReferenceField,\n TextField,\n NumberField,\n useRecordContext,\n RichTextField,\n Labeled,\n ReferenceManyField,\n Datagrid,\n ArrayField,\n usePermissions,\n} from \"react-admin\";\nimport {\n RESOURCE_NAME_ENQUIRY_DETAILS,\n RESOURCE_NAME_ENQUIRY_VENDORS,\n} from \"../constants\";\nimport {\n AccordionField,\n DateCountdownField,\n SectionTitleSubtitle,\n TruncatedTextField,\n UploadedFilesField,\n} from \"../../../lib/components\";\nimport { RESOURCE_NAME_ITEM } from \"../../datasetup/items\";\nimport { RESOURCE_NAME_UOM } from \"../../datasetup/unit-of-measure\";\nimport { RESOURCE_NAME_VENDOR } from \"../../datasetup/vendors\";\nimport { RequisitionSummaryContainer } from \"./RequisitionSummaryContainer\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\nimport { COMMON_DATE_TIME_FORMAT, hasAccess } from \"../../../lib/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\nimport { requisitionPermissions } from \"../../requisitions\";\nimport {\n ApprovalStatusField,\n isMatchingAccount,\n ProcureAccountField,\n UserNameEmailField,\n RecordStatusField,\n} from \"../../../common\";\nimport { CommentsAccordion, OwnerEntityTypes } from \"../../comments\";\nimport { SingleItemShowContainer } from \"../../datasetup/items/items\";\nimport { SingleVendorShowContainer } from \"../../datasetup/vendors/components\";\nimport { DEFAULT_PER_PAGE } from \"../../../lib/common\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n layout: {\n width: \"100%\",\n display: \"grid\",\n marginLeft: 15,\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gridGap: 25,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n itemsGrid: {\n width: \"90vw\",\n whiteSpace: \"nowrap\",\n overflowX: \"auto\",\n },\n })\n);\n\nconst EnquiryShowContainer = (props) => {\n const classes = useStyles();\n const record = useRecordContext();\n const { loading: permissionsLoading, permissions } = usePermissions();\n\n if (!record || permissionsLoading) return <Loading />;\n\n const isProcureAccount = isMatchingAccount(record?.procureAccountId);\n const hasRequisitionShowAccess = hasAccess(\n permissions,\n requisitionPermissions.show\n );\n\n return (\n <>\n {isProcureAccount && hasRequisitionShowAccess && (\n <RequisitionSummaryContainer />\n )}\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.enquiry.field.title\"\n subTitle=\"resources.enquiries.sections.enquiry.field.subTitle\"\n />\n <Box className={classes.layout}>\n <Labeled id=\"code\" source=\"code\">\n <TextField source=\"code\" />\n </Labeled>\n\n <Labeled id=\"currencyId\" source=\"currencyId\">\n <ReferenceField\n label=\"resources.enquiries.fields.currencyId\"\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n link=\"show\"\n fullWidth={true}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n\n {isProcureAccount && (\n <RecordStatusField label=\"common.fields.status\" useLabel={true} />\n )}\n\n {isProcureAccount && (\n <ApprovalStatusField\n label=\"common.fields.approvalStatus\"\n useLabel={true}\n />\n )}\n\n {!isProcureAccount && (\n <ProcureAccountField\n label=\"resources.enquiries.fields.customerName\"\n useLabel={true}\n />\n )}\n\n {!isProcureAccount && (\n <UserNameEmailField\n source=\"procureOwnerUserId\"\n label=\"resources.enquiries.fields.customerContact\"\n useLabel={true}\n />\n )}\n\n <Labeled\n id=\"bidStartDate\"\n source=\"bidStartDate\"\n label=\"resources.enquiries.fields.bidStartDate\"\n >\n <DateCountdownField\n source=\"bidStartDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n </Labeled>\n\n <Labeled\n id=\"bidEndDate\"\n source=\"bidEndDate\"\n label=\"resources.enquiries.fields.bidEndDate\"\n >\n <DateCountdownField\n source=\"bidEndDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n </Labeled>\n <Labeled\n id=\"preferredDeliveryDate\"\n source=\"preferredDeliveryDate\"\n label=\"resources.enquiries.fields.preferredDeliveryDate\"\n >\n <DateCountdownField\n source=\"preferredDeliveryDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n </Labeled>\n\n {isProcureAccount && (\n <ProcureAccountField\n label=\"common.fields.procureAccountId\"\n useLabel={true}\n />\n )}\n\n {isProcureAccount && (\n <UserNameEmailField\n source=\"procureOwnerUserId\"\n label=\"common.fields.procureOwnerUserId\"\n useLabel={true}\n />\n )}\n </Box>\n\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.items.field.title\"\n subTitle=\"resources.enquiries.sections.items.field.subTitle\"\n />\n <Box className={classes.itemsGrid}>\n <ReferenceManyField\n addLabel={false}\n reference={RESOURCE_NAME_ENQUIRY_DETAILS}\n target=\"enquiryId\"\n perPage={DEFAULT_PER_PAGE}\n sort={{ field: \"sortOrder\", order: \"ASC\" }}\n >\n <Datagrid\n optimized\n expand={\n <SingleItemShowContainer\n procureAccountId={record?.procureAccountId}\n />\n }\n {...props}\n >\n <TextField\n source=\"sortOrder\"\n label=\"resources.enquiries.fields.serialNum\"\n />\n <ReferenceField\n label=\"resources.enquiries.fields.itemId\"\n source=\"itemId\"\n reference={RESOURCE_NAME_ITEM}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n label=\"resources.enquiries.fields.number\"\n source=\"itemId\"\n reference={RESOURCE_NAME_ITEM}\n link={false}\n >\n <TruncatedTextField source=\"number\" truncateLength={25} />\n </ReferenceField>\n <NumberField\n source=\"quantity\"\n label=\"resources.enquiries.fields.quantity\"\n />\n <ReferenceField\n label=\"resources.enquiries.fields.uomId\"\n source=\"uomId\"\n reference={RESOURCE_NAME_UOM}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n {record?.showUnitPrice2 && <NumberField source=\"quantity2\" />}\n\n {record?.showUnitPrice2 && (\n <ReferenceField\n label=\"resources.enquiries.fields.uom2Id\"\n source=\"uom2Id\"\n reference={RESOURCE_NAME_UOM}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n <TruncatedTextField\n source=\"requisitionDetail.make\"\n label=\"resources.enquiries.fields.make\"\n truncateLength={25}\n />\n <TruncatedTextField\n source=\"requisitionDetail.size\"\n label=\"resources.enquiries.fields.size\"\n truncateLength={25}\n />\n <RichTextField\n source=\"requisitionDetail.specifications\"\n label=\"resources.enquiries.fields.specifications\"\n />\n <TruncatedTextField\n source=\"requisitionDetail.comments\"\n label=\"resources.enquiries.fields.comments\"\n truncateLength={25}\n />\n </Datagrid>\n </ReferenceManyField>\n </Box>\n {isProcureAccount && (\n <>\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.vendors.field.title\"\n subTitle=\"resources.enquiries.sections.vendors.field.subTitle\"\n />\n <ReferenceManyField\n addLabel={false}\n reference={RESOURCE_NAME_ENQUIRY_VENDORS}\n target=\"enquiryId\"\n perPage={DEFAULT_PER_PAGE}\n sort={{ field: \"id\", order: \"ASC\" }}\n >\n <Datagrid\n optimized\n expand={<SingleVendorShowContainer />}\n {...props}\n >\n <ReferenceField\n label=\"resources.enquiries.fields.vendorAccountName\"\n source=\"vendorAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n label=\"resources.enquiries.fields.vendorPrimaryUserName\"\n source=\"vendorId\"\n reference={RESOURCE_NAME_VENDOR}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ReferenceField\n label=\"resources.enquiries.fields.vendorPrimaryUserEmail\"\n source=\"vendorId\"\n reference={RESOURCE_NAME_VENDOR}\n link=\"show\"\n >\n <TextField source=\"vendorAccount.primaryUser.email\" />\n </ReferenceField>\n </Datagrid>\n </ReferenceManyField>\n </>\n )}\n\n {record?.conditions && (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.conditions.field.title\"\n headerTooltip=\"resources.enquiries.sections.conditions.field.tooltip\"\n >\n <Box>\n <SectionTitleSubtitle title=\"resources.enquiries.sections.conditions.field.heading\" />\n\n <ArrayField source=\"conditions\">\n <Datagrid optimized>\n <TextField source=\"conditionType\" />\n <TextField source=\"condition\" />\n </Datagrid>\n </ArrayField>\n </Box>\n </AccordionField>\n )}\n\n <Box py={2}>\n {record?.remarks && (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.remarks.field.title\"\n headerTooltip=\"resources.enquiries.sections.remarks.field.tooltip\"\n >\n <RichTextField source=\"remarks\" />\n </AccordionField>\n )}\n <AccordionField\n headerlabel=\"resources.enquiries.sections.fileUpload.input.title\"\n headerTooltip=\"resources.enquiries.sections.fileUpload.input.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <UploadedFilesField canDelete={false} />\n </Box>\n </AccordionField>\n </Box>\n\n <Box py={2}>\n <CommentsAccordion\n ownerEntityType={OwnerEntityTypes.ENQUIRY}\n ownerEntityId={record?.id}\n isViewOnly={false}\n />\n </Box>\n </>\n );\n};\n\nexport { EnquiryShowContainer };\n","import { required } from \"react-admin\";\nimport { isDateNotLessThanToday, isDateLessThanOther } from \"../../../lib/components/validations/dateValidations\";\n\nconst code = [required()];\n\nconst bidStartDate = [\n required(),\n //isDateNotLessThanToday()\n];\n\nconst bidEndDate = [\n required(),\n isDateNotLessThanToday(),\n isDateLessThanOther(\"bidStartDate\", \"resources.enquiries.validations.bidEndDateGreaterThanStartDate\"),\n];\n\nconst preferredDeliveryDate = [\n isDateNotLessThanToday(),\n isDateLessThanOther(\"bidEndDate\", \"resources.enquiries.validations.preferredDeliveryDateGreaterThanBidEndDate\"),\n];\n\nexport const validations = {\n code,\n bidStartDate,\n bidEndDate,\n preferredDeliveryDate,\n}","import { Record } from \"react-admin\";\nimport { DatagridColors } from \"../constants\";\n\nconst embeddedDataGridRowStyle = (hasId) => (record: Record, index: number) => {\n const id = record?.id;\n let backgroundColor = DatagridColors.UNSELECTED_BG_COLOR;\n let color = DatagridColors.UNSELECTED_COLOR;\n if (id && hasId(id)) {\n backgroundColor = DatagridColors.SELECTED_BG_COLOR;\n color = DatagridColors.SELECTED_COLOR;\n }\n\n return {\n color,\n backgroundColor,\n transition: \"background-color 0.5s\",\n };\n};\n\nexport { embeddedDataGridRowStyle };\n","import { Fragment } from \"react\";\nimport { Box, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport {\n BulkActionProps,\n Button,\n useListContext,\n useUnselectAll,\n useNotify,\n Identifier,\n} from \"react-admin\";\nimport AddToEnquiryIcon from \"@material-ui/icons/AddShoppingCartTwoTone\";\nimport RemoveFromEnquiryIcon from \"@material-ui/icons/RemoveShoppingCartTwoTone\";\nimport { DatagridColors } from \"../constants\";\nimport { RESOURCE_NAME_REQUISITION_DETAILS } from \"../../requisitions/constants\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n addItemsToEnquiry: {\n color: DatagridColors.SELECTED_COLOR,\n backgroundColor: DatagridColors.SELECTED_BG_COLOR,\n padding: 8,\n },\n removeItemsFromEnquiry: {\n color: DatagridColors.UNSELECTED_COLOR,\n backgroundColor: DatagridColors.UNSELECTED_BG_COLOR,\n padding: 8,\n },\n container: {\n display: \"flex\",\n gap: 10,\n },\n })\n);\n\ninterface EnquiryBulkActionProps extends BulkActionProps {\n handleAddItemsToEnquiry: (map) => void;\n handleRemoveItemsFromEnquiry: (ids: Array<Identifier>) => void;\n}\n\nconst AddItemsToEnquiryBulkActionButton = (props: EnquiryBulkActionProps) => {\n const classes = useStyles();\n const { data, ids, selectedIds } = useListContext();\n const unselectAll = useUnselectAll();\n const notify = useNotify();\n const { handleAddItemsToEnquiry, ...rest } = props;\n const addItemsToEnquiry = () => {\n const itemsToAddMap = new Map();\n selectedIds?.forEach((selectedId) => {\n const record = data[selectedId];\n const enquiryId = record?.enquiryId;\n const isNew = enquiryId ? false : true;\n const enquiryDetail = {\n requisitionId: record.requisitionId,\n requisitionDetailId: record.id,\n itemId: record.itemId,\n enquiryId,\n quantity: record.quantity,\n uomId: record.uomId,\n quantity2: record.quantity2,\n uom2Id: record.uom2Id,\n sortOrder: record?.sortOrder,\n //version: record.version,\n isNew,\n };\n itemsToAddMap.set(selectedId, enquiryDetail);\n });\n\n if (itemsToAddMap?.size) {\n handleAddItemsToEnquiry(itemsToAddMap);\n }\n\n unselectAll(RESOURCE_NAME_REQUISITION_DETAILS);\n notify(\"resources.enquiries.messages.addItemsToEnquiry\", {\n type: \"info\",\n multiLine: true,\n });\n };\n return (\n <Button\n label=\"resources.enquiries.actions.addItemsToEnquiry\"\n className={classes.addItemsToEnquiry}\n onClick={addItemsToEnquiry}\n >\n <AddToEnquiryIcon />\n </Button>\n );\n};\n\nconst RemoveItemsFromEnquiryBulkActionButton = (\n props: EnquiryBulkActionProps\n) => {\n const classes = useStyles();\n const { data, ids, selectedIds } = useListContext();\n const unselectAll = useUnselectAll();\n const notify = useNotify();\n const { handleRemoveItemsFromEnquiry, ...rest } = props;\n\n const removeItemsFromEnquiry = () => {\n handleRemoveItemsFromEnquiry(selectedIds);\n unselectAll(RESOURCE_NAME_REQUISITION_DETAILS);\n notify(\"resources.enquiries.messages.removeItemsFromEnquiry\", {\n type: \"info\",\n multiLine: true,\n });\n };\n\n return (\n <Button\n label=\"resources.enquiries.actions.removeItemsFromEnquiry\"\n className={classes.removeItemsFromEnquiry}\n onClick={removeItemsFromEnquiry}\n >\n <RemoveFromEnquiryIcon />\n </Button>\n );\n};\n\nconst EnquiryBulkActionButtons = (props: EnquiryBulkActionProps) => {\n const classes = useStyles();\n return (\n <Box className={classes.container}>\n <AddItemsToEnquiryBulkActionButton {...props} />\n <RemoveItemsFromEnquiryBulkActionButton {...props} />\n </Box>\n );\n};\n\nexport { EnquiryBulkActionButtons };\n","import { Box, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport {\n BulkActionProps,\n Button,\n useListContext,\n useUnselectAll,\n useNotify,\n Identifier,\n} from \"react-admin\";\nimport AddToEnquiryIcon from \"@material-ui/icons/AddShoppingCartTwoTone\";\nimport RemoveFromEnquiryIcon from \"@material-ui/icons/RemoveShoppingCartTwoTone\";\nimport { DatagridColors } from \"../constants\";\nimport { RESOURCE_NAME_VENDOR } from \"../../datasetup/vendors\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n addVendorsToEnquiry: {\n color: DatagridColors.SELECTED_COLOR,\n backgroundColor: DatagridColors.SELECTED_BG_COLOR,\n padding: 8,\n },\n removeVendorsFromEnquiry: {\n color: DatagridColors.UNSELECTED_COLOR,\n backgroundColor: DatagridColors.UNSELECTED_BG_COLOR,\n padding: 8,\n },\n container: {\n display: \"flex\",\n gap: 10,\n },\n })\n);\n\ninterface VendorsBulkActionProps extends BulkActionProps {\n handleAddVendorsToEnquiry: (ids: Array<Identifier>) => void;\n handleRemoveVendorsFromEnquiry: (ids: Array<Identifier>) => void;\n}\n\nconst AddVendorsToEnquiryBulkActionButton = (props: VendorsBulkActionProps) => {\n const classes = useStyles();\n const { data, ids, selectedIds } = useListContext();\n const unselectAll = useUnselectAll();\n const notify = useNotify();\n const { handleAddVendorsToEnquiry, ...rest } = props;\n\n const addVendorsToEnquiry = () => {\n handleAddVendorsToEnquiry(selectedIds);\n unselectAll(RESOURCE_NAME_VENDOR);\n notify(\"resources.enquiries.messages.addVendorsToEnquiry\", {\n type: \"info\",\n multiLine: true,\n });\n };\n return (\n <Button\n label=\"resources.enquiries.actions.addVendorsToEnquiry\"\n className={classes.addVendorsToEnquiry}\n onClick={addVendorsToEnquiry}\n >\n <AddToEnquiryIcon />\n </Button>\n );\n};\n\nconst RemoveVendorsFromEnquiryBulkActionButton = (\n props: VendorsBulkActionProps\n) => {\n const classes = useStyles();\n const { data, ids, selectedIds } = useListContext();\n const unselectAll = useUnselectAll();\n const notify = useNotify();\n const { handleRemoveVendorsFromEnquiry, ...rest } = props;\n\n const removeVendorsFromEnquiry = () => {\n handleRemoveVendorsFromEnquiry(selectedIds);\n unselectAll(RESOURCE_NAME_VENDOR);\n notify(\"resources.enquiries.messages.removeVendorsFromEnquiry\", {\n type: \"info\",\n multiLine: true,\n });\n };\n\n return (\n <Button\n label=\"resources.enquiries.actions.removeVendorsFromEnquiry\"\n className={classes.removeVendorsFromEnquiry}\n onClick={removeVendorsFromEnquiry}\n >\n <RemoveFromEnquiryIcon />\n </Button>\n );\n};\n\nconst VendorsBulkActionButtons = (props: VendorsBulkActionProps) => {\n const classes = useStyles();\n return (\n <Box className={classes.container}>\n <AddVendorsToEnquiryBulkActionButton {...props} />\n <RemoveVendorsFromEnquiryBulkActionButton {...props} />\n </Box>\n );\n};\n\nexport { VendorsBulkActionButtons };\n","import { Filter, FilterProps } from \"react-admin\";\nimport { SearchFilter } from \"../../../lib/common\";\n\nconst ItemListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn={true} key=\"search\" />\n </Filter>\n);\n\nconst VendorListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn={true} key=\"search\" />\n </Filter>\n);\n\nexport { ItemListFilters, VendorListFilters };\n","import { Box, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport { useForm } from \"react-final-form\";\nimport { useLocation } from \"react-router-dom\";\nimport {\n AutocompleteInput,\n FormDataConsumer,\n ReferenceField,\n ReferenceInput,\n required,\n TextInput,\n TextField,\n RichTextField,\n EmailField,\n useGetOne,\n NumberField,\n RecordContextProvider,\n Identifier,\n ArrayInput,\n SimpleFormIterator,\n Datagrid,\n useRecordContext,\n} from \"react-admin\";\nimport {\n itemResource,\n RESOURCE_NAME_ITEM,\n SingleItemShowContainer,\n} from \"../../datasetup/items\";\nimport { RESOURCE_NAME_UOM } from \"../../datasetup/unit-of-measure\";\nimport {\n RESOURCE_NAME_REQUISITION,\n RESOURCE_NAME_REQUISITION_DETAILS,\n} from \"../../requisitions\";\nimport { RequisitionSummaryContainer } from \"./RequisitionSummaryContainer\";\nimport { RESOURCE_NAME_VENDOR, vendorResource } from \"../../datasetup/vendors\";\nimport {\n AccordionField,\n DateTimeInput,\n DefaultList,\n EmptyState,\n MediaInputField,\n SectionTitleSubtitle,\n TruncatedTextField,\n} from \"../../../lib/components\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\nimport { validations } from \"./validations\";\nimport {\n DEFAULT_DATE_TIME_OPTIONS,\n DEFAULT_PER_PAGE,\n UserFormMessage,\n} from \"../../../lib/common\";\nimport { embeddedDataGridRowStyle } from \"./embeddedDataGridRowStyle\";\nimport { EnquiryBulkActionButtons } from \"./EnquiryBulkActionButtons\";\nimport { VendorsBulkActionButtons } from \"./VendorsBulkActionButtons\";\nimport {\n ItemListFilters,\n VendorListFilters,\n} from \"./EnquiryVendorsListFilters\";\nimport { SingleVendorShowContainer } from \"../../datasetup/vendors/components\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n itemsGrid: {\n \"& div:nth-of-type(2) .MuiPaper-root\": {\n width: \"95vw\",\n whiteSpace: \"nowrap\",\n overflowX: \"auto\",\n },\n },\n account: { display: \"block\", width: 544 },\n\n vendor: { display: \"block\", width: 544 },\n arrayInput: { display: \"flex\", flexDirection: \"column\" },\n formIterator: { form: { display: \"flex\" } },\n arrayField: { padding: \"4px\" },\n remarksAccordion: {\n width: \"100%\",\n marginTop: 25,\n },\n\n enquiryLayout1: {\n width: \"100%\",\n display: \"grid\",\n paddingLeft: 15,\n gridTemplateColumns: \"1fr 1fr\",\n gridGap: 35,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n enquiryLayout2: {\n width: \"100%\",\n display: \"grid\",\n paddingLeft: 15,\n paddingTop: 15,\n paddingBottom: 15,\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gridGap: 15,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n emptyStateContainer: {\n width: \"100%\",\n // display: \"flex\",\n // flexDirection: \"column\",\n // alignItems: \"flex-start\"\n },\n emptyStateIcon: {\n width: \"1.25em\",\n height: \"1.25em\",\n alignSelf: \"center\",\n },\n })\n);\n\nconst useArrayInputStyles = makeStyles((theme) => ({\n form: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 3fr\",\n gridColumnGap: 50,\n [theme.breakpoints.down(\"sm\")]: { gridTemplateColumns: \"100%\" },\n },\n}));\n\nconst EnquiryCreateContainer = ({ isEdit = false }) => {\n const record = useRecordContext();\n const classes = useStyles();\n const arrayInputClasses = useArrayInputStyles();\n const form = useForm();\n const queryParams = new URLSearchParams(useLocation().search);\n const requestRequisitionId = queryParams.get(\"requisitionId\");\n\n const [selectedRequisitionId, setSelectedRequisitionId] = useState<\n string | undefined\n >();\n\n const [enquiryDetailsMap, setEnquiryDetailsMap] = useState(new Map());\n const [vendorIds, setVendorIds] = useState<Identifier[]>([]);\n\n const handleRequisitionLoadSuccess = () => {\n setEnquiryDetailsMap(new Map());\n setVendorIds([]);\n form.change(\"enquiryDetails\", null);\n form.change(\"vendorIds\", null);\n };\n\n const { data: requisition } = useGetOne(\n RESOURCE_NAME_REQUISITION,\n selectedRequisitionId ?? \"\",\n {\n onSuccess: handleRequisitionLoadSuccess,\n enabled:\n selectedRequisitionId && selectedRequisitionId?.length ? true : false,\n }\n );\n\n const handleAddItemsToEnquiry = (map) => {\n const newEnquiriesDetailsMap = new Map(enquiryDetailsMap);\n map.forEach((enquiryDetail, id) =>\n newEnquiriesDetailsMap.set(id, enquiryDetail)\n );\n\n const enquiryDetails = Array.from(newEnquiriesDetailsMap.values());\n setEnquiryDetailsMap(newEnquiriesDetailsMap);\n if (enquiryDetails?.length) {\n form.change(\"enquiryDetails\", enquiryDetails);\n } else {\n form.change(\"enquiryDetails\", null);\n }\n };\n\n const handleRemoveItemsFromEnquiry = (ids: Array<Identifier>) => {\n const newEnquiriesDetailsMap = new Map(enquiryDetailsMap);\n\n ids.forEach((id) => newEnquiriesDetailsMap.delete(id));\n\n const enquiryDetails = Array.from(newEnquiriesDetailsMap.values());\n setEnquiryDetailsMap(newEnquiriesDetailsMap);\n if (enquiryDetails?.length) {\n form.change(\"enquiryDetails\", enquiryDetails);\n } else {\n form.change(\"enquiryDetails\", null);\n }\n };\n\n const hasEnquiryDetailsId = (id: Identifier) => {\n return enquiryDetailsMap.has(id);\n };\n\n const hasVendorId = (id: Identifier) => {\n return vendorIds.includes(id.toString());\n };\n\n const handleAddVendorsToEnquiry = (selectedIds: Array<Identifier>) => {\n let newVendorIds: Identifier[] = vendorIds;\n\n selectedIds?.forEach((id) => {\n const newRecordIndex = vendorIds.indexOf(id);\n\n if (newRecordIndex < 0) {\n newVendorIds.push(id);\n }\n });\n\n setVendorIds(newVendorIds);\n\n if (newVendorIds && newVendorIds.length) {\n form.change(\"vendorIds\", newVendorIds);\n } else {\n form.change(\"vendorIds\", null);\n }\n };\n\n const handleRemoveVendorsFromEnquiry = (selectedIds: Array<Identifier>) => {\n let newVendorIds: Identifier[] = [];\n\n selectedIds?.forEach((id) => {\n const newRecordIndex = vendorIds.indexOf(id);\n\n if (newRecordIndex >= 0) {\n //entry already exists during toggled on, remove it\n newVendorIds = [\n ...vendorIds.splice(0, newRecordIndex),\n ...vendorIds.splice(newRecordIndex + 1),\n ];\n }\n });\n\n setVendorIds(newVendorIds);\n\n if (newVendorIds && newVendorIds.length) {\n form.change(\"vendorIds\", newVendorIds);\n } else {\n form.change(\"vendorIds\", null);\n }\n };\n\n useEffect(() => {\n if (requestRequisitionId) {\n form.change(\"requisitionId\", requestRequisitionId);\n setSelectedRequisitionId(requestRequisitionId);\n }\n }, [requestRequisitionId]);\n\n useEffect(() => {\n if (requisition) {\n form.change(\"showUnitPrice2\", requisition?.showUnitPrice2);\n }\n }, [requisition]);\n\n return (\n <>\n {!requestRequisitionId && (\n <ReferenceInput\n label=\"resources.enquiries.fields.requisitionId\"\n source=\"requisitionId\"\n reference={RESOURCE_NAME_REQUISITION}\n filter={{\n openRequisitions: true,\n }}\n validate={[required()]}\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.enquiries.help.requisitionId\"\n isRequired\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceInput>\n )}\n\n {!requisition && (\n <UserFormMessage\n line1=\"resources.enquiries.messages.openRequisitions.line1\"\n line2=\"resources.enquiries.messages.openRequisitions.line2\"\n />\n )}\n {requisition && (\n <RecordContextProvider\n value={{\n id: requisition.id,\n requisitionId: requisition.id,\n }}\n >\n <RequisitionSummaryContainer />\n </RecordContextProvider>\n )}\n {requisition && (\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.enquiry.input.title\"\n subTitle=\"resources.enquiries.sections.enquiry.input.subTitle\"\n />\n )}\n {requisition && (\n <Box className={classes.enquiryLayout1}>\n <TextInput\n source=\"code\"\n helperText=\"resources.enquiries.help.code\"\n isRequired\n validate={[required()]}\n />\n <ReferenceInput\n label=\"resources.enquiries.fields.currencyId\"\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n validate={validations.code}\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.enquiries.help.currencyId\"\n />\n </ReferenceInput>\n </Box>\n )}\n {requisition && (\n <Box className={classes.enquiryLayout2}>\n <DateTimeInput\n label=\"resources.enquiries.fields.bidStartDate\"\n source=\"bidStartDate\"\n helperText=\"resources.enquiries.help.bidStartDate\"\n validate={validations.bidStartDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n isRequired\n />\n\n <DateTimeInput\n label=\"resources.enquiries.fields.bidEndDate\"\n source=\"bidEndDate\"\n helperText=\"resources.enquiries.help.bidEndDate\"\n validate={validations.bidEndDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n isRequired\n />\n\n <DateTimeInput\n label=\"resources.enquiries.fields.preferredDeliveryDate\"\n source=\"preferredDeliveryDate\"\n helperText=\"resources.enquiries.help.preferredDeliveryDate\"\n validate={validations.preferredDeliveryDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n />\n </Box>\n )}\n <FormDataConsumer>\n {({ formData, ...rest }) => {\n if (formData?.requisitionId) {\n setSelectedRequisitionId(formData?.requisitionId);\n }\n return <div />;\n }}\n </FormDataConsumer>\n\n {requisition && (\n <Fragment>\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.items.input.title\"\n subTitle=\"resources.enquiries.sections.items.input.subTitle\"\n />\n <DefaultList\n resource={RESOURCE_NAME_REQUISITION_DETAILS}\n basePath=\"/\"\n exporter={false}\n perPage={DEFAULT_PER_PAGE}\n title=\"Enquiries\"\n showBreadcrumbs={false}\n sort={{ field: \"sortOrder\", order: \"ASC\" }}\n filters={<ItemListFilters />}\n filter={{\n requisitionId: requisition.id,\n openRequisitionDetailsForEnquiry: null,\n isOpen: true,\n }}\n syncWithLocation={false}\n listRowActions={false}\n actions={false}\n bulkActionButtons={\n <EnquiryBulkActionButtons\n handleAddItemsToEnquiry={handleAddItemsToEnquiry}\n handleRemoveItemsFromEnquiry={handleRemoveItemsFromEnquiry}\n />\n }\n empty={\n <EmptyState\n title=\"resources.enquiries.sections.items.emptyState\"\n subTitle={null}\n Icon={itemResource.icon}\n className={classes.emptyStateContainer}\n iconClassName={classes.emptyStateIcon}\n />\n }\n className={classes.itemsGrid}\n >\n <Datagrid\n rowStyle={embeddedDataGridRowStyle(hasEnquiryDetailsId)}\n expand={\n <SingleItemShowContainer\n procureAccountId={record?.procureAccountId}\n />\n }\n >\n <TextField\n source=\"sortOrder\"\n label=\"resources.enquiries.fields.serialNum\"\n />\n <ReferenceField\n label=\"resources.enquiries.fields.number\"\n source=\"itemId\"\n reference={RESOURCE_NAME_ITEM}\n link={false}\n >\n <TruncatedTextField source=\"number\" truncateLength={250} />\n </ReferenceField>\n <ReferenceField\n label=\"resources.enquiries.fields.itemId\"\n source=\"itemId\"\n reference={RESOURCE_NAME_ITEM}\n link={false}\n >\n <TruncatedTextField source=\"name\" truncateLength={250} />\n </ReferenceField>\n\n <NumberField source=\"quantity\" />\n\n <ReferenceField\n label=\"resources.enquiries.fields.uomId\"\n source=\"uomId\"\n reference={RESOURCE_NAME_UOM}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n {requisition?.showUnitPrice2 && (\n <NumberField source=\"quantity2\" />\n )}\n\n {requisition?.showUnitPrice2 && (\n <ReferenceField\n label=\"resources.enquiries.fields.uom2Id\"\n source=\"uom2Id\"\n reference={RESOURCE_NAME_UOM}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n <TruncatedTextField\n source=\"make\"\n label=\"resources.enquiries.fields.make\"\n truncateLength={25}\n />\n <TruncatedTextField\n source=\"size\"\n label=\"resources.enquiries.fields.size\"\n truncateLength={25}\n />\n <RichTextField\n source=\"specifications\"\n label=\"resources.enquiries.fields.specifications\"\n />\n <TruncatedTextField\n source=\"comments\"\n label=\"resources.enquiries.fields.comments\"\n truncateLength={25}\n />\n </Datagrid>\n </DefaultList>\n </Fragment>\n )}\n\n {requisition && (\n <Fragment>\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.vendors.input.title\"\n subTitle=\"resources.enquiries.sections.vendors.input.subTitle\"\n />\n <DefaultList\n resource={RESOURCE_NAME_VENDOR}\n basePath=\"/\"\n exporter={false}\n perPage={DEFAULT_PER_PAGE}\n title=\"Vendors\"\n showBreadcrumbs={false}\n sort={{ field: \"id\", order: \"ASC\" }}\n filters={<VendorListFilters />}\n syncWithLocation={false}\n listRowActions={false}\n actions={false}\n bulkActionButtons={\n <VendorsBulkActionButtons\n handleAddVendorsToEnquiry={handleAddVendorsToEnquiry}\n handleRemoveVendorsFromEnquiry={handleRemoveVendorsFromEnquiry}\n />\n }\n empty={\n <EmptyState\n title=\"resources.enquiries.sections.vendors.emptyState\"\n subTitle={null}\n Icon={vendorResource.icon}\n className={classes.emptyStateContainer}\n iconClassName={classes.emptyStateIcon}\n />\n }\n >\n <Datagrid\n rowStyle={embeddedDataGridRowStyle(hasVendorId)}\n expand={<SingleVendorShowContainer />}\n >\n <TextField\n source=\"displayLabel\"\n label=\"resources.enquiries.fields.vendorAccountName\"\n sortable={false}\n />\n <TextField\n source=\"vendorAccount.primaryUser.fullName\"\n label=\"resources.enquiries.fields.vendorPrimaryUserName\"\n sortable={false}\n />\n <EmailField\n source=\"vendorAccount.primaryUser.email\"\n label=\"resources.enquiries.fields.vendorPrimaryUserEmail\"\n sortable={false}\n />\n </Datagrid>\n </DefaultList>\n </Fragment>\n )}\n\n {requisition && (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.conditions.input.title\"\n headerTooltip=\"resources.enquiries.sections.conditions.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <Box>\n <SectionTitleSubtitle title=\"resources.enquiries.sections.conditions.input.heading\" />\n <ArrayInput source=\"conditions\" label={false}>\n <SimpleFormIterator classes={arrayInputClasses}>\n <TextInput\n source=\"conditionType\"\n label=\"resources.enquiries.fields.conditionType\"\n helperText=\"resources.enquiries.help.conditionType\"\n resettable={true}\n validate={[required()]}\n />\n <TextInput\n multiline\n fullWidth={true}\n source=\"condition\"\n label=\"resources.enquiries.fields.condition\"\n helperText=\"resources.enquiries.help.condition\"\n resettable={true}\n validate={[required()]}\n />\n </SimpleFormIterator>\n </ArrayInput>\n </Box>\n </AccordionField>\n )}\n\n {requisition && (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.remarks.input.title\"\n headerTooltip=\"resources.enquiries.sections.remarks.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <RichTextInput\n source=\"remarks\"\n helperText=\"resources.bids.help.remarks\"\n label={false}\n />\n </AccordionField>\n )}\n {requisition && (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.fileUpload.input.title\"\n headerTooltip=\"resources.enquiries.sections.fileUpload.input.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <MediaInputField showUploadedFiles={isEdit} />\n </Box>\n </AccordionField>\n )}\n </>\n );\n};\n\nexport { EnquiryCreateContainer };\n","import { useState, useEffect, useMemo, Fragment } from \"react\";\nimport { createStyles, makeStyles, Box, Theme } from \"@material-ui/core\";\nimport { useForm } from \"react-final-form\";\nimport {\n ReferenceField,\n required,\n TextInput,\n TextField,\n EmailField,\n NumberField,\n ReferenceInput,\n AutocompleteInput,\n Identifier,\n useGetList,\n useEditContext,\n ArrayInput,\n RichTextField,\n SimpleFormIterator,\n Datagrid,\n} from \"react-admin\";\nimport {\n itemResource,\n RESOURCE_NAME_ITEM,\n SingleItemShowContainer,\n} from \"../../datasetup/items\";\nimport { RESOURCE_NAME_UOM } from \"../../datasetup/unit-of-measure\";\nimport {\n RESOURCE_NAME_REQUISITION_DETAILS,\n} from \"../../requisitions\";\nimport { RequisitionSummaryContainer } from \"./RequisitionSummaryContainer\";\nimport { RESOURCE_NAME_VENDOR, vendorResource } from \"../../datasetup/vendors\";\nimport {\n AccordionField,\n DateTimeInput,\n DefaultList,\n EmptyState,\n MediaInputField,\n SectionTitleSubtitle,\n TruncatedTextField,\n} from \"../../../lib/components\";\nimport { validations } from \"./validations\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport { embeddedDataGridRowStyle } from \"./embeddedDataGridRowStyle\";\nimport {\n EnquiryDetailRecord,\n RESOURCE_NAME_ENQUIRY_VENDORS,\n} from \"../constants\";\nimport {\n DEFAULT_DATE_TIME_OPTIONS,\n DEFAULT_PER_PAGE,\n MAX_RECORDS_PER_PAGE,\n} from \"../../../lib/common\";\nimport { CommentsAccordion, OwnerEntityTypes } from \"../../comments\";\nimport { EnquiryBulkActionButtons } from \"./EnquiryBulkActionButtons\";\nimport {\n ItemListFilters,\n VendorListFilters,\n} from \"./EnquiryVendorsListFilters\";\nimport { VendorsBulkActionButtons } from \"./VendorsBulkActionButtons\";\nimport { SingleVendorShowContainer } from \"../../datasetup/vendors/components\";\nimport { RESOURCE_NAME_ENQUIRY_DETAILS } from \"..\";\n\nconst EnquiryEditContainer = (props) => {\n const { record } = props;\n const classes = useStyles();\n const arrayInputClasses = useArrayInputStyles();\n const form = useForm();\n const [selectedRequisitionId, setSelectedRequisitionId] = useState<\n Identifier | undefined\n >(record?.requisitionId);\n const [selectedEnquiryId, setSelectedEnquiryId] = useState<\n Identifier | undefined\n >(record?.enquiryId);\n\n const [enquiryDetailsMap, setEnquiryDetailsMap] = useState(new Map());\n const [requisitionEnquiryDetailIdsMap, setRequisitionEnquiryDetailIdsMap] =\n useState(new Map());\n\n const { loaded: enquiriesLoaded } = useEditContext();\n\n const [originalRequisitionEnquiryDetailIdsMap, setOriginalRequisitionEnquiryDetailIdsMap] = useState(new Map());\n const [addedEnquiryDetailsMap, setAddedEnquiryDetailsMap] = useState(new Map());\n const [removedEnquiryDetailIds, setRemovedEnquiryDetailIds] = useState<Identifier[]>([]);\n\n const [vendorIds, setVendorIds] = useState<Identifier[]>([]);\n const [originalVendorIds, setOriginalVendorIds] = useState<Identifier[]>([]);\n const [addedVendorIds, setAddedVendorIds] = useState<Identifier[]>([]);\n const [removedVendorIds, setRemovedVendorIds] = useState<Identifier[]>([]);\n\n const {\n data: existingEnquiryDetails,\n ids: existingEnquiryDetailIds,\n loaded: existingEnquiryDetailsLoaded,\n //@ts-ignore\n } = useGetList<EnquiryDetailRecord>(\n RESOURCE_NAME_ENQUIRY_DETAILS,\n { page: 1, perPage: MAX_RECORDS_PER_PAGE },\n { field: \"updatedAt\", order: \"ASC\" },\n {\n enquiryId: selectedEnquiryId,\n },\n {\n enabled: enquiriesLoaded && selectedEnquiryId ? true : false,\n }\n );\n\n const {\n data: allVendors,\n ids: allVendorIds,\n loaded: allVendorsLoaded,\n } = useGetList(\n RESOURCE_NAME_VENDOR,\n { page: 1, perPage: MAX_RECORDS_PER_PAGE },\n { field: \"updatedAt\", order: \"ASC\" }\n );\n\n const {\n data: enquiryVendors,\n ids: enquiryVendorIds,\n loaded: enquiryVendorsLoaded,\n } = useGetList(\n RESOURCE_NAME_ENQUIRY_VENDORS,\n { page: 1, perPage: MAX_RECORDS_PER_PAGE },\n { field: \"updatedAt\", order: \"ASC\" },\n {\n enquiryId: selectedEnquiryId,\n },\n {\n enabled: selectedEnquiryId && allVendorsLoaded ? true : false,\n }\n );\n\n const prepareExistingEnquiryDetails = () => {\n const newEnquiryDetailsMap = new Map();\n const existingRequisitionDetailIdToEnquiryDetailsIdMap = new Map();\n if (existingEnquiryDetails) {\n existingEnquiryDetailIds?.forEach((enquiryDetailId) => {\n const existingEnquiryDetailsRecord: EnquiryDetailRecord =\n existingEnquiryDetails[enquiryDetailId];\n const enquiryDetailRecord: EnquiryDetailRecord = {\n id: existingEnquiryDetailsRecord.id,\n enquiryId: existingEnquiryDetailsRecord.enquiryId,\n requisitionId: existingEnquiryDetailsRecord.requisitionId,\n requisitionDetailId: existingEnquiryDetailsRecord.requisitionDetailId,\n itemId: existingEnquiryDetailsRecord.itemId,\n quantity: existingEnquiryDetailsRecord.quantity,\n uomId: existingEnquiryDetailsRecord.uomId,\n quantity2: existingEnquiryDetailsRecord.quantity2,\n uom2Id: existingEnquiryDetailsRecord.uom2Id,\n version: existingEnquiryDetailsRecord.version,\n isNew: false,\n };\n newEnquiryDetailsMap.set(enquiryDetailRecord.id, enquiryDetailRecord);\n existingRequisitionDetailIdToEnquiryDetailsIdMap.set(\n existingEnquiryDetailsRecord.requisitionDetailId,\n enquiryDetailRecord.id\n );\n });\n\n setSelectedRequisitionId(record.requisitionId);\n setSelectedEnquiryId(record.id);\n setRequisitionEnquiryDetailIdsMap(\n existingRequisitionDetailIdToEnquiryDetailsIdMap\n );\n setOriginalRequisitionEnquiryDetailIdsMap(\n new Map(existingRequisitionDetailIdToEnquiryDetailsIdMap)\n )\n }\n return newEnquiryDetailsMap;\n };\n\n const prepareExistingVendors = () => {\n const newEnquiryVendorsMap = new Map();\n const existingEnquiriesVendorIdsList: Array<Identifier> = [];\n\n if (enquiryVendorIds && enquiryVendors) {\n enquiryVendorIds?.forEach((enquiryVendorId) => {\n const enquiryVendorRecord = enquiryVendors[enquiryVendorId];\n const vendorId = enquiryVendorRecord.vendorId;\n existingEnquiriesVendorIdsList.push(vendorId);\n newEnquiryVendorsMap.set(vendorId, enquiryVendorRecord);\n });\n\n setVendorIds(existingEnquiriesVendorIdsList);\n setOriginalVendorIds([...existingEnquiriesVendorIdsList]);\n\n if (enquiryVendorIds && enquiryVendorIds.length) {\n form.change(\"vendorIds\", existingEnquiriesVendorIdsList);\n } else {\n form.change(\"vendorIds\", null);\n }\n }\n\n return newEnquiryVendorsMap;\n };\n\n const prepareAllVendors = () => {\n const allVendorsMap = new Map();\n const enquiryVendorIdsList: Array<Identifier> = [];\n\n if (\n allVendorsLoaded &&\n allVendorIds &&\n allVendors &&\n enquiryVendorsLoaded\n ) {\n if (enquiryVendorIds && enquiryVendors) {\n enquiryVendorIds?.forEach((enquiryVendorId) => {\n const enquiryVendorRecord = enquiryVendors[enquiryVendorId];\n const enquiryVendorRecordVendorId: Identifier =\n enquiryVendorRecord.vendorId;\n\n const allVendorRecord = allVendors[enquiryVendorRecordVendorId];\n const vendorId = allVendorRecord?.id;\n\n const newEnquiryVendorRecord = {\n ...enquiryVendorRecord,\n id: vendorId,\n isNew: false,\n vendorAccount: {\n name: allVendorRecord?.vendorAccount?.name,\n primaryUser: {\n fullName: allVendorRecord?.vendorAccount?.primaryUser?.fullName,\n email: allVendorRecord?.vendorAccount?.primaryUser?.email,\n },\n },\n };\n allVendorsMap.set(vendorId, newEnquiryVendorRecord);\n enquiryVendorIdsList.push(enquiryVendorRecordVendorId);\n });\n }\n\n allVendorIds.forEach((vendorId: Identifier) => {\n if (!enquiryVendorIdsList.includes(vendorId)) {\n //Add the other vendors only if they are not present in this enquiry vendors list\n const vendorRecord = allVendors[vendorId];\n const enquiryVendorRecord = {\n id: vendorRecord.id,\n enquiryId: selectedEnquiryId,\n vendorAccountId: vendorRecord.vendorAccountId,\n version: 1,\n isNew: true,\n vendorAccount: {\n name: vendorRecord?.vendorAccount?.name,\n primaryUser: {\n fullName: vendorRecord?.vendorAccount?.primaryUser?.fullName,\n email: vendorRecord?.vendorAccount?.primaryUser?.email,\n },\n },\n };\n allVendorsMap.set(vendorRecord.id, enquiryVendorRecord);\n }\n });\n }\n return allVendorsMap;\n };\n\n useEffect(() => {\n\n if(enquiriesLoaded){\n setSelectedRequisitionId(record?.requisitionId);\n setSelectedEnquiryId(record.id);\n }\n if (enquiriesLoaded && existingEnquiryDetailsLoaded) {\n const existingEnquiryDetails = prepareExistingEnquiryDetails();\n setEnquiryDetailsMap(existingEnquiryDetails);\n const enquiryDetails = Array.from(existingEnquiryDetails.values());\n if (enquiryDetails?.length) {\n form.change(\"enquiryDetails\", enquiryDetails);\n } else {\n form.change(\"enquiryDetails\", null);\n }\n }\n }, [enquiriesLoaded, existingEnquiryDetailsLoaded]);\n\n const enquiryVendorsMap = useMemo(\n () => prepareExistingVendors(),\n // eslint-disable-next-line\n [enquiryVendorsLoaded]\n );\n\n const [allVendorsMap, setAllVendorsMap] = useState(prepareAllVendors());\n\n useEffect(() => {\n if (allVendorsLoaded && enquiryVendorsLoaded) {\n setAllVendorsMap(prepareAllVendors());\n }\n // eslint-disable-next-line\n }, [enquiryVendorsLoaded]);\n\n const hasRequisitionDetailsId = (id: Identifier) => {\n return requisitionEnquiryDetailIdsMap?.has(id);\n };\n\n const hasVendorId = (id: Identifier) => {\n return enquiryVendorsMap.has(id);\n };\n\n const handleAddItemsToEnquiry = (map) => {\n const newEnquiriesDetailsMap = new Map(enquiryDetailsMap);\n const newAddedEnquiryDetailsMap = new Map(addedEnquiryDetailsMap);\n let newRemoveEnquiryDetailIds = removedEnquiryDetailIds;\n\n map.forEach((enquiryDetail, id) => {\n if (!enquiryDetail.id) {\n enquiryDetail.id = id;\n if(!originalRequisitionEnquiryDetailIdsMap?.has(id)){\n requisitionEnquiryDetailIdsMap.set(id, id);\n }\n }\n newEnquiriesDetailsMap.set(id, enquiryDetail);\n\n if(!originalRequisitionEnquiryDetailIdsMap?.has(id)){\n newAddedEnquiryDetailsMap.set(id, enquiryDetail);\n }\n\n if(newRemoveEnquiryDetailIds?.includes(id)){\n newRemoveEnquiryDetailIds = newRemoveEnquiryDetailIds.filter((enquiryDetailId) => enquiryDetailId !== id);\n }\n });\n\n const enquiryDetails = Array.from(newEnquiriesDetailsMap.values());\n setEnquiryDetailsMap(newEnquiriesDetailsMap);\n\n setAddedEnquiryDetailsMap(newAddedEnquiryDetailsMap);\n setRemovedEnquiryDetailIds(newRemoveEnquiryDetailIds);\n\n if (enquiryDetails?.length) {\n form.change(\"enquiryDetails\", enquiryDetails);\n } else {\n form.change(\"enquiryDetails\", null);\n }\n\n const changedEnquiryDetails = {\n added: Array.from(newAddedEnquiryDetailsMap.values()),\n removed: newRemoveEnquiryDetailIds\n }\n\n form.change(\"changedEnquiryDetails\", changedEnquiryDetails);\n };\n\n const handleRemoveItemsFromEnquiry = (requisitionDetailIds: Array<Identifier>) => {\n const newEnquiriesDetailsMap = new Map(enquiryDetailsMap);\n const newAddedEnquiryDetailsMap = new Map(addedEnquiryDetailsMap);\n let newRemoveEnquiryDetailIds = removedEnquiryDetailIds;\n\n requisitionDetailIds.forEach((requisitionDetailId) => {\n const enquiryDetailId = requisitionEnquiryDetailIdsMap?.get(requisitionDetailId);\n newEnquiriesDetailsMap?.delete(enquiryDetailId);\n requisitionEnquiryDetailIdsMap?.delete(requisitionDetailId);\n\n if(originalRequisitionEnquiryDetailIdsMap?.has(requisitionDetailId) && !newRemoveEnquiryDetailIds?.includes(enquiryDetailId)){\n newRemoveEnquiryDetailIds?.push(enquiryDetailId);\n }\n\n newAddedEnquiryDetailsMap?.delete(enquiryDetailId);\n });\n\n const enquiryDetails = Array.from(newEnquiriesDetailsMap.values());\n setEnquiryDetailsMap(newEnquiriesDetailsMap);\n\n setAddedEnquiryDetailsMap(newAddedEnquiryDetailsMap);\n setRemovedEnquiryDetailIds(newRemoveEnquiryDetailIds);\n\n\n if (enquiryDetails?.length) {\n form.change(\"enquiryDetails\", enquiryDetails);\n } else {\n form.change(\"enquiryDetails\", null);\n }\n\n const changedEnquiryDetails = {\n added: Array.from(newAddedEnquiryDetailsMap.values()),\n removed: newRemoveEnquiryDetailIds\n }\n\n form.change(\"changedEnquiryDetails\", changedEnquiryDetails);\n };\n\n const handleAddVendorsToEnquiry = (selectedIds: Array<Identifier>) => {\n let newVendorIds: Array<Identifier> = vendorIds;\n let newRemovedVendorIds = removedVendorIds;\n let newAddedVendorIds = addedVendorIds;\n\n selectedIds?.forEach((id) => {\n const allVendorsRecord = allVendorsMap.get(id);\n\n if (!enquiryVendorsMap.has(id)) {\n const newVendorRecord = {\n ...allVendorsRecord,\n ...{\n isNew: true,\n },\n };\n\n enquiryVendorsMap.set(id, newVendorRecord);\n newVendorIds.push(id);\n\n if(!newAddedVendorIds?.includes(id) \n && !originalVendorIds?.includes(id)){\n newAddedVendorIds.push(id)\n }\n }\n\n if(newRemovedVendorIds?.includes(id)){\n newRemovedVendorIds = newRemovedVendorIds?.filter((vendorId) => vendorId !== id);\n }\n\n });\n\n setVendorIds(newVendorIds);\n if (newVendorIds && newVendorIds.length) {\n form.change(\"vendorIds\", newVendorIds);\n } else {\n form.change(\"vendorIds\", null);\n }\n\n setAddedVendorIds(newAddedVendorIds);\n setRemovedVendorIds(newRemovedVendorIds);\n \n const vendorChanges = {\n added: newAddedVendorIds,\n removed: newRemovedVendorIds,\n }\n form.change(\"vendorChanges\", vendorChanges);\n };\n\n const handleRemoveVendorsFromEnquiry = (selectedIds: Array<Identifier>) => {\n let newVendorIds: Identifier[] = vendorIds;\n let newAddedVendorIds = addedVendorIds;\n let newRemovedVendorIds = removedVendorIds;\n\n selectedIds?.forEach((id) => {\n const allVendorsRecord = allVendorsMap.get(id);\n const toggledVendorId = allVendorsRecord.vendorId;\n\n if (enquiryVendorsMap.has(id)) {\n enquiryVendorsMap.delete(id);\n const newRecordIndex = vendorIds.indexOf(toggledVendorId);\n newVendorIds = [\n ...newVendorIds.splice(0, newRecordIndex),\n ...newVendorIds.splice(newRecordIndex + 1),\n ];\n\n if(newAddedVendorIds?.includes(id)){\n newAddedVendorIds = newAddedVendorIds?.filter((vendorId) => vendorId !== id);\n }\n\n if(!newRemovedVendorIds?.includes(id) \n && originalVendorIds?.includes(id)){\n newRemovedVendorIds.push(id);\n }\n }\n });\n \n setRemovedVendorIds(newRemovedVendorIds);\n setAddedVendorIds(newAddedVendorIds);\n\n setVendorIds(newVendorIds);\n if (newVendorIds && newVendorIds.length) {\n form.change(\"vendorIds\", newVendorIds);\n } else {\n form.change(\"vendorIds\", null);\n }\n\n const vendorChanges = {\n added: newAddedVendorIds,\n removed: newRemovedVendorIds,\n }\n form.change(\"vendorChanges\", vendorChanges);\n };\n\n return (\n <>\n <RequisitionSummaryContainer />\n\n {selectedRequisitionId && (\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.enquiry.input.title\"\n subTitle=\"resources.enquiries.sections.enquiry.input.subTitle\"\n />\n )}\n\n {selectedRequisitionId && (\n <Box className={classes.enquiryLayout1}>\n <TextInput\n source=\"code\"\n helperText=\"resources.enquiries.help.code\"\n validate={[required()]}\n />\n <ReferenceInput\n label=\"resources.enquiries.fields.currencyId\"\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n validate={[required()]}\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.enquiries.help.currencyId\"\n resettable={true}\n />\n </ReferenceInput>\n </Box>\n )}\n\n {selectedRequisitionId && (\n <Box className={classes.enquiryLayout2}>\n <DateTimeInput\n label=\"resources.enquiries.fields.bidStartDate\"\n source=\"bidStartDate\"\n helperText=\"resources.enquiries.help.bidStartDate\"\n validate={validations.bidStartDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n />\n\n <DateTimeInput\n label=\"resources.enquiries.fields.bidEndDate\"\n source=\"bidEndDate\"\n helperText=\"resources.enquiries.help.bidEndDate\"\n validate={validations.bidEndDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n />\n\n <DateTimeInput\n label=\"resources.enquiries.fields.preferredDeliveryDate\"\n source=\"preferredDeliveryDate\"\n helperText=\"resources.enquiries.help.preferredDeliveryDate\"\n validate={validations.preferredDeliveryDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n />\n </Box>\n )}\n\n {selectedRequisitionId && (\n <Fragment>\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.items.input.title\"\n subTitle=\"resources.enquiries.sections.items.input.subTitle\"\n />\n <DefaultList\n resource={RESOURCE_NAME_REQUISITION_DETAILS}\n basePath=\"/\"\n exporter={false}\n perPage={DEFAULT_PER_PAGE}\n title=\"Enquiries\"\n showBreadcrumbs={false}\n sort={{ field: \"sortOrder\", order: \"ASC\" }}\n filters={<ItemListFilters />}\n filter={{\n requisitionId: selectedRequisitionId,\n openRequisitionDetailsForEnquiry: selectedEnquiryId,\n }}\n syncWithLocation={false}\n listRowActions={false}\n actions={false}\n bulkActionButtons={\n <EnquiryBulkActionButtons\n handleAddItemsToEnquiry={handleAddItemsToEnquiry}\n handleRemoveItemsFromEnquiry={handleRemoveItemsFromEnquiry}\n />\n }\n empty={\n <EmptyState\n title=\"resources.enquiries.sections.items.emptyState\"\n subTitle={null}\n Icon={itemResource.icon}\n className={classes.emptyStateContainer}\n iconClassName={classes.emptyStateIcon}\n />\n }\n className={classes.itemsGrid}\n >\n <Datagrid\n rowStyle={embeddedDataGridRowStyle(hasRequisitionDetailsId)}\n expand={\n <SingleItemShowContainer\n procureAccountId={record?.procureAccountId}\n />\n }\n >\n <TextField\n source=\"sortOrder\"\n label=\"resources.enquiries.fields.serialNum\"\n />\n <ReferenceField\n label=\"resources.enquiries.fields.itemId\"\n source=\"itemId\"\n reference={RESOURCE_NAME_ITEM}\n link={false}\n >\n <TruncatedTextField\n source=\"displayLabel\"\n truncateLength={250}\n />\n </ReferenceField>\n\n <NumberField source=\"quantity\" />\n\n <ReferenceField\n label=\"resources.enquiries.fields.uomId\"\n source=\"uomId\"\n reference={RESOURCE_NAME_UOM}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n {record?.showUnitPrice2 && <NumberField source=\"quantity2\" />}\n\n {record?.showUnitPrice2 && (\n <ReferenceField\n label=\"resources.enquiries.fields.uom2Id\"\n source=\"uom2Id\"\n reference={RESOURCE_NAME_UOM}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n\n <TruncatedTextField\n source=\"make\"\n label=\"resources.enquiries.fields.make\"\n truncateLength={25}\n />\n <TruncatedTextField\n source=\"size\"\n label=\"resources.enquiries.fields.size\"\n truncateLength={25}\n />\n <RichTextField\n source=\"specifications\"\n label=\"resources.enquiries.fields.specifications\"\n />\n <TruncatedTextField\n source=\"comments\"\n label=\"resources.enquiries.fields.comments\"\n truncateLength={25}\n />\n </Datagrid>\n </DefaultList>\n </Fragment>\n )}\n\n {selectedRequisitionId && (\n <Fragment>\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.vendors.input.title\"\n subTitle=\"resources.enquiries.sections.vendors.input.subTitle\"\n />\n <DefaultList\n resource={RESOURCE_NAME_VENDOR}\n basePath=\"/\"\n exporter={false}\n perPage={DEFAULT_PER_PAGE}\n title=\"Vendors\"\n showBreadcrumbs={false}\n sort={{ field: \"id\", order: \"ASC\" }}\n filters={<VendorListFilters />}\n syncWithLocation={false}\n listRowActions={false}\n actions={false}\n bulkActionButtons={\n <VendorsBulkActionButtons\n handleAddVendorsToEnquiry={handleAddVendorsToEnquiry}\n handleRemoveVendorsFromEnquiry={handleRemoveVendorsFromEnquiry}\n />\n }\n empty={\n <EmptyState\n title=\"resources.enquiries.sections.vendors.emptyState\"\n subTitle={null}\n Icon={vendorResource.icon}\n className={classes.emptyStateContainer}\n iconClassName={classes.emptyStateIcon}\n />\n }\n >\n <Datagrid\n rowStyle={embeddedDataGridRowStyle(hasVendorId)}\n expand={<SingleVendorShowContainer />}\n >\n <TextField\n source=\"displayLabel\"\n label=\"resources.enquiries.fields.vendorAccountName\"\n sortable={false}\n />\n <TextField\n source=\"vendorAccount.primaryUser.fullName\"\n label=\"resources.enquiries.fields.vendorPrimaryUserName\"\n sortable={false}\n />\n <EmailField\n source=\"vendorAccount.primaryUser.email\"\n label=\"resources.enquiries.fields.vendorPrimaryUserEmail\"\n sortable={false}\n />\n </Datagrid>\n </DefaultList>\n </Fragment>\n )}\n\n <AccordionField\n headerlabel=\"resources.enquiries.sections.conditions.input.title\"\n headerTooltip=\"resources.enquiries.sections.conditions.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <Box>\n <SectionTitleSubtitle title=\"resources.enquiries.sections.conditions.input.heading\" />\n <ArrayInput source=\"conditions\" label={false}>\n <SimpleFormIterator classes={arrayInputClasses}>\n <TextInput\n source=\"conditionType\"\n label=\"resources.enquiries.fields.conditionType\"\n helperText=\"resources.enquiries.help.conditionType\"\n resettable={true}\n validate={[required()]}\n />\n <TextInput\n multiline\n fullWidth={true}\n source=\"condition\"\n label=\"resources.enquiries.fields.condition\"\n helperText=\"resources.enquiries.help.condition\"\n resettable={true}\n validate={[required()]}\n />\n </SimpleFormIterator>\n </ArrayInput>\n </Box>\n </AccordionField>\n\n <AccordionField\n headerlabel=\"resources.enquiries.sections.remarks.input.title\"\n headerTooltip=\"resources.enquiries.sections.remarks.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <RichTextInput\n source=\"remarks\"\n helperText=\"resources.bids.help.remarks\"\n label={false}\n />\n </AccordionField>\n\n <AccordionField\n headerlabel=\"resources.enquiries.sections.fileUpload.input.title\"\n headerTooltip=\"resources.enquiries.sections.fileUpload.input.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <MediaInputField showUploadedFiles={true} />\n </Box>\n </AccordionField>\n\n <CommentsAccordion\n ownerEntityType={OwnerEntityTypes.ENQUIRY}\n ownerEntityId={record?.id}\n isViewOnly={false}\n />\n </>\n );\n};\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n itemsGrid: {\n \"& div:nth-of-type(2) .MuiPaper-root\": {\n width: \"95vw\",\n whiteSpace: \"nowrap\",\n overflowX: \"auto\",\n },\n },\n account: { display: \"block\", width: 544 },\n\n vendor: { display: \"block\", width: 544 },\n arrayInput: { display: \"flex\", flexDirection: \"column\" },\n formIterator: { form: { display: \"flex\" } },\n arrayField: { padding: \"4px\" },\n remarksAccordion: {\n width: \"100%\",\n marginTop: 25,\n },\n enquiryLayout1: {\n width: \"100%\",\n display: \"grid\",\n paddingLeft: 15,\n gridTemplateColumns: \"1fr 1fr\",\n gridGap: 35,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n enquiryLayout2: {\n width: \"100%\",\n display: \"grid\",\n paddingLeft: 15,\n paddingTop: 15,\n paddingBottom: 15,\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gridGap: 15,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n emptyStateContainer: {\n width: \"100%\",\n // display: \"flex\",\n // flexDirection: \"column\",\n // alignItems: \"flex-start\"\n },\n emptyStateIcon: {\n width: \"1.25em\",\n height: \"1.25em\",\n alignSelf: \"center\",\n },\n })\n);\n\nconst useArrayInputStyles = makeStyles((theme) => ({\n form: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 3fr\",\n gridColumnGap: 50,\n [theme.breakpoints.down(\"sm\")]: { gridTemplateColumns: \"100%\" },\n },\n}));\n\nexport { EnquiryEditContainer };\n","import { Box } from \"@material-ui/core\";\nimport {\n Datagrid,\n DateField,\n List,\n Loading,\n NumberField,\n ReferenceField,\n ResourceContextProvider,\n SelectField,\n TextField,\n useRecordContext,\n} from \"react-admin\";\nimport { ApprovalStatusField, FILTER_DIRECTION, RecordStatusField } from \"../../../common\";\nimport { SectionTitleSubtitle } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\nimport {\n BidShowContent,\n RESOURCE_NAME_BID,\n} from \"../../bids\";\n\nconst EnquiryShowBids= (props) => {\n const record = useRecordContext(props);\n const enquiryId = record?.id;\n\n if (!enquiryId) {\n return <Loading />\n }\n return (\n <Box>\n <SectionTitleSubtitle\n title=\"resources.enquiries.sections.bids.field.title\"\n subTitle=\"resources.enquiries.sections.bids.field.subTitle\"\n />\n <ResourceContextProvider value={RESOURCE_NAME_BID}>\n <List\n basePath={`/${RESOURCE_NAME_BID}`}\n filter={{\n enquiryId,\n direction: FILTER_DIRECTION.RECEIVED\n }}\n perPage={5}\n sort={{ field: \"id\", order: \"ASC\" }}\n title=\"resources.enquiries.sections.bids.field.title\"\n actions={false}\n syncWithLocation={false}\n bulkActionButtons={false}\n >\n <Datagrid optimized expand={<BidShowContent showEnquiryDetail={false} />}>\n <ReferenceField\n source=\"vendorAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <NumberField\n source=\"totalAmount\"\n label=\"resources.bids.fields.totalAmount\"\n />\n <NumberField\n source=\"totalAmount2\"\n label=\"resources.bids.fields.totalAmount2\"\n />\n <RecordStatusField label=\"common.fields.status\" />\n\n <ApprovalStatusField label=\"common.fields.approvalStatus\" />\n <DateField\n source=\"updatedAt\"\n options={COMMON_DATE_TIME_FORMAT}\n label=\"resources.bids.fields.updatedAt\"\n />\n </Datagrid>\n </List>\n </ResourceContextProvider>\n </Box>\n );\n};\n\nexport { EnquiryShowBids };\n","import React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n useMediaQuery,\n Divider,\n Tabs,\n Tab,\n Theme,\n} from \"@material-ui/core\";\n\nimport {\n TextField,\n ReferenceField,\n DateField,\n BooleanField,\n useListContext,\n Identifier,\n useGetList,\n ListContextProvider,\n Datagrid,\n DatagridProps,\n SelectField,\n usePermissions,\n} from \"react-admin\";\nimport { RESOURCE_NAME_REQUISITION } from \"../../requisitions/constants\";\nimport {\n RESOURCE_NAME_ENQUIRY,\n} from \"../constants\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\nimport { ListRowActions } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT, hasAccess } from \"../../../lib/core\";\nimport { DEFAULT_PER_PAGE } from \"../../../lib/common\";\nimport { requisitionPermissions } from \"../../requisitions\";\nimport { FILTER_DIRECTION, getProcEntityRecordStatusRowStyle, PROC_ENTITY_RECORD_STATUS_CHOICES } from \"../../../common\";\n\nconst tabs = [\n { id: FILTER_DIRECTION.SENT, name: FILTER_DIRECTION.SENT },\n { id: FILTER_DIRECTION.RECEIVED, name: FILTER_DIRECTION.RECEIVED },\n];\n\nconst useGetTotals = (filterValues: any) => {\n const { total: totalSent } = useGetList(\n RESOURCE_NAME_ENQUIRY,\n { page: 1, perPage: DEFAULT_PER_PAGE },\n { field: \"updatedAt\", order: \"DESC\" },\n { ...filterValues, direction: FILTER_DIRECTION.SENT }\n );\n const { total: totalReceived } = useGetList(\n RESOURCE_NAME_ENQUIRY,\n { page: 1, perPage: DEFAULT_PER_PAGE },\n { field: \"updatedAt\", order: \"DESC\" },\n { ...filterValues, direction: FILTER_DIRECTION.RECEIVED }\n );\n\n return {\n sent: totalSent,\n received: totalReceived,\n };\n};\n\ninterface TabbedDatagridProps extends DatagridProps {}\n\nconst EnquiryTabbedDatagrid= (props:TabbedDatagridProps) => {\n const listContext = useListContext();\n const { ids, filterValues, setFilters, displayedFilters } = listContext;\n\n\n const isSmall = useMediaQuery<Theme>((theme) => theme.breakpoints.down(\"sm\"));\n\n const [received, setReceived] = useState<Identifier[]>([] as Identifier[]);\n const [sent, setSent] = useState<Identifier[]>([] as Identifier[]);\n\n const totals = useGetTotals(filterValues) as any;\n\n const { loading: permissionsLoading, permissions } = usePermissions();\n const hasRequisitionsListAccess =\n !permissionsLoading && hasAccess(permissions, requisitionPermissions.list);\n\n useEffect(() => {\n if (ids && ids !== filterValues.direction) {\n switch (filterValues.direction) {\n case FILTER_DIRECTION.SENT:\n setSent(ids);\n break;\n case FILTER_DIRECTION.RECEIVED:\n setReceived(ids);\n break;\n }\n }\n }, [ids, filterValues.direction]);\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<{}>, value: any) => {\n setFilters &&\n setFilters({ ...filterValues, direction: value }, displayedFilters);\n },\n [displayedFilters, filterValues, setFilters]\n );\n\n return (\n <Fragment>\n <Tabs\n variant=\"fullWidth\"\n centered\n value={filterValues.direction}\n indicatorColor=\"primary\"\n onChange={handleChange}\n >\n {tabs.map((choice) => (\n <Tab\n key={choice.id}\n label={\n totals[choice.name]\n ? `${choice.name} (${totals[choice.name]})`\n : choice.name\n }\n value={choice.id}\n />\n ))}\n </Tabs>\n <Divider />\n {isSmall ? (\n <div>\n {filterValues.direction === FILTER_DIRECTION.SENT && (\n <ListContextProvider value={{ ...listContext, ids: sent }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <TextField source=\"name\" />\n\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n {filterValues.direction === FILTER_DIRECTION.RECEIVED && (\n <ListContextProvider value={{ ...listContext, ids: received }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <TextField source=\"name\" />\n\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n </div>\n ) : (\n <div>\n {filterValues.direction === FILTER_DIRECTION.SENT && (\n <ListContextProvider value={{ ...listContext, ids: sent }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <TextField source=\"code\" />\n <ReferenceField\n source=\"accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n {hasRequisitionsListAccess && (\n <ReferenceField\n source=\"requisitionId\"\n reference={RESOURCE_NAME_REQUISITION}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n <DateField\n source=\"bidStartDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n <DateField\n source=\"bidEndDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n <DateField\n source=\"preferredDeliveryDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n <SelectField \n label=\"common.fields.approvalStatus\"\n source=\"status\" \n choices={PROC_ENTITY_RECORD_STATUS_CHOICES} \n />\n <DateField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n {filterValues.direction === FILTER_DIRECTION.RECEIVED && (\n <ListContextProvider value={{ ...listContext, ids: received }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <TextField source=\"name\" />\n <ReferenceField\n source=\"accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField\n source=\"bidStartDate\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <DateField\n source=\"bidEndDate\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <DateField\n source=\"preferredDeliveryDate\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <SelectField \n label=\"common.fields.status\"\n source=\"status\" \n choices={PROC_ENTITY_RECORD_STATUS_CHOICES} \n />\n <DateField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n </div>\n )}\n </Fragment>\n );\n};\n\nexport { EnquiryTabbedDatagrid };\n","import { Dispatch } from \"react\";\nimport { Identifier, NotificationType, Record } from \"react-admin\";\n\nexport interface BidComparisonItem {\n bidId: Identifier;\n vendorAccountId: Identifier;\n unitPrice: number;\n unitPrice2?: number;\n amount: number;\n amount2?: number;\n estimatedDeliveryDate?: Date;\n isLowestUnitPrice: boolean;\n isLowestUnitPrice2?: boolean;\n isQuickestDeliveryDate?: boolean;\n}\n\ntype IDName = {\n id: Identifier;\n name: string;\n};\n\ntype IDCode = {\n id: Identifier;\n code: string;\n};\n\ntype Amounts = {\n amount: number;\n amount2: number;\n};\n\nexport interface PriceComponent extends Partial<Record> {\n name: string;\n value: number;\n unitType: number;\n totals?: {\n bid: [\n {\n id: Identifier;\n bidId: Identifier;\n amount: number;\n amount2?: number;\n }\n ];\n optimal?: Amounts;\n };\n}\n\nexport const unitTypeChoices = [\n { id: 1, name: \"Flat\" },\n { id: 2, name: \"%\" },\n];\n\nexport interface BidsComparisonCalc extends Partial<Record> {\n enquiry: {\n id: Identifier;\n code: string;\n preparedBy: IDName;\n preparedDate: Date;\n showUnitPrice2: boolean;\n currency: IDName;\n requisition: {\n id: Identifier;\n code: string;\n businessFunction?: {\n id: Identifier;\n number: string;\n name: string;\n }\n }\n\n bidDates: {\n start: Date;\n end: Date;\n preferredDeliveryDate: Date;\n };\n };\n summary: [\n {\n header: {\n item: {\n id: Identifier;\n name: string;\n sortOrder: number;\n };\n quantity: number;\n uom: {\n id: Identifier;\n name: string;\n };\n quantity2: number;\n uom2: {\n id: Identifier;\n name: string;\n };\n };\n bids: [\n {\n bidId: Identifier;\n detail: BidComparisonItem;\n }\n ];\n optimal: {\n lowestUnitPrice: {\n price: number;\n amount: string;\n };\n lowestUnitPrice2: {\n price: number;\n amount: string;\n };\n quickestDeliveryDate: Date;\n };\n }\n ];\n bidIds: Identifier[];\n vendorAccounts: IDName[];\n totals: {\n bid: [\n {\n bidId: Identifier;\n bidAmounts: {\n totalAmount: number;\n totalAmount2: number;\n priceComponents?: {\n subTotals: Amounts;\n grandTotals: Amounts;\n };\n };\n priceComponents: {\n subTotals: Amounts;\n grandTotals: Amounts;\n };\n }\n ];\n optimal: {\n bid: Amounts;\n subTotal?: Amounts;\n grandTotal?: Amounts;\n };\n };\n excluded: {\n items?: IDName[];\n vendorAccounts?: IDName[];\n };\n priceComponents: PriceComponent[];\n}\n\nexport enum BidComparisonCalculationActionTypes {\n INIT,\n LOADING_BID_CALCULATIONS,\n ENQUIRY_LOADED,\n BID_COM_DATA_POPULATE,\n ITEM_TOGGLED,\n VENDOR_ACCOUNT_TOGGLED,\n OPEN_MANAGE_PRICE_COMPONENTS_DIALOG,\n CLOSE_MANAGE_PRICE_COMPONENTS_DIALOG,\n RECALCULATE_PRICE_COMPONENTS,\n}\n\nexport interface BidComparisonState {\n isLoading: boolean;\n isInitialized: boolean;\n hasData: boolean;\n excludedItemIds: Set<Identifier>;\n excludedVendorAccountIds: Set<Identifier>;\n bidsComparisonCalc: BidsComparisonCalc | null;\n priceComponents: PriceComponent[];\n isManagePriceComponentsDialogOpen: boolean;\n shouldRecalculate: boolean;\n}\n\n\nexport type BidComparisonCalculationActions =\n |\n {\n type: BidComparisonCalculationActionTypes.INIT;\n }\n |\n {\n type: BidComparisonCalculationActionTypes.LOADING_BID_CALCULATIONS;\n }\n |\n {\n type: BidComparisonCalculationActionTypes.ENQUIRY_LOADED;\n payload: {\n excludedItemIds: Identifier[],\n excludedVendorAccountIds: Identifier[],\n priceComponents: PriceComponent[],\n }\n }\n |\n {\n type: BidComparisonCalculationActionTypes.BID_COM_DATA_POPULATE;\n payload: {\n bidsComparisonCalc: BidsComparisonCalc,\n }\n }\n |\n {\n type: BidComparisonCalculationActionTypes.ITEM_TOGGLED;\n payload: {\n itemId: Identifier;\n checked: boolean;\n notify: (message: string,\n type?: NotificationType,\n messageArgs?: any,\n undoable?: boolean,\n ) => void;\n };\n }\n |\n {\n type: BidComparisonCalculationActionTypes.VENDOR_ACCOUNT_TOGGLED;\n payload: {\n vendorAccountId: Identifier;\n checked: boolean;\n notify: (message: string,\n type?: NotificationType,\n messageArgs?: any,\n undoable?: boolean,\n ) => void;\n };\n }\n |\n {\n type: BidComparisonCalculationActionTypes.OPEN_MANAGE_PRICE_COMPONENTS_DIALOG;\n }\n |\n {\n type: BidComparisonCalculationActionTypes.CLOSE_MANAGE_PRICE_COMPONENTS_DIALOG;\n }\n |\n {\n type: BidComparisonCalculationActionTypes.RECALCULATE_PRICE_COMPONENTS,\n payload: {\n priceComponents: PriceComponent[],\n }\n\n }\n\nexport interface BidComparisonCalculationContextProps {\n state?: BidComparisonState;\n dispatch?: Dispatch<BidComparisonCalculationActions>;\n}","import { createContext } from \"react\";\nimport { BidComparisonCalculationContextProps } from \"../types\";\n\nconst BidComparisonCalculationContext = createContext<BidComparisonCalculationContextProps>({});\n\nBidComparisonCalculationContext.displayName = \"BidComparisonCalculationContext\";\n\nexport { BidComparisonCalculationContext };\n","import {\n BidComparisonState,\n BidComparisonCalculationActions,\n BidComparisonCalculationActionTypes,\n} from \"../types\";\n\nexport const bidComparisonCalculationReducer = (\n newState: BidComparisonState,\n action: BidComparisonCalculationActions\n): BidComparisonState => {\n switch (action.type) {\n case BidComparisonCalculationActionTypes.INIT: {\n return newState;\n }\n\n case BidComparisonCalculationActionTypes.LOADING_BID_CALCULATIONS: {\n return {\n ...newState,\n isLoading: true,\n shouldRecalculate: false,\n };\n }\n\n case BidComparisonCalculationActionTypes.ENQUIRY_LOADED: {\n const excludedItemIds = new Set(action.payload.excludedItemIds);\n const excludedVendorAccountIds = new Set(action.payload.excludedVendorAccountIds);\n const priceComponents = action.payload.priceComponents;\n\n return {\n ...newState,\n excludedItemIds,\n excludedVendorAccountIds,\n priceComponents,\n isLoading: true,\n shouldRecalculate: true,\n };\n }\n\n case BidComparisonCalculationActionTypes.BID_COM_DATA_POPULATE: {\n const bidsComparisonCalc = action.payload.bidsComparisonCalc;\n const hasData = bidsComparisonCalc?.summary?.length > 0;\n \n return {\n ...newState,\n bidsComparisonCalc,\n hasData,\n isLoading: false,\n shouldRecalculate: false,\n }\n }\n\n case BidComparisonCalculationActionTypes.ITEM_TOGGLED: {\n const itemId = action.payload.itemId;\n const checked = action.payload.checked;\n const notify = action.payload.notify;\n let newExcludedItemIds = newState.excludedItemIds;\n const bidsComparisonCalc = newState.bidsComparisonCalc;\n\n if (checked) {\n const isLastRecordChecked = bidsComparisonCalc?.summary?.length === 1;\n if (isLastRecordChecked) {\n notify(\n \"resources.bidsComparison.messages.lastItemChecked\",\n \"warning\",\n );\n } else {\n newExcludedItemIds = newExcludedItemIds.add(itemId);\n }\n } else {\n newExcludedItemIds.delete(itemId);\n }\n const excludedItemIds = new Set(newExcludedItemIds);\n\n return {\n ...newState,\n excludedItemIds,\n shouldRecalculate: true,\n };\n }\n\n case BidComparisonCalculationActionTypes.VENDOR_ACCOUNT_TOGGLED: {\n const vendorAccountId = action.payload.vendorAccountId;\n const checked = action.payload.checked;\n const notify = action.payload.notify;\n let newExcludedVendorAccountIds = newState.excludedVendorAccountIds;\n const bidsComparisonCalc = newState.bidsComparisonCalc;\n\n if (checked) {\n const isLastRecordChecked =\n bidsComparisonCalc?.vendorAccounts?.length === 1;\n if (isLastRecordChecked) {\n notify(\n \"resources.bidsComparison.messages.lastVendorAccountChecked\",\n \"warning\"\n );\n } else {\n newExcludedVendorAccountIds =\n newExcludedVendorAccountIds.add(vendorAccountId);\n }\n } else {\n newExcludedVendorAccountIds.delete(vendorAccountId);\n }\n\n const excludedVendorAccountIds = new Set(newExcludedVendorAccountIds);\n\n return {\n ...newState,\n excludedVendorAccountIds,\n shouldRecalculate: true,\n };\n }\n\n case BidComparisonCalculationActionTypes.OPEN_MANAGE_PRICE_COMPONENTS_DIALOG: {\n return {\n ...newState,\n isManagePriceComponentsDialogOpen: true,\n }\n }\n\n case BidComparisonCalculationActionTypes.CLOSE_MANAGE_PRICE_COMPONENTS_DIALOG: {\n return {\n ...newState,\n isManagePriceComponentsDialogOpen: false,\n }\n }\n\n case BidComparisonCalculationActionTypes.RECALCULATE_PRICE_COMPONENTS: {\n const priceComponents = action.payload.priceComponents;\n\n return {\n ...newState,\n priceComponents,\n isManagePriceComponentsDialogOpen: false,\n shouldRecalculate: true,\n }\n }\n }\n\n\n return newState;\n};\n","import { FC, Fragment, useContext } from \"react\";\nimport {\n makeStyles,\n Paper,\n Theme,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n createStyles,\n Tooltip,\n Checkbox,\n Box,\n} from \"@material-ui/core\";\nimport CompareIcon from \"@material-ui/icons/Compare\";\nimport { format } from \"date-fns\";\nimport { ClassNameMap } from \"@material-ui/styles\";\nimport {\n useTranslate,\n NumberField,\n Identifier,\n SelectInput,\n useNotify,\n} from \"react-admin\";\nimport { DATE_FORMAT_STANDARD_DATE_TIME } from \"../../../lib/core\";\nimport {\n COLOR_ODD_CELL,\n COLOR_EVEN_CELL,\n COLOR_HIGHLIGHT_CELL,\n COLOR_OPTIMAL_BACKGROUND_CELL,\n COLOR_OPTIMAL_FOREGROUND_CELL,\n} from \"../constants\";\nimport { TruncatedTextField } from \"../../../lib/components/controls/fields/TruncatedTextField\";\nimport { EmptyState, SectionTitleSubtitle } from \"../../../lib/components\";\nimport { BidComparisonCalculationActionTypes } from \"./types\";\nimport { BidComparisonCalculationContext } from \"./context\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n tableContainer: {\n width: \"100%\",\n marginLeft: theme.spacing(2),\n },\n tableWrapper: {\n maxHeight: 1024,\n overflowX: \"auto\",\n },\n table: {\n borderSpacing: 1,\n },\n firstColumn: {\n width: \"30%\",\n },\n vendorCell: {\n \"&:nth-of-type(odd)\": {\n backgroundColor: COLOR_EVEN_CELL,\n },\n \"&:nth-of-type(even)\": {\n backgroundColor: COLOR_ODD_CELL,\n },\n },\n oddCell: {\n backgroundColor: COLOR_ODD_CELL,\n whiteSpace: \"nowrap\",\n },\n evenCell: {\n backgroundColor: COLOR_EVEN_CELL,\n whiteSpace: \"nowrap\",\n },\n headerCell: {\n whiteSpace: \"nowrap\",\n },\n dataCell: {\n whiteSpace: \"nowrap\",\n },\n item: {\n maxWidth: 85,\n },\n normalValue: {},\n bestValue: {\n backgroundColor: COLOR_HIGHLIGHT_CELL,\n cursor: \"pointer\",\n },\n optimal: {\n whiteSpace: \"nowrap\",\n color: COLOR_OPTIMAL_FOREGROUND_CELL,\n backgroundColor: COLOR_OPTIMAL_BACKGROUND_CELL,\n fontWeight: 500,\n },\n total: {\n fontWeight: 500,\n },\n excludedDataContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n width: \"25vw\",\n paddingTop: 5,\n paddingBottom: 50,\n marginLeft: theme.spacing(4),\n },\n excludedDataSelect: {\n paddingLeft: 5,\n paddingRight: 25,\n marginLeft: theme.spacing(2),\n marginBottom: theme.spacing(4),\n },\n })\n);\n\nconst ValueCell: FC<{\n value: string;\n classes: ClassNameMap<string>;\n bestValue?: boolean;\n tooltip?: string;\n isEvenRow?: boolean;\n}> = ({ value, classes, bestValue, tooltip, isEvenRow }) => {\n const valueClassName = bestValue ? classes.bestValue : classes.normalValue;\n const colorClassName = isEvenRow ? classes.evenCell : classes.oddCell;\n const className = `${valueClassName} ${colorClassName}`;\n\n if (bestValue && tooltip) {\n return (\n <TableCell align=\"center\" className={className}>\n <Tooltip title={tooltip}>\n <div>{value}</div>\n </Tooltip>\n </TableCell>\n );\n } else {\n return (\n <TableCell align=\"center\" className={className}>\n {value}\n </TableCell>\n );\n }\n};\n\nconst nf = new Intl.NumberFormat();\n\nconst BidsComparisonTable = () => {\n const classes = useStyles();\n const translate = useTranslate();\n const notify = useNotify();\n const { state, dispatch } = useContext(BidComparisonCalculationContext);\n\n const data = state?.bidsComparisonCalc;\n const showUnitPrice2 = state?.bidsComparisonCalc?.enquiry?.showUnitPrice2;\n const COLSPAN_TITLE = showUnitPrice2 ? 4 : 3;\n const COLSPAN_VENDOR = showUnitPrice2 ? 5 : 3;\n const COLSPAN_OPTIMAL_VALUES = showUnitPrice2 ? 5 : 3;\n\n const isLowestUnitPriceLabel = translate(\n \"resources.bidsComparison.components.bidComparisonTable.tooltip.isLowestUnitPriceLabel\"\n );\n const isLowestUnitPrice2Label = translate(\n \"resources.bidsComparison.components.bidComparisonTable.tooltip.isLowestUnitPrice2Label\"\n );\n\n const isQuickestDeliveryDateLabel = translate(\n \"resources.bidsComparison.components.bidComparisonTable.tooltip.isQuickestDeliveryDateLabel\"\n );\n\n const bidTotalsLabel = translate(\n \"resources.bidsComparison.components.bidComparisonTable.labels.bidTotals\"\n );\n\n const excludeItemTooltip = translate(\n \"resources.bidsComparison.components.bidComparisonTable.tooltip.excludeItem\"\n );\n const excludeVendorAccountTooltip = translate(\n \"resources.bidsComparison.components.bidComparisonTable.tooltip.excludeVendorAccount\"\n );\n\n const itemToggled = (itemId: Identifier, checked: boolean) => {\n if (dispatch) {\n dispatch({\n type: BidComparisonCalculationActionTypes.ITEM_TOGGLED,\n payload: {\n itemId,\n checked,\n notify,\n },\n });\n }\n };\n\n const vendorAccountToggled = (\n vendorAccountId: Identifier,\n checked: boolean\n ) => {\n if (dispatch) {\n dispatch({\n type: BidComparisonCalculationActionTypes.VENDOR_ACCOUNT_TOGGLED,\n payload: {\n vendorAccountId,\n checked,\n notify,\n },\n });\n }\n };\n\n if (!data?.summary?.length) {\n return (\n <EmptyState\n Icon={CompareIcon}\n title=\"resources.bidsComparison.components.bidComparisonTable.messages.empty.title\"\n subTitle=\"resources.bidsComparison.components.bidComparisonTable.messages.empty.subTitle\"\n />\n );\n }\n\n return (\n <Box>\n <SectionTitleSubtitle\n title=\"resources.bidsComparison.sections.bidComparisons.title\"\n subTitle=\"resources.bidsComparison.sections.bidComparisons.subTitle\"\n />\n <Box className=\"excludedDataContainer\">\n {data?.excluded?.items && data.excluded.items.length > 0 && (\n <SelectInput\n source=\"items\"\n allowEmpty={true}\n choices={data?.excluded?.items}\n record={{\n id: \"\",\n items: data?.excluded?.items,\n }}\n helperText=\"resources.bidsComparison.help.excludedItemId\"\n className={classes.excludedDataSelect}\n onChange={(event) => itemToggled(event?.target?.value, false)}\n />\n )}\n\n {data?.excluded?.vendorAccounts &&\n data.excluded.vendorAccounts.length > 0 && (\n <SelectInput\n source=\"vendorAccounts\"\n allowEmpty={true}\n choices={data?.excluded?.vendorAccounts}\n record={{\n id: \"\",\n vendorAccounts: data?.excluded?.vendorAccounts,\n }}\n helperText=\"resources.bidsComparison.help.excludedVendorAccountId\"\n className={classes.excludedDataSelect}\n clearAlwaysVisible={true}\n onChange={(event) =>\n vendorAccountToggled(event?.target?.value, false)\n }\n />\n )}\n </Box>\n <TableContainer className={classes.tableContainer}>\n <Paper elevation={3} variant=\"elevation\">\n <div className={classes.tableWrapper}>\n <Table\n stickyHeader\n aria-label=\"Bids Comparison Table\"\n className={classes.table}\n >\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={COLSPAN_TITLE}\n align=\"right\"\n className={classes.firstColumn}\n >\n {translate(\"resources.bidsComparison.fields.vendors\")}\n </TableCell>\n {data?.vendorAccounts?.map((vendorAccountRecord, index) => (\n <TableCell\n key={`vendor-${vendorAccountRecord?.id}`}\n colSpan={COLSPAN_VENDOR}\n align=\"center\"\n className={classes.vendorCell}\n >\n <Tooltip title={excludeVendorAccountTooltip}>\n <div>\n <Checkbox\n onChange={(event, checked) =>\n vendorAccountToggled(\n vendorAccountRecord?.id,\n checked\n )\n }\n key={`vendor-${vendorAccountRecord?.id}`}\n />\n {vendorAccountRecord?.name}\n </div>\n </Tooltip>\n </TableCell>\n ))}\n <TableCell\n colSpan={COLSPAN_OPTIMAL_VALUES}\n align=\"center\"\n className={classes.optimal}\n >\n {translate(\n \"resources.bidsComparison.components.bidComparisonTable.labels.optimal\"\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell>#</TableCell>\n <TableCell className={classes.item} align=\"left\">\n {translate(\"resources.bidsComparison.fields.item\")}\n </TableCell>\n <TableCell className={classes.headerCell} align=\"center\">\n {translate(\"resources.bidsComparison.fields.quantity\")}\n </TableCell>\n {showUnitPrice2 && (\n <TableCell className={classes.headerCell} align=\"center\">\n {translate(\"resources.bidsComparison.fields.quantity2\")}\n </TableCell>\n )}\n {data?.vendorAccounts?.map((vendorAccountRecord, index) => {\n const isEvenRow = index % 2 ? true : false;\n const className = isEvenRow\n ? classes.evenCell\n : classes.oddCell;\n return (\n <Fragment key={`vendorHeader-${vendorAccountRecord?.id}`}>\n <TableCell className={className} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.unitPrice\"\n )}\n </TableCell>\n <TableCell className={className} align=\"center\">\n {translate(\"resources.bidsComparison.fields.amount\")}\n </TableCell>\n {showUnitPrice2 && (\n <TableCell className={className} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.unitPrice2\"\n )}\n </TableCell>\n )}\n {showUnitPrice2 && (\n <TableCell className={className} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.amount2\"\n )}\n </TableCell>\n )}\n <TableCell className={className} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.estimatedDeliveryDate\"\n )}\n </TableCell>\n </Fragment>\n );\n })}\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.unitPrice\")}\n </TableCell>\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.amount\")}\n </TableCell>\n {showUnitPrice2 && (\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.unitPrice2\")}\n </TableCell>\n )}\n {showUnitPrice2 && (\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.amount2\")}\n </TableCell>\n )}\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.estimatedDeliveryDate\"\n )}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {data?.summary?.map((row, index) => {\n const record = {\n id: row?.header?.item?.id,\n header: row?.header,\n optimal: row?.optimal,\n };\n return (\n <TableRow key={`itemRow-${record?.id}`}>\n <TableCell align=\"center\">{record?.header?.item?.sortOrder}</TableCell>\n <TableCell align=\"left\" className={classes.dataCell}>\n <Tooltip title={excludeItemTooltip}>\n <div>\n <Checkbox\n onChange={(event, checked) =>\n itemToggled(record?.id, checked)\n }\n />\n <TruncatedTextField\n truncateLength={50}\n source=\"header.item.name\"\n record={record}\n />\n </div>\n </Tooltip>\n </TableCell>\n <TableCell className={classes.dataCell} align=\"center\">\n <NumberField source=\"header.quantity\" record={record} />\n   {row?.header?.uom?.name}\n </TableCell>\n {showUnitPrice2 && (\n <TableCell className={classes.dataCell} align=\"center\">\n <NumberField\n source=\"header.quantity2\"\n record={record}\n />\n   {row?.header?.uom2?.name}\n </TableCell>\n )}\n {data?.bidIds?.map((bidId, index) => {\n const matchingBidRows = row?.bids?.filter(\n (bid) => bid.bidId === bidId\n );\n if (matchingBidRows?.length) {\n const bid = matchingBidRows[0];\n const detail = bid?.detail;\n const isEvenRow = index % 2 ? true : false;\n return (\n <Fragment key={`itemsData-${bid?.bidId}`}>\n <ValueCell\n value={nf.format(detail.unitPrice)}\n bestValue={detail.isLowestUnitPrice}\n classes={classes}\n tooltip={isLowestUnitPriceLabel}\n isEvenRow={isEvenRow}\n />\n <ValueCell\n value={nf.format(detail.amount)}\n classes={classes}\n isEvenRow={isEvenRow}\n />\n {showUnitPrice2 && (\n <ValueCell\n value={\n detail.unitPrice2\n ? nf.format(detail.unitPrice2)\n : \"\"\n }\n bestValue={detail.isLowestUnitPrice2}\n classes={classes}\n tooltip={isLowestUnitPrice2Label}\n isEvenRow={isEvenRow}\n />\n )}\n {showUnitPrice2 && (\n <ValueCell\n value={\n detail.amount2\n ? nf.format(detail.amount2)\n : \"\"\n }\n classes={classes}\n isEvenRow={isEvenRow}\n />\n )}\n\n <ValueCell\n value={\n detail.estimatedDeliveryDate\n ? format(\n new Date(detail.estimatedDeliveryDate),\n DATE_FORMAT_STANDARD_DATE_TIME\n )\n : \"\"\n }\n bestValue={detail.isQuickestDeliveryDate}\n classes={classes}\n tooltip={isQuickestDeliveryDateLabel}\n isEvenRow={isEvenRow}\n />\n </Fragment>\n );\n } else {\n return null;\n }\n })}\n <TableCell className={classes.optimal} align=\"center\">\n <NumberField\n source=\"optimal.lowestUnitPrice.price\"\n record={record}\n />\n </TableCell>\n <TableCell className={classes.optimal} align=\"center\">\n <NumberField\n source=\"optimal.lowestUnitPrice.amount\"\n record={record}\n />\n </TableCell>\n {showUnitPrice2 && (\n <TableCell className={classes.optimal} align=\"center\">\n <NumberField\n source=\"optimal.lowestUnitPrice2.price\"\n record={record}\n />\n </TableCell>\n )}\n {showUnitPrice2 && (\n <TableCell className={classes.optimal} align=\"center\">\n <NumberField\n source=\"optimal.lowestUnitPrice2.amount\"\n record={record}\n />\n </TableCell>\n )}\n <TableCell className={classes.optimal} align=\"center\">\n {row?.optimal?.quickestDeliveryDate\n ? format(\n new Date(row?.optimal?.quickestDeliveryDate),\n DATE_FORMAT_STANDARD_DATE_TIME\n )\n : \"\"}\n </TableCell>\n </TableRow>\n );\n })}\n <TableRow>\n <TableCell colSpan={COLSPAN_TITLE} align=\"right\">\n <b>{bidTotalsLabel}</b>\n </TableCell>\n {data?.bidIds?.map((bidId, index) => {\n const matchingBidRows = data?.totals?.bid?.filter(\n (bid) => bid.bidId === bidId\n );\n if (matchingBidRows?.length === 0) {\n return null;\n }\n\n const bid = matchingBidRows[0];\n const record = {\n id: bid.bidId,\n totalAmount: bid?.bidAmounts?.totalAmount,\n totalAmount2: bid?.bidAmounts?.totalAmount2,\n };\n\n return (\n <Fragment key={`bid-totals-${bid?.bidId}`}>\n <TableCell> </TableCell>\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"totalAmount\"\n record={record}\n className={classes.total}\n />\n }\n </TableCell>\n <TableCell> </TableCell>\n {showUnitPrice2 && (\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"totalAmount2\"\n record={record}\n className={classes.total}\n />\n }\n </TableCell>\n )}\n <TableCell> </TableCell>\n </Fragment>\n );\n })}\n\n {showUnitPrice2 && <TableCell> </TableCell>}\n <TableCell align=\"center\" className={classes.optimal}>\n {\n <NumberField\n source=\"amount\"\n record={{\n id: data.enquiry.id,\n amount: data?.totals?.optimal?.bid?.amount,\n }}\n className={classes.total}\n />\n }\n </TableCell>\n {showUnitPrice2 && <TableCell> </TableCell>}\n {showUnitPrice2 && (\n <TableCell align=\"center\" className={classes.optimal}>\n {\n <NumberField\n source=\"amount2\"\n record={{\n id: data.enquiry.id,\n amount2: data?.totals?.optimal?.bid?.amount2,\n }}\n className={classes.total}\n />\n }\n </TableCell>\n )}\n <TableCell> </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n </Paper>\n </TableContainer>\n </Box>\n );\n};\n\nexport { BidsComparisonTable };\n","import { useContext } from \"react\";\nimport {\n makeStyles,\n Theme,\n Box,\n Table,\n TableBody,\n TableCell,\n TableRow,\n createStyles,\n} from \"@material-ui/core\";\nimport { format } from \"date-fns\";\nimport { useTranslate } from \"react-admin\";\nimport grey from \"@material-ui/core/colors/grey\";\nimport { SectionTitleSubtitle } from \"../../../lib/components\";\nimport { BidComparisonCalculationContext } from \"./context\";\nimport { DATE_FORMAT_STANDARD_DATE_TIME, DATE_FORMAT_STANDARD_DAY } from \"../../../lib/core\";\n\nconst COLOR_HEADER_CELL = grey[300];\nconst COLOR_TABLE_BORDER = grey[400];\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n table: {\n width: \"95vw\",\n border: \"1px solid\",\n borderColor: COLOR_TABLE_BORDER,\n borderSpacing: 1,\n marginTop: 10,\n marginBottom: 15,\n marginLeft: theme.spacing(2),\n },\n header: {\n width: \"25%\",\n backgroundColor: COLOR_HEADER_CELL,\n fontWeight: 500,\n paddingTop: 15,\n paddingBottom: 15,\n paddingLeft: 5,\n },\n data: {\n width: \"75%\",\n textAlign: \"left\",\n borderColor: COLOR_TABLE_BORDER,\n paddingTop: 15,\n paddingBottom: 15,\n paddingLeft: 5,\n },\n headerFourCol: {\n width: \"25%\",\n backgroundColor: COLOR_HEADER_CELL,\n fontWeight: 500,\n paddingTop: 15,\n paddingBottom: 15,\n paddingLeft: 5,\n },\n dataFourCol: {\n width: \"25%\",\n textAlign: \"left\",\n borderColor: COLOR_TABLE_BORDER,\n paddingTop: 15,\n paddingBottom: 15,\n paddingLeft: 5,\n },\n })\n);\n\nconst BidsComparisonHeader= () => {\n const translate = useTranslate();\n const classes = useStyles();\n const { state } = useContext(BidComparisonCalculationContext);\n\n const enquiry = state?.bidsComparisonCalc?.enquiry;\n\n const preparedDate = enquiry?.preparedDate\n ? format(new Date(enquiry?.preparedDate), DATE_FORMAT_STANDARD_DATE_TIME)\n : null;\n const bidStartDate = enquiry?.bidDates?.start\n ? format(new Date(enquiry?.bidDates?.start), DATE_FORMAT_STANDARD_DAY)\n : null;\n const bidEndDate = enquiry?.bidDates?.end\n ? format(new Date(enquiry?.bidDates?.end), DATE_FORMAT_STANDARD_DAY)\n : null;\n const preferredDeliveryDate = enquiry?.bidDates?.preferredDeliveryDate\n ? format(new Date(enquiry?.bidDates?.preferredDeliveryDate), DATE_FORMAT_STANDARD_DAY)\n : null;\n const bidDates = `${bidStartDate} - ${bidEndDate}`;\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" marginBottom={2} >\n <SectionTitleSubtitle\n title=\"resources.bidsComparison.sections.enquiryDetail.title\"\n subTitle=\"resources.bidsComparison.sections.enquiryDetail.subTitle\"\n marginLeft={2}\n />\n\n <Table className={classes.table}>\n <TableBody>\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.enquiryNum\")}\n </TableCell>\n <TableCell className={classes.data}>{enquiry?.id}</TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.enquiryCode\")}\n </TableCell>\n <TableCell className={classes.data}>{enquiry?.code}</TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.requisitionNum\")}\n </TableCell>\n <TableCell className={classes.data}>\n {enquiry?.requisition?.id}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.businessFunctionNumber\")}\n </TableCell>\n <TableCell className={classes.data}>\n {enquiry?.requisition?.businessFunction?.number}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.businessFunctionName\")}\n </TableCell>\n <TableCell className={classes.data}>\n {enquiry?.requisition?.businessFunction?.name}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.requisitionName\")}\n </TableCell>\n <TableCell className={classes.data}>\n {enquiry?.requisition?.code}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.preparedBy\")}\n </TableCell>\n <TableCell className={classes.data}>\n {enquiry?.preparedBy?.name}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.preparedDate\")}\n </TableCell>\n <TableCell className={classes.data}>{preparedDate}</TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.currency\")}\n </TableCell>\n <TableCell className={classes.data}>\n {enquiry?.currency?.name}\n </TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\"resources.bidsComparison.fields.bidDuration\")}\n </TableCell>\n <TableCell className={classes.data}>{bidDates}</TableCell>\n </TableRow>\n\n <TableRow>\n <TableCell className={classes.header}>\n {translate(\n \"resources.bidsComparison.fields.preferredDeliveryDate\"\n )}\n </TableCell>\n <TableCell className={classes.data}>\n {preferredDeliveryDate}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </Box>\n );\n};\n\nexport { BidsComparisonHeader };\n","import {forwardRef, useContext } from \"react\";\nimport {\n Box,\n createStyles,\n Theme,\n TextField,\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n DialogContentText,\n IconButton,\n Select,\n MenuItem,\n Tooltip,\n FormControl,\n FormHelperText,\n Slide,\n} from \"@material-ui/core\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport AddCircleIcon from \"@material-ui/icons/AddCircle\";\nimport RemoveCircleIcon from \"@material-ui/icons/RemoveCircle\";\nimport ReplayIcon from \"@material-ui/icons/Replay\";\nimport { BidComparisonCalculationActionTypes, PriceComponent } from \"./types\";\nimport { useForm, useFieldArray, Controller } from \"react-hook-form\";\nimport { useTranslate } from \"react-admin\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { EmptyState } from \"../../../lib/components\";\nimport EmptyPriceComponentIcon from \"@material-ui/icons/MoneyOff\";\nimport { TransitionProps } from \"@material-ui/core/transitions\";\nimport { BidComparisonCalculationContext } from \"./context\";\n\nconst PRICE_COMPONENT_FIELD_NAME = \"priceComponents\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n title: {\n marginBottom: theme.spacing(4),\n },\n emptyStateContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n },\n row: {\n display: \"inline-grid\",\n gridAutoFlow: \"column\",\n gridColumnGap: 5,\n },\n field: {\n padding: 5,\n },\n unitType: {\n padding: 5,\n justifyContent: \"flex-end\",\n },\n removeIcon: {\n margin: 0,\n marginLeft: 4,\n color: theme.palette.error.main,\n },\n bottomRow: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-around\",\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(4),\n },\n icon: {\n width: \"1.5em\",\n height: \"1.5em\",\n },\n })\n);\n\nconst Transition = forwardRef(function Transition(\n props: TransitionProps & { children?: React.ReactElement<any, any> },\n ref: React.Ref<unknown>\n) {\n return <Slide direction=\"up\" ref={ref} {...props} />;\n});\n\nconst ManagePriceComponents= () => {\n const classes = useStyles();\n const { state, dispatch } = useContext(BidComparisonCalculationContext);\n\n const {\n control,\n formState: { isValid },\n handleSubmit,\n } = useForm<PriceComponent>({\n mode: \"onChange\",\n shouldUnregister: true,\n defaultValues: {\n [PRICE_COMPONENT_FIELD_NAME]: state?.bidsComparisonCalc?.priceComponents,\n },\n });\n\n const { fields, remove, append } = useFieldArray({\n control,\n name: PRICE_COMPONENT_FIELD_NAME,\n });\n\n const onSubmit = (data) => {\n if (dispatch) {\n dispatch({\n type: BidComparisonCalculationActionTypes.RECALCULATE_PRICE_COMPONENTS,\n payload: {\n priceComponents: data?.priceComponents,\n },\n });\n }\n };\n\n const onSubmitCheckChangedData = (data) => {\n if (\n (!data?.priceComponents || !data?.priceComponents?.length) &&\n state?.priceComponents &&\n state?.priceComponents?.length\n ) {\n onSubmit(data);\n } else {\n handleClose();\n }\n };\n\n const translate = useTranslate();\n\n const handleClose = () => {\n if (dispatch) {\n dispatch({\n type: BidComparisonCalculationActionTypes.CLOSE_MANAGE_PRICE_COMPONENTS_DIALOG,\n });\n }\n };\n\n const addPriceComponent = () => {\n append({\n id: uuidv4(),\n unitType: 1,\n });\n };\n\n const removePriceComponent = (index: number) => {\n remove(index);\n };\n\n return (\n <Dialog\n TransitionComponent={Transition}\n keepMounted\n open={state?.isManagePriceComponentsDialogOpen ?? false}\n onClose={handleClose}\n aria-labelledby=\"dialog-title\"\n aria-describedby=\"dialog-slide-description\"\n >\n <DialogTitle id=\"dialog-title\">\n {translate(\n \"resources.bidsComparison.components.ManagePriceComponents.labels.title\"\n )}\n </DialogTitle>\n <DialogContent>\n <DialogContentText id=\"dialog-slide-description\">\n {translate(\n \"resources.bidsComparison.components.ManagePriceComponents.labels.subTitle\"\n )}\n </DialogContentText>\n <Box className={classes.container}>\n {!fields?.length && (\n <Box className={classes.emptyStateContainer}>\n <EmptyState\n Icon={EmptyPriceComponentIcon}\n iconClassName={classes.icon}\n title=\"resources.bidsComparison.components.ManagePriceComponents.messages.empty.title\"\n subTitle=\"resources.bidsComparison.components.ManagePriceComponents.messages.empty.subTitle\"\n />\n </Box>\n )}\n {fields?.length > 0 && (\n <form onSubmit={handleSubmit(onSubmit)}>\n {fields.map((row, rowNumber: number) => {\n return (\n <Box key={row.id} className={classes.row}>\n <Controller\n name={`${PRICE_COMPONENT_FIELD_NAME}.${rowNumber}.name`}\n control={control}\n rules={{\n required: translate(\n \"resources.bidsComparison.components.ManagePriceComponents.validations.required\"\n ),\n }}\n defaultValue={row?.[\"name\"]}\n render={({ field, fieldState: { error } }) => (\n <FormControl className={classes.field}>\n <TextField\n label={translate(\n \"resources.bidsComparison.fields.priceComponentName\"\n )}\n error={!!error}\n helperText={\n error\n ? error.message\n : translate(\n \"resources.bidsComparison.help.priceComponentName\"\n )\n }\n {...field}\n />\n </FormControl>\n )}\n />\n <Controller\n name={`${PRICE_COMPONENT_FIELD_NAME}.${rowNumber}.value`}\n control={control}\n rules={{\n required: translate(\n \"resources.bidsComparison.components.ManagePriceComponents.validations.required\"\n ),\n }}\n defaultValue={row?.[\"value\"]}\n render={({ field, fieldState: { error } }) => (\n <FormControl className={classes.field}>\n <TextField\n label={translate(\n \"resources.bidsComparison.fields.value\"\n )}\n type=\"number\"\n error={!!error}\n helperText={\n error\n ? error.message\n : translate(\n \"resources.bidsComparison.help.value\"\n )\n }\n {...field}\n onChange={(e) => {\n field.onChange(parseInt(e.target.value, 10));\n }}\n />\n </FormControl>\n )}\n />\n\n <Controller\n name={`${PRICE_COMPONENT_FIELD_NAME}.${rowNumber}.unitType`}\n control={control}\n defaultValue={row?.[\"unitType\"]}\n rules={{ required: true }}\n render={({ field }) => (\n <FormControl className={classes.unitType}>\n <Select {...field}>\n <MenuItem value={1}>\n {translate(\n \"resources.bidsComparison.choices.unitType.flat\"\n )}\n </MenuItem>\n <MenuItem value={2}>\n {translate(\n \"resources.bidsComparison.choices.unitType.percent\"\n )}\n </MenuItem>\n </Select>\n <FormHelperText>\n {translate(\n \"resources.bidsComparison.help.unitType\"\n )}\n </FormHelperText>\n </FormControl>\n )}\n />\n\n <Tooltip\n title={translate(\n \"resources.bidsComparison.components.ManagePriceComponents.labels.removePriceComponent\"\n )}\n >\n <IconButton\n aria-label=\"remove\"\n className={classes.removeIcon}\n onClick={() => removePriceComponent(rowNumber)}\n >\n <RemoveCircleIcon />\n </IconButton>\n </Tooltip>\n </Box>\n );\n })}\n </form>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n size=\"medium\"\n startIcon={<AddCircleIcon />}\n onClick={() => addPriceComponent()}\n >\n {translate(\n \"resources.bidsComparison.components.ManagePriceComponents.labels.addPriceComponent\"\n )}\n </Button>\n\n <Button\n color=\"primary\"\n variant=\"contained\"\n size=\"medium\"\n startIcon={<ReplayIcon />}\n disabled={!(fields?.length > 0 && isValid)}\n onClick={() => handleSubmit(onSubmit)()}\n >\n {translate(\n \"resources.bidsComparison.components.ManagePriceComponents.labels.recalculate\"\n )}\n </Button>\n <Button\n color=\"primary\"\n onClick={() => handleSubmit(onSubmitCheckChangedData)()}\n >\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport { ManagePriceComponents };\n","import { useContext } from \"react\";\nimport {\n Theme,\n createStyles,\n Paper,\n TableContainer,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n} from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { NumberField, SelectField, useTranslate } from \"react-admin\";\nimport {\n COLOR_ODD_CELL,\n COLOR_EVEN_CELL,\n COLOR_OPTIMAL_BACKGROUND_CELL,\n COLOR_OPTIMAL_FOREGROUND_CELL,\n} from \"../constants\";\nimport { TruncatedTextField } from \"../../../lib/components\";\nimport { unitTypeChoices } from \"./types\";\nimport { BidComparisonCalculationContext } from \"./context\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n tableContainer: {\n width: \"100%\",\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(2),\n },\n tableWrapper: {\n maxHeight: 1024,\n overflowX: \"auto\",\n },\n table: {\n borderSpacing: 1,\n },\n firstColumn: {\n width: \"30%\",\n },\n vendorCell: {\n \"&:nth-of-type(odd)\": {\n backgroundColor: COLOR_EVEN_CELL,\n },\n \"&:nth-of-type(even)\": {\n backgroundColor: COLOR_ODD_CELL,\n },\n },\n oddCell: {\n backgroundColor: COLOR_ODD_CELL,\n whiteSpace: \"nowrap\",\n },\n evenCell: {\n backgroundColor: COLOR_EVEN_CELL,\n whiteSpace: \"nowrap\",\n },\n headerCell: {\n whiteSpace: \"nowrap\",\n },\n dataCell: {\n whiteSpace: \"nowrap\",\n },\n optimal: {\n whiteSpace: \"nowrap\",\n color: COLOR_OPTIMAL_FOREGROUND_CELL,\n backgroundColor: COLOR_OPTIMAL_BACKGROUND_CELL,\n fontWeight: 500,\n },\n subTotal: {\n fontStyle: \"italic\",\n fontWeight: 500,\n },\n grandTotal: {\n fontWeight: 700,\n },\n priceComponent: {\n maxWidth: 85,\n },\n })\n);\n\n// eslint-disable-next-line\nconst DisplayPriceComponentsTable = ({}) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n const { state } = useContext(BidComparisonCalculationContext);\n\n const bidSubTotalsLabel = translate(\n \"resources.bidsComparison.components.DisplayPriceComponents.labels.bidSubTotals\"\n );\n\n const bidGrandTotalsLabel = translate(\n \"resources.bidsComparison.components.DisplayPriceComponents.labels.bidGrandTotals\"\n );\n\n const data = state?.bidsComparisonCalc;\n const showUnitPrice2 = state?.bidsComparisonCalc?.enquiry?.showUnitPrice2;\n const COLSPAN_TITLE = showUnitPrice2 ? 4 : 4;\n const COLSPAN_VENDOR = showUnitPrice2 ? 5 : 3;\n const COLSPAN_OPTIMAL_VALUES = showUnitPrice2 ? 5 : 3;\n\n const priceComponentOptimalRecord = {\n id: data?.enquiry?.id || 1,\n subTotal: data?.totals?.optimal?.subTotal,\n grandTotal: data?.totals?.optimal?.grandTotal,\n };\n\n return (\n <TableContainer className={classes.tableContainer}>\n <Paper elevation={3} variant=\"elevation\">\n <div className={classes.tableWrapper}>\n <Table\n stickyHeader\n aria-label=\"Price Comparison Table\"\n className={classes.table}\n >\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={COLSPAN_TITLE}\n className={classes.firstColumn}\n align=\"right\"\n >\n {translate(\"resources.bidsComparison.fields.vendors\")}\n </TableCell>\n {data?.vendorAccounts?.map((vendorAccountRecord, index) => (\n <TableCell\n colSpan={COLSPAN_VENDOR}\n align=\"center\"\n className={classes.vendorCell}\n >\n {vendorAccountRecord?.name}\n </TableCell>\n ))}\n <TableCell\n colSpan={COLSPAN_OPTIMAL_VALUES}\n align=\"center\"\n className={classes.optimal}\n >\n {translate(\n \"resources.bidsComparison.components.bidComparisonTable.labels.optimal\"\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell>#</TableCell>\n <TableCell className={classes.priceComponent} align=\"left\">\n {translate(\n \"resources.bidsComparison.fields.priceComponentName\"\n )}\n </TableCell>\n <TableCell className={classes.priceComponent} align=\"left\">\n {translate(\"resources.bidsComparison.fields.unitType\")}\n </TableCell>\n <TableCell className={classes.priceComponent} align=\"left\">\n {translate(\"resources.bidsComparison.fields.value\")}\n </TableCell>\n {data?.vendorAccounts?.map((vendorAccountRecord, index) => {\n const isEvenRow = index % 2 ? true : false;\n const className = isEvenRow\n ? classes.evenCell\n : classes.oddCell;\n return (\n <>\n <TableCell className={className} align=\"center\">\n {translate(\"resources.bidsComparison.fields.unitPrice\")}\n </TableCell>\n <TableCell className={className} align=\"center\">\n {translate(\"resources.bidsComparison.fields.amount\")}\n </TableCell>\n {showUnitPrice2 && (\n <TableCell className={className} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.unitPrice2\"\n )}\n </TableCell>\n )}\n {showUnitPrice2 && (\n <TableCell className={className} align=\"center\">\n {translate(\"resources.bidsComparison.fields.amount2\")}\n </TableCell>\n )}\n <TableCell className={className} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.estimatedDeliveryDate\"\n )}\n </TableCell>\n </>\n );\n })}\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.unitPrice\")}\n </TableCell>\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.amount\")}\n </TableCell>\n {showUnitPrice2 && (\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.unitPrice2\")}\n </TableCell>\n )}\n {showUnitPrice2 && (\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\"resources.bidsComparison.fields.amount2\")}\n </TableCell>\n )}\n <TableCell className={classes.optimal} align=\"center\">\n {translate(\n \"resources.bidsComparison.fields.estimatedDeliveryDate\"\n )}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {data?.priceComponents?.map((row, index) => {\n const record = {\n id: row?.id ?? index,\n name: row?.name,\n unitType: row?.unitType,\n value: row?.value,\n totals: {\n optimal: {\n component: row?.totals?.optimal,\n },\n },\n };\n\n return (\n <TableRow>\n <TableCell align=\"center\">{index + 1}</TableCell>\n <TableCell align=\"left\" className={classes.dataCell}>\n <TruncatedTextField\n truncateLength={50}\n source=\"name\"\n record={record}\n />\n </TableCell>\n <TableCell align=\"left\" className={classes.dataCell}>\n <SelectField\n source=\"unitType\"\n choices={unitTypeChoices}\n record={record}\n />\n </TableCell>\n <TableCell align=\"left\" className={classes.dataCell}>\n <NumberField source=\"value\" record={record} />\n </TableCell>\n {data?.bidIds?.map((bidId, index) => {\n const matchingBidRows = row?.totals?.bid?.filter(\n (bid) => bid.bidId === bidId\n );\n\n if (!matchingBidRows || matchingBidRows?.length === 0) {\n return null;\n }\n\n const bidTotal = matchingBidRows[0];\n\n const bidTotalRecord = {\n id: bidTotal.bidId,\n amount: bidTotal?.amount,\n amount2: bidTotal?.amount2,\n };\n\n return (\n <>\n <TableCell> </TableCell>\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"amount\"\n record={bidTotalRecord}\n className={classes.dataCell}\n />\n }\n </TableCell>\n <TableCell> </TableCell>\n {showUnitPrice2 && (\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"amount2\"\n record={bidTotalRecord}\n className={classes.dataCell}\n />\n }\n </TableCell>\n )}\n {showUnitPrice2 && <TableCell> </TableCell>}\n </>\n );\n })}\n\n <TableCell> </TableCell>\n <TableCell className={classes.optimal} align=\"center\">\n {\n <NumberField\n source=\"totals.optimal.component.amount\"\n record={record}\n />\n }\n </TableCell>\n <TableCell> </TableCell>\n {showUnitPrice2 && (\n <TableCell className={classes.optimal} align=\"center\">\n {\n <NumberField\n source=\"totals.optimal.component.amount2\"\n record={record}\n />\n }\n </TableCell>\n )}\n {showUnitPrice2 && <TableCell> </TableCell>}\n </TableRow>\n );\n })}\n <TableRow>\n <TableCell colSpan={COLSPAN_TITLE} align=\"right\">\n <i>{bidSubTotalsLabel}</i>\n </TableCell>\n\n {data?.totals?.bid?.map((bid, index) => {\n const record = {\n id: bid.bidId,\n amount: bid?.priceComponents?.subTotals?.amount,\n amount2: bid?.priceComponents?.subTotals?.amount2,\n };\n return (\n <>\n <TableCell> </TableCell>\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"amount\"\n record={record}\n className={classes.subTotal}\n />\n }\n </TableCell>\n {showUnitPrice2 && <TableCell> </TableCell>}\n {showUnitPrice2 && (\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"amount2\"\n record={record}\n className={classes.subTotal}\n />\n }\n </TableCell>\n )}\n <TableCell> </TableCell>\n </>\n );\n })}\n\n <TableCell> </TableCell>\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"subTotal.amount\"\n record={priceComponentOptimalRecord}\n className={classes.subTotal}\n />\n }\n </TableCell>\n {showUnitPrice2 && <TableCell> </TableCell>}\n {showUnitPrice2 && (\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"subTotal.amount2\"\n record={priceComponentOptimalRecord}\n className={classes.subTotal}\n />\n }\n </TableCell>\n )}\n <TableCell> </TableCell>\n </TableRow>\n <TableRow>\n <TableCell colSpan={COLSPAN_TITLE} align=\"right\">\n <b>{bidGrandTotalsLabel}</b>\n </TableCell>\n\n {data?.totals?.bid?.map((bid, index) => {\n const record = {\n id: bid.bidId,\n amount: bid?.priceComponents?.grandTotals?.amount,\n amount2: bid?.priceComponents?.grandTotals?.amount2,\n };\n return (\n <>\n <TableCell> </TableCell>\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"amount\"\n record={record}\n className={classes.grandTotal}\n />\n }\n </TableCell>\n {showUnitPrice2 && <TableCell> </TableCell>}\n {showUnitPrice2 && (\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"amount2\"\n record={record}\n className={classes.grandTotal}\n />\n }\n </TableCell>\n )}\n <TableCell> </TableCell>\n </>\n );\n })}\n\n <TableCell> </TableCell>\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"grandTotal.amount\"\n record={priceComponentOptimalRecord}\n className={classes.grandTotal}\n />\n }\n </TableCell>\n {showUnitPrice2 && <TableCell> </TableCell>}\n {showUnitPrice2 && (\n <TableCell align=\"center\">\n {\n <NumberField\n source=\"grandTotal.amount2\"\n record={priceComponentOptimalRecord}\n className={classes.grandTotal}\n />\n }\n </TableCell>\n )}\n <TableCell> </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n </Paper>\n </TableContainer>\n );\n};\n\nexport { DisplayPriceComponentsTable };\n","import { useContext } from \"react\";\nimport {\n Box,\n Button,\n createStyles,\n makeStyles,\n Theme,\n} from \"@material-ui/core\";\nimport ManagePriceComponentsIcon from \"@material-ui/icons/ControlCamera\";\nimport EmptyPriceComponentIcon from \"@material-ui/icons/MoneyOff\";\nimport { BidComparisonCalculationActionTypes } from \"./types\";\nimport { ManagePriceComponents } from \"./ManagePriceComponents\";\nimport { EmptyState, SectionTitleSubtitle } from \"../../../lib/components\";\nimport { DisplayPriceComponentsTable } from \"./DisplayPriceComponentsTable\";\nimport { useTranslate } from \"react-admin\";\nimport { BidComparisonCalculationContext } from \"./context\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n container: {\n marginTop: theme.spacing(5),\n marginLeft: theme.spacing(2),\n },\n titleContainer: {\n display: \"grid\",\n gridAutoFlow: \"row\",\n alignItems: \"start\",\n justifyContent: \"start\",\n marginBottom: theme.spacing(4),\n [theme.breakpoints.up(\"sm\")]: {\n gridAutoFlow: \"column\",\n gridColumnGap: 100,\n alignItems: \"center\",\n marginBottom: 0,\n },\n },\n title: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"flex-start\",\n [theme.breakpoints.up(\"sm\")]: {\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n },\n titleBody: {\n marginTop: theme.spacing(2),\n },\n emptyState: {},\n manageButton: {\n marginTop: theme.spacing(3),\n [theme.breakpoints.up(\"sm\")]: {\n marginTop: 0,\n marginLeft: theme.spacing(3),\n },\n },\n })\n);\n\ninterface DisplayPriceComponentsProps {\n canManage: boolean;\n}\n\nconst DisplayPriceComponents= (props:DisplayPriceComponentsProps,\n canManage,\n) => {\n const classes = useStyles();\n const translate = useTranslate();\n const { state, dispatch } = useContext(BidComparisonCalculationContext);\n\n const ManagePriceComponentButton = () => (\n <Button\n startIcon={<ManagePriceComponentsIcon />}\n color=\"primary\"\n variant=\"outlined\"\n size=\"medium\"\n className={classes.manageButton}\n onClick={() => {\n if (dispatch) {\n dispatch({\n type: BidComparisonCalculationActionTypes.OPEN_MANAGE_PRICE_COMPONENTS_DIALOG,\n });\n }\n }}\n >\n {translate(\n \"resources.bidsComparison.components.ManagePriceComponents.labels.title\"\n )}\n </Button>\n );\n\n return (\n <Box className={classes.container}>\n <Box className={classes.titleContainer}>\n <SectionTitleSubtitle\n title=\"resources.bidsComparison.sections.priceComponents.title\"\n subTitle=\"resources.bidsComparison.sections.priceComponents.subTitle\"\n />\n {state?.bidsComparisonCalc?.priceComponents &&\n state?.bidsComparisonCalc?.priceComponents?.length > 0 && (\n <ManagePriceComponentButton />\n )}\n </Box>\n\n {!state?.bidsComparisonCalc?.priceComponents?.length && (\n <EmptyState\n actionButton={<ManagePriceComponentButton/>}\n Icon={EmptyPriceComponentIcon}\n title=\"resources.bidsComparison.components.DisplayPriceComponents.messages.empty.title\"\n subTitle=\"resources.bidsComparison.components.DisplayPriceComponents.messages.empty.subTitle\"\n />\n )}\n\n {state?.bidsComparisonCalc?.priceComponents &&\n state?.bidsComparisonCalc?.priceComponents?.length > 0 && (\n <DisplayPriceComponentsTable />\n )}\n\n {canManage && <ManagePriceComponents />}\n </Box>\n );\n};\n\nexport { DisplayPriceComponents };\n","import { useEffect, useCallback, useContext } from \"react\";\nimport { EditProps, Identifier, Loading } from \"react-admin\";\nimport { Box, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport { httpClient, Options } from \"../../../lib/core/providers/dataProvider\";\nimport {\n BidComparisonCalculationActionTypes,\n BidsComparisonCalc,\n PriceComponent,\n} from \"./types\";\nimport { BidsComparisonTable } from \"./BidsComparisonTable\";\nimport { BidsComparisonHeader } from \"./BidsComparisonHeader\";\nimport { DisplayPriceComponents } from \"./DisplayPriceComponents\";\nimport { useForm } from \"react-final-form\";\nimport CompareIcon from \"@material-ui/icons/Compare\";\nimport { EmptyState } from \"../../../lib/components\";\nimport { BidComparisonCalculationContext } from \"./context\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n bidCalcsContainer: {\n width: \"100%\",\n paddingLeft: 5,\n },\n loading: {\n width: \"100%\",\n },\n })\n);\n\nconst fetchBidCalculationData = async (\n enquiryId: Identifier | undefined,\n excludedItemIds: Array<Identifier>,\n excludedVendorAccountIds: Array<Identifier>,\n priceComponents: Array<PriceComponent>\n): Promise<BidsComparisonCalc> => {\n const bidComparisonCalculationUrl = `${process.env.REACT_APP_SERVER_ENDPOINT}/bids-comparison/calculate`;\n\n const body = JSON.stringify({\n enquiryId,\n excludedItemIds,\n excludedVendorAccountIds,\n priceComponents,\n });\n\n const options: Options = {\n method: \"POST\",\n body,\n };\n\n const bidCalculationResponse = await httpClient(\n bidComparisonCalculationUrl,\n options\n );\n return bidCalculationResponse?.json as Promise<BidsComparisonCalc>;\n};\n\nconst BidsComparisonContainer= (props:EditProps) => {\n const id = props?.id;\n const classes = useStyles();\n const form = useForm();\n const { state, dispatch } = useContext(BidComparisonCalculationContext);\n\n const refetchBidComparisonCalcs = useCallback(async () => {\n if (!dispatch) {\n return;\n }\n const excludedItemIdsList = state?.excludedItemIds\n ? Array.from(state?.excludedItemIds)\n : [];\n const excludedVendorAccountIdsList = state?.excludedVendorAccountIds\n ? Array.from(state?.excludedVendorAccountIds)\n : [];\n const priceComponentsList = state?.priceComponents ?? [];\n\n dispatch({\n type: BidComparisonCalculationActionTypes.LOADING_BID_CALCULATIONS,\n });\n\n const responseBidsComparisonCalc = await fetchBidCalculationData(\n id,\n excludedItemIdsList,\n excludedVendorAccountIdsList,\n priceComponentsList\n );\n dispatch({\n type: BidComparisonCalculationActionTypes.BID_COM_DATA_POPULATE,\n payload: {\n bidsComparisonCalc: responseBidsComparisonCalc,\n },\n });\n form.change(\"enquiryId\", id);\n form.change(\"excludedItemIds\", excludedItemIdsList);\n form.change(\"excludedVendorAccountIds\", excludedVendorAccountIdsList);\n form.change(\"priceComponents\", priceComponentsList);\n // eslint-disable-next-line\n }, [\n dispatch,\n id,\n state?.excludedItemIds,\n state?.excludedVendorAccountIds,\n state?.priceComponents,\n ]);\n\n useEffect(() => {\n if (state?.shouldRecalculate) {\n refetchBidComparisonCalcs();\n }\n // eslint-disable-next-line\n }, [state?.shouldRecalculate]);\n\n if (state?.isLoading) {\n return (\n <Loading\n className={classes.loading}\n loadingPrimary=\"resources.bidsComparison.messages.loading.primary\"\n loadingSecondary=\"resources.bidsComparison.messages.loading.secondary\"\n />\n );\n }\n\n if (!state?.isLoading && !state?.hasData) {\n return (\n <EmptyState\n Icon={CompareIcon}\n title=\"resources.bidsComparison.components.bidComparisonTable.messages.empty.title\"\n subTitle=\"resources.bidsComparison.components.bidComparisonTable.messages.empty.subTitle\"\n />\n );\n }\n\n if (!state?.isLoading && state?.hasData && state.bidsComparisonCalc) {\n return (\n <Box>\n <BidsComparisonHeader />\n\n <Box className={classes.bidCalcsContainer}>\n <BidsComparisonTable />\n </Box>\n\n <Box className={classes.bidCalcsContainer}>\n <DisplayPriceComponents canManage={true} />\n </Box>\n </Box>\n );\n }\n\n return null;\n};\n\nexport { BidsComparisonContainer };\n","import { useCallback } from \"react\";\nimport {\n useNotify,\n useRefresh,\n useRedirect,\n SaveButton,\n Toolbar,\n useUpdate,\n useRecordContext,\n} from \"react-admin\";\nimport {\n DownloadReportFileButton,\n HistoryBackButton,\n} from \"../../../lib/components\";\n\nimport { BidsComparisonCalc } from \"./types\";\nimport { PermissionBidsComparison, RESOURCE_NAME_BIDS_COMPARISON } from \"../constants\";\n\nconst SaveBidComparisonButton = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n const record = useRecordContext<BidsComparisonCalc>(props);\n const [saveBidComparison] = useUpdate(\n RESOURCE_NAME_BIDS_COMPARISON,\n record?.id\n );\n const refresh = useRefresh();\n\n const handleSave = useCallback(\n async (values) => {\n saveBidComparison(\n {\n payload: {\n data: {\n ...values,\n },\n },\n },\n {\n onSuccess: () => {\n notify(\"resources.bidsComparison.messages.edited\", {\n type: \"success\",\n });\n redirect(`/bids-comparison/${record?.id}`);\n refresh(true);\n },\n onFailure: () => {\n notify(\"resources.bidsComparison.messages.error\", {\n type: \"error\",\n });\n redirect(`/bids-comparison/${record?.id}`);\n refresh(true);\n },\n }\n );\n },\n // eslint-disable-next-line\n [saveBidComparison, notify, redirect]\n );\n return <SaveButton {...props} onSave={handleSave} />;\n};\n\nconst CustomBidComparisonToolbar = (props) => {\n const record = useRecordContext<BidsComparisonCalc>(props);\n const hasData = record?.summary?.length;\n const isReadOnly = props?.isReadOnly;\n return (\n <Toolbar\n {...props}\n style={{\n display: \"inline-grid\",\n gridAutoFlow: \"column\",\n gridColumnGap: 50,\n justifyContent: \"start\",\n alignItems: \"center\",\n marginLeft: 50,\n backgroundColor: \"unset\",\n }}\n >\n {hasData && !isReadOnly && <SaveBidComparisonButton {...props} />}\n {hasData && (\n <DownloadReportFileButton\n downloadPath={`/bids-comparison/download/excel/${props?.id}`}\n downloadPermissionName={PermissionBidsComparison.SHOW_BIDS_COMPARISON}\n tooltip=\"components.buttons.DownloadReportFileButton.tooltip\"\n />\n )}\n <HistoryBackButton />\n </Toolbar>\n );\n};\n\nexport { CustomBidComparisonToolbar };\n","import { Box } from \"@material-ui/core\";\nimport { Identifier } from \"ra-core\";\nimport { FC, useEffect, useMemo, useReducer } from \"react\";\nimport { SimpleForm } from \"react-admin\";\nimport { SectionTitleSubtitle } from \"../../../lib/components\";\nimport { BidsComparisonContainer } from \"./BidsComparisonContainer\";\nimport {\n BidComparisonCalculationContext,\n bidComparisonCalculationReducer,\n} from \"./context\";\nimport { CustomBidComparisonToolbar } from \"./CustomBidComparisonToolbar\";\nimport {\n BidComparisonCalculationActionTypes,\n BidComparisonState,\n PriceComponent,\n} from \"./types\";\n\nconst listContextInitialState: BidComparisonState = {\n isLoading: true,\n isInitialized: false,\n hasData: false,\n excludedItemIds: new Set(),\n excludedVendorAccountIds: new Set(),\n bidsComparisonCalc: null,\n priceComponents: [],\n isManagePriceComponentsDialogOpen: false,\n shouldRecalculate: false,\n};\n\ninterface BidsComparisonViewProps {\n id?: string;\n loaded: boolean;\n isReadOnly: boolean;\n excludedItemIds?: Identifier[];\n excludedVendorAccountIds?: Identifier[];\n priceComponents?: PriceComponent[];\n}\n\nconst BidsComparisonView: FC<BidsComparisonViewProps> = ({\n id,\n loaded,\n excludedItemIds = [],\n excludedVendorAccountIds = [],\n priceComponents = [],\n ...rest\n}) => {\n useEffect(() => {\n if (loaded) {\n dispatch({\n type: BidComparisonCalculationActionTypes.ENQUIRY_LOADED,\n payload: {\n excludedItemIds,\n excludedVendorAccountIds,\n priceComponents,\n },\n });\n }\n }, [loaded]);\n\n const [state, dispatch] = useReducer(bidComparisonCalculationReducer, {\n ...listContextInitialState,\n });\n\n const contextValue = useMemo(() => {\n return { state, dispatch };\n }, [state, dispatch]);\n\n return (\n <Box>\n <Box display=\"flex\" flexDirection=\"column\" marginLeft={2}>\n <SectionTitleSubtitle\n title=\"resources.bidsComparison.sections.bid.edit.title\"\n subTitle=\"resources.bidsComparison.sections.bid.create.subTitle\"\n marginLeft={4}\n />\n <SimpleForm\n warnWhenUnsavedChanges\n toolbar={<CustomBidComparisonToolbar id={id} {...rest} />}\n margin=\"normal\"\n variant=\"filled\"\n redirect=\"edit\"\n >\n <BidComparisonCalculationContext.Provider value={contextValue}>\n <BidsComparisonContainer id={id} />\n </BidComparisonCalculationContext.Provider>\n </SimpleForm>\n </Box>\n </Box>\n );\n};\n\nexport { BidsComparisonView };\n","import {\n PermissionBidsComparison,\n RESOURCE_NAME_BIDS_COMPARISON,\n} from \"./constants\";\nimport BidsCompareIcon from \"@material-ui/icons/Compare\";\nimport { BidsComparisonEdit } from \"./BidsComparisonEdit\";\n\nconst allowedPermissions = {\n menu: PermissionBidsComparison.LIST_BIDS_COMPARISONS,\n // list: PermissionBidsComparison.LIST_BIDS_COMPARISONS,\n // create: PermissionBidsComparison.CREATE_BIDS_COMPARISON,\n update: PermissionBidsComparison.EDIT_BIDS_COMPARISON,\n show: PermissionBidsComparison.SHOW_BIDS_COMPARISON,\n// delete: PermissionBidsComparison.DELETE_BIDS_COMPARISON,\n};\n\nconst bidsComparisonResource = {\n name: RESOURCE_NAME_BIDS_COMPARISON,\n edit: BidsComparisonEdit,\n icon: BidsCompareIcon,\n options: { label: \"resources.bidsComparison.name\", allowedPermissions },\n};\n\nexport * from \"./constants\";\nexport { bidsComparisonResource };\n","import { useEffect, useMemo } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n EditProps,\n setSidebarVisibility,\n useNotify,\n useRefresh,\n useRedirect,\n useEditController,\n EditContextProvider,\n} from \"react-admin\";\nimport {\n CrudActionBreadcrumb,\n} from \"../../lib/components\";\nimport { Box } from \"@material-ui/core\";\nimport { enquiryResource, RESOURCE_NAME_ENQUIRY } from \"../enquiries\";\nimport { bidsComparisonResource } from \".\";\nimport { BidsComparisonView } from \"./components/BidsComparisonView\";\n\nconst BidsComparisonEdit = (props: EditProps) => {\n const appStateDispatch = useDispatch();\n const notify = useNotify();\n const refresh = useRefresh();\n const redirect = useRedirect();\n\n useEffect(() => {\n appStateDispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n const onSuccess = (response?: any) => {\n notify(\"resources.bidsComparison.messages.edited\", { type: \"success\" });\n redirect(\"edit\", props.basePath);\n refresh();\n };\n\n const onFailure = (error?: any) => {\n if (error.code === 123) {\n notify(\"Could not save changes: concurrent edition in progress\", {\n type: \"error\",\n });\n } else {\n notify(\"ra.notification.http_error\", { type: \"error\" });\n }\n };\n\n const controllerProps = useEditController({\n ...props,\n onSuccess,\n onFailure,\n mutationMode: \"pessimistic\",\n });\n\n const { loaded, record } = controllerProps;\n\n const {excludedItemIds, excludedVendorAccountIds} = useMemo(() => {\n const excludedItemIds = record?.excluded?.items?.map((item) => item?.id);\n const excludedVendorAccountIds = record?.excluded?.vendorAccounts?.map((vendorAccount) => vendorAccount?.id);\n return { excludedItemIds, excludedVendorAccountIds}\n }, [record?.excluded?.items, record?.excluded?.vendorAccounts])\n return (\n <Box>\n <Box pt={1}>\n <CrudActionBreadcrumb\n resourceLabel=\"resources.enquiries.name\"\n listPath={`/${RESOURCE_NAME_ENQUIRY}?filter={\"direction\":\"sent\"}`}\n Icon={enquiryResource.icon}\n actionType=\"resources.bidsComparison.title\"\n actionIcon={bidsComparisonResource.icon}\n />\n <EditContextProvider value={controllerProps}>\n <BidsComparisonView\n id={props?.id}\n loaded={loaded}\n isReadOnly={false}\n excludedItemIds={excludedItemIds}\n excludedVendorAccountIds={excludedVendorAccountIds}\n priceComponents={record?.priceComponents}\n />\n </EditContextProvider>\n </Box>\n </Box>\n );\n};\n\nexport { BidsComparisonEdit };\n","import { EditContextProvider, useEditController } from \"react-admin\";\nimport { RESOURCE_NAME_BIDS_COMPARISON } from \"../../bidsComparison\";\nimport { BidsComparisonView } from \"../../bidsComparison/components/BidsComparisonView\";\n\nconst EnquiryShowBidEnquiry = (props) => {\n const controllerProps = useEditController({\n ...props,\n id: props?.id,\n resource: RESOURCE_NAME_BIDS_COMPARISON,\n });\n\n const { loaded, record } = controllerProps;\n return (\n <EditContextProvider value={controllerProps}>\n <BidsComparisonView\n id={props?.id}\n loaded={loaded}\n excludedItemIds={record?.excluded?.items || []}\n excludedVendorAccountIds={record?.excluded?.vendorAccounts || []}\n priceComponents={record?.priceComponents}\n isReadOnly={true}\n />\n </EditContextProvider>\n );\n};\n\nexport { EnquiryShowBidEnquiry };\n","import { FC } from \"react\";\nimport { CreateButton, EditButton, ListButton, ShowActionsProps, TopToolbar, useResourceDefinition, useShowContext } from \"react-admin\";\nimport { enquiryResource } from \"../..\";\nimport { FILTER_DIRECTION, PermissionBehavior, ProcEntityRecordStatus } from \"../../../../common\";\nimport { usePermissionsCheck } from \"../../../../lib/core\";\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}: any) => rest;\n\nconst EnquiryCrudShowActions:FC<ShowActionsProps> = ({ className, ...rest }) => {\n const { record } = useShowContext(rest);\n\n const { hasList, hasEdit, hasCreate } = useResourceDefinition(rest);\n const { hasPermissionAccess} = usePermissionsCheck();\n const canProcure = hasPermissionAccess(PermissionBehavior.CAN_PROCURE);\n const canCreate = hasPermissionAccess(enquiryResource?.options?.allowedPermissions?.create);\n const direction = canProcure?FILTER_DIRECTION.SENT:FILTER_DIRECTION.RECEIVED;\n \n const status = record?.procureStatus;\n const isStatusWaitingDraft = status === ProcEntityRecordStatus.DRAFT;\n\n return (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {hasList && <ListButton basePath={`/enquiries?filter={\"direction\":\"${direction}\"}`}/>}\n {hasEdit && isStatusWaitingDraft && <EditButton basePath=\"/enquiries\" record={record} />}\n {hasCreate && canCreate && <CreateButton basePath=\"/enquiries\"/>}\n </TopToolbar>\n )\n}\n\nexport { EnquiryCrudShowActions }","import { FC } from \"react\";\nimport { CreateButton, EditButton, ListButton, ShowActionsProps, ShowButton, TopToolbar, useResourceDefinition, useShowContext } from \"react-admin\";\nimport { FILTER_DIRECTION, PermissionBehavior, ProcEntityRecordStatus } from \"../../../../common\";\nimport { usePermissionsCheck } from \"../../../../lib/core\";\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}: any) => rest;\n\nconst EnquiryCrudEditActions:FC<ShowActionsProps> = ({ className, ...rest }) => {\n const { record } = useShowContext(rest);\n\n const { hasList, hasShow, hasCreate } = useResourceDefinition(rest);\n const { hasPermissionAccess} = usePermissionsCheck();\n const canProcure = hasPermissionAccess(PermissionBehavior.CAN_PROCURE);\n const direction = canProcure?FILTER_DIRECTION.SENT:FILTER_DIRECTION.RECEIVED;\n\n return (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {hasList && <ListButton basePath={`/enquiries?filter={\"direction\":\"${direction}\"}`}/>}\n {hasShow && <ShowButton basePath=\"/enquiries\" record={record} />}\n {hasCreate && <CreateButton basePath=\"/enquiries\"/>}\n </TopToolbar>\n )\n}\n\nexport { EnquiryCrudEditActions }","import { ReactElement, useMemo } from \"react\";\nimport {\n DefaultCrudListRowActions,\n ListRowActions,\n ListRowActionsProps,\n RedirectListRowAction,\n} from \"../../../lib/components\";\nimport { linkToRecord, Record, useListFilterContext } from \"react-admin\";\nimport { PermissionEnquiries } from \"../constants\";\nimport { bidResource, PermissionBids, RESOURCE_NAME_BID } from \"../../bids\";\nimport {\n bidsComparisonResource,\n PermissionBidsComparison,\n RESOURCE_NAME_BIDS_COMPARISON,\n} from \"../../bidsComparison\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\nimport {\n ApprovalListRowActionButtons,\n FILTER_DIRECTION,\n PermissionBehavior,\n ProcEntityRecordStatus,\n ProcureApprovalStatus,\n} from \"../../../common\";\n\nconst EnquiryListRowActionButtons = (props: ListRowActionsProps) => {\n const { hasPermissionAccess, hasOwnOrAccountAccess, permissionsLoaded } =\n usePermissionsCheck();\n const context = useListFilterContext();\n const directionFilterValue = context?.filterValues?.direction;\n const isDirectionReceived =\n directionFilterValue === FILTER_DIRECTION.RECEIVED;\n const isVendorUser =\n isDirectionReceived && hasPermissionAccess(PermissionBehavior.CAN_SELL);\n\n const overriddenListRowActions: Array<ReactElement> = useMemo(() => {\n const keyPrefix = props?.record?.id;\n const record = props?.record;\n\n const status = record?.procureStatus;\n const procureApprovalStatus = record?.procureApprovalStatus;\n\n const canBid = record?.canBid;\n\n const accountId = isVendorUser\n ? record?.vendors?.length ? record?.vendors[0]?.vendorAccountId: null\n : record?.procureAccountId;\n const userId = isVendorUser ? null : record?.procureOwnerUserId;\n const hasShowEnquiryAccess =\n permissionsLoaded &&\n hasOwnOrAccountAccess(\n PermissionEnquiries.SHOW_ANY_ENQUIRY,\n PermissionEnquiries.SHOW_OWN_ENQUIRY,\n accountId,\n userId\n );\n\n const hasEditEnquiryAccess =\n !isVendorUser &&\n permissionsLoaded &&\n hasOwnOrAccountAccess(\n PermissionEnquiries.EDIT_ANY_ENQUIRY,\n PermissionEnquiries.EDIT_OWN_ENQUIRY,\n record?.procureAccountId,\n record?.procureOwnerUserId\n );\n\n const hasDeleteEnquiryAccess =\n permissionsLoaded &&\n hasOwnOrAccountAccess(\n PermissionEnquiries.DELETE_ANY_ENQUIRY,\n PermissionEnquiries.DELETE_OWN_ENQUIRY,\n record?.procureAccountId,\n record?.procureOwnerUserId\n );\n\n const isStatusWaitingDraft = status === ProcEntityRecordStatus.DRAFT;\n const isStatusWaitingForApproval =\n status === ProcEntityRecordStatus.WAITING_FOR_APPROVAL;\n const isStatusApproved = status === ProcEntityRecordStatus.APPROVED;\n const isStatusRejected = status === ProcEntityRecordStatus.REJECTED;\n const isStatusOnHold = status === ProcEntityRecordStatus.ON_HOLD;\n const isStatusInProgress = status === ProcEntityRecordStatus.IN_PROGRESS;\n const isStatusCompleted = status === ProcEntityRecordStatus.COMPLETED;\n\n const isRecordStatusModifiable =\n isStatusWaitingDraft ||\n isStatusWaitingForApproval ||\n isStatusApproved ||\n isStatusRejected ||\n isStatusOnHold;\n const isApprovalStatusApproved =\n procureApprovalStatus === ProcureApprovalStatus.APPROVED;\n\n const hasCreateBidPermission = hasPermissionAccess(\n PermissionBids.CREATE_BID\n );\n const hasCreateBidComparisonPermission = hasPermissionAccess(\n PermissionBidsComparison.CREATE_BIDS_COMPARISON\n );\n\n const shouldDisplayShowAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldDisplay = hasShowEnquiryAccess;\n return Promise.resolve(shouldDisplay);\n };\n\n const shouldDisplayEditAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldDisplay = isStatusWaitingDraft && hasEditEnquiryAccess;\n return Promise.resolve(shouldDisplay);\n };\n\n const shouldDisplayDeleteAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldDisplay = isStatusWaitingDraft && hasDeleteEnquiryAccess;\n return Promise.resolve(shouldDisplay);\n };\n\n const calculateCreateBidActionRedirectPath = (record?: Record) => {\n const createBidPath = record\n ? `${RESOURCE_NAME_BID}/create?enquiryId=${record.id}`\n : \"\";\n\n return createBidPath;\n };\n\n const shouldDisplayCreateBidAction = async (\n record?: Record\n ): Promise<boolean> => {\n const bidStartDateStr = record?.bidStartDate;\n //const bidStartDate = parse(bidStartDateStr);\n const bidEndDateStr = record?.bidEndDate;\n //const bidEndDate = parse(bidEndDateStr, 'yyyy-MM-dd', new Date());\n const today = new Date();\n //const areBidDatesValid = isAfter(today, bidStartDate) && isBefore(today, bidEndDate);\n\n //const shouldDisplay = hasCreateBidPermission && isStatusApproved && canBid;\n const shouldDisplay =\n isVendorUser &&\n hasCreateBidPermission &&\n canBid &&\n (isStatusApproved || isStatusInProgress) &&\n isApprovalStatusApproved;\n return Promise.resolve(shouldDisplay);\n };\n\n const calculateBidsComparisonRedirectPath = (record?: Record) => {\n const bidsComparisonPath = record\n ? linkToRecord(`/${RESOURCE_NAME_BIDS_COMPARISON}`, record?.id)\n : \"\";\n\n return bidsComparisonPath;\n };\n\n const shouldDisplayBidsComparisonAction = (record?: Record) => {\n //const shouldShow = hasCreateBidComparisonPermission && (isStatusInProgress || isStatusCompleted);\n const shouldShow = hasCreateBidComparisonPermission;\n\n return Promise.resolve(shouldShow);\n };\n\n const listRowActions: Array<ReactElement> = [\n <DefaultCrudListRowActions\n key={`defaultCrudListRowActions-${keyPrefix}`}\n shouldDisplayShow={shouldDisplayShowAction}\n shouldDisplayEdit={shouldDisplayEditAction}\n shouldDisplayDelete={shouldDisplayDeleteAction}\n hasEdit={hasEditEnquiryAccess}\n hasShow={hasShowEnquiryAccess}\n {...props}\n />,\n ];\n\n if (!isVendorUser) {\n listRowActions.push(<ApprovalListRowActionButtons {...props} />);\n }\n\n listRowActions.push(\n <RedirectListRowAction\n tooltipTitle=\"common.actions.viewBidComparison\"\n icon={<bidsComparisonResource.icon />}\n calculateRedirectPath={calculateBidsComparisonRedirectPath}\n shouldDisplay={shouldDisplayBidsComparisonAction}\n />\n );\n\n listRowActions.push(\n <RedirectListRowAction\n key={`create.requisition.action-${keyPrefix}`}\n tooltipTitle=\"resources.enquiries.actions.createBid\"\n icon={<bidResource.icon />}\n calculateRedirectPath={calculateCreateBidActionRedirectPath}\n shouldDisplay={shouldDisplayCreateBidAction}\n {...props}\n />\n );\n\n return listRowActions;\n }, [\n hasOwnOrAccountAccess,\n hasPermissionAccess,\n isVendorUser,\n permissionsLoaded,\n props,\n ]);\n\n return (\n <ListRowActions\n overriddenListRowActions={overriddenListRowActions}\n {...props}\n />\n );\n};\n\nexport { EnquiryListRowActionButtons };\n","import { useCallback, useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n SaveButton,\n SimpleForm,\n Toolbar,\n useCreate,\n useNotify,\n useRedirect,\n useRefresh,\n setSidebarVisibility,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../lib/components/crud\";\nimport { EnquiryCreateContainer } from \"./components\";\nimport { RESOURCE_NAME_ENQUIRY } from \"./constants\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../lib/modules\";\nimport { FILTER_DIRECTION } from \"../../common\";\n\nconst EnquiryCreate= (props) => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n \n \n return (\n <DefaultCreate \n {...props}\n basePath={`/enquiries?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`}\n >\n <SimpleForm\n {...props}\n warnWhenUnsavedChanges\n toolbar={<CustomEnquiryToolbar />}\n mutationMode=\"pessimistic\"\n >\n <EnquiryCreateContainer />\n </SimpleForm>\n </DefaultCreate>\n );\n};\n\nconst SaveEnquiryButton = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n// eslint-disable-next-line\nconst [saveEnquiry, { }] = useCreate(RESOURCE_NAME_ENQUIRY);\n const refresh = useRefresh();\n\n const handleSave = useCallback(\n async (values) => {\n if (!values.vendorIds || !values.enquiryDetails) {\n if (!values.vendorIds && !values.enquiryDetails) {\n notify(\"resources.enquiries.messages.chooseItemsAndVendors\", {type: \"error\"});\n } else if (!values.vendorIds) {\n notify(\"resources.enquiries.messages.chooseVendors\", {type: \"error\"});\n } else if (!values.enquiryDetails) {\n notify(\"resources.enquiries.messages.chooseItems\", {type: \"error\"});\n }\n\n return false;\n }\n\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'enquiries',\n }];\n const modifiedValues = await transformAndUploadS3Files(mediaFileSources)(values);\n saveEnquiry(\n {\n payload: {\n data: {\n ...modifiedValues,\n },\n },\n },\n {\n onSuccess: () => {\n notify(\"resources.enquiries.messages.enquirySaved\", {type: \"success\"});\n redirect(`/enquiries?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`);\n refresh(true);\n },\n onFailure: (error) => {\n const message = error?.message;\n notify(message, {type: \"error\"});\n }\n }\n );\n },\n// eslint-disable-next-line\n[saveEnquiry, notify, redirect]\n );\n return <SaveButton {...props} onSave={handleSave} />;\n};\n\nconst CustomEnquiryToolbar = (props) => (\n <Toolbar {...props} style={{ clear: \"left\" }}>\n <SaveEnquiryButton />\n </Toolbar>\n);\n\nexport { EnquiryCreate };\n","import { useCallback, useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n SaveButton,\n Toolbar,\n useNotify,\n useRedirect,\n useRefresh,\n setSidebarVisibility,\n useUpdate,\n SimpleForm,\n} from \"react-admin\";\nimport { DefaultEdit } from \"../../lib/components/crud\";\nimport { EnquiryCrudEditActions, EnquiryEditContainer } from \"./components\";\nimport { RESOURCE_NAME_ENQUIRY } from \"./constants\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../lib/modules\";\nimport { FILTER_DIRECTION } from \"../../common\";\n\nconst EnquiryEdit = (props) => {\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n return (\n <DefaultEdit\n {...props}\n actions={<EnquiryCrudEditActions/>}\n mutationMode=\"pessimistic\"\n basePath={`/enquiries?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`}\n >\n <SimpleForm\n {...props}\n warnWhenUnsavedChanges\n toolbar={<CustomEnquiryToolbar {...props} />}\n mutationMode=\"pessimistic\"\n >\n <EnquiryEditContainer />\n </SimpleForm>\n </DefaultEdit>\n );\n};\n\nconst SaveEnquiryButton = (props) => {\n const notify = useNotify();\n const redirect = useRedirect();\n // eslint-disable-next-line\n const [saveEnquiry, {}] = useUpdate(RESOURCE_NAME_ENQUIRY, props?.record?.id);\n const refresh = useRefresh();\n\n const handleSave = useCallback(\n async (values) => {\n if (!values.vendorIds || !values.enquiryDetails) {\n if (!values.vendorIds && !values.enquiryDetails) {\n notify(\"resources.enquiries.messages.chooseItemsAndVendors\", {\n type: \"error\",\n });\n } else if (!values.vendorIds) {\n notify(\"resources.enquiries.messages.chooseVendors\", {\n type: \"error\",\n });\n } else if (!values.enquiryDetails) {\n notify(\"resources.enquiries.messages.chooseItems\", { type: \"error\" });\n }\n\n return false;\n }\n\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"enquiries\",\n },\n ];\n const modifiedValues = await transformAndUploadS3Files(mediaFileSources)(\n values\n );\n saveEnquiry(\n {\n payload: {\n data: {\n ...modifiedValues,\n },\n },\n },\n {\n onSuccess: () => {\n notify(\"resources.enquiries.messages.enquirySaved\", {\n type: \"success\",\n });\n refresh(true);\n redirect(`/enquiries?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`);\n },\n onFailure: (error) => {\n const message = error?.message;\n notify(message, { type: \"error\" });\n },\n }\n );\n },\n // eslint-disable-next-line\n [saveEnquiry, notify, redirect]\n );\n return <SaveButton {...props} onSave={handleSave} />;\n};\n\nconst CustomEnquiryToolbar = (props) => (\n <Toolbar {...props} style={{ clear: \"left\" }}>\n <SaveEnquiryButton {...props} />\n </Toolbar>\n);\n\nexport { EnquiryEdit };\n","import {\n createStyles,\n makeStyles,\n Theme,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport {\n AutocompleteArrayInput,\n Filter,\n FilterProps,\n ReferenceArrayInput,\n SelectArrayInput,\n useListContext,\n usePermissions,\n BooleanInput,\n} from \"react-admin\";\nimport {\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../lib/common\";\nimport {\n requisitionPermissions,\n RESOURCE_NAME_REQUISITION,\n} from \"../../requisitions\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\nimport { hasAccess } from \"../../../lib/core\";\nimport { DateInput } from \"../../../lib/components\";\nimport {\n BusinessFunctionsListFilter,\n FILTER_DIRECTION,\n ItemsListFilter,\n ProcureOwnerUserListFilter,\n PROCURE_APPROVAL_STATUS_CHOICES,\n PROC_ENTITY_RECORD_STATUS_CHOICES,\n} from \"../../../common\";\n\nconst EnquiryListFilters = (props: Omit<FilterProps, \"children\">) => {\n const isSmall = useMediaQuery<Theme>((theme) => theme.breakpoints.down(\"sm\"));\n const { permissions } = usePermissions();\n const hasRequisitionsListAccess = hasAccess(\n permissions,\n requisitionPermissions.list\n );\n const { filterValues } = useListContext(props);\n const isDirectionSent = filterValues?.direction === FILTER_DIRECTION.SENT;\n const classes = useStyles();\n\n return (\n <Filter {...props}>\n {isSmall && <SearchFilter alwaysOn />}\n {isSmall && isDirectionSent && (\n <SelectArrayInput\n label=\"common.fields.status\"\n source=\"procureStatus\"\n choices={PROC_ENTITY_RECORD_STATUS_CHOICES}\n allowEmpty={false}\n resettable={true}\n />\n )}\n {isSmall && <DateInput source=\"bidDateLte\" />}\n {isSmall && <DateInput source=\"bidDateGte\" />}\n\n {isSmall && isDirectionSent && (\n <SelectArrayInput\n source=\"procureApprovalStatus\"\n label=\"common.fields.approvalStatus\"\n choices={PROCURE_APPROVAL_STATUS_CHOICES}\n allowEmpty={false}\n resettable={true}\n className={classes.approvalStatus}\n fullWidth\n key=\"procureApprovalStatus\"\n />\n )}\n\n {isDirectionSent && hasRequisitionsListAccess && (\n <ReferenceArrayInput\n source=\"requisitionId\"\n reference={RESOURCE_NAME_REQUISITION}\n key=\"requisitionId\"\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"code\", order: \"ASC\" }}\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n allowEmpty={false}\n resettable={true}\n />\n </ReferenceArrayInput>\n )}\n {isDirectionSent && (\n <BusinessFunctionsListFilter source=\"businessFunctionId\" />\n )}\n {isDirectionSent && <ItemsListFilter source=\"itemId\" />}\n {isSmall && isDirectionSent && (\n <BooleanInput source=\"needsUserApproval\" />\n )}\n <ReferenceArrayInput\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n allowEmpty={false}\n resettable={true}\n />\n </ReferenceArrayInput>\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n\n {isDirectionSent && (\n <ProcureOwnerUserListFilter\n source=\"procureOwnerUserId\"\n label=\"common.fields.procureOwnerUserId\"\n />\n )}\n </Filter>\n );\n};\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n approvalStatus: {\n width: 175,\n },\n })\n);\nexport { EnquiryListFilters };\n","import { useListContext, FilterLiveSearch, FilterList, FilterListItem } from \"react-admin\";\nimport AccessTimeIcon from \"@material-ui/icons/AccessTime\";\nimport ApproveIcon from \"@material-ui/icons/ThumbUpAltTwoTone\";\nimport { createStyles, makeStyles, Card, CardContent } from \"@material-ui/core\";\nimport {\n FixedDateRangeFilterList,\n} from \"../../../lib/common\";\nimport {\n format,\n endOfYesterday,\n startOfWeek,\n startOfMonth,\n endOfMonth,\n subMonths,\n} from \"date-fns\";\nimport { FILTER_DIRECTION, ProcEntityRecordStatusFilterList, ProcureApprovalStatusFilterList } from \"../../../common\";\n\nconst EnquiryListSideFilters = (props) => {\n const cardClasses = useCardStyles();\n const { filterValues } = useListContext(props);\n const isDirectionSent = filterValues?.direction === FILTER_DIRECTION.SENT;\n \n return (\n <Card classes={cardClasses}>\n <CardContent>\n <FilterLiveSearch />\n <FixedDateRangeFilterList\n label=\"resources.enquiries.fields.bidDate\"\n icon={<AccessTimeIcon />}\n gteSource=\"bidDateGte\"\n lteSource=\"bidDateLte\"\n dateRangeList={bidDatesList}\n />\n {isDirectionSent && <ProcEntityRecordStatusFilterList /> }\n {isDirectionSent && <ProcureApprovalStatusFilterList /> }\n {isDirectionSent && <FilterList\n label=\"resources.enquiries.fields.needsUserApproval\"\n icon={<ApproveIcon />}\n >\n <FilterListItem\n label=\"ra.boolean.true\"\n value={{ needsUserApproval: true }}\n />\n <FilterListItem\n label=\"ra.boolean.false\"\n value={{ needsUserApproval: false }}\n />\n </FilterList> }\n </CardContent>\n </Card>\n );\n};\n\nconst useCardStyles = makeStyles((theme) =>\n createStyles({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n order: -1,\n maxWidth: 210,\n marginRight: \"1em\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n })\n);\n\nconst DATE_FORMAT_DAY = \"yyyy-MM-dd\";\nconst bidDatesList = [\n {\n label: \"resources.enquiries.filters.bidDate.today\",\n gte: format(endOfYesterday(), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.enquiries.filters.bidDate.thisWeek\",\n gte: format(startOfWeek(new Date()), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.enquiries.filters.bidDate.thisMonth\",\n lte: undefined,\n gte: format(startOfMonth(new Date()), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.enquiries.filters.bidDate.lastMonth\",\n lte: format(endOfMonth(subMonths(new Date(), 1)), DATE_FORMAT_DAY),\n gte: format(subMonths(startOfMonth(new Date()), 1), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.enquiries.filters.bidDate.earlier\",\n lte: format(endOfMonth(subMonths(new Date(), 2)), DATE_FORMAT_DAY),\n gte: undefined,\n },\n];\n\nexport { EnquiryListSideFilters };\n","import { useEffect } from \"react\";\nimport {\n setSidebarVisibility,\n ShowProps,\n TabbedShowLayout,\n Tab,\n useRecordContext,\n SimpleShowLayout,\n} from \"react-admin\";\nimport { useDispatch } from \"react-redux\";\nimport { FILTER_DIRECTION, isMatchingAccount, PermissionBehavior } from \"../../common\";\nimport { DefaultShow } from \"../../lib/components\";\nimport { usePermissionsCheck } from \"../../lib/core\";\nimport { bidResource } from \"../bids\";\nimport { bidsComparisonResource } from \"../bidsComparison\";\nimport {\n EnquiryShowBids,\n EnquiryShowContainer,\n EnquiryShowBidEnquiry,\n EnquiryCrudShowActions,\n} from \"./components\";\n\nconst EnquiryShowLayout = (props) => {\n const record = useRecordContext();\n const isProcureAccount = isMatchingAccount(record?.procureAccountId);\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n const canViewBidComparison = hasPermissionAccess(\n bidsComparisonResource?.options?.allowedPermissions?.show\n );\n\n const canViewBids = hasPermissionAccess(\n bidResource?.options?.allowedPermissions?.show\n );\n\n if (isProcureAccount) {\n return (\n <TabbedShowLayout>\n <Tab label=\"resources.enquiries.fieldGroups.enquiry\">\n <EnquiryShowContainer />\n </Tab>\n {canViewBids && (\n <Tab label=\"resources.enquiries.fieldGroups.bids\">\n <EnquiryShowBids />\n </Tab>\n )}\n {canViewBidComparison && (\n <Tab label=\"resources.enquiries.fieldGroups.bidsComparison\">\n <EnquiryShowBidEnquiry {...props} />\n </Tab>\n )}\n </TabbedShowLayout>\n );\n } else {\n return (\n <SimpleShowLayout>\n <EnquiryShowContainer />\n </SimpleShowLayout>\n );\n }\n};\n\nconst EnquiryShow = (props: ShowProps) => {\n const dispatch = useDispatch();\n const { hasPermissionAccess} = usePermissionsCheck();\n const canProcure = hasPermissionAccess(PermissionBehavior.CAN_PROCURE);\n const direction = canProcure?FILTER_DIRECTION.SENT:FILTER_DIRECTION.RECEIVED;\n \n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n return (\n <DefaultShow {...props}\n actions={<EnquiryCrudShowActions/>}\n basePath={`/enquiries?filter={\"direction\":\"${direction}\"}`}\n >\n <EnquiryShowLayout {...props} />\n </DefaultShow>\n );\n};\n\nexport { EnquiryShow };\n","import ContactSupportIcon from '@material-ui/icons/ContactSupport';\nimport { PermissionEnquiries, RESOURCE_NAME_ENQUIRY } from './constants';\nimport { EnquiryCreate } from './EnquiryCreate';\nimport { EnquiryEdit } from './EnquiryEdit';\nimport { EnquiryList } from './EnquiryList';\nimport { EnquiryShow } from './EnquiryShow';\n\n\nconst enquiriesPermissions = {\n menu: PermissionEnquiries.MENU_ENQUIRIES,\n list: PermissionEnquiries.LIST_ENQUIRIES,\n create: PermissionEnquiries.CREATE_ENQUIRY,\n update: [\n PermissionEnquiries.EDIT_OWN_ENQUIRY,\n PermissionEnquiries.EDIT_ANY_ENQUIRY,\n ],\n show: [\n PermissionEnquiries.SHOW_OWN_ENQUIRY,\n PermissionEnquiries.SHOW_ANY_ENQUIRY\n ],\n delete: [\n PermissionEnquiries.DELETE_OWN_ENQUIRY,\n PermissionEnquiries.DELETE_ANY_ENQUIRY,\n ],\n import: PermissionEnquiries.IMPORT_ENQUIRIES,\n};\nconst enquiryResource = {\n name: RESOURCE_NAME_ENQUIRY,\n list: EnquiryList,\n create: EnquiryCreate,\n edit: EnquiryEdit,\n show: EnquiryShow, \n icon: ContactSupportIcon,\n options: {label: 'resources.enquiries.name', allowedPermissions: enquiriesPermissions },\n}\n\nexport * from './constants';\nexport { enquiriesPermissions, enquiryResource }","import { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\n\nimport {\n ListProps,\n setSidebarVisibility,\n ReferenceField,\n TextField,\n DateField,\n BooleanField,\n useListParams,\n} from \"react-admin\";\nimport { CustomizableDatagrid, CustomizableList } from \"../../lib/components\";\nimport { DEFAULT_PER_PAGE } from \"../../lib/common\";\nimport { EnquiryListFilters } from \"./components/EnquiryListFilters\";\nimport { EnquiryListSideFilters } from \"./components/EnquiryListSideFilters\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../lib/modules\";\nimport {\n requisitionPermissions,\n RESOURCE_NAME_REQUISITION,\n} from \"../requisitions\";\nimport { COMMON_DATE_TIME_FORMAT, usePermissionsCheck } from \"../../lib/core\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"../datasetup/business-functions/constants\";\nimport { EnquiryListRowActionButtons } from \"./components\";\nimport {\n ApprovalStatusField,\n FILTER_DIRECTION,\n getProcEntityRecordStatusRowStyle,\n ProcureAccountField,\n UserNameEmailField,\n RecordStatusField,\n} from \"../../common\";\nimport { enquiryResource } from \".\";\n\nconst EnquiryList = (props: ListProps) => {\n const dispatch = useDispatch();\n const [listParams] = useListParams({\n resource: enquiryResource.name,\n syncWithLocation: true,\n });\n\n const { filterValues } = listParams;\n const isDirectionSent = filterValues[\"direction\"] === FILTER_DIRECTION.SENT;\n\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n const [hasRequisitionsListAccess, setHasRequisitionsListAccess] =\n useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasRequisitionsListAccess = hasPermissionAccess(\n requisitionPermissions.list\n );\n setHasRequisitionsListAccess(hasRequisitionsListAccess);\n }\n }, [permissionsLoaded]);\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n const defaultColumns = [\"code\", \"bidStartDate\", \"bidEndDate\"];\n\n if (isDirectionSent) {\n defaultColumns.push(\"status\");\n defaultColumns.push(\"procureApprovalStatus\");\n }\n\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n aside={<EnquiryListSideFilters />}\n filters={<EnquiryListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid rowStyle={getProcEntityRecordStatusRowStyle}>\n <TextField source=\"code\" />\n <ReferenceField\n source=\"accountId\"\n sortable={false}\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n {isDirectionSent && (\n <ReferenceField\n source=\"name\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n sortable={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n {isDirectionSent && hasRequisitionsListAccess && (\n <ReferenceField\n source=\"requisitionId\"\n reference={RESOURCE_NAME_REQUISITION}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n )}\n <DateField source=\"bidStartDate\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"bidEndDate\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField\n source=\"preferredDeliveryDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n {isDirectionSent && <RecordStatusField label=\"common.fields.status\" />}\n {isDirectionSent && (\n <ApprovalStatusField label=\"common.fields.approvalStatus\" />\n )}\n <ProcureAccountField label={`${isDirectionSent?'common.fields.procureAccountId':'resources.enquiries.fields.customerName'}`} />\n <UserNameEmailField source=\"procureOwnerUserId\" label={`${isDirectionSent?'common.fields.procureOwnerUserId':'resources.enquiries.fields.customerContact'}`} />\n {isDirectionSent && <BooleanField source=\"canLevel1Approve\" />}\n {isDirectionSent && <BooleanField source=\"canLevel2Approve\" />}\n <DateField\n source=\"createdAt\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <DateField\n source=\"updatedAt\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <EnquiryListRowActionButtons />)\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { EnquiryList };\n","import {\n Divider,\n Tabs,\n Tab,\n Theme,\n useMediaQuery,\n} from \"@material-ui/core\";\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport {\n Identifier,\n useGetList,\n useListContext,\n ListContextProvider,\n Datagrid,\n DatagridProps,\n ReferenceField,\n TextField,\n DateField,\n NumberField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_BID } from \"../constants\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\nimport { RESOURCE_NAME_ENQUIRY } from \"../../enquiries\";\nimport { ListRowActions } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../lib/common\";\nimport { FILTER_DIRECTION, getProcEntityRecordStatusRowStyle } from \"../../../common\";\n\n\n\nconst tabs = [\n { id: FILTER_DIRECTION.SENT, name: FILTER_DIRECTION.SENT },\n { id: FILTER_DIRECTION.RECEIVED, name: FILTER_DIRECTION.RECEIVED },\n];\n\nconst useGetTotals = (filterValues: any) => {\n const { total: totalSent } = useGetList(\n RESOURCE_NAME_BID,\n { perPage: MAX_RECORDS_PER_PAGE, page: 1 },\n { field: \"id\", order: \"ASC\" },\n { ...filterValues, direction: FILTER_DIRECTION.SENT }\n );\n const { total: totalReceived } = useGetList(\n RESOURCE_NAME_BID,\n { perPage: 1, page: 1 },\n { field: \"id\", order: \"ASC\" },\n { ...filterValues, direction: FILTER_DIRECTION.RECEIVED }\n );\n\n return {\n sent: totalSent,\n received: totalReceived,\n };\n};\n\ninterface TabbedDatagridProps extends DatagridProps { }\n\nconst BidTabbedDatagrid= (props:TabbedDatagridProps) => {\n const listContext = useListContext();\n const { ids, filterValues, setFilters, displayedFilters } = listContext;\n\n const isSmall = useMediaQuery<Theme>((theme) => theme.breakpoints.down(\"sm\"));\n\n const [received, setReceived] = useState<Identifier[]>([] as Identifier[]);\n const [sent, setSent] = useState<Identifier[]>([] as Identifier[]);\n\n const totals = useGetTotals(filterValues) as any;\n useEffect(() => {\n if (ids && ids !== filterValues.direction) {\n switch (filterValues.direction) {\n case FILTER_DIRECTION.SENT:\n setSent(ids);\n break;\n case FILTER_DIRECTION.RECEIVED:\n setReceived(ids);\n break;\n }\n }\n }, [ids, filterValues.direction]);\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<{}>, value: any) => {\n setFilters &&\n setFilters({ ...filterValues, direction: value }, displayedFilters);\n },\n [displayedFilters, filterValues, setFilters]\n );\n\n return (\n <Fragment>\n <Tabs\n variant=\"fullWidth\"\n centered\n value={filterValues.direction}\n indicatorColor=\"primary\"\n onChange={handleChange}\n >\n {tabs.map((choice) => (\n <Tab\n key={choice.id}\n label={\n totals[choice.name]\n ? `${choice.name} (${totals[choice.name]})`\n : choice.name\n }\n value={choice.id}\n />\n ))}\n </Tabs>\n\n <Divider />\n {isSmall ? (\n <div>\n {filterValues.direction === FILTER_DIRECTION.SENT && (\n <ListContextProvider value={{ ...listContext, ids: sent }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <ReferenceField\n source=\"enquiryId\"\n reference={RESOURCE_NAME_ENQUIRY}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n {filterValues.direction === FILTER_DIRECTION.RECEIVED && (\n <ListContextProvider value={{ ...listContext, ids: sent }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <ReferenceField source=\"code\" reference={RESOURCE_NAME_ENQUIRY}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n </div>\n ) : (\n <div>\n {filterValues.direction === FILTER_DIRECTION.SENT && (\n <ListContextProvider value={{ ...listContext, ids: sent }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <ReferenceField\n source=\"enquiryId\"\n reference={RESOURCE_NAME_ENQUIRY}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"userAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <DateField source=\"estimatedDeliveryDate\" />\n <NumberField source=\"totalAmount\" />\n <NumberField source=\"totalAmount2\" />\n <DateField\n source=\"updatedAt\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n {filterValues.direction === FILTER_DIRECTION.RECEIVED && (\n <ListContextProvider value={{ ...listContext, ids: sent }}>\n <Datagrid {...props} rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n <ReferenceField\n source=\"enquiryId\"\n reference={RESOURCE_NAME_ENQUIRY}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n source=\"vendorAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField\n source=\"estimatedDeliveryDate\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <NumberField source=\"totalAmount\" />\n <NumberField source=\"totalAmount2\" />\n <DateField\n source=\"updatedAt\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <ListRowActions />\n </Datagrid>\n </ListContextProvider>\n )}\n </div>\n )}\n </Fragment>\n );\n};\n\nexport { BidTabbedDatagrid };\n","import { useEffect, useState } from \"react\";\nimport { useForm } from \"react-final-form\";\nimport {\n ArrayInput,\n FormDataConsumer,\n Identifier,\n InputProps,\n RichTextField,\n NumberField,\n SimpleFormIterator,\n FormInput,\n ReferenceField,\n TextField,\n Labeled,\n NumberInput,\n required,\n} from \"react-admin\";\nimport { BidDetailRecord } from \"../constants\";\nimport { RESOURCE_NAME_ITEM } from \"../../datasetup/items\";\nimport { makeStyles, Box, Typography } from \"@material-ui/core\";\nimport { ItemDetailsInputAccordionField, QuantityField } from \"../../../common\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\nimport { TruncatedTextField } from \"../../../lib/components\";\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n display: \"flex\",\n flexDirection: \"row\",\n padding: 0,\n gap: 10,\n width: \"100%\",\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"column\",\n },\n \"& div > .MuiAccordionSummary-content\": {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n columnGap: 10,\n width: \"100%\",\n [theme.breakpoints.down(\"sm\")]: {\n flexDirection: \"column\",\n },\n },\n \"& .MuiAccordionSummary-content >.ra-input-itemId\": {\n paddingRight: 15,\n },\n \"& .MuiAccordionSummary-expandIcon\": {\n transform: \"rotate(-90deg)\",\n position: \"absolute\",\n left: -40,\n \"& .Mui-expanded\": {\n transform: \"rotate(1deg)\",\n },\n },\n \"& .MuiAccordionSummary-expandIcon.Mui-expanded\": {\n transform: \"rotate(1deg)\",\n },\n },\n itemId: {\n minWidth: 100,\n // maxWidth: 350,\n paddingRight: 15,\n [theme.breakpoints.down(\"sm\")]: {\n maxWidth: \"unset\",\n }\n },\n quantity: {\n paddingLeft: 10,\n paddingRight: 50,\n minWidth: 30,\n maxWidth: 150,\n [theme.breakpoints.down(\"sm\")]: {\n paddingLeft: 0,\n maxWidth: \"unset\",\n }\n },\n currencyId: {\n minWidth: 30,\n maxWidth: 100,\n },\n unitPrice: {\n minWidth: 30,\n maxWidth: 100,\n paddingLeft: 10,\n paddingRight: 10,\n backgroundColor: '#6bd280',\n \"& div\": {\n padding: 0,\n margin: 0,\n \"& .MuiFilledInput-inputMarginDense\": {\n paddingTop: 5,\n paddingBottom: 5,\n },\n },\n [theme.breakpoints.down(\"sm\")]: {\n paddingLeft: 0,\n maxWidth: \"unset\",\n }\n },\n amount: {\n minWidth: 50,\n maxWidth: 150,\n paddingLeft: 10,\n paddingRight: 10,\n [theme.breakpoints.down(\"sm\")]: {\n paddingLeft: 0,\n maxWidth: \"unset\",\n }\n },\n make: {\n minWidth: 50,\n maxWidth: 150,\n paddingLeft: 10,\n paddingRight: 10,\n [theme.breakpoints.down(\"sm\")]: {\n paddingLeft: 0,\n maxWidth: \"unset\",\n }\n },\n size: {\n minWidth: 30,\n maxWidth: 150,\n paddingLeft: 10,\n paddingRight: 10,\n [theme.breakpoints.down(\"sm\")]: {\n paddingLeft: 0,\n maxWidth: \"unset\",\n }\n },\n specifications: {\n minWidth: 80,\n maxWidth: 200,\n paddingLeft: 10,\n paddingRight: 10,\n [theme.breakpoints.down(\"sm\")]: {\n paddingLeft: 0,\n maxWidth: \"unset\",\n }\n },\n comments: {\n minWidth: 80,\n maxWidth: 250,\n paddingLeft: 10,\n paddingRight: 10,\n [theme.breakpoints.down(\"sm\")]: {\n paddingLeft: 0,\n maxWidth: \"unset\",\n }\n },\n itemsAccordion: {\n border: 0,\n borderRadius: 0,\n position: \"unset\",\n },\n totalAmountLabel: {\n fontWeight: 500,\n justifySelf: \"end\",\n paddingRight: 25,\n fontStyle: \"italic\",\n [theme.breakpoints.down(\"sm\")]: {\n justifySelf: \"start\",\n paddingBottom: 0,\n },\n },\n totalAmountContainer: {\n backgroundColor: '#6bd280',\n \"& label\": {\n fontWeight: 600,\n fontStyle: \"italic\",\n transformOrigin: \"top\",\n },\n \"& div\": {\n textAlign: \"center\",\n },\n \"& div span\": {\n fontWeight: 600,\n fontStyle: \"italic\",\n },\n },\n itemsArrayContainer: {\n overflowX: \"auto\",\n whiteSpace: \"nowrap\",\n width: \"90vw\",\n \"& li\": {\n flexDirection: \"row\",\n [theme.breakpoints.down(\"sm\")]: { flexDirection: \"column\" },\n },\n },\n totalsContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n flexDirection: \"row\",\n [theme.breakpoints.down(\"sm\")]: {\n justifyContent: \"flex-start\",\n },\n },\n}));\n\ninterface VendorBidFormProps extends InputProps {\n enquiryId: Identifier;\n currencyId: Identifier;\n currency2Id?: Identifier;\n bidDetails: BidDetailRecord[];\n showUnitPrice2: boolean;\n}\n\nconst VendorBidForm = (props: VendorBidFormProps) => {\n const [totalAmount, setTotalAmount] = useState<number | undefined>();\n const [totalAmount2, setTotalAmount2] = useState<number | undefined>();\n\n const {\n enquiryId,\n bidDetails,\n currencyId,\n currency2Id,\n showUnitPrice2,\n ...rest\n } = props;\n const formClasses = useStyles();\n const form = useForm();\n\n useEffect(() => {\n if (bidDetails) {\n form.change(\"bidDetails\", bidDetails);\n }\n // eslint-disable-next-line\n }, [bidDetails]);\n\n const recalculateTotalAmounts = (bidDetails) => {\n let totalAmount = 0;\n let totalAmount2 = 0;\n\n for (\n let detailRowIndex = 0;\n detailRowIndex < bidDetails?.length;\n detailRowIndex++\n ) {\n const bidDetail = bidDetails[detailRowIndex];\n const quantity = bidDetail?.quantity;\n const unitPrice = bidDetail?.unitPrice;\n\n const quantity2 = bidDetail?.quantity2;\n const unitPrice2 = bidDetail?.unitPrice2;\n\n if (quantity && unitPrice) {\n totalAmount += quantity * unitPrice;\n }\n\n if (showUnitPrice2 && quantity2 && unitPrice2) {\n totalAmount2 += quantity2 * unitPrice2;\n }\n }\n\n setTotalAmount(totalAmount);\n setTotalAmount2(totalAmount2);\n };\n\n return (\n <Box className={formClasses.itemsArrayContainer}>\n <ArrayInput\n {...rest}\n defaultValue={bidDetails}\n isRequired={true}\n source=\"bidDetails\"\n label={false}\n margin=\"dense\"\n validate={[required()]}\n >\n <SimpleFormIterator\n margin=\"dense\"\n variant=\"filled\"\n disableAdd\n disableRemove\n disableReordering={true}\n getItemLabel={() => \"\"}\n >\n <FormDataConsumer>\n {({ getSource, formData, scopedFormData }) => {\n if (!getSource || !scopedFormData) {\n return <div />;\n }\n\n const quantity = scopedFormData?.quantity;\n const unitPrice = scopedFormData?.unitPrice;\n\n const quantity2 = scopedFormData?.quantity2;\n const unitPrice2 = scopedFormData?.unitPrice2;\n\n const amount =\n quantity && unitPrice ? quantity * unitPrice : undefined;\n const amount2 =\n showUnitPrice2 && quantity2 && unitPrice2\n ? quantity2 * unitPrice2\n : undefined;\n\n recalculateTotalAmounts(formData.bidDetails);\n\n return (\n <ItemDetailsInputAccordionField\n record={scopedFormData}\n summaryClassName={formClasses.form}\n >\n <Labeled\n id=\"sortOrder\"\n source=\"sortOrder\"\n label=\"resources.bids.fields.serialNum\"\n >\n <TextField\n source=\"sortOrder\"\n label=\"resources.bids.fields.serialNum\"\n record={scopedFormData}\n />\n </Labeled>\n\n <FormInput\n basePath={props.basePath}\n input={\n <ReferenceField\n label=\"resources.bids.fields.itemId\"\n source=\"itemId\"\n reference={RESOURCE_NAME_ITEM}\n record={scopedFormData}\n formClassName=\"itemId\"\n link={false}\n >\n <TextField\n source=\"displayLabel\"\n />\n </ReferenceField>\n }\n record={scopedFormData}\n className={formClasses.itemId}\n />\n <QuantityField\n record={scopedFormData}\n className={formClasses.quantity}\n />\n <Labeled\n id=\"currencyId\"\n source=\"currencyId\"\n label=\"resources.bids.fields.currencyId\"\n className={formClasses.currencyId}\n >\n <ReferenceField\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n link={false}\n record={{\n id: \"\",\n currencyId,\n }}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n </Labeled>\n <Labeled\n id=\"unitPrice\"\n source={getSource(\"unitPrice\")}\n label=\"resources.bids.fields.unitPrice\"\n className={formClasses.unitPrice}\n isRequired\n >\n <NumberInput\n source={getSource(\"unitPrice\")}\n label={false}\n helperText=\"resources.bids.help.unitPrice\"\n isRequired\n validate={[required()]}\n />\n </Labeled>\n <Labeled\n id=\"amount\"\n source=\"amount\"\n label=\"resources.bids.fields.amount\"\n className={formClasses.amount}\n >\n <NumberField\n source=\"amount\"\n record={{\n id: \"\",\n amount,\n }}\n />\n </Labeled>\n\n {showUnitPrice2 && (\n <QuantityField\n record={scopedFormData}\n source=\"quantity2\"\n label=\"resources.bids.fields.quantity2\"\n uomSource=\"uom2Id\"\n className={formClasses.quantity}\n />\n )}\n\n {showUnitPrice2 && (\n <Labeled\n id=\"unitPrice2\"\n source={getSource(\"unitPrice2\")}\n label=\"resources.bids.fields.unitPrice2\"\n className={formClasses.unitPrice}\n isRequired={quantity2 > 0 ? true : false}\n >\n <NumberInput\n source={getSource(\"unitPrice2\")}\n label={false}\n helperText=\"resources.bids.help.unitPrice2\"\n validate={quantity2 > 0 ? [required()] : []}\n />\n </Labeled>\n )}\n\n {showUnitPrice2 && (\n <Labeled \n id=\"amount2\" \n source=\"amount2\" \n label=\"resources.bids.fields.amount2\"\n className={formClasses.amount}\n >\n <NumberField\n source=\"amount2\"\n record={{\n id: \"\",\n amount2,\n }}\n />\n </Labeled>\n )}\n\n <Labeled\n id=\"make\"\n source=\"make\"\n label=\"resources.bids.fields.make\"\n className={formClasses.make}\n >\n <TruncatedTextField\n source=\"requisitionDetail.make\"\n label=\"resources.bids.fields.make\"\n truncateLength={25}\n record={scopedFormData}\n />\n </Labeled>\n <Labeled\n id=\"size\"\n source=\"size\"\n label=\"resources.bids.fields.size\"\n className={formClasses.size}\n >\n <TruncatedTextField\n source=\"requisitionDetail.size\"\n label=\"resources.bids.fields.size\"\n truncateLength={25}\n record={scopedFormData}\n />\n </Labeled>\n <Labeled\n id=\"specifications\"\n source=\"requisitionDetail.specifications\"\n label=\"resources.bids.fields.specifications\"\n className={formClasses.specifications}\n >\n <RichTextField\n source=\"requisitionDetail.specifications\"\n label=\"resources.bids.fields.specifications\"\n record={scopedFormData}\n />\n </Labeled>\n <Labeled\n id=\"comments\"\n source=\"comments\"\n label=\"resources.bids.fields.comments\"\n className={formClasses.comments}\n >\n <TruncatedTextField\n source=\"comments\"\n label=\"resources.bids.fields.comments\"\n truncateLength={25}\n record={scopedFormData}\n />\n </Labeled>\n </ItemDetailsInputAccordionField>\n );\n }}\n </FormDataConsumer>\n </SimpleFormIterator>\n </ArrayInput>\n <Box className={formClasses.totalsContainer}>\n <Typography className={formClasses.totalAmountLabel}>Totals</Typography>\n <Labeled\n id=\"totalAmount\"\n source=\"totalAmount\"\n label=\"resources.bids.fields.totalAmount\"\n className={formClasses.totalAmountContainer}\n >\n <NumberField\n source=\"totalAmount\"\n record={{\n id: \"\",\n totalAmount,\n }}\n label=\"resources.bids.fields.totalAmount\"\n />\n </Labeled>\n\n {showUnitPrice2 && (\n <Labeled\n id=\"totalAmount2\"\n source=\"totalAmount2\"\n label=\"resources.bids.fields.totalAmount2\"\n className={formClasses.totalAmountContainer}\n >\n <NumberField\n source=\"totalAmount2\"\n record={{\n id: \"\",\n totalAmount2,\n }}\n />\n </Labeled>\n )}\n </Box>\n </Box>\n );\n};\n\nexport { VendorBidForm };\n","import { Box, makeStyles } from \"@material-ui/core\";\nimport React from \"react\";\nimport {\n ArrayField,\n Datagrid,\n Labeled,\n ReferenceField,\n RichTextField,\n SimpleShowLayout,\n TextField,\n useRecordContext,\n} from \"react-admin\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport {\n AccordionField,\n DateCountdownField,\n EmptyState,\n ResourceLinkedField,\n SectionTitleSubtitle,\n UploadedFilesField,\n} from \"../../../lib/components\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\nimport { RESOURCE_NAME_ENQUIRY } from \"../../enquiries\";\nimport ConditionIcon from \"@material-ui/icons/Gavel\";\nimport { ApprovalStatusField, isMatchingAccount, RecordStatusField } from \"../../../common\";\n\nconst useStyles = makeStyles((theme) => ({\n enquirySummary: {\n display: \"grid\",\n gridGap: 25,\n paddingTop: 0,\n paddingBottom: 0,\n [theme.breakpoints.up(\"sm\")]: { gridTemplateColumns: \"1fr 1fr 1fr \" },\n [theme.breakpoints.down(\"sm\")]: { gridTemplateColumns: \"1fr 1fr\" },\n [theme.breakpoints.down(\"xs\")]: { gridTemplateColumns: \"1fr\" },\n },\n summaryDetails: {\n flexDirection: \"column\",\n },\n layout: {\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gridGap: 25,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n detailRow: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr\",\n width: \"100%\",\n marginLeft: 20,\n gridGap: 25,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n marginLeft: 25,\n },\n [theme.breakpoints.down(\"sm\")]: {\n gridTemplateColumns: \"1fr\",\n marginLeft: 25,\n },\n },\n remarks: {\n gridColumn: \"1 / span 3\",\n },\n emptyStateContainer: {\n width: \"25%\",\n // display: \"flex\",\n // flexDirection: \"column\",\n // alignItems: \"flex-start\"\n },\n emptyStateIcon: {\n width: \"1.25em\",\n height: \"1.25em\",\n alignSelf: \"center\",\n },\n}));\n\nconst EnquirySummaryFields = (props) => {\n const record = useRecordContext(props);\n const isProcureAccount = isMatchingAccount(record?.procureAccountId);\n const classes = useStyles();\n return (\n <>\n <SimpleShowLayout className={classes.layout} {...props}>\n <Labeled\n id=\"code\"\n source=\"code\"\n label=\"resources.enquiries.fields.code\"\n resource={RESOURCE_NAME_ENQUIRY}\n >\n <ResourceLinkedField\n label=\"resources.enquiries.fields.code\"\n source=\"code\"\n linkedResource={RESOURCE_NAME_ENQUIRY}\n linkedResourceIdSource=\"id\"\n resource={RESOURCE_NAME_ENQUIRY}\n record={record}\n link=\"show\"\n />\n </Labeled>\n\n <Labeled id=\"currencyId\" source=\"currencyId\">\n <ReferenceField\n label=\"resources.enquiries.fields.currencyId\"\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n link={false}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n </Labeled>\n\n {isProcureAccount && (\n <RecordStatusField label=\"common.fields.status\" useLabel={true} />\n )}\n\n {isProcureAccount && (\n <ApprovalStatusField\n label=\"common.fields.approvalStatus\"\n useLabel={true}\n />\n )}\n\n <Labeled id=\"bidStartDate\" source=\"bidStartDate\">\n <DateCountdownField\n source=\"bidStartDate\"\n label=\"resources.enquiries.fields.bidStartDate\"\n options={COMMON_DATE_TIME_FORMAT}\n showTime\n />\n </Labeled>\n <Labeled id=\"bidEndDate\" source=\"bidEndDate\">\n <DateCountdownField\n source=\"bidEndDate\"\n label=\"resources.enquiries.fields.bidEndDate\"\n options={COMMON_DATE_TIME_FORMAT}\n showTime\n />\n </Labeled>\n <Labeled id=\"preferredDeliveryDate\" source=\"preferredDeliveryDate\">\n <DateCountdownField\n source=\"preferredDeliveryDate\"\n label=\"resources.enquiries.fields.preferredDeliveryDate\"\n options={COMMON_DATE_TIME_FORMAT}\n showTime\n />\n </Labeled>\n </SimpleShowLayout>\n\n {record?.conditions && (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.conditions.field.title\"\n headerTooltip=\"resources.enquiries.sections.conditions.field.tooltip\"\n >\n <Box>\n <SectionTitleSubtitle title=\"resources.enquiries.sections.conditions.field.heading\" />\n\n <ArrayField source=\"conditions\" fullWidth={true}>\n <Datagrid\n empty={\n <EmptyState\n title=\"resources.enquiries.sections.conditions.emptyState\"\n subTitle={null}\n Icon={ConditionIcon}\n className={classes.emptyStateContainer}\n iconClassName={classes.emptyStateIcon}\n />\n }\n >\n <TextField source=\"conditionType\" />\n <TextField source=\"condition\" fullWidth/>\n </Datagrid>\n </ArrayField>\n </Box>\n </AccordionField>\n )}\n\n {record?.remarks && (\n <AccordionField\n headerlabel=\"resources.enquiries.sections.remarks.field.title\"\n headerTooltip=\"resources.enquiries.sections.remarks.field.tooltip\"\n >\n <RichTextField source=\"remarks\" />\n </AccordionField>\n )}\n\n <AccordionField\n headerlabel=\"resources.enquiries.sections.fileUpload.input.title\"\n headerTooltip=\"resources.enquiries.sections.fileUpload.input.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <UploadedFilesField canDelete={false} />\n </Box>\n </AccordionField>\n </>\n );\n};\n\nconst EnquirySummaryContainer = (props) => {\n const record = useRecordContext();\n const classes = useStyles();\n\n return (\n <AccordionField\n headerlabel=\"resources.bids.sections.summary.title\"\n headerTooltip=\"resources.bids.sections.summary.tooltip\"\n detailsClassName={classes.summaryDetails}\n >\n <ReferenceField\n label=\"resources.bids.fields.enquiryId\"\n source=\"enquiryId\"\n reference={RESOURCE_NAME_ENQUIRY}\n link={false}\n fullWidth={true}\n >\n <EnquirySummaryFields bidRecord={record} {...props} />\n </ReferenceField>\n </AccordionField>\n );\n};\n\nexport { EnquirySummaryContainer };\n","import { required } from \"react-admin\";\nimport { isDateNotLessThanToday } from \"../../../lib/components/validations/dateValidations\";\n\nconst estimatedDeliveryDate = [\n required(),\n isDateNotLessThanToday()\n];\n\nexport const validations = {\n estimatedDeliveryDate,\n}","import { Fragment, useEffect, useState } from \"react\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport {\n AutocompleteInput,\n RecordContextProvider,\n ReferenceInput,\n required,\n useGetList,\n Record,\n ArrayInput,\n SimpleFormIterator,\n TextInput,\n useGetOne,\n} from \"react-admin\";\nimport { useLocation } from \"react-router-dom\";\nimport { useForm } from \"react-final-form\";\nimport { DEFAULT_DATE_TIME_OPTIONS, MAX_RECORDS_PER_PAGE, UserFormMessage } from \"../../../lib/common\";\nimport {\n AccordionField,\n DateTimeInput,\n MediaInputField,\n} from \"../../../lib/components\";\nimport { BidDetailRecord, RESOURCE_NAME_BID } from \"../constants\";\nimport { VendorBidForm } from \"./VendorBidForm\";\nimport { Box, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport { SectionTitleSubtitle } from \"../../../lib/components\";\nimport {\n RESOURCE_NAME_ENQUIRY,\n RESOURCE_NAME_ENQUIRY_DETAILS,\n} from \"../../enquiries\";\nimport { EnquirySummaryContainer } from \"./EnquirySummaryContainer\";\nimport { validations } from \"./validations\";\nimport { FILTER_DIRECTION } from \"../../../common\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n estimatedDeliveryDate: {\n marginTop: 25,\n marginLeft: 5,\n },\n remarksAccordion: {\n width: \"100%\",\n marginTop: 25,\n },\n })\n);\n\nconst useArrayInputStyles = makeStyles((theme) => ({\n form: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 3fr\",\n gridColumnGap: 50,\n [theme.breakpoints.down(\"sm\")]: { gridTemplateColumns: \"100%\" },\n },\n}));\n\nconst BidCreateContent = ({ isEdit = false, ...rest }) => {\n const classes = useStyles();\n const arrayInputClasses = useArrayInputStyles();\n const form = useForm();\n\n const queryParams = new URLSearchParams(useLocation().search);\n const requestEnquiryId = queryParams.get(\"enquiryId\");\n\n const [selectedEnquiryId, setSelectedEnquiryId] = useState<\n string | undefined\n >();\n\n const [enquiry, setEnquiry] = useState<Record | undefined>();\n\n const { data: requestEnquiry } = useGetOne(\n RESOURCE_NAME_ENQUIRY,\n selectedEnquiryId ?? \"\",\n {\n enabled: selectedEnquiryId && selectedEnquiryId?.length ? true : false,\n }\n );\n\n useEffect(() => {\n if (requestEnquiryId) {\n form.change(\"requisitionId\", requestEnquiryId);\n setSelectedEnquiryId(requestEnquiryId);\n }\n }, [requestEnquiryId]);\n\n const [bidDetails, setBidDetails] = useState<BidDetailRecord[] | undefined>();\n\n const { total, ids, data } = useGetList(\n RESOURCE_NAME_ENQUIRY_DETAILS,\n { perPage: MAX_RECORDS_PER_PAGE, page: 1 },\n { field: \"sortOrder\", order: \"ASC\" },\n { enquiryId: enquiry?.id },\n {\n enabled: enquiry && enquiry.id ? true : false,\n onSuccess: (response) => handleEnquiryDetailsLoaded(response?.data),\n }\n );\n\n const onEnquiryIdChange = (record) => {\n setEnquiry(record);\n setSelectedEnquiryId(record?.requisitionId);\n form.change(\"requisitionId\", record?.requisitionId);\n };\n\n const handleEnquiryDetailsLoaded = (data) => {\n if (!data || !data.length) {\n return;\n }\n\n const bidDetailRecords = data?.map((existingRecord) => {\n const record: BidDetailRecord = {\n enquiryId: existingRecord.enquiryId,\n enquiryDetailId: existingRecord.id,\n requisitionId: existingRecord.requisitionId,\n requisitionDetailId: existingRecord.requisitionDetailId,\n itemId: existingRecord.itemId,\n quantity: existingRecord.quantity,\n uomId: existingRecord.uomId,\n quantity2: existingRecord.quantity2,\n uom2Id: existingRecord.uom2Id,\n sortOrder: existingRecord?.sortOrder,\n requisitionDetail: {\n make: existingRecord?.requisitionDetail?.make,\n size: existingRecord?.requisitionDetail?.size,\n specifications: existingRecord?.requisitionDetail?.specifications,\n comments: existingRecord?.requisitionDetail?.comments,\n },\n };\n\n return record;\n });\n\n setBidDetails(bidDetailRecords);\n };\n\n useEffect(() => {\n if (requestEnquiry) {\n form.change(\"enquiryId\", requestEnquiry?.id);\n form.change(\"requisitionId\", requestEnquiry?.requisitionId);\n form.change(\"showUnitPrice2\", requestEnquiry?.showUnitPrice2);\n setEnquiry(requestEnquiry);\n }\n }, [requestEnquiry]);\n\n return (\n <Box>\n <SectionTitleSubtitle\n title=\"resources.bids.sections.bid.create.title\"\n subTitle=\"resources.bids.sections.bid.create.subTitle\"\n />\n {!requestEnquiryId && (\n <ReferenceInput\n label=\"resources.bids.fields.enquiryId\"\n source=\"enquiryId\"\n reference={RESOURCE_NAME_ENQUIRY}\n filter={{\n direction: FILTER_DIRECTION.RECEIVED,\n openEnquiries: true,\n }}\n validate={[required()]}\n onSelect={onEnquiryIdChange}\n perPage={100}\n sort={{ field: \"code\", order: \"ASC\" }}\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.bids.help.enquiryId\"\n />\n </ReferenceInput>\n )}\n\n {!enquiry && (\n <UserFormMessage\n line1=\"resources.bids.messages.openEnquiries.line1\"\n line2=\"resources.bids.messages.openEnquiries.line2\"\n />\n )}\n {enquiry && (\n <RecordContextProvider\n value={{\n id: enquiry.id,\n enquiryId: enquiry.id,\n }}\n >\n <EnquirySummaryContainer />\n </RecordContextProvider>\n )}\n {enquiry && bidDetails && (\n <Fragment>\n <DateTimeInput\n source=\"estimatedDeliveryDate\"\n className={classes.estimatedDeliveryDate}\n helperText=\"resources.bids.help.estimatedDeliveryDate\"\n validate={validations.estimatedDeliveryDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n isRequired\n />\n\n <SectionTitleSubtitle\n title=\"resources.bids.sections.items.create.title\"\n subTitle=\"resources.bids.sections.items.create.subTitle\"\n />\n <VendorBidForm\n enquiryId={enquiry.id}\n currencyId={enquiry.currencyId}\n bidDetails={bidDetails}\n source=\"\"\n resource={RESOURCE_NAME_BID}\n showUnitPrice2={enquiry.showUnitPrice2}\n />\n <AccordionField\n headerlabel=\"resources.bids.sections.conditions.input.title\"\n headerTooltip=\"resources.bids.sections.conditions.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <Box>\n <SectionTitleSubtitle title=\"resources.bids.sections.conditions.input.heading\" />\n <ArrayInput source=\"conditions\" label={false}>\n <SimpleFormIterator classes={arrayInputClasses}>\n <TextInput\n source=\"conditionType\"\n label=\"resources.bids.fields.conditionType\"\n helperText=\"resources.bids.help.conditionType\"\n resettable={true}\n validate={[required()]}\n />\n <TextInput\n multiline\n fullWidth={true}\n source=\"condition\"\n label=\"resources.bids.fields.condition\"\n helperText=\"resources.bids.help.condition\"\n resettable={true}\n validate={[required()]}\n />\n </SimpleFormIterator>\n </ArrayInput>\n </Box>\n </AccordionField>\n <AccordionField\n headerlabel=\"resources.bids.sections.remarks.input.title\"\n headerTooltip=\"resources.bids.sections.remarks.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <RichTextInput\n source=\"remarks\"\n helperText=\"resources.bids.help.remarks\"\n label={false}\n />\n </AccordionField>\n <AccordionField\n headerlabel=\"resources.bids.sections.fileUpload.input.title\"\n headerTooltip=\"resources.bids.sections.fileUpload.input.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <MediaInputField showUploadedFiles={isEdit} />\n </Box>\n </AccordionField>\n </Fragment>\n )}\n </Box>\n );\n};\n\nexport { BidCreateContent };\n","import { makeStyles } from \"@material-ui/core\";\nimport {\n DateField,\n ReferenceField,\n SimpleShowLayout,\n TextField,\n useRecordContext,\n} from \"react-admin\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\nimport { RESOURCE_NAME_BUSINESS_FUNCTIONS } from \"../../datasetup/business-functions\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\n\nconst useStyles = makeStyles((theme) => ({\n layout: {\n width: \"100%\",\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr\",\n gridGap: 25,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n}));\n\nconst BidSummaryContainer = () => {\n const record = useRecordContext();\n const classes = useStyles();\n\n return (\n <SimpleShowLayout className={classes.layout}>\n <ReferenceField\n label=\"resources.bids.fields.procureAccountId\"\n source=\"procureAccountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <ReferenceField\n label=\"resources.bids.fields.businessFunctionId\"\n source=\"businessFunctionId\"\n reference={RESOURCE_NAME_BUSINESS_FUNCTIONS}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <ReferenceField\n label=\"resources.enquiries.fields.currencyId\"\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n link=\"show\"\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n {record.createdAt && (\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n )}\n\n {record.createdAt && (\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n )}\n </SimpleShowLayout>\n );\n};\n\nexport { BidSummaryContainer };\n","import { Box, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport {\n ArrayInput,\n required,\n SimpleFormIterator,\n TextInput,\n useRecordContext,\n} from \"react-admin\";\nimport { VendorBidForm } from \"./VendorBidForm\";\nimport { EnquirySummaryContainer } from \"./EnquirySummaryContainer\";\nimport {\n AccordionField,\n DateTimeInput,\n MediaInputField,\n SectionTitleSubtitle,\n} from \"../../../lib/components\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport { validations } from \"./validations\";\nimport { BidSummaryContainer } from \"./BidSummaryContainer\";\nimport { Fragment } from \"react\";\nimport { CommentsAccordion, OwnerEntityTypes } from \"../../comments\";\nimport { DEFAULT_DATE_TIME_OPTIONS } from \"../../../lib/common\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n estimatedDeliveryDate: {\n marginTop: 25,\n marginLeft: 5,\n },\n remarksAccordion: {\n width: \"100%\",\n marginTop: 25,\n },\n\n enquiryId: {\n width: \"100%\",\n },\n })\n);\n\nconst useArrayInputStyles = makeStyles((theme) => ({\n form: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 3fr\",\n gridColumnGap: 50,\n [theme.breakpoints.down(\"sm\")]: { gridTemplateColumns: \"100%\" },\n },\n}));\n\nconst BidEditContent = ({ isEdit = false, ...rest }) => {\n const record = useRecordContext();\n\n const classes = useStyles();\n const arrayInputClasses = useArrayInputStyles();\n\n return (\n <Box>\n <SectionTitleSubtitle\n title=\"resources.bids.sections.bid.edit.title\"\n subTitle=\"resources.bids.sections.bid.edit.subTitle\"\n />\n\n <EnquirySummaryContainer />\n\n <Fragment>\n <DateTimeInput\n source=\"estimatedDeliveryDate\"\n className={classes.estimatedDeliveryDate}\n helperText=\"resources.bids.help.estimatedDeliveryDate\"\n validate={validations.estimatedDeliveryDate}\n options={DEFAULT_DATE_TIME_OPTIONS}\n isRequired\n />\n\n <BidSummaryContainer />\n\n <SectionTitleSubtitle\n title=\"resources.bids.sections.items.edit.title\"\n subTitle=\"resources.bids.sections.items.edit.subTitle\"\n />\n <VendorBidForm\n enquiryId={record?.enquiryId}\n currencyId={record?.currencyId}\n bidDetails={record?.bidDetails}\n source=\"\"\n showUnitPrice2={record?.showUnitPrice2}\n />\n <AccordionField\n headerlabel=\"resources.bids.sections.conditions.input.title\"\n headerTooltip=\"resources.bids.sections.conditions.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <Box>\n <SectionTitleSubtitle title=\"resources.bids.sections.conditions.input.heading\" />\n <ArrayInput source=\"conditions\" label={false}>\n <SimpleFormIterator classes={arrayInputClasses}>\n <TextInput\n source=\"conditionType\"\n label=\"resources.bids.fields.conditionType\"\n helperText=\"resources.bids.help.conditionType\"\n resettable={true}\n validate={[required()]}\n />\n <TextInput\n multiline\n fullWidth={true}\n source=\"condition\"\n label=\"resources.bids.fields.condition\"\n helperText=\"resources.bids.help.condition\"\n resettable={true}\n validate={[required()]}\n />\n </SimpleFormIterator>\n </ArrayInput>\n </Box>\n </AccordionField>\n <AccordionField\n headerlabel=\"resources.bids.sections.remarks.input.title\"\n headerTooltip=\"resources.bids.sections.remarks.input.tooltip\"\n className={classes.remarksAccordion}\n >\n <RichTextInput\n source=\"remarks\"\n helperText=\"resources.bids.help.remarks\"\n label={false}\n />\n </AccordionField>\n <AccordionField\n headerlabel=\"resources.bids.sections.fileUpload.input.title\"\n headerTooltip=\"resources.bids.sections.fileUpload.input.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <MediaInputField showUploadedFiles={isEdit} />\n </Box>\n </AccordionField>\n\n <CommentsAccordion\n ownerEntityType={OwnerEntityTypes.BID}\n ownerEntityId={record?.id}\n isViewOnly={false}\n />\n </Fragment>\n </Box>\n );\n};\n\nexport { BidEditContent };\n","import { Box, createStyles, makeStyles, Typography } from \"@material-ui/core\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n ArrayField,\n Datagrid,\n DateField,\n Labeled,\n Loading,\n NumberField,\n ReferenceField,\n RichTextField,\n setSidebarVisibility,\n TextField,\n useRecordContext,\n} from \"react-admin\";\nimport { EnquirySummaryContainer } from \"./EnquirySummaryContainer\";\nimport { RESOURCE_NAME_CURRENCIES } from \"../../datasetup/currencies\";\nimport {\n AccordionField,\n SectionTitleSubtitle,\n UploadedFilesField,\n DateCountdownField,\n TruncatedTextField,\n} from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { CommentsAccordion, OwnerEntityTypes } from \"../../comments\";\nimport {\n CustomerNameField,\n VendorNameField,\n AmountField,\n ApprovalStatusField,\n isMatchingAccount,\n RecordStatusField,\n QuantityField,\n} from \"../../../common\";\nimport { RESOURCE_NAME_ITEM } from \"../../datasetup/items/items/constants\";\nimport { RESOURCE_NAME_UOM } from \"../../datasetup/unit-of-measure/constants\";\nimport { SingleItemShowContainer } from \"../../datasetup/items\";\nconst useStyles = makeStyles((theme) =>\n createStyles({\n layout: {\n width: \"100%\",\n display: \"grid\",\n marginLeft: 15,\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gridGap: 25,\n [theme.breakpoints.down(\"md\")]: {\n gridTemplateColumns: \"1fr 1fr\",\n },\n [theme.breakpoints.down(\"xs\")]: {\n gridTemplateColumns: \"1fr\",\n },\n },\n itemsGrid: {\n width: \"95vw\",\n whiteSpace: \"nowrap\",\n overflowX: \"auto\",\n },\n remarksAccordion: {\n marginTop: 25,\n },\n amount:{\n backgroundColor: '#6bd280',\n textAlign: 'center',\n },\n totalContainer: {\n paddingLeft: 8,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n },\n totalAmountLabel: {\n fontWeight: 500,\n alignSelf: \"center\",\n paddingRight: 25,\n fontStyle: \"italic\",\n [theme.breakpoints.down(\"sm\")]: {\n justifySelf: \"start\",\n paddingBottom: 0,\n },\n },\n amountsContainer: {\n backgroundColor: '#6bd280',\n \"& label\": {\n fontWeight: 600,\n fontStyle: \"italic\",\n transformOrigin: \"top\",\n },\n \"& div\": {\n textAlign: \"center\",\n },\n \"& div span\": {\n fontWeight: 600,\n fontStyle: \"italic\",\n },\n },\n })\n);\n\nconst BidShowContent = (props) => {\n const record = useRecordContext(props);\n const classes = useStyles();\n const dispatch = useDispatch();\n const isProcureAccount = isMatchingAccount(record?.procureAccountId);\n const formClasses = useStyles(props);\n const showUnitPrice2 = record?.showUnitPrice2;\n const linkType = isProcureAccount ? \"show\" : false;\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n if (!record) return <Loading />;\n\n return (\n <Box>\n <SectionTitleSubtitle\n title=\"resources.bids.sections.bid.field.title\"\n subTitle=\"resources.bids.sections.bid.field.subTitle\"\n />\n {props?.showEnquiryDetail && <EnquirySummaryContainer />}\n <Box className={classes.layout}>\n {!isProcureAccount && <CustomerNameField />}\n\n {isProcureAccount && <VendorNameField />}\n\n {isProcureAccount && (\n <RecordStatusField label=\"common.fields.status\" useLabel={true} />\n )}\n\n {isProcureAccount && (\n <ApprovalStatusField\n label=\"common.fields.approvalStatus\"\n useLabel={true}\n />\n )}\n\n <Labeled\n id=\"estimatedDeliveryDate\"\n source=\"estimatedDeliveryDate\"\n label=\"resources.bids.fields.estimatedDeliveryDate\"\n >\n <DateCountdownField\n source=\"estimatedDeliveryDate\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n </Labeled>\n <AmountField\n amountSource=\"totalAmount\"\n currencySoure=\"currencyId\"\n label=\"resources.bids.fields.totalAmount\"\n useLabel={true}\n />\n\n {showUnitPrice2 && (\n <AmountField\n amountSource=\"totalAmount2\"\n currencySoure=\"currencyId\"\n label=\"resources.bids.fields.totalAmount2\"\n useLabel={true}\n />\n )}\n\n <Labeled\n id=\"createdAt\"\n source=\"createdAt\"\n label=\"resources.bids.fields.createdAt\"\n >\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n </Labeled>\n\n <Labeled\n id=\"updatedAt\"\n source=\"updatedAt\"\n label=\"resources.bids.fields.updatedAt\"\n >\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n </Labeled>\n </Box>\n <Box>\n <SectionTitleSubtitle\n title=\"resources.bids.sections.items.field.title\"\n subTitle=\"resources.bids.sections.items.field.subTitle\"\n />\n <Box className={classes.itemsGrid}>\n <ArrayField source=\"bidDetails\" fullWidth>\n <Datagrid\n optimized\n expand={\n <SingleItemShowContainer\n procureAccountId={record?.procureAccountId}\n {...props}\n />\n }\n >\n <TextField\n source=\"sortOrder\"\n label=\"resources.bids.fields.serialNum\"\n />\n <ReferenceField\n source=\"itemId\"\n label=\"resources.bids.fields.itemId\"\n reference={RESOURCE_NAME_ITEM}\n linkType={linkType}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <QuantityField\n source=\"quantity\"\n label=\"common.fields.quantity\"\n useLabel={false}\n />\n <ReferenceField\n source=\"currencyId\"\n reference={RESOURCE_NAME_CURRENCIES}\n link={false}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <NumberField source=\"unitPrice\" cellClassName={classes.amount}/>\n <NumberField source=\"amount\" />\n\n {showUnitPrice2 && (\n <QuantityField\n source=\"quantity2\"\n uomSource=\"uom2Id\"\n label=\"common.fields.quantity2\"\n useLabel={false}\n />\n )}\n {showUnitPrice2 && <NumberField source=\"unitPrice2\" cellClassName={classes.amount}/>}\n {showUnitPrice2 && <NumberField source=\"amount2\" />}\n <TruncatedTextField\n source=\"requisitionDetail.make\"\n label=\"resources.bids.fields.make\"\n truncateLength={50}\n />\n <TruncatedTextField\n source=\"requisitionDetail.size\"\n label=\"resources.bids.fields.size\"\n truncateLength={25}\n />\n <RichTextField\n source=\"requisitionDetail.specifications\"\n label=\"resources.bids.fields.specifications\"\n />\n <TruncatedTextField\n source=\"requisitionDetail.comments\"\n label=\"resources.bids.fields.comments\"\n truncateLength={100}\n />\n </Datagrid>\n </ArrayField>\n <Box className={formClasses.totalContainer}>\n <Typography className={formClasses.totalAmountLabel}>\n Totals\n </Typography>\n <Labeled\n id=\"totalAmount\"\n source=\"totalAmount\"\n label=\"resources.bids.fields.totalAmount\"\n className={formClasses.amountsContainer}\n >\n <NumberField\n source=\"totalAmount\"\n label=\"resources.bids.fields.totalAmount\"\n />\n </Labeled>\n\n {showUnitPrice2 && (\n <Labeled\n id=\"totalAmount2\"\n source=\"totalAmount2\"\n label=\"resources.bids.fields.totalAmount2\"\n className={formClasses.amountsContainer}\n >\n <NumberField\n source=\"totalAmount2\"\n label=\"resources.bids.fields.totalAmount2\"\n />\n </Labeled>\n )}\n </Box>\n </Box>\n </Box>\n {record?.conditions && (\n <Box>\n <AccordionField\n headerlabel=\"resources.bids.sections.conditions.field.title\"\n headerTooltip=\"resources.bids.sections.conditions.field.tooltip\"\n >\n <Box>\n <SectionTitleSubtitle title=\"resources.bids.sections.conditions.field.heading\" />\n\n <ArrayField source=\"conditions\">\n <Datagrid optimized>\n <TextField source=\"conditionType\" />\n <TextField source=\"condition\" />\n </Datagrid>\n </ArrayField>\n </Box>\n </AccordionField>\n </Box>\n )}\n {record?.remarks && (\n <Box py={2}>\n <AccordionField\n headerlabel=\"resources.bids.sections.remarks.field.title\"\n headerTooltip=\"resources.bids.sections.remarks.field.tooltip\"\n className={classes.remarksAccordion}\n >\n <RichTextField source=\"remarks\" />\n </AccordionField>\n </Box>\n )}\n <Box py={2}>\n <AccordionField\n headerlabel=\"resources.bids.sections.fileUpload.show.title\"\n headerTooltip=\"resources.bids.sections.fileUpload.show.tooltip\"\n >\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <UploadedFilesField canDelete={false} />\n </Box>\n </AccordionField>\n </Box>\n\n <Box py={2}>\n <CommentsAccordion\n ownerEntityType={OwnerEntityTypes.BID}\n ownerEntityId={record?.id}\n isViewOnly={false}\n />\n </Box>\n </Box>\n );\n};\n\nBidShowContent.defaultProps = {\n showEnquiryDetail: true,\n};\n\nexport { BidShowContent };\n","import { FilterLiveSearch, useListContext, FilterList, FilterListItem } from \"react-admin\";\nimport AccessTimeIcon from \"@material-ui/icons/AccessTime\";\nimport { createStyles, makeStyles, Card, CardContent } from \"@material-ui/core\";\nimport {\n FixedDateRangeFilterList,\n} from \"../../../lib/common\";\nimport {\n format,\n endOfYesterday,\n startOfWeek,\n startOfMonth,\n endOfMonth,\n subMonths,\n} from \"date-fns\";\nimport { FILTER_DIRECTION, ProcEntityRecordStatusFilterList, ProcureApprovalStatusFilterList } from \"../../../common\";\nimport ApproveIcon from \"@material-ui/icons/ThumbUpAltTwoTone\";\n\n\nconst BidListSideFilters = (props) => {\n const cardClasses = useCardStyles();\n const { filterValues } = useListContext(props);\n const isDirectionReceived = filterValues?.direction === FILTER_DIRECTION.RECEIVED;\n\n return (\n <Card classes={cardClasses}>\n <CardContent>\n <FilterLiveSearch />\n <FixedDateRangeFilterList\n label=\"resources.bids.fields.updated_since_gte\"\n icon={<AccessTimeIcon />}\n gteSource=\"updated_since_gte\"\n lteSource=\"updated_since_lte\"\n dateRangeList={updatedSinceDatesList}\n />\n {isDirectionReceived && <ProcEntityRecordStatusFilterList />}\n {isDirectionReceived && <ProcureApprovalStatusFilterList /> }\n {isDirectionReceived && <FilterList\n label=\"resources.bids.fields.needsUserApproval\"\n icon={<ApproveIcon />}\n >\n <FilterListItem\n label=\"ra.boolean.true\"\n value={{ needsUserApproval: true }}\n />\n <FilterListItem\n label=\"ra.boolean.false\"\n value={{ needsUserApproval: false }}\n />\n </FilterList>}\n </CardContent>\n </Card>\n );\n};\n\nconst useCardStyles = makeStyles((theme) =>\n createStyles({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n order: -1,\n maxWidth: 210,\n marginRight: \"1em\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n })\n);\n\nconst DATE_FORMAT_DAY = \"yyyy-MM-dd\";\nconst updatedSinceDatesList = [\n {\n label: \"resources.bids.filters.updatedSince.today\",\n gte: format(endOfYesterday(), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.bids.filters.updatedSince.thisWeek\",\n gte: format(startOfWeek(new Date()), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.bids.filters.updatedSince.thisMonth\",\n lte: undefined,\n gte: format(startOfMonth(new Date()), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.bids.filters.updatedSince.lastMonth\",\n lte: format(endOfMonth(subMonths(new Date(), 1)), DATE_FORMAT_DAY),\n gte: format(subMonths(startOfMonth(new Date()), 1), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.bids.filters.updatedSince.earlier\",\n lte: format(endOfMonth(subMonths(new Date(), 2)), DATE_FORMAT_DAY),\n gte: undefined,\n },\n];\n\nexport { BidListSideFilters };\n","import { bidResource } from \"../../../../modules/bids\";\nimport {\n itemResource,\n itemsClassResource,\n itemsGroupResource,\n itemsSegmentResource,\n} from \"../../../../modules/datasetup/items\";\nimport {\n vendorResource,\n} from \"../../../../modules/datasetup/vendors\";\nimport {\n enquiryResource,\n} from \"../../../../modules/enquiries\";\nimport {\n requisitionResource,\n} from \"../../../../modules/requisitions\";\nimport { StatusItemProps } from \"../../../common\";\nimport { memoize } from \"../../../components/validations/validationUtils\";\nimport {\n accountResource,\n usersResource,\n} from \"../../accounts\";\nimport { Record } from \"react-admin\";\nimport { businessFunctionResource } from \"../../../../modules/datasetup/business-functions\";\nimport { categoryResource } from \"../../../../modules/datasetup/category\";\nimport { locationResource } from \"../../../../modules/datasetup/locations\";\nimport { purchaseGroupResource } from \"../../../../modules/datasetup/purchase-groups\";\n\nexport const RESOURCE_NAME_MEDIA = \"media\";\n\nexport enum PermissionMedia {\n MEDIA_MANAGEMENT_MENU = \"view-media-management-menu\",\n LIST_MEDIA = \"list-media\",\n SHOW_MEDIA = \"show-media\",\n CREATE_MEDIA = \"create-media\",\n EDIT_MEDIA = \"update-media\",\n DELETE_MEDIA = \"delete-media\",\n}\n\nexport const mediaPermissions = {\n menu: PermissionMedia.MEDIA_MANAGEMENT_MENU,\n list: PermissionMedia.LIST_MEDIA,\n create: PermissionMedia.CREATE_MEDIA,\n update: PermissionMedia.EDIT_MEDIA,\n show: PermissionMedia.SHOW_MEDIA,\n delete: PermissionMedia.DELETE_MEDIA,\n};\n\nexport interface MediaFileSource {\n source: string;\n subFolder: string;\n}\n\nexport interface MediaFile {\n originalFileName: string;\n filePath: string;\n fileExtension: string;\n fileSize: number;\n fileType: string;\n}\n\nexport const MEDIA_OWNER_MAP = new Map([\n [\n \"Accounts\",\n {\n id: \"Accounts\",\n label: \"resources.media.choices.ownerType.accounts\",\n color: \"#083D77\",\n resource: accountResource?.name,\n permission:\n accountResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n [\n \"Bids\",\n {\n id: \"Bids\",\n label: \"resources.media.choices.ownerType.bids\",\n color: \"#EE964B\",\n resource: bidResource.name,\n permission: bidResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n [\n \"Business Functions\",\n {\n id: \"Business Functions\",\n label: \"resources.media.choices.ownerType.businessFunctions\",\n color: \"#AC9BD7\",\n resource: businessFunctionResource?.name,\n permission:\n businessFunctionResource?.options?.allowedPermissions?.show?.toString(),\n width: \"150px\",\n },\n ],\n\n [\n \"Category\",\n {\n id: \"Category\",\n label: \"resources.media.choices.ownerType.category\",\n color: \"#B9E28C\",\n resource: categoryResource?.name,\n permission:\n categoryResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n\n [\n \"Enquiries\",\n {\n id: \"Enquiries\",\n label: \"resources.media.choices.ownerType.enquiries\",\n color: \"#A8A84D\",\n resource: enquiryResource?.name,\n permission: enquiryResource?.options?.allowedPermissions.show?.toString(),\n },\n ],\n [\n \"Items\",\n {\n id: \"Items\",\n label: \"resources.media.choices.ownerType.items\",\n color: \"#F2FF49\",\n resource: itemResource?.name,\n permission: itemResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n [\n \"ItemClass\",\n {\n id: \"Item Class\",\n label: \"resources.media.choices.ownerType.itemClass\",\n color: \"#723517\",\n resource: itemsClassResource?.name,\n permission:\n itemsClassResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n\n [\n \"ItemGroups\",\n {\n id: \"ItemGroups\",\n label: \"resources.media.choices.ownerType.itemGroup\",\n color: \"#D81E5B\",\n resource: itemsGroupResource?.name,\n permission:\n itemsGroupResource?.options?.allowedPermissions?.show?.toString(),\n width: \"150px\", \n },\n ],\n\n [\n \"ItemSegments\",\n {\n id: \"ItemSegments\",\n label: \"resources.media.choices.ownerType.itemSegment\",\n color: \"#74D3AE\",\n resource: itemsSegmentResource?.name,\n permission:\n itemsSegmentResource?.options?.allowedPermissions?.show?.toString(),\n width: \"150px\",\n },\n ],\n\n [\n \"Location\",\n {\n id: \"Location\",\n label: \"resources.media.choices.ownerType.location\",\n color: \"#29BF12\",\n resource: locationResource?.name,\n permission:\n locationResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n\n [\n \"PurchaseGroups\",\n {\n id: \"Purchase Groups\",\n label: \"resources.media.choices.ownerType.purchaseGroupes\",\n color: \"#5C7457\",\n resource: purchaseGroupResource?.name,\n permission:\n purchaseGroupResource?.options?.allowedPermissions?.show?.toString(),\n width: \"150px\", \n },\n ],\n\n [\n \"Requisitions\",\n {\n id: \"Requisitions\",\n label: \"resources.media.choices.ownerType.requisitions\",\n color: \"#E88D67\",\n resource: requisitionResource?.name,\n permission:\n requisitionResource?.options?.allowedPermissions?.show?.toString(),\n width: \"150px\",\n },\n ],\n [\n \"User\",\n {\n id: \"User\",\n label: \"resources.media.choices.ownerType.user\",\n color: \"#C7EF00\",\n resource: usersResource?.name,\n permission: usersResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n [\n \"vendorGroup\",\n {\n id: \"VendorGroup\",\n label: \"resources.media.choices.ownerType.vendorGroups\",\n color: \"#210B2C\",\n resource: purchaseGroupResource?.name,\n permission:\n purchaseGroupResource?.options?.allowedPermissions?.show?.toString(),\n width: \"150px\", \n },\n ],\n [\n \"Vendors\",\n {\n id: \"Vendors\",\n label: \"resources.media.choices.ownerType.vendors\",\n color: \"#FFAEBC\",\n resource: vendorResource?.name,\n permission: vendorResource?.options?.allowedPermissions?.show?.toString(),\n },\n ],\n]);\n\nexport const fetchMediaOwnerTypeChoices = memoize(() => {\n const mediaOwnerTypeFiltersList:{id: string, name: string}[] = [];\n MEDIA_OWNER_MAP.forEach((value, key) => {\n const record = {\n id: value.id,\n name: value.label,\n };\n\n mediaOwnerTypeFiltersList.push(record);\n });\n\n return mediaOwnerTypeFiltersList;\n});\n\nexport const mediaOwnerTypeFiltersList = memoize((): StatusItemProps[] => {\n const mediaOwnerTypeFiltersList: StatusItemProps[] = [];\n\n MEDIA_OWNER_MAP.forEach((value, key) => {\n const record: StatusItemProps = {\n statusLabel: value.label!,\n statusValue: value.id!,\n statusColor: value.color,\n ...(value?.width && {\n width: value.width,\n }),\n };\n\n mediaOwnerTypeFiltersList.push(record);\n });\n\n return mediaOwnerTypeFiltersList;\n});\n\nexport const getRowStyle = (record: Record) => {\n const ownerType = record?.ownerType;\n const ownerTypeRecord = MEDIA_OWNER_MAP.get(ownerType);\n const mediaOwnerTypeColor = ownerTypeRecord?.color || \"#FFF\";\n return {\n borderLeftColor: mediaOwnerTypeColor,\n borderLeftWidth: 5,\n borderLeftStyle: \"solid\",\n };\n};\n","import { Theme, useMediaQuery } from \"@material-ui/core\";\nimport {\n AutocompleteArrayInput,\n Filter,\n FilterProps,\n ReferenceArrayInput,\n SelectArrayInput,\n useListContext,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules\";\nimport { RESOURCE_NAME_ENQUIRY } from \"../../enquiries\";\nimport {\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../lib/common\";\nimport { DateInput } from \"../../../lib/components\";\nimport {\n BusinessFunctionsListFilter,\n FILTER_DIRECTION,\n ItemsListFilter,\n PROCURE_APPROVAL_STATUS_CHOICES,\n PROC_ENTITY_RECORD_STATUS_CHOICES,\n} from \"../../../common\";\n\nconst BidListFilters = (props: Omit<FilterProps, \"children\">) => {\n const isSmall = useMediaQuery<Theme>((theme) => theme.breakpoints.down(\"sm\"));\n const { filterValues } = useListContext(props);\n const isDirectionReceived =\n filterValues[\"direction\"] === FILTER_DIRECTION.RECEIVED;\n\n return (\n <Filter {...props}>\n {isSmall && <SearchFilter alwaysOn key=\"Search\" />}\n <IdFilter\n label=\"components.controls.filters.idFilter.label\"\n source=\"id\"\n key=\"id\"\n />\n {isSmall && isDirectionReceived && (\n <SelectArrayInput\n source=\"procureStatus\"\n choices={PROC_ENTITY_RECORD_STATUS_CHOICES}\n allowEmpty={false}\n resettable={true}\n key=\"procureStatus\"\n />\n )}\n {isSmall && (\n <DateInput source=\"updated_since_gte\" key=\"updated_since_gte\" />\n )}\n {isSmall && isDirectionReceived && (\n <SelectArrayInput\n source=\"procureApprovalStatus\"\n label=\"common.fields.approvalStatus\"\n choices={PROCURE_APPROVAL_STATUS_CHOICES}\n allowEmpty={false}\n resettable={true}\n key=\"procureApprovalStatus\"\n />\n )}\n\n <ReferenceArrayInput\n source=\"enquiryId\"\n reference={RESOURCE_NAME_ENQUIRY}\n key=\"enquiryId\"\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"code\", order: \"ASC\" }}\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n allowEmpty={false}\n resettable={true}\n />\n </ReferenceArrayInput>\n\n {isDirectionReceived && <BusinessFunctionsListFilter source=\"businessFunctionId\"/> }\n {isDirectionReceived && <ItemsListFilter source=\"itemId\"/> }\n \n {/* {!isDirectionReceived && (\n <ReferenceArrayInput\n source=\"procureAccountId\"\n label = \"common.fields.customerName\"\n reference={RESOURCE_NAME_ACCOUNT}\n key=\"procureAccountId\"\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n link={false}\n >\n <AutocompleteArrayInput\n optionText=\"name\"\n allowEmpty={false}\n resettable={true}\n />\n </ReferenceArrayInput>\n )} */}\n {isDirectionReceived && (\n <ReferenceArrayInput\n source=\"vendorAccountId\"\n label = \"common.fields.vendorName\"\n reference={RESOURCE_NAME_ACCOUNT}\n key=\"vendorAccountId\"\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n allowEmpty={false}\n resettable={true}\n />\n </ReferenceArrayInput>\n )}\n </Filter>\n );\n};\n\nexport { BidListFilters };\n","import { ReactElement, useMemo } from \"react\";\nimport {\n DefaultCrudListRowActions,\n ListRowActions,\n ListRowActionsProps,\n} from \"../../../lib/components\";\nimport { Record, useListFilterContext } from \"react-admin\";\nimport { PermissionBids } from \"../constants\";\nimport { usePermissionsCheck } from \"../../../lib/core\";\nimport {\n ApprovalListRowActionButtons,\n FILTER_DIRECTION,\n PermissionBehavior,\n ProcEntityRecordStatus,\n} from \"../../../common\";\n\nconst BidListRowActionButtons = (props: ListRowActionsProps) => {\n const context = useListFilterContext();\n const directionFilterValue = context?.filterValues?.direction;\n const isDirectionSent = directionFilterValue === FILTER_DIRECTION.SENT;\n\n const { hasOwnOrAccountAccess, hasPermissionAccess, permissionsLoaded } =\n usePermissionsCheck();\n\n const overriddenListRowActions: Array<ReactElement> = useMemo(() => {\n const keyPrefix = props?.record?.id;\n const record = props?.record;\n const isVendorUser =\n isDirectionSent && hasPermissionAccess(PermissionBehavior.CAN_SELL);\n \n const accountId = isDirectionSent\n ? record?.vendorAccountId\n : record?.procureAccountId;\n const ownerUserId = isDirectionSent\n ? record?.vendorOwnerUserId\n : record?.procureOwnerUserId;\n const hasShowBidAccess =\n permissionsLoaded &&\n hasOwnOrAccountAccess(\n PermissionBids.SHOW_ANY_BID,\n PermissionBids.SHOW_OWN_BID,\n accountId,\n ownerUserId\n );\n\n const hasEditBidAccess =\n isVendorUser && permissionsLoaded &&\n hasOwnOrAccountAccess(\n PermissionBids.EDIT_ANY_BID,\n PermissionBids.EDIT_OWN_BID,\n record?.vendorAccountId,\n record?.vendorOwnerUserId\n );\n\n const hasDeleteBidAccess =\n permissionsLoaded &&\n hasOwnOrAccountAccess(\n PermissionBids.DELETE_ANY_BID,\n PermissionBids.DELETE_OWN_BID,\n record?.vendorAccountId,\n record?.vendorOwnerUserId\n );\n\n const shouldDisplayEditAction = async (\n record?: Record\n ): Promise<boolean> => {\n const status = record?.procureStatus;\n const isApproved = status === ProcEntityRecordStatus.APPROVED;\n\n const shouldDisplay = hasEditBidAccess && !isApproved;\n return Promise.resolve(shouldDisplay);\n };\n\n const shouldDisplayDeleteAction = async (\n record?: Record\n ): Promise<boolean> => {\n const shouldDisplay = hasDeleteBidAccess;\n\n return Promise.resolve(hasDeleteBidAccess);\n };\n\n const listRowActions: Array<ReactElement> = [\n <DefaultCrudListRowActions\n key={`defaultCrudListRowActions-${keyPrefix}`}\n shouldDisplayEdit={shouldDisplayEditAction}\n shouldDisplayDelete={shouldDisplayDeleteAction}\n hasEdit={hasEditBidAccess}\n hasShow={hasShowBidAccess}\n {...props}\n />,\n\n <ApprovalListRowActionButtons {...props} />,\n ];\n\n return listRowActions;\n }, [hasOwnOrAccountAccess, permissionsLoaded, props]);\n\n if (permissionsLoaded) {\n return (\n <ListRowActions\n overriddenListRowActions={overriddenListRowActions}\n {...props}\n />\n );\n }else{\n return null;\n }\n};\n\nexport { BidListRowActionButtons };\n","import { FC } from \"react\";\nimport { CreateButton, EditButton, ListButton, ShowActionsProps, TopToolbar, useResourceDefinition, useShowContext } from \"react-admin\";\nimport { bidResource } from \"../..\";\nimport { FILTER_DIRECTION, PermissionBehavior, ProcEntityRecordStatus } from \"../../../../common\";\nimport { usePermissionsCheck } from \"../../../../lib/core\";\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}: any) => rest;\n\nconst BidCrudShowActions:FC<ShowActionsProps> = ({ className, ...rest }) => {\n const { record } = useShowContext(rest);\n\n const { hasList, hasEdit, hasCreate } = useResourceDefinition(rest);\n const { hasPermissionAccess} = usePermissionsCheck();\n const canProcure = hasPermissionAccess(PermissionBehavior.CAN_PROCURE);\n const canCreate = hasPermissionAccess(bidResource?.options?.allowedPermissions?.create);\n const direction = canProcure?FILTER_DIRECTION.RECEIVED:FILTER_DIRECTION.SENT;\n \n const status = record?.procureStatus;\n const isStatusWaitingDraft = status === ProcEntityRecordStatus.DRAFT;\n\n return (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {hasList && <ListButton basePath={`/bids?filter={\"direction\":\"${direction}\"}`}/>}\n {hasEdit && isStatusWaitingDraft && <EditButton basePath=\"/bids\" record={record} />}\n {hasCreate && canCreate && <CreateButton basePath=\"/bids\"/>}\n </TopToolbar>\n )\n}\n\nexport { BidCrudShowActions }","import { FC } from \"react\";\nimport { CreateButton, EditButton, ListButton, ShowActionsProps, ShowButton, TopToolbar, useResourceDefinition, useShowContext } from \"react-admin\";\nimport { FILTER_DIRECTION, PermissionBehavior, ProcEntityRecordStatus } from \"../../../../common\";\nimport { usePermissionsCheck } from \"../../../../lib/core\";\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}: any) => rest;\n\nconst BidCrudEditActions:FC<ShowActionsProps> = ({ className, ...rest }) => {\n const { record } = useShowContext(rest);\n\n const { hasList, hasShow, hasCreate } = useResourceDefinition(rest);\n const { hasPermissionAccess} = usePermissionsCheck();\n const canProcure = hasPermissionAccess(PermissionBehavior.CAN_PROCURE);\n const direction = canProcure?FILTER_DIRECTION.RECEIVED:FILTER_DIRECTION.SENT;\n\n return (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {hasList && <ListButton basePath={`/bids?filter={\"direction\":\"${direction}\"}`}/>}\n {hasShow && <ShowButton basePath=\"/bids\" record={record} />}\n {hasCreate && <CreateButton basePath=\"/bids\"/>}\n </TopToolbar>\n )\n}\n\nexport { BidCrudEditActions }","import LocalAtmIcon from '@material-ui/icons/LocalAtm';\nimport { BidList } from './BidList';\nimport { BidCreate } from './BidCreate';\nimport { PermissionBids, RESOURCE_NAME_BID } from \"./constants\";\nimport { BidShow } from './BidShow';\nimport { BidEdit } from './BidEdit';\n\nconst bidsPermissions = {\n menu: PermissionBids.MENU_BIDS,\n list: PermissionBids.LIST_BIDS,\n create: PermissionBids.CREATE_BID,\n update: [\n PermissionBids.EDIT_ANY_BID,\n PermissionBids.EDIT_OWN_BID,\n ],\n show: [\n PermissionBids.SHOW_ANY_BID,\n PermissionBids.SHOW_OWN_BID,\n ],\n delete: [\n PermissionBids.DELETE_ANY_BID,\n PermissionBids.DELETE_OWN_BID,\n ],\n import:PermissionBids.IMPORT_BIDS\n};\n\nconst bidResource = {\n name: RESOURCE_NAME_BID,\n list: BidList,\n create: BidCreate,\n edit: BidEdit,\n show: BidShow,\n icon: LocalAtmIcon,\n options: {label: 'resources.bids.name', allowedPermissions: bidsPermissions },\n}\n\nexport * from './constants';\nexport * from './components';\nexport { bidsPermissions, bidResource }\n","import { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n setSidebarVisibility,\n ListProps,\n ReferenceField,\n TextField,\n DateField,\n NumberField,\n useListParams,\n BooleanField,\n} from \"react-admin\";\nimport { BidListFilters } from \"./components\";\nimport {\n CustomizableDatagrid,\n CustomizableList,\n} from \"../../lib/components\";\nimport { BidListSideFilters } from \"./components/BidListSideFilters\";\nimport { DEFAULT_PER_PAGE } from \"../../lib/common\";\nimport { RESOURCE_NAME_ENQUIRY } from \"../enquiries\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../lib/core\";\nimport { BidListRowActionButtons } from \"./components/BidListRowActionButtons\";\nimport { ApprovalStatusField, CustomerNameField, FILTER_DIRECTION, getProcEntityRecordStatusRowStyle, RecordStatusField, VendorNameField } from \"../../common\";\nimport { bidResource } from \".\";\n\nconst BidList= (props:ListProps) => {\n const dispatch = useDispatch();\n const [listParams] = useListParams({\n resource: bidResource.name,\n syncWithLocation: true,\n });\n\n const { filterValues } = listParams;\n const isDirectionReceived = filterValues[\"direction\"] === FILTER_DIRECTION.RECEIVED;\n \n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n let defaultColumns: Array<string> = [];\n\n if(isDirectionReceived){\n defaultColumns.push(\"vendorAccountId\");\n defaultColumns.push(\"status\");\n defaultColumns.push(\"procureApprovalStatus\");\n }else{\n defaultColumns.push(\"procureAccountId\");\n }\n defaultColumns = defaultColumns.concat([\"enquiryId\", \"estimatedDeliveryDate\", \"updatedAt\"]);\n\n return (\n <CustomizableList\n {...props}\n filterDefaultValues={{ direction: FILTER_DIRECTION.SENT }}\n sort={{ field: \"id\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n aside={<BidListSideFilters />}\n filters={<BidListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid rowStyle={getProcEntityRecordStatusRowStyle} optimized>\n {!isDirectionReceived && <CustomerNameField\n useLabel={false}\n source = \"procureAccountId\"\n label = \"common.fields.customerName\"\n />}\n {isDirectionReceived && <VendorNameField \n useLabel={false} \n source = \"vendorAccountId\"\n label = \"common.fields.vendorName\"\n />}\n\n <ReferenceField source=\"enquiryId\" reference={RESOURCE_NAME_ENQUIRY}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n <DateField\n source=\"estimatedDeliveryDate\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <NumberField source=\"totalAmount\" />\n <NumberField source=\"totalAmount2\" />\n { isDirectionReceived && <RecordStatusField label=\"common.fields.status\" />}\n { isDirectionReceived && <ApprovalStatusField label=\"common.fields.approvalStatus\" /> }\n { isDirectionReceived && <BooleanField source = \"canLevel1Approve\"/> }\n { isDirectionReceived && <BooleanField source = \"canLevel2Approve\"/> }\n <DateField \n source=\"createdAt\" \n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <DateField\n source=\"updatedAt\"\n showTime\n options={COMMON_DATE_TIME_FORMAT}\n />\n <BidListRowActionButtons />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { BidList };\n","import { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n SimpleForm,\n setSidebarVisibility,\n useNotify,\n useRefresh,\n useRedirect,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../lib/components\";\nimport { BidCreateContent } from \"./components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../lib/modules\";\nimport { FILTER_DIRECTION } from \"../../common\";\n\nconst BidCreate = (props) => {\n const dispatch = useDispatch();\n const notify = useNotify();\n const refresh = useRefresh();\n const redirect = useRedirect();\n\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n\n const onSuccess = () => {\n notify(\"resources.bids.messages.edited\", {type: \"success\"});\n redirect(`/bids?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`);\n refresh();\n };\n\n const onFailure = (error) => {\n if (error.code === 123) {\n notify(\"Could not save changes: concurrent edition in progress\", {type: \"error\"});\n } else {\n const errorMessage = `An error occured and your changes were not saved. \\n ${error?.message || \"ra.notification.http_error\"}`;\n notify(errorMessage, {type: \"error\", multiLine: true});\n }\n //redirect(\"list\", props.basePath);\n };\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"bids\",\n },\n ];\n return (\n <DefaultCreate\n {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}\n onSuccess={onSuccess}\n onFailure={onFailure}\n basePath={`/bids?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`}\n >\n <SimpleForm\n {...props}\n mutationMode=\"pessimistic\"\n warnWhenUnsavedChanges\n margin=\"normal\"\n variant=\"filled\"\n >\n <BidCreateContent />\n </SimpleForm>\n </DefaultCreate>\n );\n};\n\nexport { BidCreate };\n","import { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n SimpleForm,\n setSidebarVisibility,\n useNotify,\n useRedirect,\n useRefresh,\n} from \"react-admin\";\nimport {\n DefaultEdit,\n} from \"../../lib/components\";\nimport { BidEditContent } from \"./components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../lib/modules\";\nimport { FILTER_DIRECTION } from \"../../common\";\nimport { BidCrudEditActions } from \"./components/actions\";\n\nconst BidEdit = (props) => {\n const dispatch = useDispatch();\n const notify = useNotify();\n const refresh = useRefresh();\n const redirect = useRedirect();\n\n const onSuccess = () => {\n notify(\"resources.bids.messages.edited\", {type: \"success\"});\n redirect(`/bids?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`);\n refresh();\n };\n\n const onFailure = (error) => {\n if (error.code === 123) {\n notify(\n \"Could not save changes: concurrent edition in progress\",\n {type: \"error\"}\n );\n } else {\n notify(\"ra.notification.http_error\", {type: \"error\"});\n }\n redirect(`/bids?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`);\n };\n\n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n// eslint-disable-next-line\n}, []);\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"bids\",\n },\n ];\n return (\n <DefaultEdit\n {...props} \n actions={<BidCrudEditActions/>}\n mutationMode=\"pessimistic\"\n onSuccess={onSuccess} \n onFailure={onFailure}\n transform={transformAndUploadS3Files(mediaFileSources)}\n basePath={`/bids?filter={\"direction\":\"${FILTER_DIRECTION.SENT}\"}`}\n >\n <SimpleForm\n {...props}\n mutationMode=\"pessimistic\"\n warnWhenUnsavedChanges\n margin=\"normal\"\n variant=\"filled\"\n >\n\n <BidEditContent isEdit={true}/>\n </SimpleForm>\n </DefaultEdit>\n );\n};\n\nexport { BidEdit };\n","import { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n setSidebarVisibility,\n ShowProps,\n SimpleShowLayout,\n } from \"react-admin\";\nimport { FILTER_DIRECTION, PermissionBehavior } from \"../../common\";\nimport { DefaultShow } from \"../../lib/components\";\nimport { usePermissionsCheck } from \"../../lib/core\";\nimport { BidShowContent } from \"./components\";\nimport { BidCrudShowActions } from \"./components/actions\";\n\nconst BidShow = ( props: ShowProps) => {\n const dispatch = useDispatch();\n const { hasPermissionAccess} = usePermissionsCheck();\n const canProcure = hasPermissionAccess(PermissionBehavior.CAN_PROCURE);\n const direction = canProcure?FILTER_DIRECTION.RECEIVED:FILTER_DIRECTION.SENT;\n \n useEffect(() => {\n dispatch(setSidebarVisibility(false));\n // eslint-disable-next-line\n }, []);\n \n return (\n <DefaultShow {...props}\n actions={<BidCrudShowActions/>}\n basePath={`/bids?filter={\"direction\":\"${direction}\"}`}\n >\n <SimpleShowLayout>\n <BidShowContent/>\n </SimpleShowLayout>\n </DefaultShow>\n )\n}\n\nexport { BidShow }\n","import { Theme, useMediaQuery } from \"@material-ui/core\";\nimport {\n Filter,\n FilterProps,\n SelectInput,\n} from \"react-admin\";\nimport { SearchFilter } from \"../../../../common/ui/filters/SearchFilter\";\nimport { fetchMediaOwnerTypeChoices } from \"../constants\";\nimport { IdFilter } from \"../../../../common\";\nimport { DateInput } from \"../../../../components\";\n\nconst MediaListFilters = (props: Omit<FilterProps, \"children\">) => {\n const isSmall = useMediaQuery<Theme>((theme) => theme.breakpoints.down(\"sm\"));\n\n return (\n <Filter {...props}>\n {isSmall && <SearchFilter alwaysOn />}\n \n {isSmall && <SelectInput alwaysOn={false} source=\"ownerType\" choices={fetchMediaOwnerTypeChoices()} /> }\n \n {isSmall && <DateInput source=\"updated_since_gte\" />}\n <IdFilter label=\"components.controls.filters.idFilter.label\" source=\"id\" key=\"id\" />\n {/* <ReferenceArrayInput \n source=\"accountId\" \n reference={RESOURCE_NAME_ACCOUNT}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"accountId\"\n >\n <AutocompleteInput \n optionText=\"name\" \n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput> */}\n </Filter>\n );\n};\n\nexport { MediaListFilters };\n","import { FilterLiveSearch } from \"react-admin\";\nimport AccessTimeIcon from \"@material-ui/icons/AccessTime\";\nimport HowToRegIcon from \"@material-ui/icons/HowToReg\";\nimport { createStyles, makeStyles, Card, CardContent } from \"@material-ui/core\";\n\nimport { mediaOwnerTypeFiltersList } from \"../constants\";\nimport {\n format,\n endOfYesterday,\n startOfWeek,\n startOfMonth,\n endOfMonth,\n subMonths,\n} from \"date-fns\";\nimport { FixedDateRangeFilterList, StatusFilterList } from \"../../../../common\";\n\nconst MediaListSideFilters = () => {\n const cardClasses = useCardStyles();\n const mediaOwnerTypeFiltersStatusList = mediaOwnerTypeFiltersList();\n\n return (\n <Card classes={cardClasses}>\n <CardContent>\n <FilterLiveSearch />\n <FixedDateRangeFilterList\n label=\"resources.media.fields.updated_since_gte\"\n icon={<AccessTimeIcon />}\n gteSource=\"updated_since_gte\"\n lteSource=\"updated_since_lte\"\n dateRangeList={updatedSinceDatesList}\n />\n <StatusFilterList\n statusFieldName=\"ownerType\"\n label=\"resources.media.fields.ownerType\"\n icon={<HowToRegIcon />}\n statusList={mediaOwnerTypeFiltersStatusList}\n width=\"100px\"\n />\n </CardContent>\n </Card>\n );\n};\n\nconst useCardStyles = makeStyles((theme) =>\n createStyles({\n root: {\n [theme.breakpoints.up(\"sm\")]: {\n order: -1,\n maxWidth: 210,\n marginRight: \"1em\",\n },\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n })\n);\n\nconst DATE_FORMAT_DAY = \"yyyy-MM-dd\";\nconst updatedSinceDatesList = [\n {\n label: \"resources.media.filters.updatedSince.today\",\n gte: format(endOfYesterday(), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.media.filters.updatedSince.thisWeek\",\n gte: format(startOfWeek(new Date()), DATE_FORMAT_DAY),\n lte: undefined,\n },\n {\n label: \"resources.media.filters.updatedSince.thisMonth\",\n lte: undefined,\n gte: format(startOfMonth(new Date()), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.media.filters.updatedSince.lastMonth\",\n lte: format(endOfMonth(subMonths(new Date(), 1)), DATE_FORMAT_DAY),\n gte: format(subMonths(startOfMonth(new Date()), 1), DATE_FORMAT_DAY),\n },\n {\n label: \"resources.media.filters.updatedSince.earlier\",\n lte: format(endOfMonth(subMonths(new Date(), 2)), DATE_FORMAT_DAY),\n gte: undefined,\n },\n];\n\n\nexport { MediaListSideFilters };\n","import { useEffect, useState } from \"react\";\nimport { TextField, useRecordContext } from \"react-admin\";\nimport { ResourceLinkedField } from \"../../../../components/controls/fields/ResourceLinkedField\";\nimport { usePermissionsCheck } from \"../../../../core\";\nimport { MEDIA_OWNER_MAP } from \"../constants\";\n\nconst MediaOwnerLinkField = (props) => {\n const record = useRecordContext(props);\n const mediaOwnerConfig = MEDIA_OWNER_MAP.get(record?.ownerType);\n\n const resourceName = mediaOwnerConfig?.resource;\n const permissionName = mediaOwnerConfig?.permission;\n\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n const [hasShowAccess, setHasShowAccess] = useState(false);\n\n useEffect(() => {\n if (permissionsLoaded) {\n const hasShowAccess = hasPermissionAccess(permissionName);\n setHasShowAccess(hasShowAccess);\n }\n }, [hasPermissionAccess, permissionName, permissionsLoaded]);\n\n if (!resourceName) {\n return <div />;\n }\n\n if (hasShowAccess) {\n return (\n <ResourceLinkedField\n label=\"resources.media.fields.ownerType\"\n source=\"ownerType\"\n linkedResource={resourceName}\n linkedResourceIdSource=\"ownerId\"\n resource={resourceName}\n record={record}\n link=\"show\"\n />\n );\n } else {\n return <TextField source=\"ownerType\" />;\n }\n};\n\nexport { MediaOwnerLinkField };\n","import { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n ReferenceField,\n DateField,\n BooleanField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../../lib/modules/accounts\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n FilenameField,\n MediaEmptyState,\n} from \"../../../../lib/components\";\nimport {\n DEFAULT_PER_PAGE,\n} from \"../../../../lib/common\";\nimport { MediaListFilters } from \"./components/MediaListFilters\";\nimport { MediaListSideFilters } from \"./components/MediaListSideFilters\";\nimport { MediaOwnerLinkField } from \"./components/MediaOwnerLinkField\";\nimport { getRowStyle } from \"./constants\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\n\nconst defaultColumns = [\n \"originalFileName\",\n \"fileSize\",\n \"ownerType\",\n \"fileExtension\",\n \"updatedAt\",\n];\n\nconst MediaList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"updatedAt\", order: \"DESC\" }}\n perPage={DEFAULT_PER_PAGE}\n aside={<MediaListSideFilters />}\n filters={<MediaListFilters />}\n defaultColumns={defaultColumns}\n empty={<MediaEmptyState />}\n >\n <CustomizableDatagrid rowStyle={getRowStyle} optimized>\n <FilenameField />\n <TextField source=\"fileExtension\" />\n <MediaOwnerLinkField source=\"ownerType\" />\n <TextField source=\"fileSizeHuman\" sortBy=\"fileSize\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { MediaList };\n","import { fetchUtils } from \"react-admin\";\nimport { httpClient, Options } from \"../../../../core/providers/dataProvider\";\nimport { MediaFile, MediaFileSource } from \"../constants\";\n\nclass S3FileUploader {\n protected s3SignUrl: string;\n protected mediaFileSource: MediaFileSource;\n constructor(mediaFileSource: MediaFileSource) {\n this.mediaFileSource = mediaFileSource;\n this.s3SignUrl = `${process.env.REACT_APP_SERVER_ENDPOINT}/media/sign`;\n }\n\n public async startUpload(files: any): Promise<MediaFile[]> {\n const options: Options = {\n method: \"POST\",\n // headers:headers,\n }\n\n let mediaFiles: MediaFile[] = [];\n if (Array.isArray(files)) {\n for (var i = 0; i < files.length; i++) {\n const file = files[i];\n const mediaFile = await this.uploadFile(file, options);\n if (mediaFile) {\n mediaFiles.push(mediaFile);\n }\n }\n } else {\n const mediaFile = await this.uploadFile(files, options);\n if (mediaFile) {\n mediaFiles.push(mediaFile);\n }\n }\n\n return mediaFiles;\n }\n\n protected async uploadFile(file: any, options: Options): Promise<MediaFile | null> {\n if (!file || !file.rawFile) {\n return null;\n }\n const rawFile = file.rawFile;\n const fileName = this.scrubFilename(rawFile.name);\n const fileType = rawFile.type;\n const fileSize = rawFile.size;\n const fileExtension = fileName.split(\".\").pop();\n const params = {\n objectName: fileName,\n contentType: rawFile.type,\n path: this.mediaFileSource.subFolder,\n };\n const body = JSON.stringify(params);\n options.body = body;\n\n const signUrl = `${this.s3SignUrl}`;\n\n const signedResponse = await httpClient(signUrl, options);\n const signedUploadUrl = signedResponse.json?.data?.presignedUrl;\n const filePath = signedResponse.json?.data?.filePath;\n\n const s3Headers = new Headers({\n \"Content-Type\": fileType,\n });\n\n const uploadResponse = await fetch(signedUploadUrl, {\n method: \"PUT\",\n headers: s3Headers,\n body: rawFile,\n });\n\n const mediaFile: MediaFile = {\n originalFileName: fileName,\n filePath: filePath,\n fileExtension: fileExtension,\n fileType: fileType,\n fileSize: fileSize,\n };\n return mediaFile;\n }\n\n protected scrubFilename(filename) {\n return filename.replace(/[^\\w\\d_\\-\\.]+/gi, \"\");\n }\n}\n\nexport { S3FileUploader };\n","import { HttpError, Record, useNotify } from \"react-admin\";\nimport { MediaFile, MediaFileSource } from \"../constants\";\nimport { S3FileUploader } from \"./S3FileUploader\";\n\nexport const transformAndUploadS3Files =\n (mediaFileSources: MediaFileSource[]) =>\n async (record: Record): Promise<Record> => {\n let modifiedRecord = record;\n try {\n for await (const mediaFileSource of mediaFileSources) {\n const { source } = mediaFileSource;\n const { [source]: files } = record;\n if (files) {\n const s3FileUploader = new S3FileUploader(mediaFileSource);\n const mediaFiles: MediaFile[] = await s3FileUploader.startUpload(\n files\n );\n modifiedRecord[source] = mediaFiles;\n }\n }\n } catch (error) {\n //@ts-ignore\n const errorMessage = error?.message?.join(\"\\n\") ?? \"unknown\";\n //@ts-ignore\n const errorStatus = error?.status || 400;\n //@ts-ignore\n const errorbody = error?.body;\n return Promise.reject(new HttpError(errorMessage, errorStatus, errorbody));\n const notificationMessage = \"Some files were not uploaded, please check and try to re-upload those files again.\"\n }\n return modifiedRecord;\n };\n","import MediaIcon from \"@material-ui/icons/Backup\";\nimport { mediaPermissions, RESOURCE_NAME_MEDIA } from \"./constants\";\nimport { MediaList } from \"./MediaList\";\n\nconst mediaResource = {\n name: RESOURCE_NAME_MEDIA,\n list: MediaList,\n icon: MediaIcon,\n options: { label: \"resources.media.name\", allowedPermissions: mediaPermissions },\n};\n\nexport * from \"./constants\";\nexport * from \"./utils\";\nexport { mediaResource };\n","import { Children, useState, useEffect, isValidElement } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nimport {\n makeStyles,\n MenuItem,\n Typography,\n List,\n ListItemIcon,\n Tooltip,\n Divider,\n Collapse,\n} from \"@material-ui/core\";\nimport { ExpandMore } from \"@material-ui/icons\";\nimport { useTranslate } from \"react-admin\";\nimport { SubMenuProps } from \"./menu.interface\";\n\nconst useStyles = makeStyles((theme) => ({\n icon: { minWidth: theme.spacing(5) },\n isSidebarOpen: {\n paddingLeft: 0,\n transition: \"padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms\",\n },\n isSidebarClosed: {\n paddingLeft: 0,\n transition: \"padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms\",\n },\n}));\n\nconst SubMenu= ({\n name,\n icon,\n isSidebarOpen,\n dense,\n children,\n}:SubMenuProps) => {\n const translate = useTranslate();\n const translatedName = translate(name, { smart_count: 2 });\n const classes = useStyles();\n const [isMenuOpen, setMenuOpen] = useState(false);\n let location = useLocation();\n\n const handleToggle = () => {\n setMenuOpen(!isMenuOpen);\n };\n\n const detectOpenedMenu = (children) => {\n Children.forEach(children, (element) => {\n if (!isValidElement(element)) return;\n //@ts-ignore\n const { to, children: grandChildren } = element.props;\n\n if (to) {\n const routeLocation = to?.pathname ?? to;\n const currentLocationPath = location?.pathname;\n const match = currentLocationPath?.indexOf(routeLocation) !== -1;\n\n if (match) {\n setMenuOpen(true);\n return true;\n }\n } else if (grandChildren) {\n const isOpenMenuDetected = detectOpenedMenu(grandChildren);\n if (isOpenMenuDetected) {\n return true;\n }\n }\n });\n\n return false;\n };\n\n useEffect(() => {\n //If this is not the home path then try to expand this and its child sub menus\n if (location?.pathname !== \"/\") {\n detectOpenedMenu(children);\n }\n }, []);\n\n const Header = (\n <MenuItem dense={dense} button onClick={handleToggle}>\n <ListItemIcon className={classes.icon}>\n {isMenuOpen ? <ExpandMore /> : icon}\n </ListItemIcon>\n <Typography variant=\"body1\" color=\"textSecondary\">\n {translatedName}\n </Typography>\n </MenuItem>\n );\n\n return (\n <>\n {isSidebarOpen || isMenuOpen ? (\n Header\n ) : (\n <Tooltip title={translatedName} placement=\"right\">\n {Header}\n </Tooltip>\n )}\n <Collapse in={isMenuOpen} timeout=\"auto\" unmountOnExit>\n <List\n dense={dense}\n component=\"div\"\n disablePadding\n className={\n isSidebarOpen ? classes.isSidebarOpen : classes.isSidebarClosed\n }\n >\n {children}\n </List>\n <Divider />\n </Collapse>\n </>\n );\n};\n\nexport { SubMenu };\n","import { usePermissions } from \"react-admin\";\nimport { hasAccess } from \"../../core/helpers\";\nimport { GatedSubMenuProps } from \"./menu.interface\";\nimport { SubMenu } from \"./SubMenu\";\n\nconst GatedSubMenu= ({\n name,\n icon,\n isSidebarOpen,\n dense,\n allowedPermissionName,\n children,\n}:GatedSubMenuProps) => {\n const { loaded, permissions } = usePermissions();\n\n if (loaded && hasAccess(permissions, allowedPermissionName)) {\n return (\n <SubMenu\n isSidebarOpen={isSidebarOpen}\n name={name}\n icon={icon}\n dense={dense}\n >\n {children}\n </SubMenu>\n );\n } else {\n return null\n }\n};\n\nexport { GatedSubMenu };\n","import { usePermissions, useTranslate, MenuItemLink } from \"react-admin\";\nimport { hasAccess } from \"../../core/helpers\";\nimport { GatedMenuItemLinkProps } from \"./menu.interface\";\n\nconst GatedMenuItemLink= ({\n to,\n name,\n leftIcon,\n onClick,\n allowedPermissionName,\n isSidebarOpen,\n dense,\n ...rest\n}:GatedMenuItemLinkProps) => {\n const translate = useTranslate();\n const { loaded, permissions } = usePermissions();\n\n if (loaded && hasAccess(permissions, allowedPermissionName)) {\n return (\n //@ts-ignore\n <MenuItemLink\n to={to}\n primaryText={translate(name, {smart_count: 2})}\n leftIcon={leftIcon}\n onClick={onClick}\n sidebarIsOpen={isSidebarOpen}\n dense={dense}\n {...rest}\n />\n );\n } else {\n return null;\n }\n};\n\nexport { GatedMenuItemLink };\n","import GavelIcon from \"@material-ui/icons/Gavel\";\nimport { GatedMenuItemLink, GatedSubMenu, MenuProps } from \"../../components/menu\";\nimport { mediaResource } from \"./media\";\n\nconst UtilitiesMenu= ({\n isSidebarOpen,\n onMenuClick,\n dense,\n}:MenuProps) => {\n return (\n <GatedSubMenu\n name={`resources.utilities.name`}\n icon={<GavelIcon />}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n allowedPermissionName=\"view-utilities-management-menu\"\n >\n <GatedMenuItemLink\n to={`/${mediaResource.name}`}\n name=\"resources.media.name\"\n leftIcon={<mediaResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={mediaResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n </GatedSubMenu>\n );\n};\n\nexport { UtilitiesMenu }","import { FunctionComponent, ReactElement } from \"react\";\nimport {\n Box,\n Typography,\n createStyles,\n makeStyles,\n Theme,\n} from \"@material-ui/core\";\nimport classnames from 'classnames';\nimport DefaultEmptyStateIcon from \"@material-ui/icons/LocalGasStation\";\nimport { useTranslate } from \"react-admin\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n emptyStateContainer: {\n width: \"50%\",\n textAlign: \"center\",\n opacity: theme.palette.type === \"light\" ? 0.5 : 0.8,\n margin: \"0 1em\",\n color:\n theme.palette.type === \"light\" ? \"inherit\" : theme.palette.text.primary,\n },\n icon: {\n width: \"4em\",\n height: \"4em\",\n },\n })\n);\n\n\ninterface EmptyStateProps {\n Icon?: FunctionComponent<any>;\n className?: string;\n iconClassName?: string;\n subTitle?: string | null;\n title?: string;\n actionButton?: ReactElement<any>;\n}\n\nconst EmptyState= ({\n Icon,\n className,\n iconClassName,\n actionButton,\n title,\n subTitle,\n}:EmptyStateProps) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return (\n <Box className={classnames(className, classes.emptyStateContainer)}>\n {Icon ? (\n <Icon className={iconClassName ?? classes.icon} />\n ) : (\n <DefaultEmptyStateIcon className={iconClassName ?? classes.icon} />\n )}\n {title && (\n <Typography variant=\"h5\" paragraph>\n {translate(title)}\n </Typography>\n )}\n {subTitle && (\n <Typography variant=\"body2\" paragraph>\n {translate(subTitle)}\n </Typography>\n )}\n {actionButton && actionButton}\n </Box>\n );\n};\n\nEmptyState.defaultProps = {\n title: \"components.ui.emptyState.title\",\n subTitle: \"components.ui.emptyState.subTitle\",\n};\n\nexport { EmptyState };\n","export const RESOURCE_NAME_PERMISSION_GROUP = \"permissionGroups\";\n\nexport enum PermissionPermissionGroups {\n MENU_PERMISSION_GROUP = \"view-permission-groups-management-menu\",\n LIST_PERMISSION_GROUPS = \"list-permission-groups\",\n SHOW_PERMISSION_GROUP = \"show-permission-group\",\n CREATE_PERMISSION_GROUP = \"create-permission-group\",\n EDIT_PERMISSION_GROUP = \"update-permission-group\",\n DELETE_PERMISSION_GROUP = \"delete-permission-group\",\n}\n","import {\n Datagrid,\n ReferenceManyField,\n TextField,\n DateField,\n DeleteButton,\n usePermissions,\n} from \"react-admin\";\nimport { COMMON_DATE_TIME_FORMAT, hasAccess } from \"../../../../core\";\nimport { RESOURCE_NAME_MEDIA } from \"../../../../modules\";\nimport { SectionTitleSubtitle } from \"../../../ui\";\nimport { FilenameField } from \"./FilenameField\";\nimport { MediaEmptyState } from \"./MediaEmptyState\";\n\nconst UploadedFilesField = ({\n title = \"resources.media.sections.fieldsList.title\",\n subTitle = \"resources.media.sections.fieldsList.subTitle\",\n canDelete = true,\n target = \"ownerId\",\n deletePermissionName = undefined,\n ...rest\n}) => {\n const { permissions } = usePermissions();\n const hasDeletePermission =\n canDelete &&\n (deletePermissionName\n ? hasAccess(permissions, deletePermissionName)\n : true);\n\n return (\n <>\n <SectionTitleSubtitle title={title} subTitle={subTitle} />\n <ReferenceManyField\n reference={RESOURCE_NAME_MEDIA}\n target={target}\n {...rest}\n >\n <Datagrid\n empty={<MediaEmptyState/>}\n >\n <FilenameField />\n <TextField\n source=\"fileSizeHuman\"\n label=\"resources.media.fields.fileSizeHuman\"\n />\n <DateField\n source=\"updatedAt\"\n label=\"resources.media.fields.updatedAt\"\n options={COMMON_DATE_TIME_FORMAT}\n />\n {hasDeletePermission && (\n <DeleteButton\n undoable={false}\n redirect={false}\n confirmTitle=\"resources.media.sections.deleteButton.confirmTitle\"\n confirmContent=\"resources.media.sections.deleteButton.confirmContent\"\n />\n )}\n </Datagrid>\n </ReferenceManyField>\n </>\n );\n};\n\nexport { UploadedFilesField };\n","import { forwardRef } from \"react\";\nimport {\n AppBar as RaAppBar,\n UserMenu,\n MenuItemLink,\n useTranslate,\n useGetIdentity,\n} from \"react-admin\";\nimport Typography from \"@material-ui/core/Typography\";\nimport UserIcon from \"@material-ui/icons/PermIdentity\";\nimport { makeStyles, createStyles, Theme } from \"@material-ui/core/styles\";\nimport { Avatar } from \"@material-ui/core\";\n\nimport { Logo } from \"./Logo\";\nimport ts from \"typescript\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n title: {\n flex: 1,\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n },\n spacer: {\n flex: 1,\n },\n smallAvatar: {\n fontSize: \"0.75rem !important\",\n fontWeight: 600,\n width: theme.spacing(3),\n height: theme.spacing(3),\n backgroundColor: theme.palette.primary.main,\n },\n })\n);\n\nconst ConfigurationMenu = forwardRef<any, any>((props, ref,) => {\n const translate = useTranslate();\n return (\n //@ts-ignore\n <MenuItemLink\n ref={ref}\n to=\"/my-profile\"\n primaryText={translate(\"resources.menus.profile\")}\n leftIcon={<UserIcon />}\n onClick={props.onClick}\n sidebarIsOpen\n />\n );\n});\n\nconst CustomUserMenu = (props: any) => {\n const classes = useStyles();\n const { identity } = useGetIdentity();\n const avatarText = `${identity?.firstName?.charAt(0)}${identity?.lastName?.charAt(0)}`\n return (\n <UserMenu\n {...props}\n icon={<Avatar className={classes.smallAvatar}>{avatarText}</Avatar>}\n >\n <ConfigurationMenu />\n </UserMenu>\n );\n};\n\nconst AppBar = (props: any) => {\n const classes = useStyles();\n return (\n <RaAppBar {...props} elevation={1} userMenu={<CustomUserMenu />}>\n <Typography\n variant=\"h6\"\n color=\"inherit\"\n className={classes.title}\n id=\"react-admin-title\"\n />\n <Logo />\n <span className={classes.spacer} />\n </RaAppBar>\n );\n};\n\nexport { AppBar };\n","export const RESOURCE_NAME_PERMISSION = \"permissions\";\n\nexport enum PermissionPermissions {\n MENU_PERMISSION = 'view-permissions-management-menu',\n LIST_PERMISSIONS = 'list-permissions',\n SHOW_PERMISSION = 'show-permission',\n CREATE_PERMISSION = 'create-permission',\n EDIT_PERMISSION = 'update-permission',\n DELETE_PERMISSION = 'delete-permission',\n}\n","import {\n TextInput,\n required,\n ReferenceInput,\n SelectInput,\n useTranslate,\n SimpleForm,\n AutocompleteInput,\n} from \"react-admin\";\n\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { makeStyles, Theme, Typography } from \"@material-ui/core\";\nimport { RESOURCE_NAME_PERMISSION_GROUP } from \"./constants\";\nimport { isUniqueField } from \"../../../components/validations\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n label: { display: \"block\" },\n sortOrder: { display: \"block\" },\n parent: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst PermissionGroupForm = ({ isEdit, ...rest }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const classes = useStyles(rest);\n return (\n <SimpleForm {...rest} warnWhenUnsavedChanges>\n <SectionTitle label=\"resources.permissionGroups.fieldGroups.permissionGroupDetails\" />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.permissionGroups.fields.name\"\n helperText=\"resources.permissionGroups.help.name\"\n formclassName={classes.name}\n validate={[required()]}\n />\n <TextInput\n source=\"description\"\n label=\"resources.permissionGroups.fields.description\"\n helperText=\"resources.permissionGroups.help.description\"\n formclassName={classes.description}\n resettable\n multiline\n />\n <TextInput\n source=\"label\"\n label=\"resources.permissionGroups.fields.label\"\n helperText=\"resources.permissionGroups.help.label\"\n formclassName={classes.label}\n resettable\n multiline\n />\n <TextInput\n source=\"sortOrder\"\n label=\"resources.permissionGroups.fields.sortOrder\"\n helperText=\"resources.permissionGroups.help.sortOrder\"\n formclassName={classes.sortOrder}\n resettable\n multiline\n />\n <ReferenceInput\n label=\"resources.permissionGroups.fields.parentId\"\n source=\"parentId\"\n reference={RESOURCE_NAME_PERMISSION_GROUP}\n formclassName={classes.parent}\n filter={isEdit ? { excludeIds: [rest?.id] } : {}}\n >\n <AutocompleteInput\n optionText=\"name\"\n helperText=\"resources.permissionGroups.help.parentId\"\n />\n </ReferenceInput>\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\nexport { PermissionGroupForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n} from \"react-admin\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\nimport { RESOURCE_NAME_PERMISSION_GROUP } from \"./constants\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"name\", \"label\", \"description\"];\nconst PermissionGroupsList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"label\" />\n <TextField source=\"sortOrder\" />\n <ReferenceField\n source=\"parentId\"\n reference={RESOURCE_NAME_PERMISSION_GROUP}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <TextField source=\"id\" />\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { PermissionGroupsList };\n","import PeopleIcon from '@material-ui/icons/People';import { PermissionPermissionGroups, RESOURCE_NAME_PERMISSION_GROUP } from './constants';\nimport { PermissionGroupsCreate } from './PermissionGroupsCreate';\nimport { PermissionGroupEdit } from './PermissionGroupsEdit';\nimport { PermissionGroupsList } from './PermissionGroupsList';\nimport { PermissionGroupsShow } from './PermissionGroupsShow';\n\nconst allowedPermissions = {\n menu: PermissionPermissionGroups.MENU_PERMISSION_GROUP,\n list: PermissionPermissionGroups.LIST_PERMISSION_GROUPS,\n create: PermissionPermissionGroups.CREATE_PERMISSION_GROUP,\n update: PermissionPermissionGroups.EDIT_PERMISSION_GROUP,\n show: PermissionPermissionGroups.SHOW_PERMISSION_GROUP,\n delete: PermissionPermissionGroups.DELETE_PERMISSION_GROUP,\n};\nconst permissionGroupResource = {\n name: RESOURCE_NAME_PERMISSION_GROUP,\n list: PermissionGroupsList,\n create: PermissionGroupsCreate,\n edit: PermissionGroupEdit,\n show: PermissionGroupsShow, \n icon: PeopleIcon,\n options: { label: 'resources.permissionGroups.name', allowedPermissions },\n\n}\n\nexport * from './constants';\nexport { permissionGroupResource }","import { CreateProps } from \"react-admin\";\nimport { DefaultCreate } from \"../../../components\";\nimport { PermissionGroupForm } from \"./PermissionGroupsForm\";\n\nconst PermissionGroupsCreate= (props: CreateProps) => {\n return (\n <DefaultCreate {...props}>\n <PermissionGroupForm isEdit={false} />\n </DefaultCreate>\n );\n};\n\nexport { PermissionGroupsCreate };\n","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../components\";\nimport { PermissionGroupForm } from \"./PermissionGroupsForm\";\n\nconst PermissionGroupEdit= (props:EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <PermissionGroupForm isEdit={true} {...props} />\n </DefaultEdit>\n );\n};\n\nexport { PermissionGroupEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n BooleanField,\n} from \"react-admin\";\nimport { DefaultShow } from \"../../../components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\nimport { RESOURCE_NAME_PERMISSION_GROUP } from \"./constants\";\n\nconst PermissionGroupsShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"label\" />\n <TextField source=\"sortOrder\" />\n <ReferenceField\n source=\"parentId\"\n reference={RESOURCE_NAME_PERMISSION_GROUP}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { PermissionGroupsShow };\n","import { Identifier, RecordMap } from \"react-admin\";\nimport { Dispatch } from \"react\";\n\nexport interface Record {\n id: Identifier;\n [key: string]: any;\n}\n\nexport interface Permission {\n id: string;\n permissionGroupId: string;\n name: string;\n description?: string;\n label?: string;\n sortOrder: number;\n version: number;\n isPermissionAssigned: boolean;\n}\n\nexport interface PermissionGroup {\n id: string;\n parentId: string;\n name: string;\n description?: string;\n label?: string;\n sortOrder: number;\n version: number;\n areAllPermissionsAssigned: boolean;\n permissions: Permission[];\n children?: PermissionGroup[];\n}\n\nexport interface PermissionChanges {\n added: Set<string>,\n removed: Set<string>\n}\n\nexport interface PermissionManagerState {\n roleId?: string;\n isDisabled: boolean;\n allPermissions?: Permission[];\n rolePermissionIds?: string[];\n allPermissionGroups?: PermissionGroup[];\n permissionChanges: PermissionChanges;\n}\n\nexport enum PermissionManagerActionTypes {\n SET_ALL_PERMISSION_GROUPS,\n TOGGLE_SINGLE_PERMISSION,\n TOGGLE_MANY_PERMISSIONS,\n}\n\nexport type PermissionManagerActions =\n | {\n type: PermissionManagerActionTypes.SET_ALL_PERMISSION_GROUPS;\n payload: {\n allpermissionGroups: RecordMap<Record>;\n allPermissionGroupIds: Identifier[];\n };\n }\n | {\n type: PermissionManagerActionTypes.TOGGLE_SINGLE_PERMISSION;\n payload: {\n permission: Permission;\n isSelected: boolean;\n };\n }\n | {\n type: PermissionManagerActionTypes.TOGGLE_MANY_PERMISSIONS;\n payload: {\n permissionGroup: PermissionGroup;\n isSelected: boolean;\n };\n }; \n\nexport interface PermissionManagerContextProps {\n state?: PermissionManagerState;\n dispatch?: Dispatch<PermissionManagerActions>;\n}\n","import {\n TextInput,\n required,\n ReferenceInput,\n SelectInput,\n useTranslate,\n SimpleForm,\n} from \"react-admin\";\n\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { makeStyles, Theme, Typography } from \"@material-ui/core\";\nimport { RESOURCE_NAME_PERMISSION } from \"./constants\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n label: { display: \"block\" },\n sortOrder: { display: \"block\" },\n type: { display: \"block\" },\n permissionGroup: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst PermissionForm = ({ isEdit, ...rest }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const classes = useStyles(rest);\n return (\n <SimpleForm {...rest} warnWhenUnsavedChanges>\n <SectionTitle label=\"resources.permissions.fieldGroups.permissionDetails\" />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.permissions.fields.name\"\n helperText=\"resources.permissions.help.name\"\n formclassName={classes.name}\n validate={[required()]}\n />\n <TextInput\n source=\"description\"\n label=\"resources.permissions.fields.description\"\n helperText=\"resources.permissions.help.description\"\n formclassName={classes.description}\n resettable\n multiline\n />\n <TextInput\n source=\"label\"\n label=\"resources.permissions.fields.label\"\n helperText=\"resources.permissions.help.label\"\n formclassName={classes.label}\n resettable\n multiline\n />\n <TextInput\n source=\"sortOrder\"\n label=\"resources.permissions.fields.sortOrder\"\n helperText=\"resources.permissions.help.sortOrder\"\n formclassName={classes.sortOrder}\n resettable\n multiline\n />\n <TextInput\n source=\"type\"\n label=\"resources.permissions.fields.type\"\n helperText=\"resources.permissions.help.type\"\n formclassName={classes.type}\n resettable\n multiline\n />\n <ReferenceInput\n label=\"resources.permissions.fields.permissionGroupId\"\n source=\"permissionGroupId\"\n reference={RESOURCE_NAME_PERMISSION}\n formclassName={classes.permissionGroup}\n isRequired\n >\n <SelectInput\n optionText=\"name\"\n helperText=\"resources.permissions.help.permissionGroupId\"\n />\n </ReferenceInput>\n </SimpleForm>\n );\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\nexport { PermissionForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n AutocompleteArrayInput,\n ReferenceArrayInput,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\nimport { RESOURCE_NAME_PERMISSION_GROUP } from \"../permission-groups\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n <ReferenceArrayInput\n label=\"resources.permissions.filters.permissionGroup\"\n source=\"permissionGroupId\"\n reference={RESOURCE_NAME_PERMISSION_GROUP}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"permissionGroupId\"\n >\n <AutocompleteArrayInput\n optionText=\"displayLabel\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n </Filter>\n);\nconst defaultColumns = [\"name\", \"label\", \"description\"];\nconst PermissionList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"label\" />\n <TextField source=\"sortOrder\" />\n <TextField source=\"type\" />\n <ReferenceField\n source=\"permissionGroupId\"\n reference={RESOURCE_NAME_PERMISSION_GROUP}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { PermissionList };\n","import { Identifier, RecordMap } from \"react-admin\";\nimport {\n Record,\n PermissionManagerState,\n PermissionGroup,\n Permission,\n PermissionChanges,\n} from \"./types\";\n\nexport const prepareInitialState = (\n record: Record | undefined,\n isDisabled: boolean\n): PermissionManagerState => {\n const roleId: string | undefined = record?.id?.toString();\n const rolePermissions = record?.permissions;\n const rolePermissionIds = rolePermissions?.map(\n (rolePermission) => rolePermission?.id\n );\n\n const addedSet = new Set<string>();\n const removedSet = new Set<string>();\n const permissionChanges = {\n added: addedSet,\n removed: removedSet,\n };\n return {\n roleId: roleId,\n isDisabled: isDisabled,\n rolePermissionIds,\n permissionChanges,\n };\n};\n\nconst groupAllPermissionGroups = (\n permissionGroups: PermissionGroup[] | undefined\n) => {\n if (!permissionGroups?.length) {\n return permissionGroups;\n }\n\n let permissionGroupsIdToIndexMap: { [key: string]: number } = {};\n const roots: PermissionGroup[] = [];\n let i;\n\n for (i = 0; i < permissionGroups?.length; i += 1) {\n const permissionGroup = permissionGroups[i];\n const permissionGroupId = permissionGroup.id;\n permissionGroupsIdToIndexMap[permissionGroupId] = i; // initialize the map\n permissionGroups[i].children = []; // initialize the children\n }\n for (i = 0; i < permissionGroups?.length; i += 1) {\n const permissionGroup = permissionGroups[i];\n if (permissionGroup.parentId) {\n // if you have dangling branches check that map[node.parentId] exists\n const parentIndexPosition =\n permissionGroupsIdToIndexMap[permissionGroup.parentId];\n permissionGroups[parentIndexPosition]?.children?.push(permissionGroup);\n } else {\n roots.push(permissionGroup);\n }\n }\n return roots;\n};\n\nexport const preparePermissionGroups = (\n allpermissionGroups: RecordMap<Record>,\n allPermissionGroupIds: Identifier[],\n rolePermissionIds?: string[]\n): PermissionGroup[] | undefined => {\n const permissionGroups = allPermissionGroupIds?.map((permissionGroupId) => {\n const record = allpermissionGroups[permissionGroupId];\n const id: string = record.id?.toString();\n const parentId: string = record.parentId;\n const name: string = record.name;\n const description: string = record.description;\n const label: string = record.label;\n const sortOrder: number = record.sortOrder;\n const version: number = record.version;\n\n let areAllPermissionsAssigned: boolean = record?.permissions?.length?true:false;\n\n const permissions = record?.permissions?.map((permission) => {\n const id: string = permission.id;\n const permissionGroupId: string = permission.permissionGroupId;\n const name: string = permission.name;\n const description: string = permission.description;\n const label: string = permission.label;\n const sortOrder: number = permission.sortOrder;\n const version: number = record.version;\n const isPermissionAssigned = rolePermissionIds\n ? rolePermissionIds.includes(id)\n : false;\n\n if (!isPermissionAssigned) {\n areAllPermissionsAssigned = false;\n }\n const permissionRecord: Permission = {\n id: id,\n permissionGroupId: permissionGroupId,\n name: name,\n description: description,\n label: label,\n sortOrder: sortOrder,\n version: version,\n isPermissionAssigned: isPermissionAssigned,\n };\n return permissionRecord;\n });\n\n const permissionGroup: PermissionGroup = {\n id: id,\n parentId: parentId,\n name: name,\n description: description,\n label: label,\n sortOrder: sortOrder,\n version: version,\n areAllPermissionsAssigned: areAllPermissionsAssigned,\n permissions: permissions,\n };\n\n return permissionGroup;\n });\n\n const sortedUnorderedPermissionGroupsWithPermissions = permissionGroups?.sort(\n (a, b) => {\n const aParentPermissiondGroupId = a && a.parentId ? a.parentId : null;\n const bParentPermissiondGroupId = b && b.parentId ? b.parentId : null;\n\n if (!aParentPermissiondGroupId && bParentPermissiondGroupId) {\n return 1;\n } else {\n return 0;\n }\n }\n );\n\n const unsortedPermissionGroupsWithPermissions = groupAllPermissionGroups(\n sortedUnorderedPermissionGroupsWithPermissions\n );\n\n const permissionGroupsWithPermissions = unsortedPermissionGroupsWithPermissions?.sort(\n (a, b) => {\n return a.sortOrder - b.sortOrder;\n }\n );\n return permissionGroupsWithPermissions;\n};\n\nexport const handlePermissionToggle = (\n permission: Permission,\n permissionChanges: PermissionChanges,\n isSelected: boolean\n): PermissionChanges => {\n const permissionId = permission.id;\n permission.isPermissionAssigned = isSelected;\n let added = permissionChanges.added;\n let removed = permissionChanges.removed;\n if (isSelected) {\n if (!removed.has(permissionId)) {\n added = added.add(permissionId);\n } else {\n removed.delete(permissionId);\n }\n } else {\n if (!added.has(permissionId)) {\n removed = removed.add(permissionId);\n } else {\n added.delete(permissionId);\n }\n }\n\n return {\n added,\n removed,\n };\n};\n\nconst toggleAndcollectPermissionIds = (\n isSelected: boolean,\n permissions?: Permission[]\n) => {\n return permissions?.map((permission) => {\n permission.isPermissionAssigned = isSelected;\n return permission?.id;\n });\n};\n\nexport const handlePermissionGroupToggle = (\n permissionGroup: PermissionGroup,\n permissionChanges: PermissionChanges,\n isSelected: boolean\n): PermissionChanges => {\n const permissionIds = toggleAndcollectPermissionIds(\n isSelected,\n permissionGroup?.permissions\n );\n const childPermissionIds = permissionGroup?.children?.flatMap(\n (permissionGroup) =>\n toggleAndcollectPermissionIds(isSelected, permissionGroup?.permissions)\n );\n const allPermissionIds = [\n ...(permissionIds || []),\n ...(childPermissionIds || []),\n ];\n let added = permissionChanges.added;\n let removed = permissionChanges.removed;\n allPermissionIds.forEach((permissionId) => {\n if (permissionId) {\n if (isSelected) {\n if (!removed.has(permissionId)) {\n added = added.add(permissionId);\n } else {\n removed.delete(permissionId);\n }\n } else {\n if (!added.has(permissionId)) {\n removed = removed.add(permissionId);\n } else {\n added.delete(permissionId);\n }\n }\n }\n });\n return permissionChanges;\n};\n\nconst recalculatePermissionGroupSelection = (\n permissionGroup?: PermissionGroup\n): boolean => {\n let areAllPermissionsAssigned: boolean = true;\n permissionGroup?.permissions?.forEach((permission) => {\n if (!permission.isPermissionAssigned) {\n areAllPermissionsAssigned = false;\n }\n });\n\n permissionGroup?.children?.forEach((permissionGroup) => {\n const recalculatedSelection = recalculatePermissionGroupSelection(\n permissionGroup\n );\n\n if (!recalculatedSelection) {\n areAllPermissionsAssigned = false;\n }\n });\n\n if (permissionGroup) {\n permissionGroup.areAllPermissionsAssigned = areAllPermissionsAssigned;\n }\n\n return areAllPermissionsAssigned;\n};\n\nexport const recalculateSelection = (\n allPermissionGroups?: PermissionGroup[]\n) => {\n let areAllPermissionsAssigned = true;\n\n allPermissionGroups?.forEach((permissionGroup) => {\n const isPermissionGroupPermissionAssigned = recalculatePermissionGroupSelection(\n permissionGroup\n );\n if (!isPermissionGroupPermissionAssigned) {\n areAllPermissionsAssigned = false;\n }\n });\n\n return areAllPermissionsAssigned;\n};\n","import {\n PermissionManagerActions,\n PermissionManagerState,\n PermissionManagerActionTypes,\n} from \"./types\";\nimport {\n handlePermissionGroupToggle,\n handlePermissionToggle,\n preparePermissionGroups,\n recalculateSelection,\n} from \"./utils\";\n\nexport const permissionsManagerReducer = (\n state: PermissionManagerState,\n action: PermissionManagerActions\n): PermissionManagerState => {\n switch (action.type) {\n case PermissionManagerActionTypes.SET_ALL_PERMISSION_GROUPS: {\n const allpermissionGroups = action?.payload?.allpermissionGroups;\n const allPermissionGroupIds = action?.payload?.allPermissionGroupIds;\n if (allpermissionGroups && allPermissionGroupIds) {\n const allPermissionGroups = preparePermissionGroups(\n allpermissionGroups,\n allPermissionGroupIds,\n state.rolePermissionIds\n );\n const newState = {\n ...state,\n allPermissionGroups,\n };\n\n return newState;\n } else {\n return state;\n }\n }\n\n case PermissionManagerActionTypes.TOGGLE_SINGLE_PERMISSION: {\n const permission = action?.payload?.permission;\n const isSelected = action?.payload?.isSelected;\n const permissionChanges = handlePermissionToggle(\n permission,\n state.permissionChanges,\n isSelected\n );\n const allPermissionGroups = state?.allPermissionGroups;\n recalculateSelection(allPermissionGroups);\n const newState = {\n ...state,\n allPermissionGroups,\n permissionChanges,\n };\n\n return newState;\n }\n\n case PermissionManagerActionTypes.TOGGLE_MANY_PERMISSIONS: {\n const permissionGroup = action?.payload?.permissionGroup;\n const isSelected = action?.payload?.isSelected;\n const permissionChanges = handlePermissionGroupToggle(\n permissionGroup,\n state.permissionChanges,\n isSelected\n );\n const allPermissionGroups = state?.allPermissionGroups;\n recalculateSelection(allPermissionGroups);\n const newState = {\n ...state,\n allPermissionGroups,\n permissionChanges,\n };\n\n return newState;\n }\n }\n};\n","import { createContext } from \"react\";\nimport { PermissionManagerContextProps } from \"./types\";\n\nconst PermissionManagerContext = createContext<PermissionManagerContextProps>(\n {}\n);\n\nPermissionManagerContext.displayName = \"PermissionManagerContext\";\n\nexport { PermissionManagerContext };\n","export const RESOURCE_NAME_ROLE = \"roles\";\n\nexport enum PermissionRoles {\n MENU_ROLES = 'view-role-management-menu',\n LIST_ROLES = 'list-roles',\n SHOW_ROLE = 'show-role',\n CREATE_ROLE = 'create-role',\n EDIT_ROLE = 'update-role',\n DELETE_ROLE = 'delete-role',\n ACTION_MANAGE_PERMISSIONS_FROM_ROLE = 'role-manage-permission-action',\n}\n","import { useContext, ChangeEvent } from \"react\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport { Permission, PermissionManagerActionTypes } from \"./types\";\nimport { PermissionManagerContext } from \"./PermissionManagerContext\";\nimport { useForm } from \"react-final-form\";\nimport { EventBusyTwoTone } from \"@material-ui/icons\";\n\ninterface Props {\n permission: Permission;\n}\n\nconst SinglePermission = ({ permission }) => {\n const isDisabled = false;\n const permissionTooltip =\n permission.description + (isDisabled ? \" - Inactive\" : \"\");\n\n const { state, dispatch } = useContext(PermissionManagerContext);\n\n const form = useForm();\n\n const handlePermissionChanged = (\n isSelected: boolean\n ) => {\n if (dispatch) {\n dispatch({\n type: PermissionManagerActionTypes.TOGGLE_SINGLE_PERMISSION,\n payload: { permission, isSelected },\n });\n\n if (!state?.isDisabled) {\n const statePermissionChanges = state?.permissionChanges;\n if (statePermissionChanges) {\n const permissionChanges = {\n added: Array.from(statePermissionChanges?.added),\n removed: Array.from(statePermissionChanges?.removed),\n };\n form.change(\"permissionChanges\", permissionChanges);\n }\n }\n }\n\n return 0;\n };\n\n return (\n <Tooltip title={permissionTooltip}>\n <FormControl component=\"fieldset\" margin=\"normal\">\n <FormControlLabel\n htmlFor={`${permission.id}_${permission.name}`}\n name={`${permission.id}_${permission.name}`}\n key={`${permission.id}_${permission.name}`}\n value={permission.id}\n disabled={state?.isDisabled}\n checked={permission.isPermissionAssigned}\n onClick={(event) => event.stopPropagation()}\n label={`${permission.label}`}\n control={\n <Checkbox\n id={`${permission.id}__${permission.name}`}\n color=\"primary\"\n onChange={(event, checked) => handlePermissionChanged(checked)}\n />\n }\n />\n </FormControl>\n </Tooltip>\n );\n};\n\nexport { SinglePermission };\n","import { makeStyles, useMediaQuery, Theme } from \"@material-ui/core\";\nimport GridList from '@material-ui/core/GridList';\n\nimport GridListTile from '@material-ui/core/GridListTile';\nimport { SinglePermission } from './SinglePermission';\nimport { Permission } from \"./types\";\n\nconst useStyles = makeStyles((theme) => ({\n heading: {\n marginTop: \"-10px\",\n fontSize: theme.typography.pxToRem(15),\n fontFamily: theme.typography.fontFamily,\n fontWeight: 600,\n fontStyle: \"italic\",\n },\n gridList: {\n height: \"auto\",\n paddingLeft: 15,\n },\n gridListTile: {\n root: {\n height: \"auto\",\n },\n },\n}));\n\ninterface Props {\n permissions: Permission[];\n}\n\nconst PermissionsGridList= ({ permissions }) => {\n const classes = useStyles();\n const permissionsCount = permissions?.length;\n\n const isSmall = useMediaQuery((theme: Theme) => theme.breakpoints.up(\"sm\"));\n const isMedium = useMediaQuery((theme: Theme) => theme.breakpoints.up(\"md\"));\n const isLarge = useMediaQuery((theme: Theme) => theme.breakpoints.up(\"lg\"));\n const isExtraLarge = useMediaQuery((theme: Theme) =>\n theme.breakpoints.up(\"xl\")\n );\n\n const getGridListCols = () => {\n let gridListCols = 1;\n\n if (isExtraLarge) {\n gridListCols = 4;\n }else if (isLarge) {\n gridListCols = 3;\n }else if (isMedium) {\n gridListCols = 2;\n }else if (isSmall) {\n gridListCols = 2;\n }\n\n if(gridListCols > permissionsCount){\n gridListCols = permissionsCount;\n }\n \n return gridListCols;\n };\n\n if (!permissions) {\n return null;\n }\n\n return (\n <div>\n <GridList\n cols={getGridListCols()}\n spacing={6}\n cellHeight=\"auto\"\n className={classes.gridList}\n >\n {permissions.map((permission) => (\n <GridListTile key={`gridList_${permission?.id}`}>\n <SinglePermission\n permission={permission}\n />\n </GridListTile>\n ))}\n </GridList>\n </div>\n );\n};\n\nexport { PermissionsGridList };\n","import { ChangeEvent, useContext, useMemo, useState} from \"react\";\nimport {\n makeStyles,\n Tooltip,\n FormControl,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n FormControlLabel,\n Checkbox,\n} from \"@material-ui/core\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport { PermissionGroup, PermissionManagerActionTypes } from \"./types\";\nimport { PermissionsGridList } from \"./PermissionsGridList\";\nimport { PermissionManagerContext } from \"./PermissionManagerContext\";\nimport { useForm } from \"react-final-form\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n },\n permissionGroupHeading: {\n marginTop: \"15px\",\n fontSize: theme.typography.pxToRem(15),\n fontWeight: 600,\n fontStyle: \"italic\",\n },\n summary: {\n display: \"block\",\n },\n checkbox: {},\n label: {},\n}));\n\ninterface Props {\n permissionGroup: PermissionGroup;\n}\n\nconst PermissionsGroup= ({ permissionGroup }) => {\n const classes = useStyles();\n\n const { state, dispatch } = useContext(PermissionManagerContext);\n\n const isDisabled = false;\n const permissionGroupTooltip =\n permissionGroup?.description + (isDisabled ? \" - Inactive\" : \"\");\n\n const [isExpanded, setExpanded] = useState<boolean>(true);\n const isAccordionExpanded = useMemo(() => isExpanded, [isExpanded]);\n\n const form = useForm();\n\n const handleChange = (event: ChangeEvent<{}>) => {\n const eventPermissionId = event?.target['id'];\n if(eventPermissionId === permissionGroup?.id){\n setExpanded(!isExpanded);\n }\n }\n const handlePermissionGroupChecked = (\n event: ChangeEvent<{}>,\n isSelected: boolean\n ) => {\n if (dispatch) {\n event.preventDefault();\n event.stopPropagation();\n\n dispatch({\n type: PermissionManagerActionTypes.TOGGLE_MANY_PERMISSIONS,\n payload: { permissionGroup, isSelected },\n });\n\n if (!state?.isDisabled) {\n const statePermissionChanges = state?.permissionChanges;\n if (statePermissionChanges) {\n const permissionChanges = {\n added: Array.from(statePermissionChanges?.added),\n removed: Array.from(statePermissionChanges?.removed),\n };\n form.change(\"permissionChanges\", permissionChanges);\n }\n }\n }\n };\n\n const ChildPermissionGroups = () => {\n if (!permissionGroup?.children) {\n return null;\n }\n\n return (\n <div>\n {permissionGroup?.children?.map((childPermissionGroup) => (\n <PermissionsGroup\n key={childPermissionGroup.id}\n permissionGroup={childPermissionGroup}\n />\n ))}\n </div>\n );\n };\n\n return (\n <Tooltip title={permissionGroupTooltip}>\n <FormControl\n className={classes.root}\n component=\"fieldset\"\n margin=\"normal\"\n >\n <Accordion\n className={classes.root}\n TransitionProps={{ unmountOnExit: true }}\n expanded={isAccordionExpanded}\n onChange={handleChange}\n id={permissionGroup?.id}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-label=\"Expand\"\n id={permissionGroup?.id}\n >\n <FormControlLabel\n htmlFor={`${permissionGroup.id}_${permissionGroup.name}`}\n name={`${permissionGroup.id}_${permissionGroup.name}`}\n key={`${permissionGroup.id}_${permissionGroup.name}`}\n className={classes.label}\n value={permissionGroup.id.toString()}\n checked={\n permissionGroup?.areAllPermissionsAssigned ? true : false\n }\n disabled={state?.isDisabled}\n onClick={(event) => event.stopPropagation()}\n onFocus={(event) => event.stopPropagation()}\n control={\n <Checkbox\n id={`${permissionGroup.id}__${permissionGroup.name}`}\n color=\"primary\"\n className={classes.checkbox}\n onChange={handlePermissionGroupChecked}\n />\n }\n label={`${permissionGroup.label}`}\n />\n </AccordionSummary>\n <AccordionDetails className={classes.summary}>\n <PermissionsGridList permissions={permissionGroup.permissions} />\n <ChildPermissionGroups />\n </AccordionDetails>\n </Accordion>\n </FormControl>\n </Tooltip>\n );\n};\n\nexport { PermissionsGroup };\n","import { useContext } from \"react\";\nimport { makeStyles } from \"@material-ui/core\";\nimport { PermissionManagerContext } from \"./PermissionManagerContext\";\nimport { PermissionsGroup } from \"./PermissionsGroup\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useTranslate } from \"react-admin\";\n\nconst useStyles = makeStyles((theme) => ({\n heading: {\n marginTop: \"10px\",\n fontSize: theme.typography.pxToRem(20),\n fontFamily: theme.typography.fontFamily,\n fontWeight: (theme.typography.fontWeightRegular) as number,\n },\n}));\n\ninterface PermissionsGroupContainerProps {\n headingLabel: string;\n}\nconst PermissionsGroupContainer= ({\n headingLabel\n}: PermissionsGroupContainerProps) => {\n const classes = useStyles();\n const translate = useTranslate();\n const { state } = useContext(PermissionManagerContext);\n const allPermissionGroups = state?.allPermissionGroups;\n\n if (allPermissionGroups) {\n return (\n <div>\n <Typography className={classes.heading}>\n {translate(headingLabel)}\n </Typography>\n {allPermissionGroups.map((permissionGroup, key) => (\n <PermissionsGroup\n key={permissionGroup.id}\n permissionGroup={permissionGroup}\n />\n ))}\n </div>\n );\n } else {\n return <div />;\n }\n};\n\nexport { PermissionsGroupContainer };\n","import { useEffect, useReducer, useMemo } from \"react\";\nimport { Loading, useEditContext, useGetList, useLoading } from \"react-admin\";\nimport { RESOURCE_NAME_PERMISSION_GROUP } from \"../permission-groups\";\nimport { PermissionManagerActionTypes } from \"./permissionsmanager/types\";\nimport { permissionsManagerReducer } from \"./permissionsmanager/permissionsManagerReducer\";\nimport { prepareInitialState } from \"./permissionsmanager/utils\";\nimport { PermissionManagerContext } from \"./permissionsmanager/PermissionManagerContext\";\nimport { PermissionsGroupContainer } from \"./permissionsmanager/PermissionsGroupContainer\";\nimport { useForm } from \"react-final-form\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../common\";\n\nconst ModifyRolePermissions = () => {\n const { record } = useEditContext();\n const {\n data: allpermissionGroups,\n ids: allPermissionGroupIds,\n loading: arePermissionGroupsLoading,\n } = useGetList(\n RESOURCE_NAME_PERMISSION_GROUP,\n { page: 1, perPage: MAX_RECORDS_PER_PAGE },\n { field: \"sortOrder\", order: \"ASC\" },\n {}\n );\n\n const isLoading = useLoading();\n\n const permissionManagerState = prepareInitialState(record, false);\n\n const [state, dispatch] = useReducer(permissionsManagerReducer, {\n ...permissionManagerState,\n });\n\n const contextValue = useMemo(() => {\n return { state, dispatch };\n }, [state, dispatch]);\n\n const form = useForm();\n\n form.registerField(\n \"permissionChanges\",\n (fieldState) => {\n },\n {\n touched: true,\n value: true,\n },\n { data: true }\n );\n\n useEffect(() => {\n if (!arePermissionGroupsLoading && allpermissionGroups && dispatch) {\n dispatch({\n type: PermissionManagerActionTypes.SET_ALL_PERMISSION_GROUPS,\n payload: { allpermissionGroups, allPermissionGroupIds },\n });\n }\n }, [arePermissionGroupsLoading, allpermissionGroups, allPermissionGroupIds]);\n\n if (isLoading) {\n return <Loading/>\n } else {\n return (\n <PermissionManagerContext.Provider value={contextValue}>\n <PermissionsGroupContainer headingLabel=\"resources.roles.permissionTabHeading.manage\" />\n </PermissionManagerContext.Provider>\n );\n }\n};\n\nexport { ModifyRolePermissions };\n","import AccessibilityNewIcon from '@material-ui/icons/AccessibilityNew';import { PermissionPermissions, RESOURCE_NAME_PERMISSION, } from './constants';\nimport { PermissionEdit } from './PermissionEdit';\nimport { PermissionList } from './PermissionList';\nimport { PermissionShow } from './PermissionShow';\n\nconst allowedPermissions = {\n menu: PermissionPermissions.MENU_PERMISSION,\n list: PermissionPermissions.LIST_PERMISSIONS,\n create: PermissionPermissions.CREATE_PERMISSION,\n update: PermissionPermissions.EDIT_PERMISSION,\n show: PermissionPermissions.SHOW_PERMISSION,\n delete: PermissionPermissions.DELETE_PERMISSION,\n};\n\nconst permissionResource = {\n name: RESOURCE_NAME_PERMISSION,\n list: PermissionList,\n edit: PermissionEdit,\n show: PermissionShow, \n icon: AccessibilityNewIcon,\n options: { label: 'resources.permissions.name',allowedPermissions },\n}\n\nexport * from './constants';\nexport * from './permissionsmanager';\n\nexport { permissionResource }","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../components\";\nimport { PermissionForm } from \"./PermissionForm\";\n\nconst PermissionEdit= (props:EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <PermissionForm isEdit={true} />\n </DefaultEdit>\n );\n};\n\nexport { PermissionEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n BooleanField,\n DateField,\n} from \"react-admin\";\nimport { DefaultShow } from \"../../../components\";\nimport { RESOURCE_NAME_PERMISSION } from \"./constants\";\n\nconst PermissionShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"label\" />\n <TextField source=\"sortOrder\" />\n <TextField source=\"type\" />\n <ReferenceField\n source=\"permissionGroupId\"\n reference={RESOURCE_NAME_PERMISSION}\n >\n <TextField source=\"name\" />\n </ReferenceField>\n <TextField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <DateField source=\"deletedAt\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { PermissionShow };\n","import { useEffect, useReducer, useMemo } from \"react\";\nimport { Loading, useShowContext, useLoading, useGetList } from \"react-admin\";\nimport { RESOURCE_NAME_PERMISSION_GROUP } from \"../permission-groups\";\nimport { PermissionManagerActionTypes } from \"./permissionsmanager/types\";\nimport { permissionsManagerReducer } from \"./permissionsmanager/permissionsManagerReducer\";\nimport { prepareInitialState } from \"./permissionsmanager/utils\";\nimport { PermissionManagerContext } from \"./permissionsmanager/PermissionManagerContext\";\nimport { PermissionsGroupContainer } from \"./permissionsmanager/PermissionsGroupContainer\";\nimport { Form } from \"react-final-form\";\nimport { MAX_RECORDS_PER_PAGE } from \"../../../common\";\n\nconst ShowRolePermissions = () => {\n const { record } = useShowContext();\n const {\n data: allpermissionGroups,\n ids: allPermissionGroupIds,\n loading: arePermissionGroupsLoading,\n } = useGetList(\n RESOURCE_NAME_PERMISSION_GROUP,\n { page: 1, perPage: MAX_RECORDS_PER_PAGE },\n { field: \"sortOrder\", order: \"ASC\" },\n {}\n );\n const isLoading = useLoading();\n\n const permissionManagerState = prepareInitialState(record, true);\n\n const [state, dispatch] = useReducer(permissionsManagerReducer, {\n ...permissionManagerState,\n });\n\n const contextValue = useMemo(() => {\n return { state, dispatch };\n }, [state, dispatch]);\n\n useEffect(() => {\n if (!arePermissionGroupsLoading && allpermissionGroups && dispatch) {\n dispatch({\n type: PermissionManagerActionTypes.SET_ALL_PERMISSION_GROUPS,\n payload: { allpermissionGroups, allPermissionGroupIds },\n });\n }\n }, [arePermissionGroupsLoading, allpermissionGroups, allPermissionGroupIds]);\n\n if (isLoading) {\n return <Loading />\n } else {\n return (\n <Form\n onSubmit={() => {}}\n render={({ handleSubmit }) => (\n <PermissionManagerContext.Provider value={contextValue}>\n <PermissionsGroupContainer headingLabel=\"resources.roles.permissionTabHeading.view\" />\n </PermissionManagerContext.Provider>\n )}\n />\n );\n }\n};\n\nexport { ShowRolePermissions };\n","export const RESOURCE_NAME_USER = \"users\";\nexport const RESOURCE_NAME_ONLY_USER = \"users/onlyUser\";\n\nexport enum PermissionUsers {\n USER_MENU = \"view-user-management-menu\",\n USER_LIST = \"list-users\",\n USER_SHOW = \"show-user\",\n USER_CREATE = \"create-user\",\n USER_UPDATE = \"update-user\",\n USER_DELETE = \"delete-user\",\n}\n\nexport interface IUserSettings {\n theme: string;\n locale: string;\n}\n\nexport interface IUser {\n id: string;\n accountId: string;\n email: string;\n firstName: string;\n lastName: string;\n settings?: IUserSettings;\n}\n","import {\n TextInput,\n required,\n ReferenceInput,\n SelectInput,\n useTranslate,\n SimpleForm,\n TabbedForm,\n FormTab,\n usePermissions,\n useGetIdentity,\n useRecordContext,\n} from \"react-admin\";\n\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { makeStyles, Theme, Typography } from \"@material-ui/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../accounts/constants\";\nimport { ModifyRolePermissions } from \"../permissions\";\nimport { ShowRolePermissions } from \"../permissions/ShowRolePermissions\";\nimport { PermissionRoles } from \"./constants\";\nimport { hasAccess } from \"../../../core/helpers\";\nimport { getTabbedFormProps } from \"../../../common\";\nimport { useEffect, useState } from \"react\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n isActive: { display: \"block\" },\n account: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst RoleForm = ({ isEdit, ...rest }) => {\n const { loaded, permissions } = usePermissions();\n const { identity } = useGetIdentity();\n const isSystemAdmin = identity?.isSystemAdmin;\n const record = useRecordContext(rest);\n const [canModifyPermissions, setCanModifyPermissions] =\n useState<boolean>(false);\n useEffect(() => {\n const isBootStrapped = record?.isBootstrapped;\n let canUserModifyPermissions = false;\n if (isBootStrapped && isSystemAdmin) {\n canUserModifyPermissions = true;\n } else if (!isBootStrapped) {\n canUserModifyPermissions = true;\n }\n\n setCanModifyPermissions(canUserModifyPermissions);\n }, [record, isSystemAdmin]);\n\n const allowManagePermissionsFromRoleScreen = hasAccess(\n permissions,\n PermissionRoles.ACTION_MANAGE_PERMISSIONS_FROM_ROLE\n );\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const classes = useStyles(rest);\n if (allowManagePermissionsFromRoleScreen) {\n return (\n <TabbedForm\n {...getTabbedFormProps(rest)}\n warnWhenUnsavedChanges\n {...rest}\n >\n <FormTab label=\"resources.roles.tabs.role\">\n <SectionTitle label=\"resources.roles.fieldGroups.roleDetails\" />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.roles.fields.name\"\n helperText=\"resources.roles.help.name\"\n formclassName={classes.name}\n fullWidth\n validate={[required()]}\n />\n <TextInput\n source=\"description\"\n label=\"resources.roles.fields.description\"\n helperText=\"resources.roles.help.description\"\n formclassName={classes.description}\n resettable\n multiline\n fullWidth\n />\n {isSystemAdmin && (\n <ReferenceInput\n label=\"resources.roles.fields.accountId\"\n source=\"accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n formclassName={classes.account}\n fullWidth\n >\n <SelectInput\n optionText=\"displayLabel\"\n helperText=\"resources.roles.help.accountId\"\n />\n </ReferenceInput>\n )}\n </FormTab>\n <FormTab label=\"resources.roles.tabs.permissions\">\n {canModifyPermissions && <ModifyRolePermissions />}\n {!canModifyPermissions && <ShowRolePermissions />}\n </FormTab>\n </TabbedForm>\n );\n } else {\n return (\n <SimpleForm warnWhenUnsavedChanges>\n <SectionTitle label=\"resources.roles.fieldGroups.roleDetails\" />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.roles.fields.name\"\n helperText=\"resources.roles.help.name\"\n formclassName={classes.name}\n validate={[required()]}\n />\n <TextInput\n source=\"description\"\n label=\"resources.roles.fields.description\"\n helperText=\"resources.roles.help.description\"\n formclassName={classes.description}\n resettable\n multiline\n />\n <ReferenceInput\n label=\"resources.roles.fields.accountId\"\n source=\"accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n formclassName={classes.account}\n >\n <SelectInput\n optionText=\"displayLabel\"\n helperText=\"resources.roles.help.accountId\"\n />\n </ReferenceInput>\n </SimpleForm>\n );\n }\n};\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\nexport { RoleForm };\n","import React, { ReactElement } from \"react\";\n\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n BooleanField,\n DateField,\n} from \"react-admin\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../accounts\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"name\", \"description\"];\nconst RoleList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { RoleList };\n","import AssignmentIndIcon from '@material-ui/icons/AssignmentInd';import { PermissionRoles, RESOURCE_NAME_ROLE } from './constants';\nimport { RoleCreate } from './RoleCreate';\nimport { RoleEdit } from './RoleEdit';\nimport { RoleList } from './RoleList';\nimport { RoleShow } from './RoleShow';\n\nconst allowedPermissions = {\n menu: PermissionRoles.MENU_ROLES,\n list: PermissionRoles.LIST_ROLES,\n create: PermissionRoles.CREATE_ROLE,\n update: PermissionRoles.EDIT_ROLE,\n show: PermissionRoles.SHOW_ROLE,\n delete: PermissionRoles.DELETE_ROLE,\n};\nconst roleResource = {\n name: RESOURCE_NAME_ROLE,\n list: RoleList,\n create:RoleCreate,\n edit: RoleEdit,\n show: RoleShow, \n icon: AssignmentIndIcon,\n options: { label: 'resources.roles.name',allowedPermissions },\n\n}\n\nexport * from './constants';\nexport { roleResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { DefaultCreate } from \"../../../components\";\nimport { RoleForm } from \"./RoleForm\";\n\nconst RoleCreate = (props: CreateProps)=> {\n return (\n <DefaultCreate {...props}>\n < RoleForm isEdit={false}/>\n </DefaultCreate>\n );\n };\n \n export { RoleCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../components\";\nimport { RoleForm } from \"./RoleForm\";\n\nconst RoleEdit= (props:EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <RoleForm isEdit={true} />\n </DefaultEdit>\n );\n};\n\nexport { RoleEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ReferenceField,\n DateField,\n BooleanField,\n TabbedShowLayout,\n Tab,\n usePermissions,\n} from \"react-admin\";\nimport { DefaultShow } from \"../../../components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\nimport { hasAccess } from \"../../../core/helpers\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../accounts\";\nimport { ShowRolePermissions } from \"../permissions/ShowRolePermissions\";\nimport { PermissionRoles } from \"./constants\";\n\nconst RoleShow= (props:ShowProps) => {\n const { permissions } = usePermissions();\n\n const allowManagePermissionsFromRoleScreen = hasAccess(\n permissions,\n PermissionRoles.ACTION_MANAGE_PERMISSIONS_FROM_ROLE\n );\n\n const SimpleShowForm = () => (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n </SimpleShowLayout>\n </DefaultShow>\n );\n\n const TabbedForm = () => (\n <DefaultShow {...props}>\n <TabbedShowLayout>\n <Tab label=\"resources.roles.tabs.role\">\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n </Tab>\n <Tab label=\"resources.roles.tabs.permissions\">\n <ShowRolePermissions />\n </Tab>\n </TabbedShowLayout>\n </DefaultShow>\n );\n\n if (allowManagePermissionsFromRoleScreen) {\n return <TabbedForm />;\n } else {\n return <SimpleShowForm />;\n }\n};\n\nexport { RoleShow };\n","import React, { ReactElement } from \"react\";\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n BooleanField,\n DateField,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n BooleanInput,\n ReferenceInput,\n AutocompleteInput,\n useGetIdentity,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT, RESOURCE_NAME_ROLE } from \"../..\";\nimport {\n DEFAULT_PER_PAGE,\n IdFilter,\n MAX_RECORDS_PER_PAGE,\n SearchFilter,\n} from \"../../../common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => {\n const { identity } = useGetIdentity();\n const isSystemAdmin = identity?.isSystemAdmin;\n\n return (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n <ReferenceArrayInput\n label=\"resources.users.filters.roles\"\n source=\"roleIds\"\n reference={RESOURCE_NAME_ROLE}\n perPage={MAX_RECORDS_PER_PAGE}\n sort={{ field: \"name\", order: \"ASC\" }}\n key=\"roleIds\"\n >\n <AutocompleteArrayInput\n optionText=\"name\"\n optionValue=\"id\"\n resettable={true}\n allowEmpty={false}\n />\n </ReferenceArrayInput>\n {isSystemAdmin && (\n <ReferenceInput\n source=\"accountId\"\n label=\"resources.users.fields.accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n isRequired\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n isRequired\n helperText=\"resources.users.help.accountId\"\n resettable\n />\n </ReferenceInput>\n )}\n <BooleanInput\n source=\"isPrimaryUser\"\n label=\"resources.users.fields.isPrimaryUser\"\n />\n </Filter>\n );\n};\n\nconst defaultColumns = [\"firstName\", \"lastName\", \"email\"];\n\nconst UserList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"firstName\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"firstName\" />\n <TextField source=\"lastName\" />\n <TextField source=\"email\" />\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { UserList };\n","import {\n TextInput,\n PasswordInput,\n required,\n email,\n ReferenceInput,\n AutocompleteInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n useTranslate,\n useGetIdentity,\n BooleanInput,\n} from \"react-admin\";\nimport { Typography } from \"@material-ui/core\";\n\nimport { AnyObject } from \"react-final-form\";\nimport { Box } from \"@material-ui/core\";\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../accounts\";\nimport { MediaInputField, requiredIfTrue } from \"../../../components\";\nimport { RESOURCE_NAME_ROLE } from \"..\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n firstName: { display: \"inline-block\" },\n lastName: {\n display: \"inline-block\",\n marginLeft: 32,\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: 0,\n },\n },\n email: { display: \"block\" },\n password: { display: \"inline-block\" },\n confirm_password: {\n display: \"inline-block\",\n marginLeft: 32,\n [theme.breakpoints.down(\"xs\")]: {\n marginLeft: 0,\n },\n },\n accountId: { display: \"block\", width: 544 },\n roleIds: { display: \"block\", width: 544 },\n isActive: { display: \"block\" },\n })\n);\n\nexport const validatePasswords = ({\n password,\n confirm_password,\n}: AnyObject) => {\n const errors = {} as any;\n\n if (password && confirm_password && password !== confirm_password) {\n errors.confirm_password = [\"resources.users.validation.password_mismatch\"];\n }\n\n return errors;\n};\n\nconst matchPassword = (value, allValues) =>\n value !== allValues.password\n ? `This field must match with your password`\n : undefined;\n\nconst UserForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n const { identity } = useGetIdentity();\n const isSystemAdmin = identity?.isSystemAdmin;\n const firstNameRandomId = uuidv4();\n const lastNameRandomId = uuidv4();\n const emailRandomId = uuidv4();\n const passwordRandomId = uuidv4();\n const confirmPasswordRandomId = uuidv4();\n\n return (\n <>\n <SectionTitle label=\"resources.users.fieldGroups.userDetails\" />\n <TextInput\n autoFocus\n source=\"firstName\"\n label=\"resources.users.fields.firstName\"\n helperText=\"resources.users.help.firstName\"\n className={classes.firstName}\n validate={[required()]}\n InputProps={{\n autoComplete: firstNameRandomId,\n id: firstNameRandomId,\n name: firstNameRandomId,\n }}\n />\n <TextInput\n source=\"lastName\"\n label=\"resources.users.fields.lastName\"\n helperText=\"resources.users.help.lastName\"\n className={classes.lastName}\n validate={[required()]}\n InputProps={{\n autoComplete: lastNameRandomId,\n id: lastNameRandomId,\n name: lastNameRandomId,\n }}\n />\n <TextInput\n type=\"email\"\n source=\"email\"\n label=\"resources.users.fields.email\"\n validation={{ email: true }}\n helperText=\"resources.users.help.email\"\n className={classes.email}\n fullWidth={false}\n validate={[required(), email()]}\n InputProps={{\n autoComplete: emailRandomId,\n id: emailRandomId,\n name: emailRandomId,\n }}\n />\n\n <Separator />\n <SectionTitle label=\"resources.users.fieldGroups.password\" />\n <PasswordInput\n source=\"password\"\n label=\"resources.users.fields.password\"\n helperText=\"resources.users.help.password\"\n className={classes.password}\n validate={[requiredIfTrue(!isEdit)]}\n InputProps={{\n autoComplete: \"off\",\n id: passwordRandomId,\n name: passwordRandomId,\n //@ts-ignore\n \"data-lpignore\": true,\n }}\n />\n <PasswordInput\n source=\"confirm_password\"\n label=\"resources.users.fields.confirm_password\"\n helperText=\"resources.users.help.confirm_password\"\n className={classes.confirm_password}\n validate={matchPassword}\n InputProps={{\n autoComplete: confirmPasswordRandomId,\n id: confirmPasswordRandomId,\n name: confirmPasswordRandomId,\n }}\n />\n\n {isSystemAdmin && (\n <>\n <Separator />\n <SectionTitle label=\"resources.users.fieldGroups.account\" />\n <ReferenceInput\n source=\"accountId\"\n label=\"resources.users.fields.accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n isRequired\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n className={classes.accountId}\n isRequired\n helperText=\"resources.users.help.accountId\"\n resettable\n validate={[required()]}\n />\n </ReferenceInput>\n <BooleanInput\n source=\"isPrimaryUser\"\n label=\"resources.users.fields.isPrimaryUser\"\n helperText=\"resources.users.help.isPrimaryUser\"\n />\n </>\n )}\n\n <Separator />\n <SectionTitle label=\"resources.users.fieldGroups.roles\" />\n\n <ReferenceArrayInput\n source=\"roleIds\"\n label=\"resources.users.fields.roleIds\"\n reference={RESOURCE_NAME_ROLE}\n isRequired\n >\n <AutocompleteArrayInput\n optionText=\"name\"\n className={classes.roleIds}\n isRequired\n helperText=\"resources.users.help.roleIds\"\n />\n </ReferenceArrayInput>\n\n <Separator />\n <SectionTitle label=\"resources.users.fieldGroups.files\" />\n <MediaInputField showUploadedFiles={isEdit} />\n </>\n );\n};\n\nconst Separator = () => <Box pt=\"1em\" />;\n\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { UserForm };\n","import { CreateProps, SimpleForm } from \"react-admin\";\nimport { AnyObject } from \"react-final-form\";\nimport { DefaultCreate } from \"../../../components/crud/DefaultCreate\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../utilities/media\";\nimport { UserForm } from \"./UserForm\";\n\nexport const validatePasswords = ({\n password,\n confirm_password,\n}: AnyObject) => {\n const errors = {} as any;\n\n if (password && confirm_password && password !== confirm_password) {\n errors.confirm_password = [\"resources.users.validation.password_mismatch\"];\n }\n\n return errors;\n};\n\nconst UserCreate= (props: CreateProps) => {\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'users',\n }];\n return (\n <DefaultCreate {...props}transform={transformAndUploadS3Files(mediaFileSources)}>\n <SimpleForm validate={validatePasswords} autocomplete=\"off\">\n <UserForm />\n </SimpleForm>\n </DefaultCreate>\n );\n};\n\nexport { UserCreate };\n","import PeopleAltIcon from '@material-ui/icons/PeopleAlt';\n\nimport { UserList } from './UserList';\nimport { UserCreate } from './UserCreate';\nimport { UserEdit } from './UserEdit';\nimport { UserShow } from './UserShow';\nimport { RESOURCE_NAME_USER, PermissionUsers } from './constants';\n\nconst allowedPermissions = {\n menu: PermissionUsers.USER_MENU,\n list: PermissionUsers.USER_LIST,\n create: PermissionUsers.USER_CREATE,\n update: PermissionUsers.USER_UPDATE,\n show: PermissionUsers.USER_SHOW,\n delete: PermissionUsers.USER_DELETE,\n};\n\nconst usersResource = {\n name: RESOURCE_NAME_USER,\n list: UserList,\n create: UserCreate,\n edit: UserEdit,\n show: UserShow,\n icon: PeopleAltIcon,\n options: { \n label: 'resources.users.name',\n allowedPermissions \n },\n}\n\nexport * from './constants';\nexport { usersResource };","export const RESOURCE_NAME_SYSTEM_DATA=\"systemData\";\n\nexport enum PermissionSystemData {\n MENU_DATA_SETUP_MODULE = 'view-datasetup-management-menu',\n MENU_SYSTEM_DATA = 'view-system-data-management-menu',\n LIST_SYSTEM_DATA = 'list-system-data',\n SHOW_SYSTEM_DATA = 'show-system-data',\n CREATE_SYSTEM_DATA = 'create-system-data',\n EDIT_SYSTEM_DATA = 'update-system-data',\n DELETE_SYSTEM_DATA = 'delete-system-data',\n }\n ","import { EditProps, SimpleForm } from \"react-admin\";\nimport { DefaultEdit } from \"../../../components/crud/DefaultEdit\";\nimport { MediaFileSource } from \"../../utilities/media/constants\";\nimport { transformAndUploadS3Files } from \"../../utilities/media/utils/transformAndUploadS3Files\";\n\nimport { validatePasswords } from \"./UserCreate\";\nimport { UserForm } from \"./UserForm\";\n\nconst UserEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"users\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <SimpleForm validate={validatePasswords} autocomplete=\"off\">\n <UserForm isEdit={true} />\n </SimpleForm>\n </DefaultEdit>\n );\n};\n\nexport { UserEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n DateField,\n BooleanField,\n ReferenceField,\n ReferenceArrayField,\n SingleFieldList,\n ChipField,\n EmailField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ROLE, roleResource } from \"..\";\nimport { UploadedFilesField } from \"../../../components\";\nimport { DefaultShow } from \"../../../components/crud/DefaultShow\";\nimport { COMMON_DATE_TIME_FORMAT, usePermissionsCheck } from \"../../../core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../accounts\";\n\nconst UserShow = (props: ShowProps) => {\n const { hasPermissionAccess, permissionsLoaded } = usePermissionsCheck();\n\n let showRoles: boolean = false;\n\n if (permissionsLoaded && hasPermissionAccess(roleResource?.options?.allowedPermissions?.list)) {\n showRoles = true;\n }\n\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField\n label=\"resources.users.fields.firstName\"\n source=\"firstName\"\n />\n <TextField label=\"resources.users.fields.lastName\" source=\"lastName\" />\n <EmailField label=\"resources.users.fields.email\" source=\"email\" />\n <ReferenceField\n label=\"resources.users.fields.accountId\"\n source=\"accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n\n {showRoles && (\n <ReferenceArrayField\n label=\"resources.users.fields.roleIds\"\n source=\"roleIds\"\n reference={RESOURCE_NAME_ROLE}\n >\n <SingleFieldList>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n )}\n\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n\n <BooleanField\n source=\"isPrimaryUser\"\n label=\"resources.users.fields.isPrimaryUser\"\n />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { UserShow };\n","import {\n GatedSubMenu,\n GatedMenuItemLink,\n MenuProps,\n} from \"../../components/menu\";\nimport { accountResource } from \"./accounts\";\nimport { permissionGroupResource } from \"./permission-groups\";\nimport { permissionResource } from \"./permissions\";\nimport { roleResource } from \"./roles\";\nimport { usersResource } from \"./users\";\n\nconst AccountsMenu= ({ isSidebarOpen, onMenuClick, dense }:MenuProps) => {\n return (\n <GatedSubMenu\n name={`resources.accounts.name`}\n icon={<accountResource.icon />}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n allowedPermissionName=\"view-access-management-menu\"\n >\n <GatedMenuItemLink\n to={`/${accountResource.name}`}\n name=\"resources.accounts.name\"\n leftIcon={<accountResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={accountResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${permissionResource.name}`}\n name=\"resources.permissions.name\"\n leftIcon={<permissionResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n permissionResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${permissionGroupResource.name}`}\n name=\"resources.permissionGroups.name\"\n leftIcon={<permissionGroupResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n permissionGroupResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${roleResource.name}`}\n name=\"resources.roles.name\"\n leftIcon={<roleResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={roleResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${usersResource.name}`}\n name=\"resources.users.name\"\n leftIcon={<usersResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={usersResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n </GatedSubMenu>\n );\n};\n\nexport { AccountsMenu };\n","import React, { ReactElement } from \"react\";\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n ReferenceField,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../lib/components\";\nimport { DEFAULT_PER_PAGE, IdFilter, SearchFilter } from \"../../../lib/common\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\nconst defaultColumns = [\"name\", \"type\", \"description\"];\nconst SystemDataList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"name\" />\n <TextField source=\"type\" />\n <RichTextField source=\"description\" />\n <TextField source=\"sortOrder\" />\n <TextField source=\"value\" />\n <ReferenceField source=\"accountId\" reference={RESOURCE_NAME_ACCOUNT}>\n <TextField source=\"displayLabel\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"id\" />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { SystemDataList };\n","import {\n TextInput,\n required,\n useTranslate,\n AutocompleteInput,\n ReferenceInput,\n SimpleForm,\n} from \"react-admin\";\nimport RichTextInput from \"ra-input-rich-text\";\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n description: { display: \"block\" },\n type: { display: \"block\" },\n value: { display: \"block\" },\n sortOrder: { display: \"block\" },\n account: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst SystemDataForm=(props) => {\n const classes = useStyles(props);\n return (\n <SimpleForm warnWhenUnsavedChanges {...props}>\n <SectionTitle label=\"resources.systemData.fieldGroups.systemDataDetails\" />\n <TextInput\n autoFocus\n source=\"type\"\n label=\"resources.systemData.fields.type\"\n helperText=\"resources.systemData.help.type\"\n className={classes.type}\n validate={[required()]}\n />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.systemData.fields.name\"\n helperText=\"resources.systemData.help.name\"\n className={classes.name}\n validate={[required()]}\n />\n <TextInput\n autoFocus\n source=\"value\"\n label=\"resources.systemData.fields.value\"\n helperText=\"resources.systemData.help.value\"\n className={classes.value}\n validate={[required()]}\n />\n\n <RichTextInput\n source=\"description\"\n label=\"resources.systemData.fields.description\"\n helperText=\"resources.systemData.help.description\"\n formClassName={classes.description}\n />\n\n <TextInput\n source=\"description\"\n label=\"resources.systemData.fields.description\"\n helperText=\"resources.systemData.help.description\"\n className={classes.description}\n resettable\n multiline\n />\n <TextInput\n autoFocus\n source=\"sortOrder\"\n label=\"resources.systemData.fields.sortOrder\"\n helperText=\"resources.systemData.help.sortOrder\"\n className={classes.value}\n validate={[required()]}\n />\n <ReferenceInput\n source=\"accountId\"\n label=\"resources.systemData.fields.accountId\"\n reference={RESOURCE_NAME_ACCOUNT}\n >\n <AutocompleteInput\n optionText=\"displayLabel\"\n helperText=\"resources.systemData.help.accountId\"\n className={classes.account}\n isRequired\n />\n </ReferenceInput>\n </SimpleForm>\n );\n};\n\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { SystemDataForm };\n","import SalesIcon from '@material-ui/icons/DateRange';\nimport { SystemDataList } from './SystemDataList';\nimport { SystemDataEdit } from './SystemDataEdit';\nimport { SystemDataShow } from './SystemDataShow';\nimport { PermissionSystemData, RESOURCE_NAME_SYSTEM_DATA } from './constants';\n\nconst allowedPermissions = {\n menu: PermissionSystemData.MENU_SYSTEM_DATA,\n list: PermissionSystemData.LIST_SYSTEM_DATA,\n create: PermissionSystemData.CREATE_SYSTEM_DATA,\n update: PermissionSystemData.EDIT_SYSTEM_DATA,\n show: PermissionSystemData.SHOW_SYSTEM_DATA,\n delete: PermissionSystemData.DELETE_SYSTEM_DATA,\n};\nconst systemDataResource = {\n name: RESOURCE_NAME_SYSTEM_DATA,\n list: SystemDataList,\n edit: SystemDataEdit,\n show: SystemDataShow,\n icon: SalesIcon,\n options: { label: 'resources.systemData.name', allowedPermissions },\n}\n\nexport * from './constants';\nexport { systemDataResource };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../lib/components\";\nimport { SystemDataForm } from \"./SystemDataForm\";\n\nconst SystemDataEdit= (props:EditProps) => {\n return (\n <DefaultEdit {...props} mutationMode=\"pessimistic\">\n <SystemDataForm />\n </DefaultEdit>\n );\n};\n\nexport { SystemDataEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ArrayField,\n Datagrid,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport { DefaultShow } from \"../../../lib/components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../lib/core\";\nimport { RESOURCE_NAME_ACCOUNT } from \"../../../lib/modules/accounts/accounts/constants\";\n\nconst SystemDataShow= (props:ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"type\" />\n <TextField source=\"value\" />\n <RichTextField source=\"description\" />\n <TextField source=\"sortOrder\" />\n <ArrayField label=\"Accounts\" source={RESOURCE_NAME_ACCOUNT}>\n <Datagrid optimized>\n <TextField source=\"displayLabel\" />\n </Datagrid>\n </ArrayField>\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { SystemDataShow };\n","import {\n GatedSubMenu,\n GatedMenuItemLink,\n MenuProps,\n} from \"../../lib/components/menu\";\nimport { businessFunctionResource } from \"./business-functions\";\nimport { currencyResource } from \"./currencies\";\nimport {\n itemResource,\n itemsClassResource,\n itemsGroupResource,\n itemsSegmentResource,\n} from \"./items\";\n\nimport { systemDataResource } from \"./system-data\";\nimport { uomResource } from \"./unit-of-measure\";\nimport { vendorResource } from \"./vendors\";\nimport { locationResource } from \"./locations\";\nimport { purchaseGroupResource } from \"./purchase-groups\";\nimport { categoryResource } from \"./category\";\nimport { vendorGroupResource } from \"./vendor-group\";\nimport { orgStructureResource } from \"./org-structure/org-structure\";\nimport MergeTypeIcon from \"@material-ui/icons/MergeType\";\nimport OrgIcon from \"@material-ui/icons/LocationCity\";\nimport { OrgStructureTypesResource } from \"./org-structure/org-structure-types\";\nimport { OrgUserGroupsResource } from \"./org-structure/org-user-groups\";\nimport GroupWorkIcon from '@material-ui/icons/GroupWork';\nconst DatasetupMenu= ({\n isSidebarOpen,\n onMenuClick,\n dense,\n}:MenuProps) => {\n return (\n <GatedSubMenu\n name={`resources.dataSetup.name`}\n icon={<systemDataResource.icon />}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n allowedPermissionName=\"view-datasetup-management-menu\"\n >\n <GatedMenuItemLink\n to={{\n pathname: `/${businessFunctionResource.name}`,\n state: { _scrollToTop: true },\n }}\n name=\"resources.businessFunction.name\"\n leftIcon={<businessFunctionResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n businessFunctionResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n <GatedMenuItemLink\n to={`/${categoryResource.name}`}\n name=\"resources.category.name\"\n leftIcon={<categoryResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={categoryResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${currencyResource.name}`}\n name=\"resources.currencies.name\"\n leftIcon={<currencyResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={currencyResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedSubMenu\n name={`resources.items.name`}\n icon={<itemResource.icon />}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n allowedPermissionName=\"view-items-management-menu\"\n >\n <GatedMenuItemLink\n to={`/${itemResource.name}`}\n name=\"resources.items.name\"\n leftIcon={<itemResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={itemResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${itemsSegmentResource.name}`}\n name=\"resources.itemSegments.name\"\n leftIcon={<itemsSegmentResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n itemsSegmentResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n <GatedMenuItemLink\n to={`/${itemsClassResource.name}`}\n name=\"resources.itemClasses.name\"\n leftIcon={<itemsClassResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n itemsClassResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n </GatedSubMenu>\n <GatedMenuItemLink\n to={`/${itemsGroupResource.name}`}\n name=\"resources.itemGroups.name\"\n leftIcon={<itemsGroupResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n itemsGroupResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n <GatedMenuItemLink\n to={`/${locationResource.name}`}\n name=\"resources.location.name\"\n leftIcon={<locationResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={locationResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedSubMenu\n name={`resources.orgStructures.name`}\n icon={<OrgIcon />}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n allowedPermissionName={\n orgStructureResource.options.allowedPermissions.menu\n }\n >\n <GatedMenuItemLink\n to={`/${orgStructureResource.name}`}\n name=\"resources.orgStructures.name\"\n leftIcon={<orgStructureResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n orgStructureResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${OrgStructureTypesResource.name}`}\n name=\"resources.OrgStructureTypes.name\"\n leftIcon={<MergeTypeIcon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n OrgStructureTypesResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n <GatedMenuItemLink\n to={`/${OrgUserGroupsResource.name}`}\n name=\"resources.OrgUserGroups.name\"\n leftIcon={<GroupWorkIcon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n OrgUserGroupsResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n </GatedSubMenu>\n\n <GatedMenuItemLink\n to={`/${purchaseGroupResource.name}`}\n name=\"resources.purchaseGroups.name\"\n leftIcon={<purchaseGroupResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n purchaseGroupResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${systemDataResource.name}`}\n name=\"resources.systemData.name\"\n leftIcon={<systemDataResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n systemDataResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${uomResource.name}`}\n name=\"resources.uom.name\"\n leftIcon={<uomResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={uomResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${vendorResource.name}`}\n name=\"resources.vendors.name\"\n leftIcon={<vendorResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={vendorResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n\n <GatedMenuItemLink\n to={`/${vendorGroupResource.name}`}\n name=\"resources.vendorGroup.name\"\n leftIcon={<vendorGroupResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n vendorGroupResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n </GatedSubMenu>\n );\n};\n\nexport { DatasetupMenu };\n","import {\n GatedMenuItemLink,\n GatedSubMenu,\n MenuProps,\n} from \"../../../lib/components\";\nimport {\n bidResource,\n} from \"../../../modules/bids\";\nimport {\n enquiryResource,\n} from \"../../../modules/enquiries\";\nimport { requisitionResource } from \"../../../modules/requisitions\";\nimport BusinessIcon from \"@material-ui/icons/Business\";\nimport { FILTER_DIRECTION } from \"../../constants\";\n\nconst ProcurementMenu = ({\n isSidebarOpen,\n onMenuClick,\n dense,\n}: MenuProps) => {\n return (\n <GatedSubMenu\n name={`resources.dataSetup.procurement`}\n icon={<BusinessIcon />}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n allowedPermissionName=\"view-procurement-management-menu\"\n >\n <GatedMenuItemLink\n to={`/${requisitionResource.name}`}\n name=\"resources.requisitions.name\"\n leftIcon={<requisitionResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={\n requisitionResource.options.allowedPermissions.menu\n }\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n <GatedMenuItemLink\n to={{\n pathname: `/${enquiryResource.name}`,\n search: `filter=${JSON.stringify({\n direction: FILTER_DIRECTION.SENT,\n })}`,\n }}\n name=\"resources.enquiries.name\"\n leftIcon={<enquiryResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={enquiryResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n <GatedMenuItemLink\n to={{\n pathname: `/${bidResource.name}`,\n search: `filter=${JSON.stringify({\n direction: FILTER_DIRECTION.RECEIVED,\n })}`,\n }}\n name=\"resources.bids.name\"\n leftIcon={<bidResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={bidResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n </GatedSubMenu>\n );\n};\n\nexport { ProcurementMenu };\n","import {\n GatedMenuItemLink,\n GatedSubMenu,\n MenuProps,\n} from \"../../../lib/components\";\nimport { bidResource } from \"../../../modules/bids\";\nimport {\n enquiryResource,\n} from \"../../../modules/enquiries\";\nimport SalesIcon from \"@material-ui/icons/MonetizationOn\";\nimport { FILTER_DIRECTION } from \"../../constants\";\n\nconst SalesMenu= ({ isSidebarOpen, onMenuClick, dense }:MenuProps) => {\n return (\n <GatedSubMenu\n name={`resources.dataSetup.salesMenu`}\n icon={<SalesIcon />}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n allowedPermissionName=\"view-sales-management-menu\"\n >\n <GatedMenuItemLink\n to={{\n pathname: `/${enquiryResource.name}`,\n search: `filter=${JSON.stringify({\n direction: FILTER_DIRECTION.RECEIVED,\n })}`,\n }}\n name=\"resources.enquiries.name\"\n leftIcon={<enquiryResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={enquiryResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n <GatedMenuItemLink\n to={{\n pathname: `/${bidResource.name}`,\n search: `filter=${JSON.stringify({\n direction: FILTER_DIRECTION.SENT,\n })}`,\n }}\n name=\"resources.bids.name\"\n leftIcon={<bidResource.icon />}\n onClick={() => onMenuClick}\n allowedPermissionName={bidResource.options.allowedPermissions.menu}\n isSidebarOpen={isSidebarOpen}\n dense={dense}\n />\n </GatedSubMenu>\n );\n};\n\nexport { SalesMenu };\n","import { ReduxState, Menu, MenuProps, DashboardMenuItem } from \"react-admin\";\nimport { useSelector } from \"react-redux\";\nimport { useMediaQuery, Theme, Box } from \"@material-ui/core\";\nimport { AccountsMenu } from \"../../modules/accounts/AccountsMenu\";\nimport { DatasetupMenu } from \"../../../modules/datasetup/DatasetupMenu\";\nimport { UtilitiesMenu } from \"../../modules\";\nimport { ProcurementMenu } from \"../../../common/layout/menu/ProcurementMenu\";\nimport { SalesMenu } from \"../../../common/layout/menu/SalesMenu\";\n\nconst AppMenu= (props:MenuProps) => {\n const { onMenuClick, logout, dense = false } = props;\n const isSidebarOpen = useSelector(\n (state: ReduxState) => state.admin.ui.sidebarOpen\n );\n const isXSmall = useMediaQuery((theme: Theme) =>\n theme.breakpoints.down(\"xs\")\n );\n\n return (\n <Menu {...props}>\n <DashboardMenuItem onClick={onMenuClick} sidebarIsOpen={isSidebarOpen} />\n\n <ProcurementMenu\n onMenuClick={onMenuClick}\n dense={dense}\n isSidebarOpen={isSidebarOpen}\n />\n <SalesMenu\n onMenuClick={onMenuClick}\n dense={dense}\n isSidebarOpen={isSidebarOpen}\n />\n <DatasetupMenu\n onMenuClick={onMenuClick}\n dense={dense}\n isSidebarOpen={isSidebarOpen}\n />\n <AccountsMenu\n onMenuClick={onMenuClick}\n dense={dense}\n isSidebarOpen={isSidebarOpen}\n />\n <UtilitiesMenu\n onMenuClick={onMenuClick}\n dense={dense}\n isSidebarOpen={isSidebarOpen}\n />\n {isXSmall && logout}\n </Menu>\n );\n};\n\nexport { AppMenu };\n","import { Layout as AppLayout, LayoutProps, Sidebar } from \"react-admin\";\nimport { AppBar } from \"./AppBar\";\nimport { darkTheme, lightTheme } from \"./themes\";\nimport { AppMenu } from \"./AppMenu\";\nimport { LocalUser } from \"../../core\";\n\nconst CustomSidebar = (props: any) => <Sidebar {...props} size={200} BackdropProps={{ invisible: true }}/>;\n\nconst Layout = (props: LayoutProps) => {\n const localUser = new LocalUser();\n\n const hasDarkTheme = localUser?.hasDarkTheme();\n const theme = hasDarkTheme ? darkTheme : lightTheme;\n\n return (\n <AppLayout\n {...props}\n appBar={AppBar}\n sidebar={CustomSidebar}\n menu={AppMenu}\n theme={theme}\n />\n );\n};\n\nexport { Layout };\n","import {\n TextInput,\n required,\n useTranslate,\n SimpleForm,\n} from \"react-admin\";\nimport { Typography } from \"@material-ui/core\";\nimport { makeStyles, Theme } from \"@material-ui/core/styles\";\nimport { Styles } from \"@material-ui/styles/withStyles\";\nimport { MediaInputField } from \"../../../components\";\n\nexport const styles: Styles<Theme, any> = {\n name: { display: \"block\" },\n code: { display: \"block\" },\n description: { display: \"block\" },\n};\n\nconst useStyles = makeStyles(styles);\n\nconst AccountForm = ({ isEdit = false, ...rest }) => {\n const classes = useStyles(rest);\n return (\n <SimpleForm {...rest} warnWhenUnsavedChanges>\n <SectionTitle label=\"resources.accounts.fieldGroups.accountDetails\" />\n <TextInput\n autoFocus\n source=\"name\"\n label=\"resources.accounts.fields.name\"\n helperText=\"resources.accounts.help.name\"\n formclassName={classes.name}\n validate={[required()]}\n />\n\n <TextInput\n source=\"code\"\n label=\"resources.accounts.fields.code\"\n helperText=\"resources.accounts.help.code\"\n formclassName={classes.code}\n validate={[required()]}\n />\n <TextInput\n source=\"description\"\n label=\"resources.accounts.fields.description\"\n helperText=\"resources.accounts.help.description\"\n formclassName={classes.description}\n resettable\n multiline\n />\n <MediaInputField showUploadedFiles={isEdit} />\n\n </SimpleForm>\n );\n};\n\nconst SectionTitle = ({ label }: { label: string }) => {\n const translate = useTranslate();\n\n return (\n <Typography variant=\"h6\" gutterBottom>\n {translate(label)}\n </Typography>\n );\n};\n\nexport { AccountForm };\n","import React, { ReactElement } from \"react\";\nimport {\n TextField,\n ListProps,\n Filter,\n FilterProps,\n DateField,\n BooleanField,\n RichTextField,\n} from \"react-admin\";\nimport {\n DEFAULT_PER_PAGE,\n SearchFilter,\n IdFilter,\n} from \"../../../common\";\nimport {\n CustomizableList,\n CustomizableDatagrid,\n ListRowActions,\n} from \"../../../components\";\n\nconst ListFilters = (props: Omit<FilterProps, \"children\">) => (\n <Filter {...props}>\n <SearchFilter alwaysOn key=\"Search\" />\n <IdFilter\n source=\"id\"\n label=\"components.controls.filters.idFilter.label\"\n key=\"id\"\n />\n </Filter>\n);\n\nconst defaultColumns = [\"code\", \"name\", \"description\"];\n\nconst AccountList = (props: ListProps): ReactElement => {\n return (\n <CustomizableList\n {...props}\n sort={{ field: \"name\", order: \"ASC\" }}\n perPage={DEFAULT_PER_PAGE}\n filters={<ListFilters />}\n defaultColumns={defaultColumns}\n >\n <CustomizableDatagrid optimized>\n <TextField source=\"code\" />\n <TextField source=\"name\" />\n <RichTextField source=\"description\" />\n <DateField source=\"createdAt\" />\n <TextField source=\"id\" />\n <DateField source=\"updatedAt\" />\n\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n\n <ListRowActions />\n </CustomizableDatagrid>\n </CustomizableList>\n );\n};\n\nexport { AccountList };\n","import AccountBoxIcon from '@material-ui/icons/AccountBox';\nimport { AccountCreate } from './AccountCreate';\n\nimport { AccountList } from './AccountList';\nimport { AccountEdit } from './AccountEdit';\nimport { accountsPermissions, RESOURCE_NAME_ACCOUNT } from './constants';\nimport { AccountShow } from './AccountShow';\n\nconst accountResource = {\n name: RESOURCE_NAME_ACCOUNT,\n list: AccountList,\n create: AccountCreate,\n edit: AccountEdit,\n show: AccountShow,\n icon: AccountBoxIcon,\n options: { \n label: 'resources.accounts.name',\n allowedPermissions: accountsPermissions \n },\n}\n\nexport * from './constants';\nexport { accountResource }","import {\n CreateProps,\n} from \"react-admin\";\nimport { AccountForm } from \"./AccountForm\";\nimport { DefaultCreate } from '../../../components';\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../utilities/media\";\n\nconst AccountCreate= (props: CreateProps)=> {\n const mediaFileSources: MediaFileSource[] = [{\n source: 'files',\n subFolder: 'accounts',\n }]; \n return (\n <DefaultCreate {...props}\n transform={transformAndUploadS3Files(mediaFileSources)}>\n <AccountForm />\n </DefaultCreate>\n );\n };\n \n export { AccountCreate };","import { EditProps } from \"react-admin\";\nimport { DefaultEdit } from \"../../../components\";\nimport { MediaFileSource, transformAndUploadS3Files } from \"../../utilities\";\n\nimport { AccountForm } from \"./AccountForm\";\n\nconst AccountEdit= (props:EditProps) => {\n const mediaFileSources: MediaFileSource[] = [\n {\n source: \"files\",\n subFolder: \"accounts\",\n },\n ];\n return (\n <DefaultEdit\n {...props}\n mutationMode=\"pessimistic\"\n transform={transformAndUploadS3Files(mediaFileSources)}\n >\n <AccountForm isEdit={true} />\n </DefaultEdit>\n );\n};\n\nexport { AccountEdit };\n","import {\n ShowProps,\n SimpleShowLayout,\n TextField,\n ArrayField,\n Datagrid,\n DateField,\n BooleanField,\n} from \"react-admin\";\nimport { RESOURCE_NAME_USER } from \"..\";\nimport { DefaultShow, UploadedFilesField } from \"../../../components\";\nimport { COMMON_DATE_TIME_FORMAT } from \"../../../core\";\n\nconst AccountShow = (props: ShowProps) => {\n return (\n <DefaultShow {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"code\" />\n <ArrayField source={RESOURCE_NAME_USER}>\n <Datagrid optimized>\n <TextField source=\"fullName\" />\n <TextField source=\"email\" />\n </Datagrid>\n </ArrayField>\n\n <DateField source=\"createdAt\" options={COMMON_DATE_TIME_FORMAT} />\n <DateField source=\"updatedAt\" options={COMMON_DATE_TIME_FORMAT} />\n <TextField source=\"version\" />\n <BooleanField source=\"isActive\" />\n <UploadedFilesField canDelete={false} />\n </SimpleShowLayout>\n </DefaultShow>\n );\n};\n\nexport { AccountShow };\n","import { Route } from \"react-router-dom\";\nimport { ForgotPasswordPage, ResetPasswordPage } from \"./lib/core/auth\";\nimport { ProfileShow, ProfileEdit, UserPreferences } from \"./lib/modules/profile\";\n\nconst routes = [\n <Route\n exact\n path=\"/auth/forgot-password\"\n component={ForgotPasswordPage}\n noLayout\n key=\"forgotpassword\"\n />,\n <Route\n exact\n path=\"/auth/reset-password/:token\"\n component={ResetPasswordPage}\n noLayout\n key=\"resetpassword\"\n />,\n <Route exact path=\"/my-profile\" render={() => <ProfileShow />} />,\n <Route path=\"/my-profile/edit\" render={() => <ProfileEdit />} />,\n <Route\n exact\n path=\"/my-profile/userpreferences\"\n render={() => <UserPreferences />}\n />,\n];\n\nexport { routes };\n","import { Loading, useGetIdentity } from \"react-admin\";\nimport {Card, CardHeader, } from \"@material-ui/core\";\n\n\nconst DefaultDashboardCard= ({children}) => {\n const { loaded, identity } = useGetIdentity();\n const fullName = identity?.fullName;\n\n if(!loaded){\n return <Loading/>\n }\n \n return (\n <Card variant=\"outlined\">\n <CardHeader title={`Welcome ${fullName}`} subheader=\"More dashboard data soon. Till then, use the menus.\" />\n\n </Card>\n )\n}\n\nexport { DefaultDashboardCard }","import { DefaultDashboardCard } from \"./DefaultDashboardCard\"\n\nconst Dashboard = () => {\n\n return (\n <DefaultDashboardCard children={undefined}/>\n )\n}\n\nexport { Dashboard }","import { Admin, Resource, DataProvider } from \"react-admin\";\nimport { i18nProvider } from \"./i18n/i18nProvider\";\nimport { accountResource, usersResource } from \"./lib/modules/accounts\";\nimport {\n LoginPage,\n restAuthProvider,\n} from \"./lib/core\";\nimport { routes } from \"./routes\";\nimport { Layout } from \"./lib/components\";\nimport {\n permissionResource,\n permissionGroupResource,\n roleResource,\n RESOURCE_NAME_ONLY_USER,\n} from \"./lib/modules\";\nimport { mediaResource } from \"./lib/modules/utilities/media\";\nimport {\n itemResource,\n itemsGroupResource,\n itemsSegmentResource,\n itemsClassResource,\n} from \"./modules/datasetup/items\";\nimport { orgStructureResource } from \"./modules/datasetup/org-structure/org-structure\";\nimport {\n requisitionResource,\n RESOURCE_NAME_REQUISITION_DETAILS,\n} from \"./modules/requisitions\";\nimport { vendorResource } from \"./modules/datasetup/vendors\";\nimport {\n enquiryResource,\n RESOURCE_NAME_ENQUIRY_DETAILS,\n RESOURCE_NAME_ENQUIRY_VENDORS,\n} from \"./modules/enquiries\";\nimport { uomResource } from \"./modules/datasetup/unit-of-measure\";\nimport { systemDataResource } from \"./modules/datasetup/system-data\";\nimport { Dashboard } from \"./modules/dashboard\";\nimport { currencyResource } from \"./modules/datasetup/currencies\";\nimport { bidResource } from \"./modules/bids\";\nimport { bidsComparisonResource } from \"./modules/bidsComparison\";\nimport { businessFunctionResource } from \"./modules/datasetup/business-functions\";\nimport { RESOURCE_NAME_COMMENT } from \"./modules/comments\";\nimport { locationResource } from \"./modules/datasetup/locations\";\nimport { categoryResource } from \"./modules/datasetup/category\";\nimport { purchaseGroupResource } from \"./modules/datasetup/purchase-groups\";\nimport { vendorGroupResource } from \"./modules/datasetup/vendor-group\";\nimport { OrgStructureTypesResource } from \"./modules/datasetup/org-structure/org-structure-types\";\nimport { OrgUserGroupsResource } from \"./modules/datasetup/org-structure/org-user-groups\";\ninterface AppProps {\n dataProvider: DataProvider;\n}\n\nconst App = ({ dataProvider }: AppProps) => {\n const fetchResources = (permissions) => {\n const knownResources = [\n <Resource {...usersResource} />,\n <Resource {...accountResource} />,\n <Resource {...permissionGroupResource} />,\n <Resource {...permissionResource} />,\n <Resource {...roleResource} />,\n <Resource {...mediaResource} />,\n <Resource {...itemResource} />,\n <Resource {...itemsSegmentResource} />,\n <Resource {...itemsGroupResource} />,\n <Resource {...itemsClassResource} />,\n <Resource {...orgStructureResource} />,\n <Resource {...uomResource} />,\n <Resource {...currencyResource} />,\n <Resource {...requisitionResource} />,\n <Resource name={RESOURCE_NAME_REQUISITION_DETAILS} />,\n <Resource name={RESOURCE_NAME_ONLY_USER} />, //hack workaround react-admin ReferenceField filter limitation\n <Resource {...enquiryResource} />,\n <Resource {...bidResource} />,\n <Resource {...bidsComparisonResource} />,\n <Resource name={RESOURCE_NAME_ENQUIRY_DETAILS} />,\n <Resource name={RESOURCE_NAME_ENQUIRY_VENDORS} />,\n <Resource {...systemDataResource} />,\n <Resource {...vendorResource} />,\n <Resource name={RESOURCE_NAME_COMMENT} />,\n <Resource {...businessFunctionResource} />,\n <Resource {...locationResource} />,\n <Resource {...purchaseGroupResource} />,\n <Resource {...vendorGroupResource} />,\n <Resource {...OrgStructureTypesResource} />,\n <Resource {...categoryResource} />,\n <Resource {...OrgUserGroupsResource} />,\n ];\n\n return knownResources;\n };\n\n return (\n <Admin\n title=\"PMS :: Procurement Management System\"\n //history={history}\n dataProvider={dataProvider}\n authProvider={restAuthProvider}\n i18nProvider={i18nProvider}\n layout={Layout}\n dashboard={Dashboard}\n loginPage={LoginPage}\n customRoutes={routes}\n disableTelemetry\n >\n {fetchResources}\n </Admin>\n );\n};\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\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-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport 'proxy-polyfill';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport { dataProvider } from './lib/core';\nimport \"@fontsource/work-sans/300.css\";\nimport \"@fontsource/work-sans/400.css\";\nimport \"@fontsource/work-sans/500.css\";\nimport \"@fontsource/work-sans/700.css\";\n\nReactDOM.render(\n <React.StrictMode>\n <App dataProvider={dataProvider}/>\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","const inMemoryJWTManager = () => {\n let inMemoryJWT = null;\n let isRefreshing: Promise<Boolean> | null = null;\n let logoutEventName = \"app-logout\";\n const apiUrl = process.env[\"REACT_APP_SERVER_ENDPOINT\"];\n let refreshEndpoint = `${apiUrl}/auth/refresh`;\n let refreshTimeOutId;\n const delay = 3600; //1hour\n\n const setLogoutEventName = (name) => (logoutEventName = name);\n const setRefreshTokenEndpoint = (endpoint) => (refreshEndpoint = endpoint);\n\n // This countdown feature is used to renew the JWT before it's no longer valid\n // in a way that is transparent to the user.\n const refreshToken = () => {\n refreshTimeOutId = window.setTimeout(\n getRefreshedToken,\n delay * 1000 - 5000\n ); // Validity period of the token in seconds, minus 5 seconds\n };\n\n const abortRefreshToken = () => {\n if (refreshTimeOutId) {\n window.clearTimeout(refreshTimeOutId);\n }\n };\n\n const waitForTokenRefresh = () => {\n if (!isRefreshing || isRefreshing === null) {\n return Promise.resolve();\n } else {\n return isRefreshing.then(() => {\n isRefreshing = null;\n return true;\n });\n }\n };\n\n // The method make a call to the refresh-token endpoint\n // If there is a valid cookie, the endpoint will set a fresh jwt in memory.\n const getRefreshedToken = () => {\n const request = new Request(refreshEndpoint, {\n method: \"GET\",\n headers: new Headers({ \"Content-Type\": \"application/json\" }),\n credentials: \"include\",\n });\n\n isRefreshing = fetch(request)\n .then((response) => {\n if (response.status !== 200) {\n eraseToken();\n global.console.log(\"Token renewal failure\");\n return { token: null };\n }\n return response.json();\n })\n .then(({ accessToken, tokenExpiry }) => {\n if (accessToken) {\n setToken(accessToken);\n return true;\n }\n eraseToken();\n return false;\n });\n\n return isRefreshing;\n };\n\n const getToken = () => inMemoryJWT;\n\n const setToken = (token) => {\n inMemoryJWT = token;\n refreshToken();\n return true;\n };\n\n const eraseToken = () => {\n inMemoryJWT = null;\n abortRefreshToken();\n window.localStorage.setItem(logoutEventName, Date.now().toString());\n return true;\n };\n\n // This listener will allow to disconnect a session of ra started in another tab\n window.addEventListener(\"storage\", (event) => {\n if (event.key === logoutEventName) {\n inMemoryJWT = null;\n }\n });\n\n return {\n eraseToken,\n getRefreshedToken,\n getToken,\n setLogoutEventName,\n setRefreshTokenEndpoint,\n setToken,\n waitForTokenRefresh,\n };\n};\n\nexport default inMemoryJWTManager();\n"],"sourceRoot":""}